Merge branch 'test' of https://git.code.tencent.com/lian-cbtc/jl-client into test
# Conflicts: # src/jmapNew/config/skinCode/nanjing_02.js # src/jmapNew/shape/Responder/index.js
This commit is contained in:
commit
1e2e8c2609
@ -839,8 +839,17 @@ class SkinCode extends defaultStyle {
|
||||
|
||||
this[deviceType.Responder] = {
|
||||
block: {
|
||||
mapStyle: {
|
||||
FB: { fill: '#fff' },
|
||||
VB: { fill: '#666' },
|
||||
IB: { fill: '#666' }
|
||||
}
|
||||
},
|
||||
delta: {
|
||||
fill: '#fff'
|
||||
},
|
||||
text: {
|
||||
textFill: '#fff'
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
import Group from 'zrender/src/container/Group';
|
||||
import Rect from 'zrender/src/graphic/shape/Rect';
|
||||
import Text from 'zrender/src/graphic/Text';
|
||||
import Polygon from 'zrender/src/graphic/shape/Polygon';
|
||||
|
||||
export default class Responder extends Group {
|
||||
constructor(model, style) {
|
||||
@ -15,21 +16,27 @@ export default class Responder extends Group {
|
||||
this.style = style;
|
||||
this.isShowShape = true;
|
||||
this.z = model.zIndex || 1;
|
||||
if (model.previewOrMapDraw) {
|
||||
this.create();
|
||||
this.setState(model);
|
||||
}
|
||||
}
|
||||
|
||||
create() {
|
||||
const model = this.model;
|
||||
const responderStyle = this.style.Responder;
|
||||
const blockX = model.position.x;
|
||||
const blockY = model.position.y;
|
||||
const blockWidth = this.style.Responder.block.width || 5;
|
||||
const blockHeight = this.style.Responder.block.height || 12;
|
||||
const blockStroke = this.style.Responder.block.stroke || '#000';
|
||||
const blockFill = this.style.Responder.block.fill || '#fff';
|
||||
const textX = model.position.x + model.offset.x;
|
||||
const textY = model.position.y + model.offset.y;
|
||||
const blockWidth = responderStyle.block.width || 5;
|
||||
const blockHeight = responderStyle.block.height || 12;
|
||||
const blockStroke = responderStyle.block.stroke || '#000';
|
||||
const blockStyle = responderStyle.block.mapStyle[model.type] || { fill: '#000'};
|
||||
const textX = model.position.x + model.textOffset.x;
|
||||
const textY = model.position.y + model.textOffset.y;
|
||||
const textName = `${model.type}-${model.name}`;
|
||||
const textColor = this.style.Responder.text.stroke || '#fff';
|
||||
const textFill = responderStyle.text.textFill || '#fff';
|
||||
const deltaFill = responderStyle.delta.fill || '#fff';
|
||||
const padding = 1.2;
|
||||
|
||||
this.block = new Rect({
|
||||
zlevel: this.model.zlevel,
|
||||
@ -42,17 +49,10 @@ export default class Responder extends Group {
|
||||
},
|
||||
style: {
|
||||
stroke: blockStroke,
|
||||
fill: blockFill
|
||||
...blockStyle
|
||||
}
|
||||
});
|
||||
|
||||
if (model.rotate) {
|
||||
const origin = [blockX, blockY];
|
||||
const rotation = -Math.PI / 180 * Number(model.rotate);
|
||||
this.transformRotation(this.block, origin, rotation);
|
||||
}
|
||||
this.add(this.block);
|
||||
|
||||
this.text = new Text({
|
||||
zlevel: this.zlevel,
|
||||
z: this.z + 1,
|
||||
@ -62,22 +62,68 @@ export default class Responder extends Group {
|
||||
text: textName,
|
||||
fontFamily: this.style.fontFamily,
|
||||
fontSize: this.style.fontSize,
|
||||
textFill: textColor,
|
||||
textFill: textFill,
|
||||
textAlign: 'right'
|
||||
}
|
||||
});
|
||||
|
||||
this.delta1 = new Polygon({
|
||||
zlevel: this.zlevel,
|
||||
z: this.z + 1,
|
||||
shape: {
|
||||
points: [
|
||||
[blockX + blockWidth / 2, blockY + blockWidth],
|
||||
[blockX + padding, blockY + padding],
|
||||
[blockX + blockWidth - padding, blockY + padding]
|
||||
]
|
||||
},
|
||||
style: {
|
||||
fill: deltaFill
|
||||
}
|
||||
});
|
||||
|
||||
this.delta2 = new Polygon({
|
||||
zlevel: this.zlevel,
|
||||
z: this.z + 1,
|
||||
shape: {
|
||||
points: [
|
||||
[blockX + blockWidth / 2, blockY + blockHeight - blockWidth],
|
||||
[blockX + padding, blockY + blockHeight - padding],
|
||||
[blockX + blockWidth - padding, blockY + blockHeight - padding]
|
||||
]
|
||||
},
|
||||
style: {
|
||||
fill: deltaFill
|
||||
}
|
||||
});
|
||||
|
||||
if (model.rotate) {
|
||||
const origin = [blockX, blockY];
|
||||
const rotation = -Math.PI / 180 * Number(model.rotate);
|
||||
[this.block, this.delta1, this.delta2].forEach(el => {
|
||||
this.transformRotation(el, origin, rotation);
|
||||
});
|
||||
}
|
||||
|
||||
if (model.textRotate) {
|
||||
const origin = [textX, textY];
|
||||
const rotation = -Math.PI / 180 * Number(model.textRotate);
|
||||
this.transformRotation(this.text, origin, rotation);
|
||||
}
|
||||
|
||||
this.add(this.text);
|
||||
[this.block, this.delta1, this.delta2, this.text].forEach(el => {
|
||||
this.add(el);
|
||||
});
|
||||
}
|
||||
|
||||
setState(model) {
|
||||
if (!this.isShowShape) return;
|
||||
const responderStyle = this.style.Responder;
|
||||
const style = responderStyle.block.mapStyle[model.type] || { fill: '#000'};
|
||||
this.block.setStyle(style);
|
||||
[this.delta1, this.delta2].forEach(el => {
|
||||
model.type == 'IB' ? el.show() : el.hide();
|
||||
});
|
||||
}
|
||||
|
||||
// 整体图片
|
||||
|
@ -263,6 +263,7 @@ export function parser(data, skinCode, showConfig) {
|
||||
mapDevice[elem.code] = createDevice(deviceType.DirectionRod, elem, propConvert, showConfig);
|
||||
}, this);
|
||||
|
||||
if (!data.responderList) { data.responderList = []; };
|
||||
zrUtil.each(data.responderList || [], elem => {
|
||||
mapDevice[elem.code] = createDevice(deviceType.Responder, elem, propConvert, showConfig);
|
||||
}, this);
|
||||
|
@ -11,7 +11,7 @@
|
||||
<span style="display:block;" @click="handleDetail">{{ $t('global.personalDetails') }}</span>
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-if="companyAdmin">
|
||||
<span style="display:block;" @click="handleOrganization">{{ $t('global.organization') }}</span>
|
||||
<span style="display:block;" @click="handleOrganization">教学管理</span>
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item>
|
||||
<span style="display:block;" @click="logout">{{ $t('global.exit') }}</span>
|
||||
|
@ -537,7 +537,7 @@ const map = {
|
||||
},
|
||||
responderList: (state) => {
|
||||
if (state.map) {
|
||||
return state.map.responderList || [];
|
||||
return state.map.responderList;
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
|
@ -16,7 +16,7 @@
|
||||
<div class="btn-buy">
|
||||
<!-- <el-button v-if="!isLocal" type="success" :disabled="disabled" @click="buy">{{ $t('global.buy') }}</el-button> -->
|
||||
<el-button v-if="hasPermssion && !isComprehensive && !isLocal" type="primary" :disabled="disabled" @click="distribute">{{ $t('global.distributePermission') }}</el-button>
|
||||
<el-button v-show="isStartDemon" :disabled="disabled" type="primary" @click="start">{{ $t('demonstration.startSimulation') }}</el-button>
|
||||
<el-button :disabled="disabled" type="primary" @click="start">{{ $t('demonstration.startSimulation') }}</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@ -78,9 +78,6 @@ export default {
|
||||
isComprehensive() {
|
||||
return this.courseModel.prdType === '03';
|
||||
},
|
||||
isStartDemon() {
|
||||
return (this.hasPermssion || this.tryTime > 0);
|
||||
},
|
||||
mapId() {
|
||||
return this.$route.query.mapId;
|
||||
},
|
||||
@ -173,7 +170,11 @@ export default {
|
||||
this.$router.push({ path: `/jointTrainingNew`, query: query });
|
||||
launchFullscreen();
|
||||
}).catch(error => {
|
||||
if (error.code == 10003) {
|
||||
this.$messageBox(this.$t('error.createSimulationFailed') + ':您的仿真权限不足!');
|
||||
} else {
|
||||
this.$messageBox(this.$t('error.createSimulationFailed') + error.message);
|
||||
}
|
||||
this.disabled = false;
|
||||
});
|
||||
},
|
||||
@ -188,6 +189,11 @@ export default {
|
||||
this.$router.push({ path: `/displayIscs/system`, query: query });
|
||||
}
|
||||
} catch (error) {
|
||||
if (error.code == 10003) {
|
||||
this.$messageBox(this.$t('error.createSimulationFailed') + ':您的仿真权限不足!');
|
||||
} else {
|
||||
this.$messageBox(this.$t('error.createSimulationFailed') + error.message);
|
||||
}
|
||||
this.disabled = false;
|
||||
}
|
||||
},
|
||||
@ -200,7 +206,11 @@ export default {
|
||||
}
|
||||
this.$router.push({ path: `/displayBigScreen/${this.courseModel.mapId}`, query: query });
|
||||
}).catch(error => {
|
||||
if (error.code == 10003) {
|
||||
this.$messageBox(this.$t('error.createSimulationFailed') + ':您的仿真权限不足!');
|
||||
} else {
|
||||
this.$messageBox(this.$t('error.createSimulationFailed') + error.message);
|
||||
}
|
||||
this.disabled = false;
|
||||
});
|
||||
},
|
||||
@ -220,7 +230,11 @@ export default {
|
||||
this.$router.push({ path: `${UrlConfig.displayNew}/demon`, query: query });
|
||||
launchFullscreen();
|
||||
}).catch(error=>{
|
||||
if (error.code == 10003) {
|
||||
this.$messageBox(this.$t('error.createSimulationFailed') + ':您的仿真权限不足!');
|
||||
} else {
|
||||
this.$messageBox(this.$t('error.createSimulationFailed') + error.message);
|
||||
}
|
||||
this.disabled = false;
|
||||
});
|
||||
},
|
||||
|
@ -48,7 +48,7 @@ export default {
|
||||
name: '',
|
||||
rotate: 0,
|
||||
textRotate: 0,
|
||||
offset: {
|
||||
textOffset: {
|
||||
x: 0,
|
||||
y: 0
|
||||
},
|
||||
@ -56,6 +56,7 @@ export default {
|
||||
x: 0,
|
||||
y: 0
|
||||
},
|
||||
offset: 0,
|
||||
sectionCode: '',
|
||||
stationCode: ''
|
||||
},
|
||||
@ -72,6 +73,9 @@ export default {
|
||||
rotate: [
|
||||
{ required: true, message: '请输入应答器旋转角度', trigger: 'blur' }
|
||||
],
|
||||
offset: [
|
||||
{ type: 'number', required: true, message: '请输入应答器文字旋转角度', trigger: 'blur', min: 0 }
|
||||
],
|
||||
textRotate: [
|
||||
{ required: true, message: '请输入应答器文字旋转角度', trigger: 'blur' }
|
||||
],
|
||||
@ -87,10 +91,10 @@ export default {
|
||||
'position.y': [
|
||||
{ required: true, message: '请输入应答器坐标y', trigger: 'blur' }
|
||||
],
|
||||
'offset.x': [
|
||||
'textOffset.x': [
|
||||
{ required: true, message: '请输入应答器偏移x', trigger: 'blur' }
|
||||
],
|
||||
'offset.y': [
|
||||
'textOffset.y': [
|
||||
{ required: true, message: '请输入应答器偏移y', trigger: 'blur' }
|
||||
]
|
||||
}
|
||||
@ -115,14 +119,15 @@ export default {
|
||||
{ prop: 'code', label: '应答器编码', type: 'select', optionLabel: 'code', optionValue: 'code', options: this.responderList, deviceChange: this.deviceChange },
|
||||
{ prop: 'name', label: '应答器名称', type: 'input' },
|
||||
{ prop: 'type', label: `应答器类型`, type: 'select', optionLabel: 'name', optionValue: 'value', options: this.responderTypeList },
|
||||
{ prop: 'offset', label: '区段偏移值', type: 'number' },
|
||||
{ prop: 'position', label: '坐标', type: 'coordinate', width: '120px', children: [
|
||||
{ prop: 'position.x', firstLevel: 'position', secondLevel: 'x', label: 'x:', type: 'number', labelWidth: '25px', disabled: false },
|
||||
{ prop: 'position.y', firstLevel: 'position', secondLevel: 'y', label: 'y:', type: 'number', labelWidth: '25px', disabled: false }
|
||||
] },
|
||||
{ prop: 'rotate', label: '应答器旋转', type: 'number' },
|
||||
{ prop: 'offset', label: '文字偏移', type: 'coordinate', width: '120px', children: [
|
||||
{ prop: 'offset.x', firstLevel: 'offset', secondLevel: 'x', label: 'x:', type: 'number', labelWidth: '25px', disabled: false },
|
||||
{ prop: 'offset.y', firstLevel: 'offset', secondLevel: 'y', label: 'y:', type: 'number', labelWidth: '25px', disabled: false }
|
||||
{ prop: 'textOffset', label: '文字偏移', type: 'coordinate', width: '120px', children: [
|
||||
{ prop: 'textOffset.x', firstLevel: 'textOffset', secondLevel: 'x', label: 'x:', type: 'number', labelWidth: '25px', disabled: false },
|
||||
{ prop: 'textOffset.y', firstLevel: 'textOffset', secondLevel: 'y', label: 'y:', type: 'number', labelWidth: '25px', disabled: false }
|
||||
] },
|
||||
{ prop:'textRotate', label: '文字旋转', type: 'number' },
|
||||
{ prop: 'sectionCode', label: '关联区段', type: 'select', optionLabel: 'code', optionValue: 'code', options: this.sectionList },
|
||||
|
@ -21,7 +21,7 @@ export function buildModelBySection(section, model, list) {
|
||||
x: vx,
|
||||
y: vy
|
||||
},
|
||||
offset: {
|
||||
textOffset: {
|
||||
x: 0,
|
||||
y: 0
|
||||
},
|
||||
|
@ -1,22 +1,10 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="back_box">
|
||||
<el-button v-if="companyAdmin" :loading="loadingStudentInfo" type="text" class="uploadDemo" style="margin-top: 10px;">
|
||||
<input
|
||||
id="importResults"
|
||||
ref="files"
|
||||
type="file"
|
||||
class="file_box"
|
||||
accept=".json, application/json, .csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
|
||||
@change="importResults"
|
||||
>
|
||||
导入学生信息
|
||||
</el-button>
|
||||
<el-button type="text" @click="exportTemplate">学生信息导入模板</el-button>
|
||||
<el-button type="text" @click="goBack">返回</el-button>
|
||||
</div>
|
||||
<el-tabs v-model="activeName" type="card">
|
||||
<el-tab-pane label="部门管理" name="first">
|
||||
<el-tab-pane label="组织" name="first">
|
||||
<div style="font-size: 22px;text-align: center;">{{ $store.state.user.companyName }}</div>
|
||||
<div style="position: relative;transform: translateX(-50%);left: 50%;padding: 20px;width: 500px;">
|
||||
<el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick">
|
||||
@ -29,11 +17,11 @@
|
||||
</el-tree>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="成员管理" name="second">
|
||||
<el-tab-pane label="成员" name="second">
|
||||
<el-row>
|
||||
<el-col :span="21" :offset="1">
|
||||
<el-col :span="19" style="padding-left: 20px;">
|
||||
<span>班级</span>
|
||||
<el-select v-model="classId" size="small" placeholder="班级">
|
||||
<el-select v-model="classId" size="mini" placeholder="班级">
|
||||
<el-option
|
||||
v-for="item in classList"
|
||||
:key="item.departmentId"
|
||||
@ -42,8 +30,20 @@
|
||||
/>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="2">
|
||||
<el-button type="primary" size="small" @click="onSubmit">查询</el-button>
|
||||
<el-col :span="5">
|
||||
<el-button v-if="companyAdmin" :loading="loadingStudentInfo" type="primary" size="mini" class="uploadDemo" style="margin-top: 10px;">
|
||||
<input
|
||||
id="importResults"
|
||||
ref="files"
|
||||
type="file"
|
||||
class="file_box"
|
||||
accept=".json, application/json, .csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
|
||||
@change="importResults"
|
||||
>
|
||||
导入学生信息
|
||||
</el-button>
|
||||
<el-button type="primary" size="mini" @click="exportTemplate">学生信息导入模板</el-button>
|
||||
<el-button type="primary" size="mini" @click="onSubmit">查询</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table :data="tableData" border style="width: 100%;margin-top: 10px;" :max-height="height">
|
||||
@ -69,7 +69,7 @@
|
||||
/>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="成绩导出" name="third">
|
||||
<el-tab-pane label="成绩" name="third">
|
||||
<grade-export refs="gradeExport" :class-list="classList" :height="height" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
@ -247,29 +247,24 @@ export default {
|
||||
for (const index in wb.Sheets) {
|
||||
const dataList = convertSheetToList(wb.Sheets[index], true);
|
||||
if (dataList.length) {
|
||||
const depart = dataList[2][0].trim();
|
||||
const parentDepart = dataList[1][0].trim();
|
||||
const depart = dataList[1][0].trim();
|
||||
const parentDepart = dataList[0][0].trim();
|
||||
studentData.depart = depart;
|
||||
studentData.parentDepart = parentDepart;
|
||||
for ( let i = 2; i <= dataList[0].length; i++) {
|
||||
const serialNumber = dataList[0][i];
|
||||
const studentId = dataList[1][i];
|
||||
const name = dataList[2][i];
|
||||
const studentId = dataList[0][i];
|
||||
const name = dataList[1][i];
|
||||
const reg = new RegExp('[\\u4E00-\\u9FFF]+', 'g');
|
||||
const studentIdJudge = !!studentId && !reg.test(studentId);
|
||||
const serialNumberJudge = serialNumber == (i - 1);
|
||||
console.log(studentIdJudge, serialNumberJudge);
|
||||
if (studentIdJudge && serialNumberJudge && name) {
|
||||
students.push({account:dataList[1][i], name: dataList[2][i]});
|
||||
if (studentIdJudge && name) {
|
||||
students.push({account:dataList[0][i], name: dataList[1][i]});
|
||||
} else {
|
||||
if (!serialNumber && !studentId && !name) {
|
||||
if (!studentId && !name) {
|
||||
break;
|
||||
} else if (!name) {
|
||||
throw new Error(`序号为:《${serialNumber}》,学号为:《${studentId}》的数据学生姓名为空!`);
|
||||
throw new Error(`学号为:《${studentId}》的数据学生姓名为空!`);
|
||||
} else if (!studentIdJudge) {
|
||||
throw new Error(`序号为:《${serialNumber}》,学号为:《${studentId}》的数据学号格式不正确!`);
|
||||
} else if (!serialNumberJudge) {
|
||||
throw new Error(`序号为:《${serialNumber}》,学号为:《${studentId}》的数据序号顺序不正确!`);
|
||||
throw new Error(`,学号为:《${studentId}》的数据学号格式不正确!`);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -305,10 +300,10 @@ export default {
|
||||
},
|
||||
exportTemplate() {
|
||||
const wb = XLSX.utils.book_new();
|
||||
const data1 = [{A: '', B: '年级一', C:'班级二'}];
|
||||
const data2 = [{A: '序号', B: '学号', C:'姓名'}];
|
||||
const data3 = [{A: '1', B: '00001', C:'张三'}];
|
||||
const data4 = [{A: '2', B: '00002', C:'李四'}];
|
||||
const data1 = [{ A: 'XXXX级', B:'XX班'}];
|
||||
const data2 = [{A: '学号', B:'姓名'}];
|
||||
const data3 = [{A: '00001', B:'张三'}];
|
||||
const data4 = [{A: '00002', B:'李四'}];
|
||||
const data = [...data1, ...data2, ...data3, ...data4];
|
||||
const ws = XLSX.utils.json_to_sheet(data, {skipHeader:true});
|
||||
ws['!cols'] = [
|
||||
@ -331,7 +326,7 @@ export default {
|
||||
padding-right: 20px;
|
||||
height: 40px;
|
||||
z-index: 36;
|
||||
width: 320px;
|
||||
width: 40px;
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
|
@ -35,7 +35,7 @@ import { getPublishLessonList } from '@/api/jmap/lesson';
|
||||
import RuleFrom from './rule';
|
||||
import ExamFrom from './examFrom';
|
||||
import { getPublishMapInfo } from '@/api/jmap/map';
|
||||
import { getExamLessonDetail, setCourseList, setCourseListGzb } from '@/api/management/exam';
|
||||
import { getExamLessonDetail, setCourseList } from '@/api/management/exam';
|
||||
import { UrlConfig } from '@/scripts/ConstDic';
|
||||
import { getSessionStorage } from '@/utils/auth';
|
||||
|
||||
@ -71,9 +71,6 @@ export default {
|
||||
},
|
||||
isFastCreate() {
|
||||
return this.display == 1 && this.$route.params.mode != 'edit' && Number(this.$route.params.ruleId);
|
||||
},
|
||||
isGzbShow() {
|
||||
return getSessionStorage('project').startsWith('gzb');
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
@ -103,6 +100,7 @@ export default {
|
||||
});
|
||||
},
|
||||
async definition(data) {
|
||||
console.log(data, '====');
|
||||
this.course = data;
|
||||
this.formData = {};
|
||||
this.display = 2;
|
||||
@ -140,11 +138,7 @@ export default {
|
||||
};
|
||||
let res = {};
|
||||
try {
|
||||
if (this.isGzbShow) {
|
||||
res = await setCourseListGzb(result);
|
||||
} else {
|
||||
res = await setCourseList(result);
|
||||
}
|
||||
this.$message.success({ message: res.message });
|
||||
this.$store.dispatch('exam/setRuleList', []); // 清空规则列表数据
|
||||
const path = `${this.$route.path.match(/(\/.*)\/examRule/)[1]}${UrlConfig.examRuleManage}`;
|
||||
|
@ -25,7 +25,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getExamLessonDetail, setCourseList, setCourseListGzb } from '@/api/management/exam';
|
||||
import { getExamLessonDetail, setCourseList } from '@/api/management/exam';
|
||||
import { UrlConfig, getTrainingOperateTypeMap } from '@/scripts/ConstDic';
|
||||
import editRule from './editRule';
|
||||
import LangStorage from '@/utils/lang';
|
||||
@ -72,9 +72,6 @@ export default {
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
isGzbShow() {
|
||||
return getSessionStorage('project').startsWith('gzb');
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
},
|
||||
@ -135,7 +132,7 @@ export default {
|
||||
examDefinitionRulesVOList: this.ruleList, // 规则
|
||||
fullPoint: Number(this.course.fullMark), // 满分
|
||||
lessonId: this.course.region, // 课程id
|
||||
classes: this.isGzbShow ? this.course.classes.map(ele => { return {id: ele}; }) : [],
|
||||
classes: this.course.classes.map(ele => { return {id: ele}; }),
|
||||
name: this.course.name, // 名称
|
||||
passingPoint: Number(this.course.passMark), // 及格分
|
||||
remarks: this.course.desc, // 考试说明
|
||||
@ -154,12 +151,7 @@ export default {
|
||||
},
|
||||
async save(data) {
|
||||
try {
|
||||
let res = {};
|
||||
if (this.isGzbShow) {
|
||||
res = await setCourseListGzb(data);
|
||||
} else {
|
||||
res = await setCourseList(data);
|
||||
}
|
||||
const res = await setCourseList(data);
|
||||
this.$message.success({ message: res.message });
|
||||
this.$store.dispatch('exam/setCourseDetail', this.formDetail); // 清空 form 表单数据
|
||||
this.$store.dispatch('exam/setRuleList', []); // 清空规则列表数据
|
||||
|
@ -12,6 +12,12 @@
|
||||
import { addCompany, updateCompany } from '@/api/company';
|
||||
export default {
|
||||
name: 'Add',
|
||||
props: {
|
||||
projectListNew:{
|
||||
type: Array,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
dialogVisible: false,
|
||||
@ -19,7 +25,8 @@ export default {
|
||||
address: '',
|
||||
name: '',
|
||||
phone: '',
|
||||
id: ''
|
||||
id: '',
|
||||
projectCode: ''
|
||||
},
|
||||
update: false
|
||||
};
|
||||
@ -31,7 +38,8 @@ export default {
|
||||
items: [
|
||||
{ prop: 'name', label: '名称', type: 'text' },
|
||||
{ prop: 'phone', label: '电话', type: 'text' },
|
||||
{ prop: 'address', label: '地址', type: 'text' }
|
||||
{ prop: 'address', label: '地址', type: 'text' },
|
||||
{ prop: 'projectCode', label: '关联项目', type: 'select', options: this.projectListNew}
|
||||
]
|
||||
};
|
||||
return form;
|
||||
@ -47,12 +55,15 @@ export default {
|
||||
],
|
||||
address:[
|
||||
{ required: true, message: '请输入公司地址', trigger: 'blur'}
|
||||
],
|
||||
projectCode: [
|
||||
{ required: true, message: '请选择关联项目', trigger: 'change'}
|
||||
]
|
||||
};
|
||||
return crules;
|
||||
},
|
||||
title() {
|
||||
return this.update ? '添加单位' : '修改单位';
|
||||
return this.update ? '修改单位' : '添加单位';
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
@ -65,19 +76,22 @@ export default {
|
||||
id: data.id,
|
||||
name: data.name,
|
||||
phone: data.phone,
|
||||
address: data.address
|
||||
};
|
||||
} else {
|
||||
this.formModel = {
|
||||
address: '',
|
||||
name: '',
|
||||
phone: '',
|
||||
id: ''
|
||||
address: data.address,
|
||||
projectCode: data.projectCode
|
||||
};
|
||||
}
|
||||
},
|
||||
handleClose() {
|
||||
this.dialogVisible = false;
|
||||
this.update = false;
|
||||
this.formModel = {
|
||||
address: '',
|
||||
name: '',
|
||||
phone: '',
|
||||
id: '',
|
||||
projectCode: ''
|
||||
};
|
||||
this.$refs.dataform.resetFields();
|
||||
},
|
||||
doSave() {
|
||||
this.$refs.dataform.validateForm(() => {
|
||||
|
@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div>
|
||||
<QueryListPage ref="queryListPage" :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" />
|
||||
<edit-company ref="editCompany" @reloadTable="reloadTable" />
|
||||
<edit-company ref="editCompany" :project-list-new="projectListNew" @reloadTable="reloadTable" />
|
||||
<qr-code ref="qrCode" />
|
||||
</div>
|
||||
</template>
|
||||
@ -10,6 +10,7 @@
|
||||
import { getCompanyListPaging, deleteCompany } from '@/api/company';
|
||||
import EditCompany from './add';
|
||||
import QrCode from '@/components/QrCode';
|
||||
import { ProjectList } from '@/scripts/ProjectConfig';
|
||||
export default {
|
||||
name: 'CompanyManage',
|
||||
components: {
|
||||
@ -28,6 +29,8 @@ export default {
|
||||
queryObject: {
|
||||
}
|
||||
},
|
||||
projectMap: {},
|
||||
projectListNew: [],
|
||||
queryList: {
|
||||
query: getCompanyListPaging,
|
||||
selectCheckShow: false,
|
||||
@ -45,6 +48,13 @@ export default {
|
||||
title: '单位地址',
|
||||
prop: 'address'
|
||||
},
|
||||
{
|
||||
title: '关联项目',
|
||||
prop: 'projectCode',
|
||||
type: 'tag',
|
||||
columnValue: (row) => { return this.projectMap[row.projectCode]; },
|
||||
tagType: (row) => { return 'success'; }
|
||||
},
|
||||
{
|
||||
title: '单位管理人员',
|
||||
prop: 'managerNames',
|
||||
@ -81,6 +91,12 @@ export default {
|
||||
currentModel: {}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
ProjectList.forEach(elem => {
|
||||
this.projectMap[elem.value.toUpperCase()] = elem.label;
|
||||
this.projectListNew.push({value: elem.value.toUpperCase(), label: elem.label});
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
handlerAddCompany() {
|
||||
this.$refs.editCompany.doShow();
|
||||
@ -103,8 +119,12 @@ export default {
|
||||
this.$router.go(-1);
|
||||
},
|
||||
handleGenerateQrCode(index, row) {
|
||||
let state = 2;
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
state = 1;
|
||||
}
|
||||
const param = {
|
||||
url: `companyName=${row.name}&&companyId=${row.id}`,
|
||||
url: `https://joylink.club/oss/joylink/company?state=${state}_${row.id}`,
|
||||
title: '单位二维码'
|
||||
};
|
||||
this.$refs.qrCode.doShow(param);
|
||||
|
@ -46,10 +46,10 @@ export default {
|
||||
},
|
||||
rules() {
|
||||
const crules = {
|
||||
name: [
|
||||
{ required: true, message: this.$t('rules.pleaseInputName'), trigger: 'blur' },
|
||||
{ min: 1, max: 25, message: this.$t('rules.strLength1To25'), trigger: 'blur' }
|
||||
],
|
||||
// name: [
|
||||
// { required: true, message: this.$t('rules.pleaseInputName'), trigger: 'blur' },
|
||||
// { min: 1, max: 25, message: this.$t('rules.strLength1To25'), trigger: 'blur' }
|
||||
// ],
|
||||
roles: [
|
||||
{ required: true, message: this.$t('rules.pleaseSelectPermission'), trigger: 'change' }
|
||||
]
|
||||
|
@ -4,7 +4,7 @@
|
||||
<div slot="header" class="lessonHeader">
|
||||
{{ $t('global.lessonSystem') }}
|
||||
</div>
|
||||
<el-button size="mini" type="primary" style="position: absolute;right: 10px;top: 10px;" @click="draftLessonManage">草稿课程管理</el-button>
|
||||
<el-button v-if="isCompanyAdmin || isAdmin" size="mini" type="primary" style="position: absolute;right: 10px;top: 10px;" @click="draftLessonManage">草稿课程管理</el-button>
|
||||
</el-card>
|
||||
<el-card v-loading="loading">
|
||||
<el-table :data="tableData" border style="width: 100%">
|
||||
@ -18,9 +18,9 @@
|
||||
<el-table-column :label="this.$t('global.operate')">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="primary" @click="goLesson(scope.row)">{{ $t('teach.enterTheCourse') }}</el-button>
|
||||
<el-button v-if="((isLessonCreator && userId === scope.row.creatorId) || isAdmin) && !scope.row.systemFault" size="mini" type="primary" @click="handleEdit(scope.row)">编辑</el-button>
|
||||
<el-button v-if="((isLessonCreator && userId === scope.row.creatorId) || isAdmin) && !scope.row.systemFault" size="mini" type="warning" @click="handleSoldOut(scope.row)">下架</el-button>
|
||||
<el-button v-if="((isLessonCreator && userId === scope.row.creatorId) || isAdmin) && !scope.row.systemFault" size="mini" type="danger" @click="handleDelete(scope.row)">删除课程</el-button>
|
||||
<el-button v-if="((isCompanyAdmin && userId === scope.row.creatorId) || isAdmin) && !scope.row.systemFault" size="mini" type="primary" @click="handleEdit(scope.row)">编辑</el-button>
|
||||
<el-button v-if="((isCompanyAdmin && userId === scope.row.creatorId) || isAdmin) && !scope.row.systemFault" size="mini" type="warning" @click="handleSoldOut(scope.row)">下架</el-button>
|
||||
<el-button v-if="((isCompanyAdmin && userId === scope.row.creatorId) || isAdmin) && !scope.row.systemFault" size="mini" type="danger" @click="handleDelete(scope.row)">删除课程</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@ -50,7 +50,8 @@ export default {
|
||||
loading: false,
|
||||
project: '',
|
||||
mapId: '',
|
||||
prdType: ''
|
||||
prdType: '',
|
||||
cityCode: ''
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@ -60,8 +61,8 @@ export default {
|
||||
userId() {
|
||||
return this.$store.state.user.id;
|
||||
},
|
||||
isLessonCreator() {
|
||||
return this.$store.state.user.roles.includes(lessonCreater);
|
||||
isCompanyAdmin() {
|
||||
return this.$store.state.user.companyId && this.$store.state.user.companyAdmin;
|
||||
},
|
||||
isAdmin() {
|
||||
return this.$store.state.user.roles.includes(admin) || this.$store.state.user.roles.includes(superAdmin);
|
||||
@ -84,6 +85,7 @@ export default {
|
||||
this.mapId = resp.data.mapId;
|
||||
this.prdType = resp.data.prdType;
|
||||
this.tableData = resp.data.lessonList;
|
||||
this.cityCode = resp.data.cityCode;
|
||||
} else {
|
||||
this.tableData = [];
|
||||
}
|
||||
@ -129,7 +131,7 @@ export default {
|
||||
});
|
||||
},
|
||||
draftLessonManage() {
|
||||
const query = {mapId: this.mapId, prdType: this.prdType, cityCode: this.$route.query.cityCode};
|
||||
const query = {mapId: this.mapId, prdType: this.prdType, cityCode: this.cityCode};
|
||||
this.$router.push({ path: `/trainingPlatform/draftTeach/${this.$route.params.subSystem}`, query: query });
|
||||
},
|
||||
handleDelete(row) {
|
||||
|
@ -113,7 +113,7 @@ export default {
|
||||
break;
|
||||
case 'Lesson':
|
||||
this.setLocalRoute(`${UrlConfig.trainingPlatform.teachHome}/${obj.id}`);
|
||||
router = { path: `${UrlConfig.trainingPlatform.teachHome}/${obj.id}?cityCode=${this.filterSelect}`};
|
||||
router = { path: `${UrlConfig.trainingPlatform.teachHome}/${obj.id}`};
|
||||
this.toNextPage(isReplace, router);
|
||||
break;
|
||||
case 'Simulation':
|
||||
@ -206,7 +206,7 @@ export default {
|
||||
},
|
||||
nodeCollapse(obj, node, ele) {
|
||||
const key = obj.key;
|
||||
this.expandList = this.expandList.filter(item => item !== key);
|
||||
this.expandList = this.expandList.filter(item => (item !== key && !item.startsWith(`${key}-`)));
|
||||
localStore.set('trainIngPlatformExpandList' + this.filterSelect + this.userId + this.project, this.expandList);
|
||||
},
|
||||
getExpandList(filterSelect) {
|
||||
|
Loading…
Reference in New Issue
Block a user