Merge branch 'dev' of https://git.cloud.tencent.com/joylink/jl-nclient into dev
# Conflicts: # src/router/index.js # src/utils/baseUrl.js
This commit is contained in:
commit
041d926b80
59
.eslintrc.js
59
.eslintrc.js
@ -25,31 +25,31 @@ module.exports = {
|
||||
"vue/no-v-html": "off",
|
||||
'accessor-pairs': 2,
|
||||
"arrow-spacing": 0,//=>的前/后括号
|
||||
'block-spacing': [2, 'always'],
|
||||
'brace-style': [2, '1tbs', {
|
||||
'block-spacing': [2, 'always'], // 禁止或强制在代码块中开括号前和闭括号后有空格 { return 11 }
|
||||
'brace-style': [2, '1tbs', { // 强制在代码块中使用一致的大括号风格
|
||||
'allowSingleLine': true
|
||||
}],
|
||||
'camelcase': [0, {
|
||||
'camelcase': [0, { // 强制使用驼峰拼写法命名规定
|
||||
'properties': 'always'
|
||||
}],
|
||||
'comma-dangle': [2, 'never'],
|
||||
'comma-spacing': [2, {
|
||||
'comma-dangle': [2, 'never'], // 要求或禁止末尾逗号
|
||||
'comma-spacing': [2, { // 强制在逗号前后使用一致的空格
|
||||
'before': false,
|
||||
'after': true
|
||||
}],
|
||||
'comma-style': [2, 'last'],
|
||||
'constructor-super': 2,
|
||||
'curly': [2, 'multi-line'],
|
||||
'dot-location': [2, 'property'],
|
||||
'eol-last': 2,
|
||||
'comma-style': [2, 'last'], // 强制在逗号前后使用一致的空格
|
||||
'constructor-super': 2, // 要求在构造函数中有super()调用
|
||||
'curly': [2, 'multi-line'], // 强制所有控制语句使用一致的括号风格
|
||||
'dot-location': [2, 'property'], // 强制在点号之前和之后一致的换行
|
||||
'eol-last': 2, // 禁止文件末尾存在空行禁止文件末尾存在空行
|
||||
'generator-star-spacing': [2, {
|
||||
'before': true,
|
||||
'after': true
|
||||
}],
|
||||
'handle-callback-err': [2, '^(err|error)$'],
|
||||
'indent': ["error", "tab"],
|
||||
'jsx-quotes': [2, 'prefer-single'],
|
||||
'key-spacing': [2, {
|
||||
'indent': [2, 4], // 强制使用一致的缩进
|
||||
'jsx-quotes': [2, 'prefer-single'], // 强制在JSX属性中一致地使用双引号或单引号
|
||||
'key-spacing': [0, { // 强制要求在对象字面量的属性中键和值之间使用一致的间距
|
||||
'beforeColon': false,
|
||||
'afterColon': true
|
||||
}],
|
||||
@ -58,8 +58,8 @@ module.exports = {
|
||||
'after': true
|
||||
}],
|
||||
"new-cap": 2,//函数名首行大写必须使用new方式调用,首行小写必须用不带new方式调用
|
||||
'new-parens': 2,
|
||||
'no-array-constructor': 2,
|
||||
'new-parens': 2, // 要求构造无参构造函数时有圆括号
|
||||
'no-array-constructor': 2, // 禁用Array构造函数
|
||||
'no-caller': 2,
|
||||
'no-console': 'off',
|
||||
'no-class-assign': 2,
|
||||
@ -94,9 +94,10 @@ module.exports = {
|
||||
}],
|
||||
'no-lone-blocks': 2,
|
||||
"no-mixed-spaces-and-tabs": [2, false],//禁止混用tab和空格
|
||||
"no-multi-spaces": 1,//不能用多余的空格
|
||||
"no-multi-spaces": 1,// 不能用多余的空格
|
||||
'no-multi-str': 2,
|
||||
'no-multiple-empty-lines': [2, {
|
||||
'no-multiple-empty-lines': [2, { // 禁止出现多行空行
|
||||
// 最大连续空行数
|
||||
'max': 1
|
||||
}],
|
||||
'no-native-reassign': 2,
|
||||
@ -121,7 +122,7 @@ module.exports = {
|
||||
'no-sparse-arrays': 2,
|
||||
'no-this-before-super': 2,
|
||||
'no-throw-literal': 2,
|
||||
"no-trailing-spaces": 1,//一行结束后面不要有空格
|
||||
"no-trailing-spaces": 1,// 禁止行尾空格
|
||||
'no-undef': 2,
|
||||
'no-undef-init': 2,
|
||||
'no-unexpected-multiline': 2,
|
||||
@ -139,7 +140,7 @@ module.exports = {
|
||||
'no-useless-computed-key': 2,
|
||||
'no-useless-constructor': 2,
|
||||
'no-useless-escape': 0,
|
||||
'no-whitespace-before-property': 2,
|
||||
'no-whitespace-before-property': 2, // 禁止属性前有空白
|
||||
'no-with': 2,
|
||||
'one-var': [2, {
|
||||
'initialized': 'never'
|
||||
@ -150,21 +151,21 @@ module.exports = {
|
||||
':': 'before'
|
||||
}
|
||||
}],
|
||||
"padded-blocks": 0,//块语句内行首行尾是否要空行
|
||||
"padded-blocks": 0, // 块语句内行首行尾是否要空行
|
||||
'quotes': [2, 'single', {
|
||||
'avoidEscape': true,
|
||||
'allowTemplateLiterals': true
|
||||
}],
|
||||
'semi': [2, 'always'], //语句强制分号结尾
|
||||
'semi-spacing': [2, {
|
||||
'semi': [2, 'always'], // 语句强制分号结尾
|
||||
'semi-spacing': [2, { // 强制分号之前和之后使用一致的空格
|
||||
'before': false,
|
||||
'after': true
|
||||
}],
|
||||
"strict": 2,//使用严格模式
|
||||
'space-before-blocks': [2, 'always'], //不以新行开始的块{前面要不要有空格
|
||||
"space-before-function-paren": [0, "always"],//函数定义时括号前面要不要有空格
|
||||
"space-in-parens": [0, "never"],//小括号里面要不要有空格
|
||||
"space-infix-ops": 0,//中缀操作符周围要不要有空格
|
||||
'space-before-blocks': [2, 'always'], // 不以新行开始的块{前面要不要有空格 强制在块之前使用一致的空格
|
||||
"space-before-function-paren": [0, "always"],// 函数定义时括号前面要不要有空格
|
||||
"space-in-parens": [0, "never"],// 小括号里面要不要有空格
|
||||
"space-infix-ops": 2,// 要求操作符周围有空格
|
||||
'space-unary-ops': [2, {
|
||||
'words': true,
|
||||
'nonwords': false
|
||||
@ -172,7 +173,7 @@ module.exports = {
|
||||
'spaced-comment': [2, 'always', {
|
||||
'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
|
||||
}], //注释风格要不要有空格什么的
|
||||
'template-curly-spacing': [2, 'never'],
|
||||
// 'template-curly-spacing': [2, 'never'],
|
||||
'use-isnan': 2, //禁止比较时使用NaN,只能用isNaN()
|
||||
'valid-typeof': 2, //必须使用合法的typeof的值
|
||||
"wrap-iife": [2, "inside"],//立即执行函数表达式的小括号风格
|
||||
@ -180,7 +181,7 @@ module.exports = {
|
||||
'yoda': [2, 'never'], //禁止尤达条件
|
||||
'prefer-const': 2,
|
||||
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
|
||||
"object-curly-spacing": [0, "never"],//大括号内是否允许不必要的空格
|
||||
"array-bracket-spacing": [2, "never"], //是否允许非空数组里面有多余的空格
|
||||
"object-curly-spacing": [0, "never"], // 强制在大括号中使用一致的空格
|
||||
"array-bracket-spacing": [2, "never"], // 禁止或强制在括号内使用空格
|
||||
}
|
||||
}
|
||||
|
@ -26,9 +26,9 @@ export function getScriptById(id) {
|
||||
});
|
||||
}
|
||||
/** 通过ID查询未发布剧本的详细信息 */
|
||||
export function getDraftScriptById(id) {
|
||||
export function getDraftScriptByGroup(group) {
|
||||
return request({
|
||||
url: `/api/script/draft/${id}/detail`,
|
||||
url: `/api/simulation/${group}/script/loadedScript`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
@ -425,3 +425,12 @@ export function handlerIbpEvent(group, data) {
|
||||
data: data
|
||||
});
|
||||
}
|
||||
|
||||
/** 预览脚本仿真*/
|
||||
export function scriptDraftRecordNotify(scriptId) {
|
||||
return request({
|
||||
url: `/api/simulation/scriptDraft/${scriptId}`,
|
||||
method: 'get'
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
<template>
|
||||
<div class="query-list-page" :style="{height: queryList.height ? 'auto' : listPageHeight}">
|
||||
<!-- :style="{height: queryList.height ? 'auto' : listPageHeight}" -->
|
||||
<div class="query-list-page">
|
||||
<query-form
|
||||
v-show="!(queryForm.show === false)"
|
||||
ref="queryForm"
|
||||
@ -152,315 +153,315 @@
|
||||
// import { mapGetters } from 'vuex'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
QueryForm: resolve => { require(['@/components/QueryListPage/QueryForm'], resolve); } // 懒加载
|
||||
},
|
||||
props: {
|
||||
queryForm: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
pagerConfig: {
|
||||
type: Object,
|
||||
default() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
queryList: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
choose: null,
|
||||
queryData: {},
|
||||
currentpagerConfig: {},
|
||||
headerCellStyle: {
|
||||
// "background-color ": 'rgba(48, 60, 86, 1)',
|
||||
// color: 'white'
|
||||
},
|
||||
listPageHeight: '100%',
|
||||
tableHeight: 0,
|
||||
pageSize: 10,
|
||||
pageIndex: 1,
|
||||
pageOffset: 0,
|
||||
canQuery: true, // 查询按钮是否可点
|
||||
thirdQRCodeMakeUrl: 'http://s.jiathis.com/qrcode.php?url='
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
globalPagerConfig: function() {
|
||||
const pagerConfig = {
|
||||
pageSize: 'pageSize',
|
||||
pageIndex: 'pageNow'
|
||||
};
|
||||
return pagerConfig;
|
||||
}
|
||||
},
|
||||
created() {
|
||||
const self = this;
|
||||
// queryList 如果没有data属性,就创建并赋值为[]
|
||||
if (!this.queryList.data) {
|
||||
this.$set(this.queryList, 'data', []);
|
||||
}
|
||||
// queryList 如果没有total属性,就创建并赋值为0
|
||||
if (!this.queryList.total) {
|
||||
this.$set(this.queryList, 'total', 0);
|
||||
}
|
||||
// 如果设置了pageConfig就使用它,否则使用globalPageConfig
|
||||
if (!this.pagerConfig) {
|
||||
this.currentpagerConfig = Object.assign({}, this.globalPagerConfig);
|
||||
} else {
|
||||
this.currentpagerConfig = Object.assign({}, this.pagerConfig);
|
||||
}
|
||||
// queryList 如果没有selection属性,就创建并赋值为[]
|
||||
if (!this.queryList.selection) {
|
||||
this.$set(this.queryList, 'selection', []);
|
||||
}
|
||||
// 给queryList添加数据重载的方法
|
||||
this.queryList.reload = function() {
|
||||
return self.commitQuery();
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
// this.commitQuery();
|
||||
// this.tableHeight = this.$refs.table2.$el.offsetHeight + 23;
|
||||
},
|
||||
methods: {
|
||||
// 根据类型显示
|
||||
checkColumnTyep(column, typeName) {
|
||||
if (column.show === false) {
|
||||
return false;
|
||||
} else if (column.isShow) {
|
||||
return column.isShow();
|
||||
}
|
||||
if (typeof column.type === 'undefined') {
|
||||
if (column.formatter instanceof Function) {
|
||||
column.type = 'formatter';
|
||||
} else {
|
||||
column.type = 'basic';
|
||||
}
|
||||
}
|
||||
// 类型是否匹配
|
||||
const typeFlag = column.type === typeName;
|
||||
return typeFlag;
|
||||
},
|
||||
isTableBtnDisabled(button, index, row) {
|
||||
if (button.isDisabled) {
|
||||
return button.isDisabled(index, row);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
// 计算列表的列为链接时显示的名称,可能为列对象的字段
|
||||
getTableBtnName(btnName, index, row) {
|
||||
if (typeof btnName.trim() === 'function') {
|
||||
return btnName(index, row);
|
||||
} else {
|
||||
return btnName;
|
||||
}
|
||||
},
|
||||
// 按钮查询
|
||||
query(queryData) {
|
||||
this.queryData = queryData;
|
||||
this.queryList.reload();
|
||||
},
|
||||
// 导出操作
|
||||
queryExport(queryData) {
|
||||
const self = this;
|
||||
self.disableQuery();
|
||||
self.queryData = queryData;
|
||||
components: {
|
||||
QueryForm: resolve => { require(['@/components/QueryListPage/QueryForm'], resolve); } // 懒加载
|
||||
},
|
||||
props: {
|
||||
queryForm: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
pagerConfig: {
|
||||
type: Object,
|
||||
default() {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
queryList: {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
choose: null,
|
||||
queryData: {},
|
||||
currentpagerConfig: {},
|
||||
headerCellStyle: {
|
||||
// "background-color ": 'rgba(48, 60, 86, 1)',
|
||||
// color: 'white'
|
||||
},
|
||||
listPageHeight: '100%',
|
||||
tableHeight: 0,
|
||||
pageSize: 10,
|
||||
pageIndex: 1,
|
||||
pageOffset: 0,
|
||||
canQuery: true, // 查询按钮是否可点
|
||||
thirdQRCodeMakeUrl: 'http://s.jiathis.com/qrcode.php?url='
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
globalPagerConfig: function() {
|
||||
const pagerConfig = {
|
||||
pageSize: 'pageSize',
|
||||
pageIndex: 'pageNow'
|
||||
};
|
||||
return pagerConfig;
|
||||
}
|
||||
},
|
||||
created() {
|
||||
const self = this;
|
||||
// queryList 如果没有data属性,就创建并赋值为[]
|
||||
if (!this.queryList.data) {
|
||||
this.$set(this.queryList, 'data', []);
|
||||
}
|
||||
// queryList 如果没有total属性,就创建并赋值为0
|
||||
if (!this.queryList.total) {
|
||||
this.$set(this.queryList, 'total', 0);
|
||||
}
|
||||
// 如果设置了pageConfig就使用它,否则使用globalPageConfig
|
||||
if (!this.pagerConfig) {
|
||||
this.currentpagerConfig = Object.assign({}, this.globalPagerConfig);
|
||||
} else {
|
||||
this.currentpagerConfig = Object.assign({}, this.pagerConfig);
|
||||
}
|
||||
// queryList 如果没有selection属性,就创建并赋值为[]
|
||||
if (!this.queryList.selection) {
|
||||
this.$set(this.queryList, 'selection', []);
|
||||
}
|
||||
// 给queryList添加数据重载的方法
|
||||
this.queryList.reload = function() {
|
||||
return self.commitQuery();
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
// this.commitQuery();
|
||||
// this.tableHeight = this.$refs.table2.$el.offsetHeight + 23;
|
||||
},
|
||||
methods: {
|
||||
// 根据类型显示
|
||||
checkColumnTyep(column, typeName) {
|
||||
if (column.show === false) {
|
||||
return false;
|
||||
} else if (column.isShow) {
|
||||
return column.isShow();
|
||||
}
|
||||
if (typeof column.type === 'undefined') {
|
||||
if (column.formatter instanceof Function) {
|
||||
column.type = 'formatter';
|
||||
} else {
|
||||
column.type = 'basic';
|
||||
}
|
||||
}
|
||||
// 类型是否匹配
|
||||
const typeFlag = column.type === typeName;
|
||||
return typeFlag;
|
||||
},
|
||||
isTableBtnDisabled(button, index, row) {
|
||||
if (button.isDisabled) {
|
||||
return button.isDisabled(index, row);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
// 计算列表的列为链接时显示的名称,可能为列对象的字段
|
||||
getTableBtnName(btnName, index, row) {
|
||||
if (typeof btnName.trim() === 'function') {
|
||||
return btnName(index, row);
|
||||
} else {
|
||||
return btnName;
|
||||
}
|
||||
},
|
||||
// 按钮查询
|
||||
query(queryData) {
|
||||
this.queryData = queryData;
|
||||
this.queryList.reload();
|
||||
},
|
||||
// 导出操作
|
||||
queryExport(queryData) {
|
||||
const self = this;
|
||||
self.disableQuery();
|
||||
self.queryData = queryData;
|
||||
import('@/utils/Export2Excel').then(excel => {
|
||||
const tHeader = self.queryForm.exportConfig.header;
|
||||
self.prepareExportData().then(data => {
|
||||
excel.export_json_to_excel(tHeader, data, self.queryForm.exportConfig.filename);
|
||||
self.enableQuery();
|
||||
}).catch(error => {
|
||||
self.enableQuery();
|
||||
self.$message.error(`${this.$t('error.exportFailed')}: ${error.message}`);
|
||||
});
|
||||
const tHeader = self.queryForm.exportConfig.header;
|
||||
self.prepareExportData().then(data => {
|
||||
excel.export_json_to_excel(tHeader, data, self.queryForm.exportConfig.filename);
|
||||
self.enableQuery();
|
||||
}).catch(error => {
|
||||
self.enableQuery();
|
||||
self.$message.error(`${this.$t('error.exportFailed')}: ${error.message}`);
|
||||
});
|
||||
});
|
||||
},
|
||||
// 导出数据准备
|
||||
prepareExportData() {
|
||||
return new Promise((resolve, reject) => {
|
||||
const filterVals = this.queryForm.exportConfig.filterVals;
|
||||
this.queryExportData().then(result => {
|
||||
const list = result.list;
|
||||
const data = this.formatJson(filterVals, list);
|
||||
resolve(data);
|
||||
}).catch(error => {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
},
|
||||
// 格式化数据列表
|
||||
formatJson(filterVals, list) {
|
||||
return list.map(v => filterVals.map(fv => {
|
||||
let keys = [];
|
||||
if (typeof (fv) === 'string') {
|
||||
keys = fv.split('.');
|
||||
} else {
|
||||
keys = fv.key.split('.');
|
||||
}
|
||||
let obj = v;
|
||||
keys.forEach(element => {
|
||||
obj = obj[element];
|
||||
});
|
||||
if (fv.type === 'date') {
|
||||
const format = fv.format || 'yyyy-MM-dd';
|
||||
return new Date(obj).Format(format);
|
||||
} else if (fv.formatter instanceof Function) {
|
||||
return fv.formatter(v);
|
||||
} else {
|
||||
return obj;
|
||||
}
|
||||
}));
|
||||
},
|
||||
// 查询需要导出的数据列表
|
||||
queryExportData() {
|
||||
},
|
||||
/**
|
||||
},
|
||||
// 导出数据准备
|
||||
prepareExportData() {
|
||||
return new Promise((resolve, reject) => {
|
||||
const filterVals = this.queryForm.exportConfig.filterVals;
|
||||
this.queryExportData().then(result => {
|
||||
const list = result.list;
|
||||
const data = this.formatJson(filterVals, list);
|
||||
resolve(data);
|
||||
}).catch(error => {
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
},
|
||||
// 格式化数据列表
|
||||
formatJson(filterVals, list) {
|
||||
return list.map(v => filterVals.map(fv => {
|
||||
let keys = [];
|
||||
if (typeof (fv) === 'string') {
|
||||
keys = fv.split('.');
|
||||
} else {
|
||||
keys = fv.key.split('.');
|
||||
}
|
||||
let obj = v;
|
||||
keys.forEach(element => {
|
||||
obj = obj[element];
|
||||
});
|
||||
if (fv.type === 'date') {
|
||||
const format = fv.format || 'yyyy-MM-dd';
|
||||
return new Date(obj).Format(format);
|
||||
} else if (fv.formatter instanceof Function) {
|
||||
return fv.formatter(v);
|
||||
} else {
|
||||
return obj;
|
||||
}
|
||||
}));
|
||||
},
|
||||
// 查询需要导出的数据列表
|
||||
queryExportData() {
|
||||
},
|
||||
/**
|
||||
* 翻页方法
|
||||
* pageIndex: 翻页后是第几页
|
||||
* params: 查询条件
|
||||
**/
|
||||
changePage(pageIndex, params) {
|
||||
this.pageIndex = pageIndex;
|
||||
this.pageOffset = (this.pageIndex - 1) * this.pageSize;
|
||||
if (params) {
|
||||
// 如果是点查询按钮到这来的,不用混合分页信息,已经有默认的第一页信息
|
||||
this.queryData = params;
|
||||
// 以防pageSize改变, 重新赋值
|
||||
this.queryData[this.currentpagerConfig.pageSize] = this.pageSize;
|
||||
} else {
|
||||
// 如果是点翻页按钮到这来的,把分页信息混合到this.queryData里
|
||||
this.mixinBackPageInfoToQueryData();
|
||||
}
|
||||
// 加时间戳
|
||||
// this.queryData._time = this.$moment()._d.getTime();
|
||||
this.queryList.reload();
|
||||
},
|
||||
/**
|
||||
changePage(pageIndex, params) {
|
||||
this.pageIndex = pageIndex;
|
||||
this.pageOffset = (this.pageIndex - 1) * this.pageSize;
|
||||
if (params) {
|
||||
// 如果是点查询按钮到这来的,不用混合分页信息,已经有默认的第一页信息
|
||||
this.queryData = params;
|
||||
// 以防pageSize改变, 重新赋值
|
||||
this.queryData[this.currentpagerConfig.pageSize] = this.pageSize;
|
||||
} else {
|
||||
// 如果是点翻页按钮到这来的,把分页信息混合到this.queryData里
|
||||
this.mixinBackPageInfoToQueryData();
|
||||
}
|
||||
// 加时间戳
|
||||
// this.queryData._time = this.$moment()._d.getTime();
|
||||
this.queryList.reload();
|
||||
},
|
||||
/**
|
||||
* 改变分页大小回调函数,执行完毕后,iview会自动触发changePage事件,去查第一页数据
|
||||
*/
|
||||
pageSizeChange(newPageSize) {
|
||||
if (newPageSize) {
|
||||
this.pageSize = newPageSize;
|
||||
this.changePage(1, this.queryData);
|
||||
}
|
||||
},
|
||||
/**
|
||||
pageSizeChange(newPageSize) {
|
||||
if (newPageSize) {
|
||||
this.pageSize = newPageSize;
|
||||
this.changePage(1, this.queryData);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 把分页信息混合到this.queryData里
|
||||
*/
|
||||
mixinBackPageInfoToQueryData() {
|
||||
// 当前的分页信息
|
||||
const pagerParams = {
|
||||
pageSize: this.pageSize,
|
||||
pageIndex: this.pageIndex,
|
||||
pageOffset: this.pageOffset
|
||||
};
|
||||
const tempPagerParams = {};
|
||||
// 肯定要有pageSize
|
||||
tempPagerParams[this.currentpagerConfig.pageSize] = pagerParams.pageSize || this.queryData[this.currentpagerConfig.pageSize];
|
||||
// 判断使用 pageIndex 还是 pageOffset
|
||||
if (this.currentpagerConfig.pageIndex) {
|
||||
// 使用 pageIndex
|
||||
tempPagerParams[this.currentpagerConfig.pageIndex] = pagerParams.pageIndex || this.queryData[this.currentpagerConfig.pageIndex];
|
||||
} else {
|
||||
// 使用 pageOffset
|
||||
tempPagerParams[this.currentpagerConfig.pageOffset] = pagerParams.pageOffset !== undefined ? pagerParams.pageOffset : this.queryData[this.currentpagerConfig.pageOffset];
|
||||
}
|
||||
// 将分页信息封装到查询条件中
|
||||
this.queryData = { ...this.queryData, ...tempPagerParams };
|
||||
},
|
||||
preCommitQueryHandler() {
|
||||
// 填充表单
|
||||
// this.$refs.form2.initFormData(this.queryData);
|
||||
// 预设分页组件
|
||||
this.pageIndex = parseInt(this.queryData[this.currentpagerConfig.pageIndex] || this.pageIndex);
|
||||
this.pageSize = parseInt(this.queryData[this.currentpagerConfig.pageSize]);
|
||||
},
|
||||
commitQuery() {
|
||||
const self = this;
|
||||
return new Promise((resolve, reject) => {
|
||||
self.disableQuery();
|
||||
self.mixinBackPageInfoToQueryData();
|
||||
const postData = this.queryData;
|
||||
if (postData === false) {
|
||||
self.enableQuery();
|
||||
return;
|
||||
}
|
||||
if (this.queryList.query instanceof Function) {
|
||||
this.queryList.query(this.queryData).then(response => {
|
||||
self.enableQuery();
|
||||
if (this.queryList.afterQuery && this.queryList.afterQuery instanceof Function) {
|
||||
this.queryList.afterQuery(response.data);
|
||||
}
|
||||
mixinBackPageInfoToQueryData() {
|
||||
// 当前的分页信息
|
||||
const pagerParams = {
|
||||
pageSize: this.pageSize,
|
||||
pageIndex: this.pageIndex,
|
||||
pageOffset: this.pageOffset
|
||||
};
|
||||
const tempPagerParams = {};
|
||||
// 肯定要有pageSize
|
||||
tempPagerParams[this.currentpagerConfig.pageSize] = pagerParams.pageSize || this.queryData[this.currentpagerConfig.pageSize];
|
||||
// 判断使用 pageIndex 还是 pageOffset
|
||||
if (this.currentpagerConfig.pageIndex) {
|
||||
// 使用 pageIndex
|
||||
tempPagerParams[this.currentpagerConfig.pageIndex] = pagerParams.pageIndex || this.queryData[this.currentpagerConfig.pageIndex];
|
||||
} else {
|
||||
// 使用 pageOffset
|
||||
tempPagerParams[this.currentpagerConfig.pageOffset] = pagerParams.pageOffset !== undefined ? pagerParams.pageOffset : this.queryData[this.currentpagerConfig.pageOffset];
|
||||
}
|
||||
// 将分页信息封装到查询条件中
|
||||
this.queryData = { ...this.queryData, ...tempPagerParams };
|
||||
},
|
||||
preCommitQueryHandler() {
|
||||
// 填充表单
|
||||
// this.$refs.form2.initFormData(this.queryData);
|
||||
// 预设分页组件
|
||||
this.pageIndex = parseInt(this.queryData[this.currentpagerConfig.pageIndex] || this.pageIndex);
|
||||
this.pageSize = parseInt(this.queryData[this.currentpagerConfig.pageSize]);
|
||||
},
|
||||
commitQuery() {
|
||||
const self = this;
|
||||
return new Promise((resolve, reject) => {
|
||||
self.disableQuery();
|
||||
self.mixinBackPageInfoToQueryData();
|
||||
const postData = this.queryData;
|
||||
if (postData === false) {
|
||||
self.enableQuery();
|
||||
return;
|
||||
}
|
||||
if (this.queryList.query instanceof Function) {
|
||||
this.queryList.query(this.queryData).then(response => {
|
||||
self.enableQuery();
|
||||
if (this.queryList.afterQuery && this.queryList.afterQuery instanceof Function) {
|
||||
this.queryList.afterQuery(response.data);
|
||||
}
|
||||
|
||||
const resultData = response.data;
|
||||
this.$set(this.queryList, 'data', resultData.list);
|
||||
this.$set(this.queryList, 'total', resultData.total);
|
||||
}).catch(error => {
|
||||
self.enableQuery();
|
||||
this.$message.error(`${this.$t('error.getListFailed')}:${error.message}`);
|
||||
});
|
||||
} else {
|
||||
const data = this.queryList.data;
|
||||
if (data) {
|
||||
self.enableQuery();
|
||||
if (this.queryList.afterQuery && this.queryList.afterQuery instanceof Function) {
|
||||
this.queryList.afterQuery(data);
|
||||
}
|
||||
this.$set(this.queryList, 'data', data);
|
||||
const resultData = response.data;
|
||||
this.$set(this.queryList, 'data', resultData.list);
|
||||
this.$set(this.queryList, 'total', resultData.total);
|
||||
}).catch(error => {
|
||||
self.enableQuery();
|
||||
this.$message.error(`${this.$t('error.getListFailed')}:${error.message}`);
|
||||
});
|
||||
} else {
|
||||
const data = this.queryList.data;
|
||||
if (data) {
|
||||
self.enableQuery();
|
||||
if (this.queryList.afterQuery && this.queryList.afterQuery instanceof Function) {
|
||||
this.queryList.afterQuery(data);
|
||||
}
|
||||
this.$set(this.queryList, 'data', data);
|
||||
|
||||
let total = this.queryList.total;
|
||||
if (!total) {
|
||||
total = this.queryList.data.length;
|
||||
}
|
||||
this.$set(this.queryList, 'total', total);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
enableQuery() {
|
||||
this.canQuery = true;
|
||||
this.loading = false;
|
||||
},
|
||||
disableQuery() {
|
||||
// 禁止查询按钮
|
||||
this.canQuery = false;
|
||||
this.loading = true;
|
||||
// 清空表格的数据
|
||||
// this.queryList.data = [];
|
||||
},
|
||||
onSelect(selection, row) {
|
||||
this.queryList.onSelect && this.queryList.onSelect(selection, row);
|
||||
this.queryList.selection = selection;
|
||||
},
|
||||
onSelectAll(selection) {
|
||||
this.queryList.onSelectAll && this.queryList.onSelectAll(selection);
|
||||
this.queryList.selection = selection;
|
||||
},
|
||||
onSelectionChange(selection) {
|
||||
this.queryList.onSelectionChange && this.queryList.onSelectionChange(selection);
|
||||
this.queryList.selection = selection;
|
||||
},
|
||||
onRowClick(row) {
|
||||
this.choose = row;
|
||||
},
|
||||
currentChoose() {
|
||||
return this.choose;
|
||||
},
|
||||
refresh(flag) {
|
||||
if (flag) {
|
||||
this.commitQuery();
|
||||
}
|
||||
this.queryList.data = [...this.queryList.data];
|
||||
}
|
||||
}
|
||||
let total = this.queryList.total;
|
||||
if (!total) {
|
||||
total = this.queryList.data.length;
|
||||
}
|
||||
this.$set(this.queryList, 'total', total);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
enableQuery() {
|
||||
this.canQuery = true;
|
||||
this.loading = false;
|
||||
},
|
||||
disableQuery() {
|
||||
// 禁止查询按钮
|
||||
this.canQuery = false;
|
||||
this.loading = true;
|
||||
// 清空表格的数据
|
||||
// this.queryList.data = [];
|
||||
},
|
||||
onSelect(selection, row) {
|
||||
this.queryList.onSelect && this.queryList.onSelect(selection, row);
|
||||
this.queryList.selection = selection;
|
||||
},
|
||||
onSelectAll(selection) {
|
||||
this.queryList.onSelectAll && this.queryList.onSelectAll(selection);
|
||||
this.queryList.selection = selection;
|
||||
},
|
||||
onSelectionChange(selection) {
|
||||
this.queryList.onSelectionChange && this.queryList.onSelectionChange(selection);
|
||||
this.queryList.selection = selection;
|
||||
},
|
||||
onRowClick(row) {
|
||||
this.choose = row;
|
||||
},
|
||||
currentChoose() {
|
||||
return this.choose;
|
||||
},
|
||||
refresh(flag) {
|
||||
if (flag) {
|
||||
this.commitQuery();
|
||||
}
|
||||
this.queryList.data = [...this.queryList.data];
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
@ -21,6 +21,10 @@ export default {
|
||||
passedScriptFailed: 'Passed script failed',
|
||||
rejectScriptSuccess: 'Reject script success',
|
||||
rejectScriptFailed: 'Reject script failed',
|
||||
passedRunPlanSuccess: 'Passed run plan success',
|
||||
passedRunPlanFailed: 'Passed run plan failed',
|
||||
rejectRunPlanSuccess: 'reject run plan success',
|
||||
rejectRunPlanFailed: 'reject run plan failed',
|
||||
runPlanName: 'Run Plan Name',
|
||||
passedRunPlan: 'Passed Run Plan',
|
||||
rejectRunPlan: 'Reject Run Plan',
|
||||
|
@ -21,6 +21,12 @@ export default {
|
||||
passedScriptFailed: '通过剧本失败',
|
||||
rejectScriptSuccess: '驳回剧本成功',
|
||||
rejectScriptFailed: '驳回剧本失败',
|
||||
|
||||
passedRunPlanSuccess: '通过剧本成功',
|
||||
passedRunPlanFailed: '通过剧本失败',
|
||||
rejectRunPlanSuccess: '驳回剧本成功',
|
||||
rejectRunPlanFailed: '驳回剧本失败',
|
||||
|
||||
runPlanName: '运行图名称',
|
||||
passedRunPlan: '通过运行图',
|
||||
rejectRunPlan: '驳回运行图',
|
||||
|
@ -40,6 +40,7 @@ class Jlmap {
|
||||
initMapInstance(opts) {
|
||||
const width = opts.dom.clientWidth;
|
||||
const height = opts.dom.clientHeight;
|
||||
this.zoomOnMouseWheel = opts.options.zoomOnMouseWheel;
|
||||
|
||||
this.$zr = zrender.init(opts.dom, deepAssign({ renderer, devicePixelRatio, width, height }, opts.config));
|
||||
|
||||
@ -125,6 +126,7 @@ class Jlmap {
|
||||
if (this.$options.disabled == true) {
|
||||
this.$mouseController.disable();
|
||||
} else {
|
||||
opts['zoomOnMouseWheel'] = this.zoomOnMouseWheel;
|
||||
this.$mouseController.enable(opts);
|
||||
}
|
||||
|
||||
|
@ -119,7 +119,7 @@
|
||||
<script>
|
||||
import md5 from 'js-md5';
|
||||
import { getInfo } from '@/api/login';
|
||||
import { getDesignToken } from '@/utils/auth'; // 验权
|
||||
import { getDesignToken, getToken } from '@/utils/auth'; // 验权
|
||||
import { getUserinfoName, getUserinfoNickname, getUserinfoMobile, getUserinfoMobileCode, getUserinfoEmailCode, getUserinfoEmail, getUserinfoPassword } from '@/api/management/user';
|
||||
import { setInterval, clearInterval } from 'timers';
|
||||
|
||||
@ -187,7 +187,8 @@ export default {
|
||||
},
|
||||
doShow() {
|
||||
this.visible = true;
|
||||
getInfo(getDesignToken()).then(response => {
|
||||
const token = getToken() || getDesignToken();
|
||||
getInfo(token).then(response => {
|
||||
const user = response.data;
|
||||
this.userInfo = {
|
||||
name: user.name,
|
||||
|
@ -110,7 +110,7 @@ export default {
|
||||
// 定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸
|
||||
::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
height: 110px;
|
||||
// height: 110px;
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
/*定义滚动条轨道 内阴影+圆角*/
|
||||
|
@ -1,14 +1,14 @@
|
||||
|
||||
export function getBaseUrl() {
|
||||
let BASE_API;
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
// BASE_API = 'https://joylink.club/jlcloud';
|
||||
// BASE_API = 'https://test.joylink.club/jlcloud';
|
||||
// BASE_API = 'http://192.168.3.5:9000'; // 袁琪
|
||||
BASE_API = 'http://192.168.3.6:9000'; // 旭强
|
||||
// BASE_API = 'http://192.168.3.41:9000'; // 王兴杰
|
||||
} else {
|
||||
BASE_API = process.env.VUE_APP_BASE_API;
|
||||
}
|
||||
return BASE_API;
|
||||
let BASE_API;
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
// BASE_API = 'https://joylink.club/jlcloud';
|
||||
BASE_API = 'https://test.joylink.club/jlcloud';
|
||||
// BASE_API = 'http://192.168.3.5:9000'; // 袁琪
|
||||
// BASE_API = 'http://192.168.3.6:9000'; // 旭强
|
||||
// BASE_API = 'http://192.168.3.41:9000'; // 王兴杰
|
||||
} else {
|
||||
BASE_API = process.env.VUE_APP_BASE_API;
|
||||
}
|
||||
return BASE_API;
|
||||
}
|
||||
|
@ -158,22 +158,22 @@
|
||||
handleConfirmPass(data){
|
||||
publishRunPlan(data.id,data).then(resp => {
|
||||
if(resp.data.length<=0){
|
||||
this.$message.success(this.$t('approval.passedScriptSuccess'));
|
||||
this.$message.success(this.$t('approval.passedRunPlanSuccess'));
|
||||
}
|
||||
else{
|
||||
this.$messageBox(`${this.$t('approval.passedScriptFailed')}: ${resp.data[0]}`);
|
||||
this.$messageBox(`${this.$t('approval.passedRunPlanFailed')}: ${resp.data[0]}`);
|
||||
}
|
||||
this.reloadTable();
|
||||
}).catch(error => {
|
||||
this.$messageBox(`${this.$t('approval.passedScriptFailed')}: ${error.message}`);
|
||||
this.$messageBox(`${this.$t('approval.passedRunPlanFailed')}: ${error.message}`);
|
||||
})
|
||||
},
|
||||
handleConfirmReject(data){
|
||||
rejectRunPlan(data.id,data).then(resp => {
|
||||
this.reloadTable();
|
||||
this.$message.success(this.$t('approval.rejectScriptSuccess'));
|
||||
this.$message.success(this.$t('approval.rejectRunPlanSuccess'));
|
||||
}).catch(error => {
|
||||
this.$messageBox(`${this.$t('approval.rejectScriptFailed')}: ${error.message}`);
|
||||
this.$messageBox(`${this.$t('approval.rejectRunPlanFailed')}: ${error.message}`);
|
||||
})
|
||||
},
|
||||
}
|
||||
|
@ -8,7 +8,7 @@
|
||||
<script>
|
||||
import { launchFullscreen } from '@/utils/screen';
|
||||
import { UrlConfig } from '@/router/index';
|
||||
import { scriptRecordNotify } from '@/api/simulation';
|
||||
import { scriptDraftRecordNotify } from '@/api/simulation';
|
||||
import ScriptOperate from './operate';
|
||||
import { reviewScriptList,publishScript,rejectScript } from '@/api/designPlatform';
|
||||
import { listPublishMap } from '@/api/jmap/map';
|
||||
@ -148,7 +148,7 @@
|
||||
},
|
||||
scriptPreview(index,row){
|
||||
let mapInfo=this.allMapList.find(elem=>{return elem.id==row.mapId});
|
||||
scriptRecordNotify(row.id).then(resp => {
|
||||
scriptDraftRecordNotify(row.id).then(resp => {
|
||||
const query = { mapId: row.mapId, group: resp.data, scriptId: row.id,skinCode:mapInfo.skinCode,try:0};
|
||||
this.$router.push({ path: `${UrlConfig.design.display}/demon`, query });
|
||||
launchFullscreen();
|
||||
|
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="map-view">
|
||||
<jlmap-visual ref="jlmapVisual" @onSelect="clickEvent" @onMenu="onContextmenu" />
|
||||
<jlmap-visual ref="jlmapVisual" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
@ -97,9 +97,6 @@ export default {
|
||||
this.$nextTick(() => {
|
||||
EventBus.$emit('viewLoading', false);
|
||||
});
|
||||
},
|
||||
clickEvent(em) {
|
||||
|
||||
},
|
||||
setWindowSize() {
|
||||
this.$nextTick(() => {
|
||||
|
@ -51,7 +51,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getScriptPageListOnline, getScriptById,getDraftScriptById } from '@/api/script';
|
||||
import { getScriptPageListOnline, getScriptById,getDraftScriptByGroup } from '@/api/script';
|
||||
|
||||
export default {
|
||||
name: 'AddQuest',
|
||||
@ -154,7 +154,7 @@ export default {
|
||||
},
|
||||
async handleLoad(index, row) {
|
||||
this.row = row;
|
||||
const res = this.$route.fullPath.includes('design/display/demon')?await getDraftScriptById(row.id):await getScriptById(row.id);
|
||||
const res = this.$route.fullPath.includes('design/display/demon')?await getDraftScriptByGroup(row.group):await getScriptById(row.id);
|
||||
let newMemberList = [];
|
||||
if (res.code == 200) {
|
||||
if (res.data.playerVOList && res.data.playerVOList.length > 0) {
|
||||
|
@ -258,6 +258,7 @@ export default {
|
||||
|
||||
await this.setWindowSize();
|
||||
await this.initLoadData();
|
||||
this.switchMode('');
|
||||
},
|
||||
async beforeDestroy() {
|
||||
await this.clearAllTimer();
|
||||
@ -480,7 +481,8 @@ export default {
|
||||
},
|
||||
async runAddRolesLoadShow() {
|
||||
// this.$refs.addQuest.doShow();
|
||||
const row={id: this.$route.query.scriptId};
|
||||
// const row={id: this.$route.query.scriptId};
|
||||
const row={group: this.$route.query.group,id: this.$route.query.scriptId};
|
||||
this.$refs.addQuest.handleLoad(1, row);
|
||||
},
|
||||
// 选择脚本
|
||||
@ -506,7 +508,7 @@ export default {
|
||||
}
|
||||
}
|
||||
this.switchMode(prdType);
|
||||
const res = await loadDraftScript(row.id, id, this.group);
|
||||
const res = await loadDraftScript(row.id,id, this.group);
|
||||
if (res && res.code == 200) {
|
||||
this.questId = parseInt(row.id);
|
||||
if (mapLocation) {
|
||||
|
@ -10,7 +10,8 @@
|
||||
<el-button v-if="isShowScheduling" type="primary" @click="jumpScheduling">{{ $t('display.demon.dispatchingPlan') }}</el-button>
|
||||
<el-button type="jumpjlmap3d" @click="jumpjlmap3d">{{ jl3dname }}</el-button>
|
||||
<template v-if="isShowQuest">
|
||||
<el-button type="danger" @click="handleQuitQuest">{{ $t('display.demon.exitScript') }}</el-button>
|
||||
<!-- && !isDesignPlatform -->
|
||||
<el-button v-if="!isDesignPlatform " type="danger" @click="handleQuitQuest">{{ $t('display.demon.exitScript') }}</el-button>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-button type="success" :disabled="isDisable" @click="selectBeginTime">{{ $t('display.demon.drivingByPlan') }}</el-button>
|
||||
@ -81,6 +82,9 @@ export default {
|
||||
},
|
||||
isShowScheduling() {
|
||||
return this.$route.query.prdType == '05';
|
||||
},
|
||||
isDesignPlatform(){
|
||||
return this.$route.fullPath.includes('design/display/demon');
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
|
@ -131,6 +131,12 @@ export default {
|
||||
document.getElementById(this.canvasId).oncontextmenu = function (e) {
|
||||
return false;
|
||||
};
|
||||
// 默认个人地图绘制可以滚轮放大缩小 其他地图显示不允许此操作
|
||||
const path = window.location.href;
|
||||
let flag = false;
|
||||
if (path.includes('design/userlist/map/draw')) {
|
||||
flag = true;
|
||||
}
|
||||
|
||||
Vue.prototype.$jlmap = new Jlmap({
|
||||
dom: document.getElementById(this.canvasId),
|
||||
@ -142,7 +148,8 @@ export default {
|
||||
options: {
|
||||
scaleRate: 1,
|
||||
offsetX: 0,
|
||||
offsetY: 0
|
||||
offsetY: 0,
|
||||
zoomOnMouseWheel: flag
|
||||
},
|
||||
methods: {
|
||||
dataLoaded: this.handleDataLoaded,
|
||||
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<el-card>
|
||||
<el-card style="height: 100%; overflow-y: auto;">
|
||||
<div slot="header" style="text-align: center;">
|
||||
<b>{{ $t('lesson.courseName') + ': '+ name }}</b>
|
||||
</div>
|
||||
@ -38,98 +38,98 @@ import { getLessonTree } from '@/api/jmap/lessondraft';
|
||||
import { DeviceMenu } from '@/scripts/ConstDic';
|
||||
import OperateMenu from './operateMenu';
|
||||
export default {
|
||||
name: 'LessonDetail',
|
||||
components: {
|
||||
OperateMenu
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
treeList: [],
|
||||
defaultProps: {
|
||||
children: 'children',
|
||||
label: 'name'
|
||||
},
|
||||
name: '',
|
||||
lessonId: '',
|
||||
expandList: [],
|
||||
point: {
|
||||
x: 0,
|
||||
y: 0
|
||||
},
|
||||
node: {
|
||||
}
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
width() {
|
||||
return this.$store.state.app.width - 481 - this.widthLeft;
|
||||
},
|
||||
height() {
|
||||
return this.$store.state.app.height - 120;
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.initPageData();
|
||||
},
|
||||
methods: {
|
||||
initPageData() {
|
||||
getLessonTree(this.$route.query.lessonId || this.$route.query.id).then(resp => {
|
||||
if (resp.data && resp.data[0]) {
|
||||
this.name = resp.data[0].name;
|
||||
this.lessonId = resp.data[0].id;
|
||||
this.treeList = resp.data;
|
||||
}
|
||||
this.editLesson();
|
||||
});
|
||||
name: 'LessonDetail',
|
||||
components: {
|
||||
OperateMenu
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
treeList: [],
|
||||
defaultProps: {
|
||||
children: 'children',
|
||||
label: 'name'
|
||||
},
|
||||
name: '',
|
||||
lessonId: '',
|
||||
expandList: [],
|
||||
point: {
|
||||
x: 0,
|
||||
y: 0
|
||||
},
|
||||
node: {
|
||||
}
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
width() {
|
||||
return this.$store.state.app.width - 481 - this.widthLeft;
|
||||
},
|
||||
height() {
|
||||
return this.$store.state.app.height - 120;
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.initPageData();
|
||||
},
|
||||
methods: {
|
||||
initPageData() {
|
||||
getLessonTree(this.$route.query.lessonId || this.$route.query.id).then(resp => {
|
||||
if (resp.data && resp.data[0]) {
|
||||
this.name = resp.data[0].name;
|
||||
this.lessonId = resp.data[0].id;
|
||||
this.treeList = resp.data;
|
||||
}
|
||||
this.editLesson();
|
||||
});
|
||||
|
||||
},
|
||||
clickEvent(obj, node, ele) {
|
||||
},
|
||||
filterNode(value, data) {
|
||||
if (!value) return true;
|
||||
return data.name.indexOf(value) !== -1;
|
||||
},
|
||||
editLesson() {
|
||||
this.$router.push( {path: `/design/lesson/details/edit/lessonEdit`, query: {id: this.lessonId, skinCode: this.$route.query.skinCode, cityCode: this.$route.query.cityCode, mapId: this.$route.query.mapId}} );
|
||||
},
|
||||
createChapte(node) {
|
||||
this.$router.push({path: `/design/lesson/details/edit/chapterCreate`, query: {id: node.data.id, lessonId: this.lessonId, skinCode: this.$route.query.skinCode, cityCode: this.$route.query.cityCode, mapId: this.$route.query.mapId}});
|
||||
},
|
||||
updateChapte(node) {
|
||||
this.$router.push( {path: `/design/lesson/details/edit/chapterEdit`, query: {id: node.data.id, skinCode: this.$route.query.skinCode, lessonId: this.lessonId, cityCode: this.$route.query.cityCode, mapId: this.$route.query.mapId}});
|
||||
},
|
||||
showContextMenu(e, obj, node, vueElem) {
|
||||
if (obj && obj.type === 'Lesson' || obj.type === 'Chapter') {
|
||||
e.preventDefault();
|
||||
this.point = {
|
||||
x: e.clientX,
|
||||
y: e.clientY
|
||||
};
|
||||
this.node = node;
|
||||
const menu = DeviceMenu.Lesson;
|
||||
this.$store.dispatch('menuOperation/setPopMenu', { position: this.point, menu: menu });
|
||||
}
|
||||
},
|
||||
changeRouter(params) {
|
||||
switch (params.event) {
|
||||
case '01':
|
||||
this.editLesson();
|
||||
break;
|
||||
case '02':
|
||||
this.createChapte(params.node);
|
||||
break;
|
||||
case '03':
|
||||
this.updateChapte(params.node);
|
||||
break;
|
||||
case '04':
|
||||
this.createChapte(params.node);
|
||||
break;
|
||||
}
|
||||
},
|
||||
refresh() {
|
||||
this.initPageData();
|
||||
}
|
||||
}
|
||||
},
|
||||
clickEvent(obj, node, ele) {
|
||||
},
|
||||
filterNode(value, data) {
|
||||
if (!value) return true;
|
||||
return data.name.indexOf(value) !== -1;
|
||||
},
|
||||
editLesson() {
|
||||
this.$router.push( {path: `/design/lesson/details/edit/lessonEdit`, query: {id: this.lessonId, skinCode: this.$route.query.skinCode, cityCode: this.$route.query.cityCode, mapId: this.$route.query.mapId}} );
|
||||
},
|
||||
createChapte(node) {
|
||||
this.$router.push({path: `/design/lesson/details/edit/chapterCreate`, query: {id: node.data.id, lessonId: this.lessonId, skinCode: this.$route.query.skinCode, cityCode: this.$route.query.cityCode, mapId: this.$route.query.mapId}});
|
||||
},
|
||||
updateChapte(node) {
|
||||
this.$router.push( {path: `/design/lesson/details/edit/chapterEdit`, query: {id: node.data.id, skinCode: this.$route.query.skinCode, lessonId: this.lessonId, cityCode: this.$route.query.cityCode, mapId: this.$route.query.mapId}});
|
||||
},
|
||||
showContextMenu(e, obj, node, vueElem) {
|
||||
if (obj && obj.type === 'Lesson' || obj.type === 'Chapter') {
|
||||
e.preventDefault();
|
||||
this.point = {
|
||||
x: e.clientX,
|
||||
y: e.clientY
|
||||
};
|
||||
this.node = node;
|
||||
const menu = DeviceMenu.Lesson;
|
||||
this.$store.dispatch('menuOperation/setPopMenu', { position: this.point, menu: menu });
|
||||
}
|
||||
},
|
||||
changeRouter(params) {
|
||||
switch (params.event) {
|
||||
case '01':
|
||||
this.editLesson();
|
||||
break;
|
||||
case '02':
|
||||
this.createChapte(params.node);
|
||||
break;
|
||||
case '03':
|
||||
this.updateChapte(params.node);
|
||||
break;
|
||||
case '04':
|
||||
this.createChapte(params.node);
|
||||
break;
|
||||
}
|
||||
},
|
||||
refresh() {
|
||||
this.initPageData();
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||
|
@ -1,11 +1,12 @@
|
||||
<template>
|
||||
<div class="card-box">
|
||||
<el-steps class="steps" :active="display">
|
||||
<div class="card-box steps">
|
||||
<!-- class="steps" -->
|
||||
<el-steps :active="display">
|
||||
<el-step :title="this.$t('lesson.trainingSequence')" icon="el-icon-edit-outline" />
|
||||
<el-step title="" icon="el-icon-upload" />
|
||||
</el-steps>
|
||||
<el-card class="forms">
|
||||
<el-scrollbar wrap-class="scrollbar-wrapper" :style="{height: height -60 + 'px'}">
|
||||
<el-scrollbar wrap-class="scrollbar-wrapper" :style="{height: height -60-30 + 'px'}">
|
||||
<el-tree
|
||||
ref="lessonTree"
|
||||
:data="treeData"
|
||||
@ -82,14 +83,23 @@ export default {
|
||||
},
|
||||
allowDrop(draggingNode, dropNode, type) {
|
||||
if (draggingNode && draggingNode.data.type === 'Chapter') {
|
||||
return dropNode && draggingNode.parent == dropNode.parent && (
|
||||
dropNode.data.type === 'Chapter' && type !== 'Inner');
|
||||
} else if (draggingNode && draggingNode.data.type === 'Training') {
|
||||
return dropNode && draggingNode.parent == dropNode.parent && (
|
||||
dropNode.data.type === 'Training' && type !== 'Inner');
|
||||
// debugger;
|
||||
return dropNode && (dropNode.data.type === 'Chapter');
|
||||
// return dropNode && draggingNode.parent == dropNode.parent && (
|
||||
// dropNode.data.type === 'Chapter' && type !== 'Inner');
|
||||
}
|
||||
else if (draggingNode && draggingNode.data.type === 'Training') {
|
||||
// dropNode.data.type === 'Chapter' ||
|
||||
return dropNode && (dropNode.data.type === 'Training' && type !== 'inner' );
|
||||
// return dropNode && draggingNode.parent == dropNode.parent && (
|
||||
// dropNode.data.type === 'Training' && type !== 'Inner');
|
||||
}
|
||||
else{
|
||||
return true;
|
||||
}
|
||||
},
|
||||
allowDrag(draggingNode) {
|
||||
// debugger;
|
||||
return draggingNode && (draggingNode.data.type === 'Chapter' || draggingNode.data.type === 'Training');
|
||||
},
|
||||
getLeesonId(node) {
|
||||
|
@ -148,6 +148,9 @@ export default {
|
||||
}
|
||||
|
||||
.draftContext {
|
||||
// float: left;
|
||||
}
|
||||
width:100%;
|
||||
}
|
||||
.mainContext{
|
||||
display: -webkit-box;
|
||||
}
|
||||
</style>
|
||||
|
@ -1,5 +1,12 @@
|
||||
<template>
|
||||
<el-dialog v-dialogDrag :title="title" :visible.sync="dialogVisible" width="25%" :before-close="handleClose" center>
|
||||
<el-dialog
|
||||
v-dialogDrag
|
||||
:title="title"
|
||||
:visible.sync="dialogVisible"
|
||||
width="25%"
|
||||
:before-close="handleClose"
|
||||
center
|
||||
>
|
||||
<data-form ref="dataform" :form="form" :form-model="formModel" :rules="rules" />
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button v-loading="loading" type="primary" @click="doSave">{{ $t('global.confirm') }}</el-button>
|
||||
@ -14,102 +21,126 @@ import { OperationList } from '@/scripts/OperationConfig';
|
||||
import { getSkinCodeList } from '@/api/management/mapskin';
|
||||
|
||||
export default {
|
||||
name: 'AddBatch',
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
dialogVisible: false,
|
||||
formModel: {
|
||||
skinCode: this.$route.query.skinCode
|
||||
},
|
||||
skinCodeList: [],
|
||||
isShow: false
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
form() {
|
||||
this.type === 'ADD';
|
||||
const form = {
|
||||
labelWidth: '120px',
|
||||
items: [
|
||||
{ prop: 'skinCode', label: this.$t('lesson.skinType'), type: 'select', required: true, options: this.skinCodeList, disabled: true }
|
||||
]
|
||||
};
|
||||
return form;
|
||||
},
|
||||
rules() {
|
||||
const crules = {
|
||||
skinCode: [
|
||||
{ required: true, message: this.$t('rules.inputSkinType'), trigger: 'change' }
|
||||
]
|
||||
};
|
||||
return crules;
|
||||
},
|
||||
title() {
|
||||
return this.$t('lesson.generationOperation');
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.init();
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
// 获取皮肤列表
|
||||
this.skinCodeList = [];
|
||||
getSkinCodeList().then(response => {
|
||||
this.skinCodeList = response.data.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
});
|
||||
});
|
||||
},
|
||||
show(total) {
|
||||
if (total) {
|
||||
this.isShow = true;
|
||||
}
|
||||
|
||||
this.loading = false;
|
||||
this.dialogVisible = true;
|
||||
},
|
||||
doSave() {
|
||||
const self = this;
|
||||
this.$refs.dataform.validateForm(() => {
|
||||
if (this.isShow) {
|
||||
this.$confirm(this.$t('lesson.wellClearOperate'), this.$t('global.tips'), {
|
||||
confirmButtonText: this.$t('global.confirm'),
|
||||
cancelButtonText: this.$t('global.cancel'),
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
self.create();
|
||||
}).catch(() => { });
|
||||
} else {
|
||||
self.create();
|
||||
}
|
||||
});
|
||||
},
|
||||
create() {
|
||||
const self = this;
|
||||
this.loading = true;
|
||||
addTrainingRulesList(this.formModel.skinCode, OperationList[this.formModel.skinCode].list).then(response => {
|
||||
self.loading = false;
|
||||
self.$message.success(this.$t('lesson.batchCreateSuccess'));
|
||||
self.handleClose();
|
||||
self.$emit('reloadTable'); // 刷新列表
|
||||
}).catch(error => {
|
||||
self.loading = false;
|
||||
self.$message.error(`${this.$('error.batchCreateFailed')}:${error.message}`);
|
||||
});
|
||||
},
|
||||
handleClose() {
|
||||
this.formModel = {
|
||||
name: 'AddBatch',
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
dialogVisible: false,
|
||||
formModel: {
|
||||
skinCode: this.$route.query.skinCode
|
||||
};
|
||||
this.$refs.dataform.resetForm();
|
||||
this.isShow = false;
|
||||
this.dialogVisible = false;
|
||||
}
|
||||
}
|
||||
},
|
||||
skinCodeList: [],
|
||||
isShow: false
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
form() {
|
||||
this.type === 'ADD';
|
||||
const form = {
|
||||
labelWidth: '120px',
|
||||
items: [
|
||||
{
|
||||
prop: 'skinCode',
|
||||
label: this.$t('lesson.skinType'),
|
||||
type: 'select',
|
||||
required: true,
|
||||
options: this.skinCodeList,
|
||||
disabled: true
|
||||
}
|
||||
]
|
||||
};
|
||||
return form;
|
||||
},
|
||||
rules() {
|
||||
const crules = {
|
||||
skinCode: [
|
||||
{
|
||||
required: true,
|
||||
message: this.$t('rules.inputSkinType'),
|
||||
trigger: 'change'
|
||||
}
|
||||
]
|
||||
};
|
||||
return crules;
|
||||
},
|
||||
title() {
|
||||
return this.$t('lesson.generationOperation');
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.init();
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
// 获取皮肤列表
|
||||
this.skinCodeList = [];
|
||||
getSkinCodeList().then(response => {
|
||||
this.skinCodeList = response.data.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
});
|
||||
});
|
||||
},
|
||||
show(total) {
|
||||
if (total) {
|
||||
this.isShow = true;
|
||||
}
|
||||
|
||||
this.loading = false;
|
||||
this.dialogVisible = true;
|
||||
},
|
||||
doSave() {
|
||||
const self = this;
|
||||
this.$refs.dataform.validateForm(() => {
|
||||
if (this.isShow) {
|
||||
this.$confirm(
|
||||
this.$t('lesson.wellClearOperate'),
|
||||
this.$t('global.tips'),
|
||||
{
|
||||
confirmButtonText: this.$t('global.confirm'),
|
||||
cancelButtonText: this.$t('global.cancel'),
|
||||
type: 'warning'
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
self.create();
|
||||
})
|
||||
.catch(() => {});
|
||||
} else {
|
||||
self.create();
|
||||
}
|
||||
});
|
||||
},
|
||||
create() {
|
||||
const self = this;
|
||||
this.loading = true;
|
||||
addTrainingRulesList(
|
||||
this.formModel.skinCode,
|
||||
OperationList[this.formModel.skinCode].list
|
||||
)
|
||||
.then(response => {
|
||||
self.loading = false;
|
||||
self.$message.success(this.$t('lesson.batchCreateSuccess'));
|
||||
self.handleClose();
|
||||
self.$emit('reloadTable'); // 刷新列表
|
||||
})
|
||||
.catch(error => {
|
||||
self.loading = false;
|
||||
self.$message.error(
|
||||
`${this.$('error.batchCreateFailed')}:${error.message}`
|
||||
);
|
||||
});
|
||||
},
|
||||
handleClose() {
|
||||
this.formModel = {
|
||||
skinCode: this.$route.query.skinCode
|
||||
};
|
||||
this.$refs.dataform.resetForm();
|
||||
this.isShow = false;
|
||||
this.dialogVisible = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
@ -13,289 +13,289 @@ import { postTrainingRulesData, putTrainingRulesData, getPlaceholderList } from
|
||||
import { getSkinCodeList } from '@/api/management/mapskin';
|
||||
|
||||
export default {
|
||||
name: 'TrainingEdit',
|
||||
props: {
|
||||
type: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
dialogVisible: false,
|
||||
formModel: {
|
||||
trainingName: '',
|
||||
trainingType: '',
|
||||
operateType: '',
|
||||
skinCode: '',
|
||||
minDuration: '',
|
||||
maxDuration: '',
|
||||
trainingRemark: '',
|
||||
productTypes: []
|
||||
},
|
||||
skinCodeList: [],
|
||||
trainingTypeList: [],
|
||||
trainingOperateTypeMap: {},
|
||||
placeholderList: []
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
form() {
|
||||
const isAdd = this.type === 'ADD';
|
||||
const form = {
|
||||
labelWidth: '120px',
|
||||
items: [
|
||||
{ prop: 'skinCode', label: this.$t('lesson.skinType'), type: 'select', required: true, options: this.skinCodeList, disabled: true },
|
||||
{ prop: 'trainingType', label: this.$t('lesson.trainingType'), type: 'select', required: true, options: this.trainingTypeList, disabled: !isAdd, change: true, onChange: this.changeList },
|
||||
{ prop: 'operateType', label: this.$t('lesson.operationType'), type: 'select', required: true, options: this.trainingOperateTypeMap[this.formModel.trainingType], disabled: !isAdd },
|
||||
{ label: '', type: 'button', options: this.placeholderList, style: 'margin-bottom: 0; margin-top: -10px;', typeBtn: 'info', click: this.addTrainName },
|
||||
{ prop: 'trainingName', label: this.$t('lesson.trainingName'), type: 'text', required: true, rightWidth: true, tooltip: true, info: this.$t('lesson.tipNamePlaceholderInfo') },
|
||||
{ prop: 'minDuration', label: this.$t('lesson.minDuration'), type: 'text', required: true },
|
||||
{ prop: 'maxDuration', label: this.$t('lesson.maxDuration'), type: 'text', required: true },
|
||||
{ label: '', type: 'button', options: this.placeholderList, style: 'margin-bottom: 0; margin-top: -10px;', typeBtn: 'info', click: this.addTrainRemark },
|
||||
{ prop: 'trainingRemark', label: this.$t('lesson.trainingRemark'), type: 'textarea', required: true, tooltip: true, info: this.$t('lesson.tipExplainPlaceholderInfo') }
|
||||
]
|
||||
};
|
||||
return form;
|
||||
},
|
||||
rules() {
|
||||
const crules = {
|
||||
trainingName: [
|
||||
{ required: true, message: this.$t('rules.inputTrainingName'), trigger: 'blur' }
|
||||
],
|
||||
trainingType: [
|
||||
{ required: true, message: this.$t('rules.inputTrainingType'), trigger: 'change' }
|
||||
],
|
||||
operateType: [
|
||||
{ required: true, message: this.$t('rules.inputOperationType'), trigger: 'change' }
|
||||
],
|
||||
skinCode: [
|
||||
{ required: true, message: this.$t('rules.inputSkinType'), trigger: 'change' }
|
||||
],
|
||||
minDuration: [
|
||||
{ required: true, message: this.$t('rules.inputMinDuration'), trigger: 'blur' }
|
||||
],
|
||||
maxDuration: [
|
||||
{ required: true, message: this.$t('rules.inputMaxDuration'), trigger: 'blur' }
|
||||
],
|
||||
trainingRemark: [
|
||||
{ required: true, max: 500, message: this.$t('rules.inputTrainingRemark'), trigger: 'blur' }
|
||||
]
|
||||
};
|
||||
return crules;
|
||||
},
|
||||
title() {
|
||||
if (this.type === 'ADD') {
|
||||
return this.$t('lesson.createOperateRule');
|
||||
} else {
|
||||
return this.$t('lesson.editOperateRule');
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.init();
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
// 获取皮肤列表
|
||||
this.skinCodeList = [];
|
||||
getSkinCodeList().then(response => {
|
||||
this.skinCodeList = response.data.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
});
|
||||
});
|
||||
|
||||
// 获取实训类型
|
||||
this.trainingTypeList = [];
|
||||
this.$Dictionary.trainingType().then(list => {
|
||||
this.trainingTypeList = list.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
});
|
||||
});
|
||||
// 获取实训操作类型
|
||||
this.trainingOperateTypeMap = {};
|
||||
this.$Dictionary.stationControl().then(list => {
|
||||
this.trainingOperateTypeMap['01'] = list.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
}); // 控制权实训
|
||||
});
|
||||
this.$Dictionary.signalOperation().then(list => {
|
||||
this.trainingOperateTypeMap['02'] = list.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
}); // 信号机实训
|
||||
});
|
||||
this.$Dictionary.switchOperation().then(list => {
|
||||
this.trainingOperateTypeMap['03'] = list.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
}); // 道岔实训
|
||||
});
|
||||
this.$Dictionary.sectionOperation().then(list => {
|
||||
this.trainingOperateTypeMap['04'] = list.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
}); // 区段实训
|
||||
});
|
||||
this.$Dictionary.stationStandOperation().then(list => {
|
||||
this.trainingOperateTypeMap['05'] = list.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
}); // 站台实训
|
||||
});
|
||||
this.$Dictionary.trainPlanOperation().then(list => {
|
||||
this.trainingOperateTypeMap['06'] = list.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
}); // 行车计划实训
|
||||
});
|
||||
this.$Dictionary.trainOperation().then(list => {
|
||||
this.trainingOperateTypeMap['07'] = list.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
}); // 列车实训
|
||||
});
|
||||
|
||||
},
|
||||
async show(data) {
|
||||
this.loading = false;
|
||||
this.dialogVisible = true;
|
||||
if (data && data.id) {
|
||||
// 获取操作占位列表
|
||||
const res = await getPlaceholderList({ trainingType: data.trainingType, skinCode: data.skinCode });
|
||||
this.placeholderList = res.data;
|
||||
this.formModel = {
|
||||
id: data.id,
|
||||
trainingName: this.repliceName(data.trainingName, this.placeholderList),
|
||||
trainingType: data.trainingType,
|
||||
operateType: data.operateType,
|
||||
productTypes: data.productTypes,
|
||||
skinCode: data.skinCode,
|
||||
minDuration: data.minDuration,
|
||||
maxDuration: data.maxDuration,
|
||||
trainingRemark: this.repliceName(data.trainingRemark, this.placeholderList)
|
||||
};
|
||||
}else {
|
||||
this.formModel = {
|
||||
skinCode: this.$route.query.skinCode
|
||||
}
|
||||
name: 'TrainingEdit',
|
||||
props: {
|
||||
type: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
dialogVisible: false,
|
||||
formModel: {
|
||||
trainingName: '',
|
||||
trainingType: '',
|
||||
operateType: '',
|
||||
skinCode: '',
|
||||
minDuration: '',
|
||||
maxDuration: '',
|
||||
trainingRemark: '',
|
||||
productTypes: []
|
||||
},
|
||||
skinCodeList: [],
|
||||
trainingTypeList: [],
|
||||
trainingOperateTypeMap: {},
|
||||
placeholderList: []
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
form() {
|
||||
const isAdd = this.type === 'ADD';
|
||||
const form = {
|
||||
labelWidth: '120px',
|
||||
items: [
|
||||
{ prop: 'skinCode', label: this.$t('lesson.skinType'), type: 'select', required: true, options: this.skinCodeList, disabled: true },
|
||||
{ prop: 'trainingType', label: this.$t('lesson.trainingType'), type: 'select', required: true, options: this.trainingTypeList, disabled: !isAdd, change: true, onChange: this.changeList },
|
||||
{ prop: 'operateType', label: this.$t('lesson.operationType'), type: 'select', required: true, options: this.trainingOperateTypeMap[this.formModel.trainingType], disabled: !isAdd },
|
||||
{ label: '', type: 'button', options: this.placeholderList, style: 'margin-bottom: 0; margin-top: -10px;', typeBtn: 'info', click: this.addTrainName },
|
||||
{ prop: 'trainingName', label: this.$t('lesson.trainingName'), type: 'text', required: true, rightWidth: true, tooltip: true, info: this.$t('lesson.tipNamePlaceholderInfo') },
|
||||
{ prop: 'minDuration', label: this.$t('lesson.minDuration'), type: 'text', required: true },
|
||||
{ prop: 'maxDuration', label: this.$t('lesson.maxDuration'), type: 'text', required: true },
|
||||
{ label: '', type: 'button', options: this.placeholderList, style: 'margin-bottom: 0; margin-top: -10px;', typeBtn: 'info', click: this.addTrainRemark },
|
||||
{ prop: 'trainingRemark', label: this.$t('lesson.trainingRemark'), type: 'textarea', required: true, tooltip: true, info: this.$t('lesson.tipExplainPlaceholderInfo') }
|
||||
]
|
||||
};
|
||||
return form;
|
||||
},
|
||||
rules() {
|
||||
const crules = {
|
||||
trainingName: [
|
||||
{ required: true, message: this.$t('rules.inputTrainingName'), trigger: 'blur' }
|
||||
],
|
||||
trainingType: [
|
||||
{ required: true, message: this.$t('rules.inputTrainingType'), trigger: 'change' }
|
||||
],
|
||||
operateType: [
|
||||
{ required: true, message: this.$t('rules.inputOperationType'), trigger: 'change' }
|
||||
],
|
||||
skinCode: [
|
||||
{ required: true, message: this.$t('rules.inputSkinType'), trigger: 'change' }
|
||||
],
|
||||
minDuration: [
|
||||
{ required: true, message: this.$t('rules.inputMinDuration'), trigger: 'blur' }
|
||||
],
|
||||
maxDuration: [
|
||||
{ required: true, message: this.$t('rules.inputMaxDuration'), trigger: 'blur' }
|
||||
],
|
||||
trainingRemark: [
|
||||
{ required: true, max: 500, message: this.$t('rules.inputTrainingRemark'), trigger: 'blur' }
|
||||
]
|
||||
};
|
||||
return crules;
|
||||
},
|
||||
title() {
|
||||
if (this.type === 'ADD') {
|
||||
return this.$t('lesson.createOperateRule');
|
||||
} else {
|
||||
return this.$t('lesson.editOperateRule');
|
||||
}
|
||||
},
|
||||
repliceName(fieldValue, enumList) {
|
||||
if (enumList && enumList.length > 0) {
|
||||
for (let i = 0; i < enumList.length; i++) {
|
||||
if (fieldValue.includes(`{${enumList[i].id}}`)) {
|
||||
fieldValue = fieldValue.replace(`{${enumList[i].id}}`, `{${enumList[i].name}}`);
|
||||
}
|
||||
}
|
||||
return fieldValue;
|
||||
}
|
||||
},
|
||||
changeList(val) {
|
||||
// 获取操作占位列表
|
||||
getPlaceholderList({ trainingType: val, skinCode: '02' }).then(res => {
|
||||
this.placeholderList = res.data;
|
||||
});
|
||||
},
|
||||
addTrainName(val) {
|
||||
this.formModel.trainingName = `${this.formModel.trainingName}{${val.name}}`;
|
||||
},
|
||||
addTrainRemark(val) {
|
||||
this.formModel.trainingRemark = `${this.formModel.trainingRemark}{${val.name}}`;
|
||||
},
|
||||
doSave() {
|
||||
const self = this;
|
||||
this.$refs.dataform.validateForm(() => {
|
||||
if (self.type === 'ADD') {
|
||||
self.create();
|
||||
} else {
|
||||
self.update();
|
||||
}
|
||||
});
|
||||
},
|
||||
create() {
|
||||
const self = this;
|
||||
this.placeholderList.forEach(item => {
|
||||
if (this.formModel.trainingName.includes(`{${item.name}}`)) {
|
||||
const name = this.formModel.trainingName.replace(`{${item.name}}`, `{${item.id}}`);
|
||||
this.formModel.trainingName = name;
|
||||
}
|
||||
if (this.formModel.trainingRemark.includes(`{${item.name}}`)) {
|
||||
const remark = this.formModel.trainingRemark.replace(`{${item.name}}`, `{${item.id}}`);
|
||||
this.formModel.trainingRemark = remark;
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.init();
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
// 获取皮肤列表
|
||||
this.skinCodeList = [];
|
||||
getSkinCodeList().then(response => {
|
||||
this.skinCodeList = response.data.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
});
|
||||
});
|
||||
|
||||
this.loading = true;
|
||||
postTrainingRulesData(this.formModel).then(response => {
|
||||
self.loading = false;
|
||||
self.$message.success(this.$t('lesson.createOperateSuccess'));
|
||||
self.handleClose();
|
||||
self.$emit('reloadTable');
|
||||
}).catch(error => {
|
||||
self.loading = false;
|
||||
self.$message.error(`${this.$t('error.createOperateRuleFailed')}:${error.message}`);
|
||||
});
|
||||
},
|
||||
update() {
|
||||
const self = this;
|
||||
this.placeholderList.forEach(item => {
|
||||
if (this.formModel.trainingName.includes(`{${item.name}}`)) {
|
||||
const name = this.formModel.trainingName.replace(`{${item.name}}`, `{${item.id}}`);
|
||||
this.formModel.trainingName = name;
|
||||
}
|
||||
if (this.formModel.trainingRemark.includes(`{${item.name}}`)) {
|
||||
const remark = this.formModel.trainingRemark.replace(`{${item.name}}`, `{${item.id}}`);
|
||||
this.formModel.trainingRemark = remark;
|
||||
}
|
||||
});
|
||||
// 获取实训类型
|
||||
this.trainingTypeList = [];
|
||||
this.$Dictionary.trainingType().then(list => {
|
||||
this.trainingTypeList = list.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
});
|
||||
});
|
||||
// 获取实训操作类型
|
||||
this.trainingOperateTypeMap = {};
|
||||
this.$Dictionary.stationControl().then(list => {
|
||||
this.trainingOperateTypeMap['01'] = list.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
}); // 控制权实训
|
||||
});
|
||||
this.$Dictionary.signalOperation().then(list => {
|
||||
this.trainingOperateTypeMap['02'] = list.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
}); // 信号机实训
|
||||
});
|
||||
this.$Dictionary.switchOperation().then(list => {
|
||||
this.trainingOperateTypeMap['03'] = list.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
}); // 道岔实训
|
||||
});
|
||||
this.$Dictionary.sectionOperation().then(list => {
|
||||
this.trainingOperateTypeMap['04'] = list.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
}); // 区段实训
|
||||
});
|
||||
this.$Dictionary.stationStandOperation().then(list => {
|
||||
this.trainingOperateTypeMap['05'] = list.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
}); // 站台实训
|
||||
});
|
||||
this.$Dictionary.trainPlanOperation().then(list => {
|
||||
this.trainingOperateTypeMap['06'] = list.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
}); // 行车计划实训
|
||||
});
|
||||
this.$Dictionary.trainOperation().then(list => {
|
||||
this.trainingOperateTypeMap['07'] = list.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
}); // 列车实训
|
||||
});
|
||||
|
||||
this.loading = true;
|
||||
putTrainingRulesData(this.formModel).then(response => {
|
||||
self.loading = false;
|
||||
self.$message.success(this.$t('lesson.createOperateSuccess'));
|
||||
self.handleClose();
|
||||
self.$emit('reloadTable');
|
||||
}).catch(error => {
|
||||
self.loading = false;
|
||||
self.$message.error(`${this.$t('error.createOperateRuleFailed')}:${error.message}`);
|
||||
});
|
||||
},
|
||||
handleClose() {
|
||||
this.formModel = {
|
||||
trainingName: '',
|
||||
trainingType: '',
|
||||
operateType: '',
|
||||
skinCode: '',
|
||||
minDuration: '',
|
||||
maxDuration: '',
|
||||
trainingRemark: ''
|
||||
};
|
||||
this.$refs.dataform.resetForm();
|
||||
this.dialogVisible = false;
|
||||
}
|
||||
}
|
||||
},
|
||||
async show(data) {
|
||||
this.loading = false;
|
||||
this.dialogVisible = true;
|
||||
if (data && data.id) {
|
||||
// 获取操作占位列表
|
||||
const res = await getPlaceholderList({ trainingType: data.trainingType, skinCode: data.skinCode });
|
||||
this.placeholderList = res.data;
|
||||
this.formModel = {
|
||||
id: data.id,
|
||||
trainingName: this.repliceName(data.trainingName, this.placeholderList),
|
||||
trainingType: data.trainingType,
|
||||
operateType: data.operateType,
|
||||
productTypes: data.productTypes,
|
||||
skinCode: data.skinCode,
|
||||
minDuration: data.minDuration,
|
||||
maxDuration: data.maxDuration,
|
||||
trainingRemark: this.repliceName(data.trainingRemark, this.placeholderList)
|
||||
};
|
||||
} else {
|
||||
this.formModel = {
|
||||
skinCode: this.$route.query.skinCode
|
||||
};
|
||||
}
|
||||
},
|
||||
repliceName(fieldValue, enumList) {
|
||||
if (enumList && enumList.length > 0) {
|
||||
for (let i = 0; i < enumList.length; i++) {
|
||||
if (fieldValue.includes(`{${enumList[i].id}}`)) {
|
||||
fieldValue = fieldValue.replace(`{${enumList[i].id}}`, `{${enumList[i].name}}`);
|
||||
}
|
||||
}
|
||||
return fieldValue;
|
||||
}
|
||||
},
|
||||
changeList(val) {
|
||||
// 获取操作占位列表
|
||||
getPlaceholderList({ trainingType: val, skinCode: '02' }).then(res => {
|
||||
this.placeholderList = res.data;
|
||||
});
|
||||
},
|
||||
addTrainName(val) {
|
||||
this.formModel.trainingName = `${this.formModel.trainingName}{${val.name}}`;
|
||||
},
|
||||
addTrainRemark(val) {
|
||||
this.formModel.trainingRemark = `${this.formModel.trainingRemark}{${val.name}}`;
|
||||
},
|
||||
doSave() {
|
||||
const self = this;
|
||||
this.$refs.dataform.validateForm(() => {
|
||||
if (self.type === 'ADD') {
|
||||
self.create();
|
||||
} else {
|
||||
self.update();
|
||||
}
|
||||
});
|
||||
},
|
||||
create() {
|
||||
const self = this;
|
||||
this.placeholderList.forEach(item => {
|
||||
if (this.formModel.trainingName.includes(`{${item.name}}`)) {
|
||||
const name = this.formModel.trainingName.replace(`{${item.name}}`, `{${item.id}}`);
|
||||
this.formModel.trainingName = name;
|
||||
}
|
||||
if (this.formModel.trainingRemark.includes(`{${item.name}}`)) {
|
||||
const remark = this.formModel.trainingRemark.replace(`{${item.name}}`, `{${item.id}}`);
|
||||
this.formModel.trainingRemark = remark;
|
||||
}
|
||||
});
|
||||
|
||||
this.loading = true;
|
||||
postTrainingRulesData(this.formModel).then(response => {
|
||||
self.loading = false;
|
||||
self.$message.success(this.$t('lesson.createOperateSuccess'));
|
||||
self.handleClose();
|
||||
self.$emit('reloadTable');
|
||||
}).catch(error => {
|
||||
self.loading = false;
|
||||
self.$message.error(`${this.$t('error.createOperateRuleFailed')}:${error.message}`);
|
||||
});
|
||||
},
|
||||
update() {
|
||||
const self = this;
|
||||
this.placeholderList.forEach(item => {
|
||||
if (this.formModel.trainingName.includes(`{${item.name}}`)) {
|
||||
const name = this.formModel.trainingName.replace(`{${item.name}}`, `{${item.id}}`);
|
||||
this.formModel.trainingName = name;
|
||||
}
|
||||
if (this.formModel.trainingRemark.includes(`{${item.name}}`)) {
|
||||
const remark = this.formModel.trainingRemark.replace(`{${item.name}}`, `{${item.id}}`);
|
||||
this.formModel.trainingRemark = remark;
|
||||
}
|
||||
});
|
||||
|
||||
this.loading = true;
|
||||
putTrainingRulesData(this.formModel).then(response => {
|
||||
self.loading = false;
|
||||
self.$message.success(this.$t('lesson.createOperateSuccess'));
|
||||
self.handleClose();
|
||||
self.$emit('reloadTable');
|
||||
}).catch(error => {
|
||||
self.loading = false;
|
||||
self.$message.error(`${this.$t('error.createOperateRuleFailed')}:${error.message}`);
|
||||
});
|
||||
},
|
||||
handleClose() {
|
||||
this.formModel = {
|
||||
trainingName: '',
|
||||
trainingType: '',
|
||||
operateType: '',
|
||||
skinCode: '',
|
||||
minDuration: '',
|
||||
maxDuration: '',
|
||||
trainingRemark: ''
|
||||
};
|
||||
this.$refs.dataform.resetForm();
|
||||
this.dialogVisible = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
@ -1,20 +1,26 @@
|
||||
<template>
|
||||
<div>
|
||||
<div style="height: 100%; overflow-y: auto;">
|
||||
<!-- <div style="height: calc(100% - 80px); overflow-y: auto;"> -->
|
||||
<QueryListPage ref="queryListPage" :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" />
|
||||
<!-- </div> -->
|
||||
<training-edit ref="create" type="ADD" @reloadTable="reloadTable" />
|
||||
<training-edit ref="edit" type="EDIT" @reloadTable="reloadTable" />
|
||||
<add-batch ref="addBatch" @reloadTable="reloadTable" />
|
||||
<save-as ref="saveAs" @reloadTable="reloadTable" />
|
||||
<div class="draft">
|
||||
<el-button-group>
|
||||
<el-button type="primary" @click="turnback">{{ $t('global.back') }}</el-button>
|
||||
</el-button-group>
|
||||
</div>
|
||||
<div class="draft">
|
||||
<el-button-group>
|
||||
<el-button type="primary" @click="turnback">{{ $t('global.back') }}</el-button>
|
||||
</el-button-group>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getTrainingRulesList, deleteTrainingRulesData, getPlaceholderList } from '@/api/management/operation';
|
||||
import {
|
||||
getTrainingRulesList,
|
||||
deleteTrainingRulesData,
|
||||
getPlaceholderList
|
||||
} from '@/api/management/operation';
|
||||
import { getSkinCodeList } from '@/api/management/mapskin';
|
||||
import TrainingEdit from './addEdit';
|
||||
import AddBatch from './addBatch';
|
||||
@ -22,251 +28,301 @@ import SaveAs from './saveAs.vue';
|
||||
import { UrlConfig } from '@/router/index';
|
||||
|
||||
export default {
|
||||
name: 'TrainingRule',
|
||||
components: {
|
||||
TrainingEdit,
|
||||
AddBatch,
|
||||
name: 'TrainingRule',
|
||||
components: {
|
||||
TrainingEdit,
|
||||
AddBatch,
|
||||
SaveAs
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
placeholderMap: {},
|
||||
trainingOperateTypeMap: {},
|
||||
trainingTypeList: [],
|
||||
skinCodeList: [],
|
||||
totals: '',
|
||||
pagerConfig: {
|
||||
pageSize: 'pageSize',
|
||||
pageIndex: 'pageNum'
|
||||
},
|
||||
queryForm: {
|
||||
labelWidth: '140px',
|
||||
reset: true,
|
||||
queryObject: {
|
||||
trainingType: {
|
||||
type: 'select',
|
||||
label: this.$t('lesson.trainingType'),
|
||||
config: {
|
||||
data: []
|
||||
}
|
||||
},
|
||||
trainingName: {
|
||||
type: 'text',
|
||||
label: this.$t('lesson.trainingName')
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
placeholderMap: {},
|
||||
trainingOperateTypeMap: {},
|
||||
trainingTypeList: [],
|
||||
skinCodeList: [],
|
||||
totals: '',
|
||||
pagerConfig: {
|
||||
pageSize: 'pageSize',
|
||||
pageIndex: 'pageNum'
|
||||
},
|
||||
queryForm: {
|
||||
labelWidth: '140px',
|
||||
reset: true,
|
||||
queryObject: {
|
||||
trainingType: {
|
||||
type: 'select',
|
||||
label: this.$t('lesson.trainingType'),
|
||||
config: {
|
||||
data: []
|
||||
}
|
||||
},
|
||||
trainingName: {
|
||||
type: 'text',
|
||||
label: this.$t('lesson.trainingName')
|
||||
}
|
||||
}
|
||||
},
|
||||
queryList: {
|
||||
query: this.getList,
|
||||
selectCheckShow: false,
|
||||
indexShow: true,
|
||||
columns: [
|
||||
{
|
||||
title: this.$t('lesson.trainingName'),
|
||||
prop: 'trainingName',
|
||||
type: 'replicText',
|
||||
columnValue: row => {
|
||||
return this.repliceName(
|
||||
row.trainingName,
|
||||
this.placeholderMap[row.trainingType]
|
||||
);
|
||||
}
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.skinType'),
|
||||
prop: 'skinCode',
|
||||
type: 'tag',
|
||||
columnValue: row => {
|
||||
return this.$convertField(row.skinCode, this.skinCodeList, [
|
||||
'code',
|
||||
'name'
|
||||
]);
|
||||
},
|
||||
tagType: row => {
|
||||
return '';
|
||||
}
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.trainingType'),
|
||||
prop: 'trainingType',
|
||||
type: 'tag',
|
||||
columnValue: row => {
|
||||
return this.$convertField(
|
||||
row.trainingType,
|
||||
this.trainingTypeList,
|
||||
['code', 'name']
|
||||
);
|
||||
},
|
||||
tagType: row => {
|
||||
return 'success';
|
||||
}
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.operationType'),
|
||||
prop: 'operateType',
|
||||
type: 'tag',
|
||||
columnValue: row => {
|
||||
return this.$convertField(
|
||||
row.operateType,
|
||||
this.trainingOperateTypeMap[row.trainingType],
|
||||
['code', 'name']
|
||||
);
|
||||
},
|
||||
tagType: row => {
|
||||
return 'success';
|
||||
}
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.minDuration'),
|
||||
prop: 'minDuration'
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.maxDuration'),
|
||||
prop: 'maxDuration'
|
||||
},
|
||||
|
||||
},
|
||||
queryList: {
|
||||
query: this.getList,
|
||||
selectCheckShow: false,
|
||||
indexShow: true,
|
||||
columns: [
|
||||
{
|
||||
title: this.$t('lesson.trainingName'),
|
||||
prop: 'trainingName',
|
||||
type: 'replicText',
|
||||
columnValue: (row) => { return this.repliceName(row.trainingName, this.placeholderMap[row.trainingType]); }
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.skinType'),
|
||||
prop: 'skinCode',
|
||||
type: 'tag',
|
||||
columnValue: (row) => { return this.$convertField(row.skinCode, this.skinCodeList, ['code', 'name']); },
|
||||
tagType: (row) => { return ''; }
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.trainingType'),
|
||||
prop: 'trainingType',
|
||||
type: 'tag',
|
||||
columnValue: (row) => { return this.$convertField(row.trainingType, this.trainingTypeList, ['code', 'name']); },
|
||||
tagType: (row) => { return 'success'; }
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.operationType'),
|
||||
prop: 'operateType',
|
||||
type: 'tag',
|
||||
columnValue: (row) => { return this.$convertField(row.operateType, this.trainingOperateTypeMap[row.trainingType], ['code', 'name']); },
|
||||
tagType: (row) => { return 'success'; }
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.minDuration'),
|
||||
prop: 'minDuration'
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.maxDuration'),
|
||||
prop: 'maxDuration'
|
||||
},
|
||||
|
||||
{
|
||||
title: this.$t('lesson.trainingRemark'),
|
||||
prop: 'trainingRemark',
|
||||
type: 'replicText',
|
||||
columnValue: (row) => { return this.repliceName(row.trainingRemark, this.placeholderMap[row.trainingType]); }
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
title: this.$t('global.operate'),
|
||||
width: '250',
|
||||
buttons: [
|
||||
{
|
||||
name: this.$t('lesson.stepDetail'),
|
||||
handleClick: this.handleViewDetail
|
||||
},
|
||||
{
|
||||
name: this.$t('global.edit'),
|
||||
handleClick: this.handleEdit
|
||||
},
|
||||
{
|
||||
name: this.$t('global.delete'),
|
||||
handleClick: this.handleDelete,
|
||||
type: 'danger'
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
actions: [
|
||||
{ text: this.$t('global.add'), handler: this.handleAdd },
|
||||
{
|
||||
title: this.$t('lesson.trainingRemark'),
|
||||
prop: 'trainingRemark',
|
||||
type: 'replicText',
|
||||
columnValue: row => {
|
||||
return this.repliceName(
|
||||
row.trainingRemark,
|
||||
this.placeholderMap[row.trainingType]
|
||||
);
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
title: this.$t('global.operate'),
|
||||
width: '250',
|
||||
buttons: [
|
||||
{
|
||||
name: this.$t('lesson.stepDetail'),
|
||||
handleClick: this.handleViewDetail
|
||||
},
|
||||
{
|
||||
name: this.$t('global.edit'),
|
||||
handleClick: this.handleEdit
|
||||
},
|
||||
{
|
||||
name: this.$t('global.delete'),
|
||||
handleClick: this.handleDelete,
|
||||
type: 'danger'
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
actions: [
|
||||
{ text: this.$t('global.add'), handler: this.handleAdd },
|
||||
{ text: this.$t('lesson.generation'), handler: this.handleBatchAdd },
|
||||
{ text: this.$t('lesson.saveAs'), handler: this.handleSaveAs }
|
||||
]
|
||||
},
|
||||
currentModel: {}
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.init();
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
this.trainingOperateTypeMap = {};
|
||||
this.$Dictionary.stationControl().then(list => {
|
||||
this.trainingOperateTypeMap['01'] = list; // 控制权实训
|
||||
});
|
||||
this.$Dictionary.signalOperation().then(list => {
|
||||
this.trainingOperateTypeMap['02'] = list; // 信号机实训
|
||||
});
|
||||
this.$Dictionary.switchOperation().then(list => {
|
||||
this.trainingOperateTypeMap['03'] = list; // 道岔实训
|
||||
});
|
||||
this.$Dictionary.sectionOperation().then(list => {
|
||||
this.trainingOperateTypeMap['04'] = list; // 区段实训
|
||||
});
|
||||
this.$Dictionary.stationStandOperation().then(list => {
|
||||
this.trainingOperateTypeMap['05'] = list; // 站台实训
|
||||
});
|
||||
this.$Dictionary.trainPlanOperation().then(list => {
|
||||
this.trainingOperateTypeMap['06'] = list; // 行车计划实训
|
||||
});
|
||||
this.$Dictionary.trainOperation().then(list => {
|
||||
this.trainingOperateTypeMap['07'] = list; // 列车实训
|
||||
});
|
||||
this.$Dictionary.limitOperation().then(list => {
|
||||
this.trainingOperateTypeMap['08'] = list; // 限速实训
|
||||
});
|
||||
this.placeholderMap = {};
|
||||
getPlaceholderList({ skinCode: '', trainingType: '' }).then(res => {
|
||||
res.data.forEach(item => {
|
||||
if (!this.placeholderMap[item.trainingType]) {
|
||||
this.placeholderMap[item.trainingType] = [];
|
||||
}
|
||||
this.placeholderMap[item.trainingType].push(item);
|
||||
});
|
||||
});
|
||||
]
|
||||
},
|
||||
currentModel: {}
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.init();
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
this.trainingOperateTypeMap = {};
|
||||
this.$Dictionary.stationControl().then(list => {
|
||||
this.trainingOperateTypeMap['01'] = list; // 控制权实训
|
||||
});
|
||||
this.$Dictionary.signalOperation().then(list => {
|
||||
this.trainingOperateTypeMap['02'] = list; // 信号机实训
|
||||
});
|
||||
this.$Dictionary.switchOperation().then(list => {
|
||||
this.trainingOperateTypeMap['03'] = list; // 道岔实训
|
||||
});
|
||||
this.$Dictionary.sectionOperation().then(list => {
|
||||
this.trainingOperateTypeMap['04'] = list; // 区段实训
|
||||
});
|
||||
this.$Dictionary.stationStandOperation().then(list => {
|
||||
this.trainingOperateTypeMap['05'] = list; // 站台实训
|
||||
});
|
||||
this.$Dictionary.trainPlanOperation().then(list => {
|
||||
this.trainingOperateTypeMap['06'] = list; // 行车计划实训
|
||||
});
|
||||
this.$Dictionary.trainOperation().then(list => {
|
||||
this.trainingOperateTypeMap['07'] = list; // 列车实训
|
||||
});
|
||||
this.$Dictionary.limitOperation().then(list => {
|
||||
this.trainingOperateTypeMap['08'] = list; // 限速实训
|
||||
});
|
||||
this.placeholderMap = {};
|
||||
getPlaceholderList({ skinCode: '', trainingType: '' }).then(res => {
|
||||
res.data.forEach(item => {
|
||||
if (!this.placeholderMap[item.trainingType]) {
|
||||
this.placeholderMap[item.trainingType] = [];
|
||||
}
|
||||
this.placeholderMap[item.trainingType].push(item);
|
||||
});
|
||||
});
|
||||
|
||||
// 获取皮肤列表
|
||||
this.skinCodeList = [];
|
||||
getSkinCodeList().then(response => {
|
||||
this.skinCodeList = response.data;
|
||||
});
|
||||
// 获取皮肤列表
|
||||
this.skinCodeList = [];
|
||||
getSkinCodeList().then(response => {
|
||||
this.skinCodeList = response.data;
|
||||
});
|
||||
|
||||
// 获取实训类型
|
||||
this.trainingTypeList = [];
|
||||
this.$Dictionary.trainingType().then(list => {
|
||||
this.trainingTypeList = list;
|
||||
list.forEach(elem => {
|
||||
this.queryForm.queryObject.trainingType.config.data.push({ value: elem.code, label: elem.name });
|
||||
});
|
||||
});
|
||||
// 获取实训类型
|
||||
this.trainingTypeList = [];
|
||||
this.$Dictionary.trainingType().then(list => {
|
||||
this.trainingTypeList = list;
|
||||
list.forEach(elem => {
|
||||
this.queryForm.queryObject.trainingType.config.data.push({
|
||||
value: elem.code,
|
||||
label: elem.name
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
this.reloadTable();
|
||||
},
|
||||
repliceName(fieldValue, enumList) {
|
||||
if (enumList && enumList.length > 0) {
|
||||
for (let i = 0; i < enumList.length; i++) {
|
||||
if (fieldValue.includes(`{${enumList[i].id}}`)) {
|
||||
fieldValue = fieldValue.replace(`{${enumList[i].id}}`, `{${enumList[i].name}}`);
|
||||
}
|
||||
}
|
||||
return fieldValue;
|
||||
} else if (!enumList) {
|
||||
return fieldValue;
|
||||
}
|
||||
},
|
||||
// 选择实训类型下的操作类型 暂时不用
|
||||
typeChoose(form) {
|
||||
this.queryForm.queryObject.operateType.config.data = [];
|
||||
if (form && form.trainingType) {
|
||||
form.operateType = '';
|
||||
this.trainingOperateTypeMap[form.trainingType].forEach(elem => {
|
||||
this.queryForm.queryObject.operateType.config.data.push({ value: elem.code, label: elem.name });
|
||||
});
|
||||
}
|
||||
},
|
||||
async getList(params) {
|
||||
this.reloadTable();
|
||||
},
|
||||
repliceName(fieldValue, enumList) {
|
||||
if (enumList && enumList.length > 0) {
|
||||
for (let i = 0; i < enumList.length; i++) {
|
||||
if (fieldValue.includes(`{${enumList[i].id}}`)) {
|
||||
fieldValue = fieldValue.replace(
|
||||
`{${enumList[i].id}}`,
|
||||
`{${enumList[i].name}}`
|
||||
);
|
||||
}
|
||||
}
|
||||
return fieldValue;
|
||||
} else if (!enumList) {
|
||||
return fieldValue;
|
||||
}
|
||||
},
|
||||
// 选择实训类型下的操作类型 暂时不用
|
||||
typeChoose(form) {
|
||||
this.queryForm.queryObject.operateType.config.data = [];
|
||||
if (form && form.trainingType) {
|
||||
form.operateType = '';
|
||||
this.trainingOperateTypeMap[form.trainingType].forEach(elem => {
|
||||
this.queryForm.queryObject.operateType.config.data.push({
|
||||
value: elem.code,
|
||||
label: elem.name
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
async getList(params) {
|
||||
params['mapId'] = this.$route.query.mapId;
|
||||
const res = await getTrainingRulesList(params);
|
||||
this.totals = res.data.total;
|
||||
return res;
|
||||
},
|
||||
handleViewDetail(index, row) {
|
||||
this.$router.push({ path: `${UrlConfig.design.trainingRuleDetail}`, query: { id: row.id, type: row.trainingType, skinCode: row.skinCode } });
|
||||
},
|
||||
const res = await getTrainingRulesList(params);
|
||||
this.totals = res.data.total;
|
||||
return res;
|
||||
},
|
||||
handleViewDetail(index, row) {
|
||||
this.$router.push({
|
||||
path: `${UrlConfig.design.trainingRuleDetail}`,
|
||||
query: { id: row.id, type: row.trainingType, skinCode: row.skinCode }
|
||||
});
|
||||
},
|
||||
|
||||
handleEdit(index, row) {
|
||||
this.$refs.edit.show(row);
|
||||
},
|
||||
handleEdit(index, row) {
|
||||
this.$refs.edit.show(row);
|
||||
},
|
||||
|
||||
handleAdd() {
|
||||
this.$refs.create.show();
|
||||
},
|
||||
handleAdd() {
|
||||
this.$refs.create.show();
|
||||
},
|
||||
|
||||
handleBatchAdd() {
|
||||
this.$refs.addBatch.show(this.totals);
|
||||
},
|
||||
handleBatchAdd() {
|
||||
this.$refs.addBatch.show(this.totals);
|
||||
},
|
||||
|
||||
handleSaveAs() {
|
||||
this.$refs.saveAs.show();
|
||||
},
|
||||
|
||||
handleDelete(index, row) {
|
||||
this.$confirm(this.$t('lesson.wellDelTrainingRule'), this.$t('global.tips'), {
|
||||
confirmButtonText: this.$t('global.confirm'),
|
||||
cancelButtonText: this.$t('global.cancel'),
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
deleteTrainingRulesData(row.id).then(response => {
|
||||
this.$message.success(this.$t('lesson.deleteSuccess'));
|
||||
this.reloadTable();
|
||||
}).catch(() => {
|
||||
this.reloadTable();
|
||||
this.$messageBox(this.$t('error.deleteFailed'));
|
||||
});
|
||||
});
|
||||
},
|
||||
turnback() {
|
||||
this.$router.go(-1)
|
||||
this.$confirm(
|
||||
this.$t('lesson.wellDelTrainingRule'),
|
||||
this.$t('global.tips'),
|
||||
{
|
||||
confirmButtonText: this.$t('global.confirm'),
|
||||
cancelButtonText: this.$t('global.cancel'),
|
||||
type: 'warning'
|
||||
}
|
||||
).then(() => {
|
||||
deleteTrainingRulesData(row.id)
|
||||
.then(response => {
|
||||
this.$message.success(this.$t('lesson.deleteSuccess'));
|
||||
this.reloadTable();
|
||||
})
|
||||
.catch(() => {
|
||||
this.reloadTable();
|
||||
this.$messageBox(this.$t('error.deleteFailed'));
|
||||
});
|
||||
});
|
||||
},
|
||||
reloadTable() {
|
||||
this.queryList.reload();
|
||||
}
|
||||
}
|
||||
turnback() {
|
||||
this.$router.go(-1);
|
||||
},
|
||||
reloadTable() {
|
||||
this.queryList.reload();
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||
.draft {
|
||||
width: 400px;
|
||||
text-align: center;
|
||||
margin: 20px auto;
|
||||
}
|
||||
.draft {
|
||||
width: 400px;
|
||||
text-align: center;
|
||||
margin: 20px auto;
|
||||
}
|
||||
</style>
|
||||
|
@ -1,5 +1,12 @@
|
||||
<template>
|
||||
<el-dialog v-dialogDrag :title="title" :visible.sync="dialogVisible" width="25%" :before-close="handleClose" center>
|
||||
<el-dialog
|
||||
v-dialogDrag
|
||||
:title="title"
|
||||
:visible.sync="dialogVisible"
|
||||
width="25%"
|
||||
:before-close="handleClose"
|
||||
center
|
||||
>
|
||||
<data-form ref="dataform" :form="form" :form-model="formModel" :rules="rules" />
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button v-loading="loading" type="primary" @click="doSave">{{ $t('global.confirm') }}</el-button>
|
||||
@ -13,94 +20,118 @@ import { postOperateSaveAs } from '@/api/management/operation';
|
||||
import { getSkinCodeList } from '@/api/management/mapskin';
|
||||
|
||||
export default {
|
||||
name: 'AddBatch',
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
dialogVisible: false,
|
||||
formModel: {
|
||||
skinCodeFrom: '',
|
||||
skinCodeTo: ''
|
||||
},
|
||||
skinCodeList: []
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
form() {
|
||||
this.type === 'ADD';
|
||||
const form = {
|
||||
labelWidth: '120px',
|
||||
items: [
|
||||
{ prop: 'skinCodeFrom', label: this.$t('lesson.skinTypeFrom'), type: 'select', required: true, options: this.skinCodeList },
|
||||
{ prop: 'skinCodeTo', label: this.$t('lesson.skinTypeTo'), type: 'select', required: true, options: this.skinCodeList }
|
||||
]
|
||||
};
|
||||
return form;
|
||||
},
|
||||
rules() {
|
||||
const crules = {
|
||||
skinCodeFrom: [
|
||||
{ required: true, message: this.$t('rules.inputSkinType'), trigger: 'change' }
|
||||
],
|
||||
skinCodeTo: [
|
||||
{ required: true, message: this.$t('rules.inputSkinType'), trigger: 'change' }
|
||||
]
|
||||
};
|
||||
return crules;
|
||||
},
|
||||
title() {
|
||||
return this.$t('lesson.copyLesson');
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.init();
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
// 获取皮肤列表
|
||||
this.skinCodeList = [];
|
||||
getSkinCodeList().then(response => {
|
||||
this.skinCodeList = response.data.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
});
|
||||
});
|
||||
},
|
||||
show() {
|
||||
this.dialogVisible = true;
|
||||
},
|
||||
doSave() {
|
||||
const self = this;
|
||||
this.$refs.dataform.validateForm(() => {
|
||||
if (this.formModel.skinCodeFrom != this.formModel.skinCodeTo) {
|
||||
self.create();
|
||||
} else {
|
||||
this.$alert(this.$t('lesson.countSkinCode'), this.$t('global.tips'), {
|
||||
confirmButtonText: this.$t('global.confirm'),
|
||||
callback: () => { }
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
create() {
|
||||
const self = this;
|
||||
this.loading = true;
|
||||
postOperateSaveAs(this.formModel.skinCodeFrom, this.formModel.skinCodeTo).then(response => {
|
||||
self.loading = false;
|
||||
self.$message.success(this.$t('lesson.batchCreateSuccess'));
|
||||
self.handleClose();
|
||||
self.$emit('reloadTable'); // 刷新列表
|
||||
}).catch(error => {
|
||||
self.loading = false;
|
||||
self.$message.error(`${this.$('error.batchCreateFailed')}:${error.message}`);
|
||||
});
|
||||
},
|
||||
handleClose() {
|
||||
this.$refs.dataform.resetForm();
|
||||
this.dialogVisible = false;
|
||||
}
|
||||
}
|
||||
name: 'AddBatch',
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
dialogVisible: false,
|
||||
formModel: {
|
||||
skinCodeFrom: '',
|
||||
skinCodeTo: ''
|
||||
},
|
||||
skinCodeList: []
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
form() {
|
||||
this.type === 'ADD';
|
||||
const form = {
|
||||
labelWidth: '120px',
|
||||
items: [
|
||||
{
|
||||
prop: 'skinCodeFrom',
|
||||
label: this.$t('lesson.skinTypeFrom'),
|
||||
type: 'select',
|
||||
required: true,
|
||||
options: this.skinCodeList
|
||||
},
|
||||
{
|
||||
prop: 'skinCodeTo',
|
||||
label: this.$t('lesson.skinTypeTo'),
|
||||
type: 'select',
|
||||
required: true,
|
||||
options: this.skinCodeList
|
||||
}
|
||||
]
|
||||
};
|
||||
return form;
|
||||
},
|
||||
rules() {
|
||||
const crules = {
|
||||
skinCodeFrom: [
|
||||
{
|
||||
required: true,
|
||||
message: this.$t('rules.inputSkinType'),
|
||||
trigger: 'change'
|
||||
}
|
||||
],
|
||||
skinCodeTo: [
|
||||
{
|
||||
required: true,
|
||||
message: this.$t('rules.inputSkinType'),
|
||||
trigger: 'change'
|
||||
}
|
||||
]
|
||||
};
|
||||
return crules;
|
||||
},
|
||||
title() {
|
||||
return this.$t('lesson.copyLesson');
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.init();
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
// 获取皮肤列表
|
||||
this.skinCodeList = [];
|
||||
getSkinCodeList().then(response => {
|
||||
this.skinCodeList = response.data.map(item => {
|
||||
const params = {};
|
||||
params.label = item.name;
|
||||
params.value = item.code;
|
||||
return params;
|
||||
});
|
||||
});
|
||||
},
|
||||
show() {
|
||||
this.dialogVisible = true;
|
||||
},
|
||||
doSave() {
|
||||
const self = this;
|
||||
this.$refs.dataform.validateForm(() => {
|
||||
if (this.formModel.skinCodeFrom != this.formModel.skinCodeTo) {
|
||||
self.create();
|
||||
} else {
|
||||
this.$alert(this.$t('lesson.countSkinCode'), this.$t('global.tips'), {
|
||||
confirmButtonText: this.$t('global.confirm'),
|
||||
callback: () => {}
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
create() {
|
||||
const self = this;
|
||||
this.loading = true;
|
||||
postOperateSaveAs(this.formModel.skinCodeFrom, this.formModel.skinCodeTo)
|
||||
.then(response => {
|
||||
self.loading = false;
|
||||
self.$message.success(this.$t('lesson.batchCreateSuccess'));
|
||||
self.handleClose();
|
||||
self.$emit('reloadTable'); // 刷新列表
|
||||
})
|
||||
.catch(error => {
|
||||
self.loading = false;
|
||||
self.$message.error(
|
||||
`${this.$('error.batchCreateFailed')}:${error.message}`
|
||||
);
|
||||
});
|
||||
},
|
||||
handleClose() {
|
||||
this.$refs.dataform.resetForm();
|
||||
this.dialogVisible = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
@ -1,6 +1,8 @@
|
||||
<template>
|
||||
<div>
|
||||
<div style="height: 100%; overflow-y: auto;">
|
||||
<!-- <div style="height: calc(100% - 80px); overflow-y: auto;"> -->
|
||||
<QueryListPage ref="queryListPage" :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" />
|
||||
<!-- </div> -->
|
||||
<training-draft
|
||||
ref="draftTrain"
|
||||
:skin-code-list="skinCodeList"
|
||||
@ -27,253 +29,253 @@ import TrainingDraft from './draft';
|
||||
import localStore from 'storejs';
|
||||
|
||||
export default {
|
||||
name: 'TrainingGeneration',
|
||||
components: {
|
||||
TrainingDraft
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
skinCodeList: [],
|
||||
trainingTypeList: [],
|
||||
prdTypeList: [],
|
||||
trainingOperateTypeMap: {},
|
||||
pagerConfig: {
|
||||
pageSize: 'pageSize',
|
||||
pageIndex: 'pageNum'
|
||||
},
|
||||
queryForm: {
|
||||
labelWidth: '120px',
|
||||
queryObject: {
|
||||
prdCode: {
|
||||
type: 'select',
|
||||
label: this.$t('lesson.product'),
|
||||
change: this.prdChoose,
|
||||
config: {
|
||||
data: []
|
||||
}
|
||||
},
|
||||
type: {
|
||||
type: 'select',
|
||||
label: this.$t('lesson.trainingType'),
|
||||
change: this.typeChoose,
|
||||
config: {
|
||||
data: []
|
||||
}
|
||||
},
|
||||
operateType: {
|
||||
type: 'select',
|
||||
label: this.$t('lesson.operationType'),
|
||||
config: {
|
||||
data: []
|
||||
}
|
||||
},
|
||||
/* generateType: {
|
||||
name: 'TrainingGeneration',
|
||||
components: {
|
||||
TrainingDraft
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
skinCodeList: [],
|
||||
trainingTypeList: [],
|
||||
prdTypeList: [],
|
||||
trainingOperateTypeMap: {},
|
||||
pagerConfig: {
|
||||
pageSize: 'pageSize',
|
||||
pageIndex: 'pageNum'
|
||||
},
|
||||
queryForm: {
|
||||
labelWidth: '120px',
|
||||
queryObject: {
|
||||
prdCode: {
|
||||
type: 'select',
|
||||
label: this.$t('lesson.product'),
|
||||
change: this.prdChoose,
|
||||
config: {
|
||||
data: []
|
||||
}
|
||||
},
|
||||
type: {
|
||||
type: 'select',
|
||||
label: this.$t('lesson.trainingType'),
|
||||
change: this.typeChoose,
|
||||
config: {
|
||||
data: []
|
||||
}
|
||||
},
|
||||
operateType: {
|
||||
type: 'select',
|
||||
label: this.$t('lesson.operationType'),
|
||||
config: {
|
||||
data: []
|
||||
}
|
||||
},
|
||||
/* generateType: {
|
||||
type: 'select',
|
||||
label: this.$t('lesson.automaticOrManual'),
|
||||
config: {
|
||||
data: [{ value: '02', label: this.$t('lesson.manual') }, { value: '01', label: this.$t('lesson.automatic') }]
|
||||
}
|
||||
},*/
|
||||
name: {
|
||||
type: 'text',
|
||||
label: this.$t('lesson.trainingName')
|
||||
}
|
||||
}
|
||||
},
|
||||
queryList: {
|
||||
query: this.queryFunction,
|
||||
selectCheckShow: false,
|
||||
indexShow: true,
|
||||
columns: [
|
||||
{
|
||||
title: this.$t('lesson.trainingName'),
|
||||
prop: 'name'
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.skinType'),
|
||||
prop: 'skinCode',
|
||||
type: 'tag',
|
||||
columnValue: (row) => { return this.$convertField(row.skinCode, this.skinCodeList, ['code', 'name']); },
|
||||
tagType: (row) => { return ''; }
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.product'),
|
||||
prop: 'prdCode',
|
||||
type: 'tag',
|
||||
columnValue: (row) => { return this.$convertField(row.prdCode, this.prdTypeList, ['code', 'name']); },
|
||||
tagType: (row) => { return 'success'; }
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.trainingType'),
|
||||
prop: 'type',
|
||||
type: 'tag',
|
||||
columnValue: (row) => { return this.$convertField(row.type, this.trainingTypeList, ['code', 'name']); },
|
||||
tagType: (row) => { return 'success'; }
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.operationType'),
|
||||
prop: 'operateType',
|
||||
type: 'tag',
|
||||
columnValue: (row) => { return this.$convertField(row.operateType, this.trainingOperateTypeMap[row.type], ['code', 'name']); },
|
||||
tagType: (row) => { return 'success'; }
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.minDuration'),
|
||||
prop: 'minDuration'
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.maxDuration'),
|
||||
prop: 'maxDuration'
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.remarks'),
|
||||
prop: 'remarks'
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
title: this.$t('global.operate'),
|
||||
width: '250',
|
||||
buttons: [
|
||||
{
|
||||
name: this.$t('lesson.demonstration'),
|
||||
handleClick: this.demoDisplay,
|
||||
type: ''
|
||||
}
|
||||
/* {
|
||||
name: {
|
||||
type: 'text',
|
||||
label: this.$t('lesson.trainingName')
|
||||
}
|
||||
}
|
||||
},
|
||||
queryList: {
|
||||
query: this.queryFunction,
|
||||
selectCheckShow: false,
|
||||
indexShow: true,
|
||||
columns: [
|
||||
{
|
||||
title: this.$t('lesson.trainingName'),
|
||||
prop: 'name'
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.skinType'),
|
||||
prop: 'skinCode',
|
||||
type: 'tag',
|
||||
columnValue: (row) => { return this.$convertField(row.skinCode, this.skinCodeList, ['code', 'name']); },
|
||||
tagType: (row) => { return ''; }
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.product'),
|
||||
prop: 'prdCode',
|
||||
type: 'tag',
|
||||
columnValue: (row) => { return this.$convertField(row.prdCode, this.prdTypeList, ['code', 'name']); },
|
||||
tagType: (row) => { return 'success'; }
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.trainingType'),
|
||||
prop: 'type',
|
||||
type: 'tag',
|
||||
columnValue: (row) => { return this.$convertField(row.type, this.trainingTypeList, ['code', 'name']); },
|
||||
tagType: (row) => { return 'success'; }
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.operationType'),
|
||||
prop: 'operateType',
|
||||
type: 'tag',
|
||||
columnValue: (row) => { return this.$convertField(row.operateType, this.trainingOperateTypeMap[row.type], ['code', 'name']); },
|
||||
tagType: (row) => { return 'success'; }
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.minDuration'),
|
||||
prop: 'minDuration'
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.maxDuration'),
|
||||
prop: 'maxDuration'
|
||||
},
|
||||
{
|
||||
title: this.$t('lesson.remarks'),
|
||||
prop: 'remarks'
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
title: this.$t('global.operate'),
|
||||
width: '250',
|
||||
buttons: [
|
||||
{
|
||||
name: this.$t('lesson.demonstration'),
|
||||
handleClick: this.demoDisplay,
|
||||
type: ''
|
||||
}
|
||||
/* {
|
||||
name: this.$t('lesson.trainingRecord'),
|
||||
handleClick: this.trainingRecord,
|
||||
type: ''
|
||||
}*/
|
||||
]
|
||||
}
|
||||
],
|
||||
actions: [
|
||||
{ text: this.$t('lesson.generateTraining'), btnCode: 'employee_auto', handler: this.autoMaticTrainging },
|
||||
{ text: this.$t('lesson.updateTraining'), btnCode: 'employee_edit', handler: this.editTrainingByType, type: 'warning'},
|
||||
{ text: this.$t('lesson.deleteTraining'), btnCode: 'employee_delete', handler: this.delAutoMaticTrainging, type: 'danger'}
|
||||
/* { text: this.$t('lesson.addTraining'), btnCode: 'employee_add', handler: this.addingTraining, type: 'primary' }*/
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
],
|
||||
actions: [
|
||||
{ text: this.$t('lesson.generateTraining'), btnCode: 'employee_auto', handler: this.autoMaticTrainging },
|
||||
{ text: this.$t('lesson.updateTraining'), btnCode: 'employee_edit', handler: this.editTrainingByType, type: 'warning'},
|
||||
{ text: this.$t('lesson.deleteTraining'), btnCode: 'employee_delete', handler: this.delAutoMaticTrainging, type: 'danger'}
|
||||
/* { text: this.$t('lesson.addTraining'), btnCode: 'employee_add', handler: this.addingTraining, type: 'primary' }*/
|
||||
]
|
||||
},
|
||||
|
||||
currentModel: {}
|
||||
};
|
||||
},
|
||||
async created() {
|
||||
await this.loadInitData();
|
||||
const json = localStore.get(this.$route.path);
|
||||
json.type = '';
|
||||
json.prdCode = '';
|
||||
json.operateType = '';
|
||||
},
|
||||
methods: {
|
||||
async loadInitData() {
|
||||
this.skinCodeList = [];
|
||||
this.queryForm.queryObject.prdCode.config.data = [];
|
||||
getSkinCodeList().then(response => {
|
||||
this.skinCodeList = response.data;
|
||||
});
|
||||
getCommodityMapProduct(this.$route.params.skinCode).then((response) => {
|
||||
const productList = response.data;
|
||||
if (productList && productList.length > 0) {
|
||||
productList.forEach(elem => {
|
||||
// 过滤综合演练产品
|
||||
if (elem.prdType != '03') {
|
||||
this.queryForm.queryObject.prdCode.config.data.push({ value: elem.code, label: elem.name });
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
currentModel: {}
|
||||
};
|
||||
},
|
||||
async created() {
|
||||
await this.loadInitData();
|
||||
const json = localStore.get(this.$route.path);
|
||||
json.type = '';
|
||||
json.prdCode = '';
|
||||
json.operateType = '';
|
||||
},
|
||||
methods: {
|
||||
async loadInitData() {
|
||||
this.skinCodeList = [];
|
||||
this.queryForm.queryObject.prdCode.config.data = [];
|
||||
getSkinCodeList().then(response => {
|
||||
this.skinCodeList = response.data;
|
||||
});
|
||||
getCommodityMapProduct(this.$route.params.skinCode).then((response) => {
|
||||
const productList = response.data;
|
||||
if (productList && productList.length > 0) {
|
||||
productList.forEach(elem => {
|
||||
// 过滤综合演练产品
|
||||
if (elem.prdType != '03') {
|
||||
this.queryForm.queryObject.prdCode.config.data.push({ value: elem.code, label: elem.name });
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
this.prdTypeList = [];
|
||||
getProductList({ pageSize: 500, pageNum: 1 }).then(res => {
|
||||
const list = res.data.list;
|
||||
if (list && list.length > 0) {
|
||||
this.prdTypeList = list.filter(elem => { return elem.prdType != '03'; });
|
||||
}
|
||||
});
|
||||
this.prdTypeList = [];
|
||||
getProductList({ pageSize: 500, pageNum: 1 }).then(res => {
|
||||
const list = res.data.list;
|
||||
if (list && list.length > 0) {
|
||||
this.prdTypeList = list.filter(elem => { return elem.prdType != '03'; });
|
||||
}
|
||||
});
|
||||
|
||||
// 获取实训类型
|
||||
this.trainingTypeList = [];
|
||||
this.$Dictionary.trainingType().then(list => {
|
||||
this.trainingTypeList = list;
|
||||
list.forEach(elem => {
|
||||
this.queryForm.queryObject.type.config.data.push({ value: elem.code, label: elem.name });
|
||||
});
|
||||
});
|
||||
// 获取实训类型
|
||||
this.trainingTypeList = [];
|
||||
this.$Dictionary.trainingType().then(list => {
|
||||
this.trainingTypeList = list;
|
||||
list.forEach(elem => {
|
||||
this.queryForm.queryObject.type.config.data.push({ value: elem.code, label: elem.name });
|
||||
});
|
||||
});
|
||||
|
||||
this.trainingOperateTypeMap = {};
|
||||
const list01 = await this.$Dictionary.stationControl();
|
||||
this.trainingOperateTypeMap['01'] = list01; // 控制权实训
|
||||
const list02 = await this.$Dictionary.signalOperation();
|
||||
this.trainingOperateTypeMap['02'] = list02; // 信号机实训
|
||||
const list03 = await this.$Dictionary.switchOperation();
|
||||
this.trainingOperateTypeMap['03'] = list03; // 道岔实训
|
||||
const list04 = await this.$Dictionary.sectionOperation();
|
||||
this.trainingOperateTypeMap['04'] = list04; // 区段实训
|
||||
const list05 = await this.$Dictionary.stationStandOperation();
|
||||
this.trainingOperateTypeMap['05'] = list05; // 站台实训
|
||||
const list06 = await this.$Dictionary.trainPlanOperation();
|
||||
this.trainingOperateTypeMap['06'] = list06; // 行车计划实训
|
||||
const list07 = await this.$Dictionary.trainOperation();
|
||||
this.trainingOperateTypeMap['07'] = list07; // 列车实训
|
||||
const list08 = await this.$Dictionary.limitOperation();
|
||||
this.trainingOperateTypeMap['08'] = list08; // 限速实训
|
||||
this.reloadTable();
|
||||
},
|
||||
prdChoose(form) {
|
||||
form.type = '';
|
||||
form.operateType = '';
|
||||
},
|
||||
typeChoose(form) {
|
||||
this.queryForm.queryObject.operateType.config.data = [];
|
||||
form.operateType = '';
|
||||
if (form && form.type) {
|
||||
this.trainingOperateTypeMap[form.type].forEach(elem => {
|
||||
this.queryForm.queryObject.operateType.config.data.push({ value: elem.code, label: elem.name });
|
||||
});
|
||||
}
|
||||
},
|
||||
autoMaticTrainging() {
|
||||
this.$refs.draftTrain.show({ event: '01', title: this.$t('lesson.automaticGenerationOfTraining') });
|
||||
},
|
||||
editTrainingByType() {
|
||||
this.$refs.draftTrain.show({ event: '02', title: this.$t('lesson.modifyTrainingByCategory') });
|
||||
},
|
||||
delAutoMaticTrainging() {
|
||||
this.$refs.draftTrain.show({ event: '03', title: this.$t('lesson.deleteAutoGeneratedTraining') });
|
||||
},
|
||||
// addingTraining() {
|
||||
// this.$refs.draftTrain.show({ event: '04', title: this.$t('lesson.addTraining') });
|
||||
// },
|
||||
demoDisplay(index, node) {
|
||||
trainingNotify({ trainingId: node.id }).then(resp => {
|
||||
/** 区分演示和正式,需要在演示时设置lessonId为0*/
|
||||
const query = { group: resp.data, trainingId: node.id, lessonId: 0 };
|
||||
this.$router.push({ path: `${UrlConfig.display}/manage`, query: query });
|
||||
launchFullscreen();
|
||||
}).catch(error => {
|
||||
this.$messageBox(this.$t('error.createSimulationFailed') +error.message);
|
||||
});
|
||||
},
|
||||
reloadTable() {
|
||||
this.queryList.reload();
|
||||
},
|
||||
turnback() {
|
||||
this.$router.go(-1);
|
||||
},
|
||||
trainingRecord(index, node) {
|
||||
trainingNotify({ trainingId: node.id }).then(resp => {
|
||||
this.group = resp.data;
|
||||
this.$router.push({ path: `${UrlConfig.design.trainingRecord}/${node.id}/${node.name}`, query: { group: resp.data } });
|
||||
}).catch(error => {
|
||||
this.$messageBox(`${this.$t('error.createSimulationFailed')}: ${error.message}`);
|
||||
});
|
||||
},
|
||||
queryFunction(params) {
|
||||
params['mapId'] = this.$route.query.mapId;
|
||||
return pageQueryTraining(params);
|
||||
}
|
||||
}
|
||||
this.trainingOperateTypeMap = {};
|
||||
const list01 = await this.$Dictionary.stationControl();
|
||||
this.trainingOperateTypeMap['01'] = list01; // 控制权实训
|
||||
const list02 = await this.$Dictionary.signalOperation();
|
||||
this.trainingOperateTypeMap['02'] = list02; // 信号机实训
|
||||
const list03 = await this.$Dictionary.switchOperation();
|
||||
this.trainingOperateTypeMap['03'] = list03; // 道岔实训
|
||||
const list04 = await this.$Dictionary.sectionOperation();
|
||||
this.trainingOperateTypeMap['04'] = list04; // 区段实训
|
||||
const list05 = await this.$Dictionary.stationStandOperation();
|
||||
this.trainingOperateTypeMap['05'] = list05; // 站台实训
|
||||
const list06 = await this.$Dictionary.trainPlanOperation();
|
||||
this.trainingOperateTypeMap['06'] = list06; // 行车计划实训
|
||||
const list07 = await this.$Dictionary.trainOperation();
|
||||
this.trainingOperateTypeMap['07'] = list07; // 列车实训
|
||||
const list08 = await this.$Dictionary.limitOperation();
|
||||
this.trainingOperateTypeMap['08'] = list08; // 限速实训
|
||||
this.reloadTable();
|
||||
},
|
||||
prdChoose(form) {
|
||||
form.type = '';
|
||||
form.operateType = '';
|
||||
},
|
||||
typeChoose(form) {
|
||||
this.queryForm.queryObject.operateType.config.data = [];
|
||||
form.operateType = '';
|
||||
if (form && form.type) {
|
||||
this.trainingOperateTypeMap[form.type].forEach(elem => {
|
||||
this.queryForm.queryObject.operateType.config.data.push({ value: elem.code, label: elem.name });
|
||||
});
|
||||
}
|
||||
},
|
||||
autoMaticTrainging() {
|
||||
this.$refs.draftTrain.show({ event: '01', title: this.$t('lesson.automaticGenerationOfTraining') });
|
||||
},
|
||||
editTrainingByType() {
|
||||
this.$refs.draftTrain.show({ event: '02', title: this.$t('lesson.modifyTrainingByCategory') });
|
||||
},
|
||||
delAutoMaticTrainging() {
|
||||
this.$refs.draftTrain.show({ event: '03', title: this.$t('lesson.deleteAutoGeneratedTraining') });
|
||||
},
|
||||
// addingTraining() {
|
||||
// this.$refs.draftTrain.show({ event: '04', title: this.$t('lesson.addTraining') });
|
||||
// },
|
||||
demoDisplay(index, node) {
|
||||
trainingNotify({ trainingId: node.id }).then(resp => {
|
||||
/** 区分演示和正式,需要在演示时设置lessonId为0*/
|
||||
const query = { group: resp.data, trainingId: node.id, lessonId: 0 };
|
||||
this.$router.push({ path: `${UrlConfig.display}/manage`, query: query });
|
||||
launchFullscreen();
|
||||
}).catch(error => {
|
||||
this.$messageBox(this.$t('error.createSimulationFailed') + error.message);
|
||||
});
|
||||
},
|
||||
reloadTable() {
|
||||
this.queryList.reload();
|
||||
},
|
||||
turnback() {
|
||||
this.$router.go(-1);
|
||||
},
|
||||
trainingRecord(index, node) {
|
||||
trainingNotify({ trainingId: node.id }).then(resp => {
|
||||
this.group = resp.data;
|
||||
this.$router.push({ path: `${UrlConfig.design.trainingRecord}/${node.id}/${node.name}`, query: { group: resp.data } });
|
||||
}).catch(error => {
|
||||
this.$messageBox(`${this.$t('error.createSimulationFailed')}: ${error.message}`);
|
||||
});
|
||||
},
|
||||
queryFunction(params) {
|
||||
params['mapId'] = this.$route.query.mapId;
|
||||
return pageQueryTraining(params);
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style rel="stylesheet/scss" lang="scss" scoped>
|
||||
|
@ -131,7 +131,7 @@ export default {
|
||||
password: ''
|
||||
},
|
||||
loginRules: {
|
||||
username: [{ required: true, trigger: 'blur', validator: validateUsername }, { required: true, trigger: 'change', validator: validateUsername }],
|
||||
username: [{ required: true, trigger: 'blur', validator: validateUsername }],
|
||||
password: [{ required: true, trigger: 'blur', validator: validatePass }]
|
||||
},
|
||||
loading: false,
|
||||
|
@ -225,6 +225,7 @@ export default {
|
||||
},
|
||||
linkCode: '',
|
||||
tableData: [],
|
||||
oldPoint: [], // 区段未修改前 坐标
|
||||
addModel: {
|
||||
code: '',
|
||||
splitNumber: 2,
|
||||
@ -565,6 +566,7 @@ export default {
|
||||
this.editModel.logicSectionNum = selected.type === '01' ? selected.logicSectionNum : [0];
|
||||
this.editModel.isSegmentation = selected.isSegmentation || false;
|
||||
this.editModel.points = JSON.parse(JSON.stringify(selected.points));
|
||||
this.oldPoint = JSON.parse(JSON.stringify(selected.points));
|
||||
|
||||
this.addModel.splitOffsetMax = Math.sqrt(new JTriangle(selected.points[0], selected.points[selected.points.length - 1]).abspowz);
|
||||
this.addModel.splitOffset = this.addModel.splitOffsetMax / 2;
|
||||
@ -864,7 +866,7 @@ export default {
|
||||
this.$refs['dataform'].validate((valid) => {
|
||||
if (valid) {
|
||||
const edits = [];
|
||||
const model = Object.assign({_type: 'Section'}, this.editModel);
|
||||
const model = Object.assign({_type: 'Section'}, this.editModel); // 修改元素model
|
||||
model.leftStopPointOffset = Number(model.leftStopPointOffset);
|
||||
model.rightStopPointOffset = Number(model.rightStopPointOffset);
|
||||
this.sectionList.forEach(section => {
|
||||
@ -873,10 +875,24 @@ export default {
|
||||
section.trainPosType = model.trainPosType;
|
||||
edits.push(section);
|
||||
}
|
||||
if (section.linkCode == model.linkCode && model.code != section.code) {
|
||||
// debugger;
|
||||
const lastIndex = this.oldPoint.length - 1;
|
||||
if (this.oldPoint[0].x == section.points[section.points.length -1].x && this.oldPoint[0].y == section.points[section.points.length -1].y) {
|
||||
section.points[section.points.length -1].x = model.points[0].x;
|
||||
section.points[section.points.length -1].y = model.points[0].y;
|
||||
}
|
||||
if (this.oldPoint[lastIndex].x == section.points[0].x && this.oldPoint[lastIndex].y == section.points[0].y) {
|
||||
section.points[0].x = model.points[model.points.length -1].x;
|
||||
section.points[0].y = model.points[model.points.length -1].y;
|
||||
}
|
||||
edits.push(section);
|
||||
}
|
||||
});
|
||||
edits.push(model);
|
||||
this.fieldS = '';
|
||||
this.$emit('addOrUpdateMapModel', edits);
|
||||
this.oldPoint = JSON.parse(JSON.stringify(model.points));
|
||||
}
|
||||
});
|
||||
},
|
||||
|
@ -22,7 +22,7 @@ import { mapGetters } from 'vuex';
|
||||
import { admin, superAdmin} from '@/router';
|
||||
import { getQuestPageList,createQuest,deleteQuest,updateQuest,publishQuest,retractQuest} from '@/api/quest';
|
||||
import { launchFullscreen } from '@/utils/screen';
|
||||
import { scriptRecordNotify } from '@/api/simulation';
|
||||
import { scriptDraftRecordNotify,scriptRecordNotify } from '@/api/simulation';
|
||||
import CreateScript from './create';
|
||||
import ScriptPublish from './publish';
|
||||
|
||||
@ -124,9 +124,6 @@ export default {
|
||||
this.reloadTable();
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.reloadTable();
|
||||
},
|
||||
methods: {
|
||||
queryFunction(params) {
|
||||
return getQuestPageList(this.$route.params.mapId,params);
|
||||
@ -266,7 +263,7 @@ export default {
|
||||
}).catch(() => { });
|
||||
},
|
||||
previewScript(index,row){
|
||||
scriptRecordNotify(row.id).then(resp => {
|
||||
scriptDraftRecordNotify(row.id).then(resp => {
|
||||
const query = { mapId: row.mapId, group: resp.data, scriptId: row.id,skinCode:this.$route.query.skinCode,try:0};
|
||||
this.$router.push({ path: `${UrlConfig.design.display}/demon`, query });
|
||||
launchFullscreen();
|
||||
|
Loading…
Reference in New Issue
Block a user