# Conflicts:
#	src/jmapNew/config/skinCode/nanjing_02.js
#	src/jmapNew/shape/Responder/index.js
This commit is contained in:
joylink_cuiweidong 2021-01-12 17:27:25 +08:00
commit 1e2e8c2609
16 changed files with 211 additions and 119 deletions

View File

@ -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'
}
};

View File

@ -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;
this.create();
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();
});
}
// 整体图片

View File

@ -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);

View File

@ -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>

View File

@ -537,7 +537,7 @@ const map = {
},
responderList: (state) => {
if (state.map) {
return state.map.responderList || [];
return state.map.responderList;
} else {
return [];
}

View File

@ -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 => {
this.$messageBox(this.$t('error.createSimulationFailed') + error.message);
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 => {
this.$messageBox(this.$t('error.createSimulationFailed') + error.message);
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=>{
this.$messageBox(this.$t('error.createSimulationFailed') + error.message);
if (error.code == 10003) {
this.$messageBox(this.$t('error.createSimulationFailed') + ':您的仿真权限不足!');
} else {
this.$messageBox(this.$t('error.createSimulationFailed') + error.message);
}
this.disabled = false;
});
},

View File

@ -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 },

View File

@ -21,7 +21,7 @@ export function buildModelBySection(section, model, list) {
x: vx,
y: vy
},
offset: {
textOffset: {
x: 0,
y: 0
},

View File

@ -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;

View File

@ -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);
}
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}`;

View File

@ -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', []); //

View File

@ -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(() => {

View File

@ -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);

View File

@ -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' }
]

View File

@ -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) {

View File

@ -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) {