diff --git a/src/i18n/langs/en/error.js b/src/i18n/langs/en/error.js index 0d0d815eb..ba233d7e7 100644 --- a/src/i18n/langs/en/error.js +++ b/src/i18n/langs/en/error.js @@ -52,6 +52,11 @@ export default { setFailed: 'Setup failed', deleteException: 'To remove exceptions, contact your administrator', paperHasUseNotDel: 'The paper has been used and cannot be deleted', - acquisitionTimeFailed: 'Acquisition Time Failed', - getProductListFailed: 'Failed to get product list' + batchCreateFailed: 'Batch build operation definition failed', + createOperateRuleFailed: 'Failed to create operation definition', + createOperateStepFailed: 'The create action step failed', + updateOperateStepFailed: 'The update action step failed', + packagePermissionFailed: 'Packaging authority failed', + acquisitionTimeFailed: 'Acquisition Time Failed', + getProductListFailed: 'Failed to get product list' }; diff --git a/src/i18n/langs/en/global.js b/src/i18n/langs/en/global.js index c5bcf2df5..b77919e29 100644 --- a/src/i18n/langs/en/global.js +++ b/src/i18n/langs/en/global.js @@ -97,8 +97,11 @@ export default { transferQRCode: 'Transfer QRCode', minutes: 'minutes', minute: 'minute', - mapList: 'Map list', - updateTime: 'Update time:', - line: 'Line:', - permissionList: 'Permissions list:' + totoal: 'Totoal', + publishPermission: 'The public authority', + specialPermission: 'Special permission', + mapList: 'Map list', + updateTime: 'Update time:', + line: 'Line:', + permissionList: 'Permissions list:' }; diff --git a/src/i18n/langs/en/index.js b/src/i18n/langs/en/index.js index 8fd613e2a..120d39a04 100644 --- a/src/i18n/langs/en/index.js +++ b/src/i18n/langs/en/index.js @@ -9,6 +9,7 @@ import scriptRecord from './scriptRecord'; import tip from './tip'; import system from './system'; import orderAuthor from './orderAuthor'; +import teach from './teach'; import publish from './publish'; import permission from './permission'; import replay from './replay'; @@ -22,6 +23,7 @@ export default { global, router, lesson, + teach, error, rules, scriptRecord, diff --git a/src/i18n/langs/en/lesson.js b/src/i18n/langs/en/lesson.js index 509917195..df53285f6 100644 --- a/src/i18n/langs/en/lesson.js +++ b/src/i18n/langs/en/lesson.js @@ -7,6 +7,7 @@ export default { hasCalcelDelete: 'Canceled deletion', isConfirmDelete: 'Whether to confirm deletion?', trainingName: 'Training Name', + trainingType: 'Training Type', stationList: 'Station List', stepInfo: 'Step Information', selectMap: 'Please select the map', @@ -21,5 +22,31 @@ export default { startRecording: 'Start Recording', endRecording: 'End Recording', nextStep: 'Next Step', - selectMode: 'Mode' + selectMode: 'Mode', + deleteSuccess: 'Delete successfully', + wellDelTrainingRule: 'This action will delete the training rule. Do you want to continue?', + stepDetail: 'Detail', + generation: 'Generation', + skinType: 'Skin Type', + minDuration: 'The Best Available', + maxDuration: 'The Largest Available', + trainingRemark: 'Explain', + createOperateRule: 'Create Action Rules', + editOperateRule: 'Edit Action Rules', + tipNamePlaceholderInfo: "Select the placeholder '{}' not to be deleted, otherwise the name will display incorrectly!", + tipExplainPlaceholderInfo: "Select placeholder '{}' not to be deleted, otherwise the display will be problematic!", + generationOperation: 'Automatic Generation Operation', + wellClearOperate: 'This operation clears all operation definitions under the skin. Do you want to continue?', + batchCreateSuccess: 'Batch build operation definition successful', + createOperateSuccess: 'The operation definition was created successfully', + updateOperateSuccess: 'The update steps were successful', + wellDelOperate: 'This action will delete the training step. Do you want to continue?', + operateCode: 'Opcode', + stepReturn: 'Return Value', + stepTips: 'Tips', + createStepInfo: 'Create Step Information', + eidtStepInfo: 'Edit Step Information', + product: 'Product', + remarks: 'Remarks', + operateSuccess: 'Operation successfully' }; diff --git a/src/i18n/langs/en/map.js b/src/i18n/langs/en/map.js index 35b0f72ad..76461e4c9 100644 --- a/src/i18n/langs/en/map.js +++ b/src/i18n/langs/en/map.js @@ -23,6 +23,7 @@ export default { layerDisplay: 'The layer display', viewShows: 'View shows', contentShows: 'content show', + createBatch: 'Create a batch', save: 'save', updata: 'update', @@ -299,6 +300,7 @@ export default { zzkContent: 'Station control content:', stationControlZok: 'central', + skinStyleColon: 'Skin type:', skinDesignation: 'SkinName', skinCoding: 'SkinCoding', coordinatesOrigin: 'CoordinatesOrigin', @@ -341,9 +343,13 @@ export default { productType: 'ProductType', productCode: 'ProductCode', productName: 'ProductName', + createProductCategories: 'Create product categories', productDescription: 'ProductDescription', associateTrainingTypes: 'AssociateTrainingTypes', createTrainingCategories: 'CreateTrainingCategories', + editTraining: 'Edit product categories', + productCategories: 'The product category', + selectOperation: 'Please select operation', editTrainingCategories: 'EditTrainingCategories', linkWidth: 'LinkWidth', maxLinkWidth: '(Link width is at most 20)', @@ -380,6 +386,7 @@ export default { trainCode: 'Train number:', groupNumber: 'The number of:', + groupNumberInterval: 'Group number interval:', modelCode: 'Car type:', trainmodelCreate: 'New car type', @@ -488,6 +495,8 @@ export default { switchBCode: 'Switch number 2', switchACodeNum: 'Switch ID 1:', - switchBCodeNum: 'Switch ID 2:' + switchBCodeNum: 'Switch ID 2:', + + wellDelTrianModel: 'Deleting the train model will delete the associated class cars together, please confirm whether to continue?' }; diff --git a/src/i18n/langs/en/permission.js b/src/i18n/langs/en/permission.js index 465458765..ca199e6b8 100644 --- a/src/i18n/langs/en/permission.js +++ b/src/i18n/langs/en/permission.js @@ -15,5 +15,17 @@ export default { startTime: 'Start Time', endTime: 'End Time', belonger: 'Owner', - userList: 'User List' + userList: 'User List', + customPackageRules: 'Custom packaging rules', + addRules: 'Add rules', + package: 'Pack', + getQrcode: 'Get qr code', + hasExitRule: 'This type rule already exists', + pleaseAddRule: 'Please add rules', + selectDate: 'Select time', + addPermissionPackageRule: 'Add authority packaging rules', + editPermissionPackageRule: 'edit authority packaging rule', + restPermissionMaxNumber: '(maximum number of remaining permissions: {0})', + pleaseSelectTransferPermission: 'Select transfer permissions' + }; diff --git a/src/i18n/langs/en/rules.js b/src/i18n/langs/en/rules.js index 43d63748b..2baded317 100644 --- a/src/i18n/langs/en/rules.js +++ b/src/i18n/langs/en/rules.js @@ -213,5 +213,15 @@ export default { sectionWidthInputPrompt: 'Please enter a valid segment width', selectShowWatermark: 'Select whether or not to watermark', pleaseInputMapName: 'Please enter a new name for the map', - inputTemplateRunPlan: 'Please select the template run diagram' + inputTemplateRunPlan: 'Please select the template run diagram', + inputSkinType: 'Please select skin type', + inputOperateCode: 'Please enter the step code', + inputStepNo: 'Please enter the step number', + inputStepTips: 'Please enter step number. Please enter step prompt', + selectMapName: 'Please select a map name', + selectMapProductName: 'Please select map product name', + inputTime: 'Please enter time', + inputPermissionNumber: 'Please enter the number of permissions', + permissionNumberGreater0: 'The number of permissions must be greater than 0' + }; diff --git a/src/i18n/langs/en/teach.js b/src/i18n/langs/en/teach.js new file mode 100644 index 000000000..79e55c94a --- /dev/null +++ b/src/i18n/langs/en/teach.js @@ -0,0 +1,19 @@ +export default { + title: 'Urban rail transit teaching system', + describe: 'This system is equipped with real business logic and software architecture based on the business and process-driven mode of metro employees and training sites. From the perspective of business process, standard operation, training mode and open principle, it strives to build a practical training and teaching system that best meets user needs and responds to changes quickly.', + trainingName: 'Training name:', + trainingTime: 'Best time to complete the training:', + trainingMaximum: 'Maximum time to complete the training:', + trainingInstructions: 'Training instructions:', + startTraining: 'Began to practice', + + courseName: 'Course name', + courseDescription: 'Course description', + courseDetails: 'Course details', + free: 'free', + permissionsDetails: 'Permissions for details', + buy: 'buy', + permissionDistribute: 'Permission distribution (class)', + authorityTransferred: 'Authority transferred', + courseList: 'Course list' +}; diff --git a/src/i18n/langs/en/tip.js b/src/i18n/langs/en/tip.js index 359f01af6..3ac29876e 100644 --- a/src/i18n/langs/en/tip.js +++ b/src/i18n/langs/en/tip.js @@ -5,7 +5,7 @@ export default { creatingFailed: 'Create a failure', confirmDeletion: 'Confirm deletion?', confirmBatchGeneration: 'Is batch generation confirmed?', - hint: 'hint', + hint: 'Tips', cancelledDelete: 'Cancelled delete', cancelGeneration: 'Batch generation has been cancelled', @@ -25,7 +25,9 @@ export default { selectedSectionEmpty: 'The selected section is empty', selectedStationEmpty: 'The selected station is empty', - selectMap: 'Please select the map first', + enterKeywordsFiltering: 'Enter keywords for filtering', + + selectMap: 'Please select the map first', selectTrainType: 'Please select the train model to view', stationFont: 'The font', @@ -90,6 +92,11 @@ export default { skinCodingExist: 'Map skin codes already exist', underImport: 'UnderImport...', deleteTypeHint: 'This action deletes the type. Do you want to continue?', - createRoomFailedHint: 'Each user can only create one comprehensive drill room. Do you want to enter the room?', - noPermissionHint: 'You do not have permission, please go to purchase products' + selectValidInterval: 'Please select a valid interval', + + failedCourse: 'Failed to obtain course information', + createSimulationFaild: 'Failed to create simulation', + accessCourseNo: 'No access to this course, please go and buy it!', + createRoomFailedHint: 'Each user can only create one comprehensive drill room. Do you want to enter the room?', + noPermissionHint: 'You do not have permission, please go to purchase products' }; diff --git a/src/i18n/langs/zh/error.js b/src/i18n/langs/zh/error.js index be7f60cfc..094082c7c 100644 --- a/src/i18n/langs/zh/error.js +++ b/src/i18n/langs/zh/error.js @@ -52,6 +52,12 @@ export default { setFailed: '设置失败', deleteException: '删除异常,请联系管理员', paperHasUseNotDel: '该试卷已被使用,不能删除', - acquisitionTimeFailed: '获取时间失败', - getProductListFailed: '获取产品列表失败' + batchCreateFailed: '批量生成操作定义失败', + createOperateRuleFailed: '创建操作定义失败', + createOperateStepFailed: '创建操作步骤失败', + updateOperateStepFailed: '更新操作步骤失败', + packagePermissionFailed: '打包权限失败', + acquisitionTimeFailed: '获取时间失败', + getProductListFailed: '获取产品列表失败' + }; diff --git a/src/i18n/langs/zh/global.js b/src/i18n/langs/zh/global.js index d5c8ac8e0..4252b77c3 100644 --- a/src/i18n/langs/zh/global.js +++ b/src/i18n/langs/zh/global.js @@ -85,6 +85,30 @@ export default { inputRoomNumber: '请输入房间号', chooseRoom: '选择房间', month: '月', + + permissions: '权限', + yuanMonth: '元/月', + permissionType: '权限类型:', + purchaseDuration: '购买时长:', + custom: '自定义', + permissionNum: '权限数量:', + indexA: '个', + purchasePrice: '购买总价:', + submitOrders: '提交订单', + + january: '一月', + march: '三月', + year: '一年', + twoYears: '两年', + fiveYears: '五年', + tenYears: '十年', + courseName: '课程名称', + screenName: '大屏名称', + productName: '产品名称', + coursePrice: '课程单价', + testPrice: '考试单价', + simulationPrice: '仿真单价', + timeUnitPrice: '大屏单价', putaway: '上 架', soldOut: '下 架', exportMap: '导出地图', @@ -98,8 +122,11 @@ export default { transferQRCode: '权限转赠', minutes: '分钟', minute: '分钟', - mapList: '地图列表', - updateTime: '更新时间:', - line: '线路:', - permissionList: '权限列表:' + totoal: '总数', + publishPermission: '公用权限', + specialPermission: '专用权限', + mapList: '地图列表', + updateTime: '更新时间:', + line: '线路:', + permissionList: '权限列表:' }; diff --git a/src/i18n/langs/zh/index.js b/src/i18n/langs/zh/index.js index 2fa368a8c..167241a08 100644 --- a/src/i18n/langs/zh/index.js +++ b/src/i18n/langs/zh/index.js @@ -9,6 +9,7 @@ import scriptRecord from './scriptRecord'; import tip from './tip'; import system from './system'; import orderAuthor from './orderAuthor'; +import teach from './teach'; import publish from './publish'; import permission from './permission'; import replay from './replay'; @@ -23,6 +24,7 @@ export default { router, lesson, error, + teach, rules, scriptRecord, tip, diff --git a/src/i18n/langs/zh/lesson.js b/src/i18n/langs/zh/lesson.js index 7c9780fcc..62985628e 100644 --- a/src/i18n/langs/zh/lesson.js +++ b/src/i18n/langs/zh/lesson.js @@ -7,6 +7,7 @@ export default { hasCalcelDelete: '已取消删除', isConfirmDelete: '是否确认删除?', trainingName: '实训名称', + trainingType: '实训类型', stationList: '车站列表', stepInfo: '步骤信息', selectMap: '请选择地图', @@ -21,5 +22,32 @@ export default { startRecording: '开始录制', endRecording: '结束录制', nextStep: '下一步', - selectMode: '模式选择' + selectMode: '模式选择', + deleteSuccess: '删除成功', + wellDelTrainingRule: '此操作将删除此实训规则, 是否继续?', + stepDetail: '步骤明细', + generation: '自动生成', + skinType: '皮肤类型', + minDuration: '最佳用时', + maxDuration: '最大用时', + trainingRemark: '实训说明', + createOperateRule: '创建操作规则', + editOperateRule: '编辑操作规则', + tipNamePlaceholderInfo: '选择占位符 ‘{}’ 不可删除,否则名称显示会有问题!', + tipExplainPlaceholderInfo: '选择占位符 ‘{}’ 不可删除,否则说明显示会有问题!', + generationOperation: '自动生成操作', + wellClearOperate: '此操作将清空改皮肤下所有操作定义, 是否继续?', + batchCreateSuccess: '批量生成操作定义成功', + createOperateSuccess: '创建操作定义成功', + updateOperateSuccess: '更新操作步骤成功', + wellDelOperate: '此操作将删除此实训步骤, 是否继续?', + operateCode: '操作码', + stepReturn: '步骤返回值', + stepTips: '步骤提示信息', + createStepInfo: '创建步骤信息', + eidtStepInfo: '编辑步骤信息', + product: '产品', + remarks: '描述', + operateSuccess: '操作成功' }; + diff --git a/src/i18n/langs/zh/map.js b/src/i18n/langs/zh/map.js index ec46dd6da..3d2b0164a 100644 --- a/src/i18n/langs/zh/map.js +++ b/src/i18n/langs/zh/map.js @@ -23,6 +23,7 @@ export default { layerDisplay: '图层显示', viewShows: '视图显示', contentShows: '内容显示', + createBatch: '批量创建', save: '保存', updata: '更新', @@ -330,6 +331,7 @@ export default { trainCode: '列车编号:', groupNumber: '车组号:', + groupNumberInterval: '车组号区间:', trainNumber: '车组号', modelCode: '车类型:', @@ -414,6 +416,7 @@ export default { startStation: '起始站', endStation: '终到站', + skinStyleColon: '皮肤类型:', skinDesignation: '皮肤名称', skinCoding: '皮肤编码', coordinatesOrigin: '坐标原点', @@ -456,9 +459,13 @@ export default { productType: '产品类型', productCode: '产品编码', productName: '产品名称', + createProductCategories: '创建产品类目', productDescription: '产品说明', associateTrainingTypes: '关联实训类型', createTrainingCategories: '创建实训类目', + editTraining: '编辑产品类目', + productCategories: '产品类目', + selectOperation: '请选择操作', editTrainingCategories: '编辑实训类目', linkWidth: 'link宽度', maxLinkWidth: '(Link宽度最大为20)', @@ -490,6 +497,8 @@ export default { switchBCode: '道岔2编号', switchACodeNum: '道岔ID 1:', - switchBCodeNum: '道岔ID 2:' + switchBCodeNum: '道岔ID 2:', + + wellDelTrianModel: '删除车模型会将关联的类车一起删除,请确认是否继续?' }; diff --git a/src/i18n/langs/zh/permission.js b/src/i18n/langs/zh/permission.js index 1bdac6211..3e99db472 100644 --- a/src/i18n/langs/zh/permission.js +++ b/src/i18n/langs/zh/permission.js @@ -15,5 +15,17 @@ export default { startTime: '开始时间', endTime: '结束时间', belonger: '归属人', - userList: '用户列表' + userList: '用户列表', + customPackageRules: '定制打包规则', + addRules: '添加规则', + package: '打包', + getQrcode: '获取二维码', + hasExitRule: '已存在此类型规则', + pleaseAddRule: '请添加规则', + selectDate: '选择时间', + addPermissionPackageRule: '增加权限打包规则', + editPermissionPackageRule: '编辑权限打包规则', + restPermissionMaxNumber: '(剩余最大权限个数:{0})', + pleaseSelectTransferPermission: '选择转赠权限' + }; diff --git a/src/i18n/langs/zh/rules.js b/src/i18n/langs/zh/rules.js index 9c42f53e8..b979fef56 100644 --- a/src/i18n/langs/zh/rules.js +++ b/src/i18n/langs/zh/rules.js @@ -212,6 +212,26 @@ export default { sectionWidthInputPrompt: '请输入有效区段宽度', selectShowWatermark: '请选择是否水印', + courseNameEmpty: '课程名称不能为空', + purchaseMonth: '请输入购买月数', + accessNumber: '请输入权限数量', pleaseInputMapName: '请输入地图新名称', - inputTemplateRunPlan: '请选择模板运行图' + inputTemplateRunPlan: '请选择模板运行图', + inputSkinType: '请选择皮肤类型', + + inputTrainingName: '请输入实训名称', + inputTrainingType: '请输入实训类型', + inputOperationType: '请输入操作类型', + inputMinDuration: '请输入最佳用时', + inputMaxDuration: '请输入最大用时', + inputTrainingRemark: '请输入实训说明', + inputOperateCode: '请输入步骤操作码', + inputStepNo: '请输入步骤序号', + inputStepTips: '请输入步骤提示信息', + selectMapName: '请选择地图名称', + selectMapProductName: '请选择地图产品名称', + inputTime: '请输入时间', + inputPermissionNumber: '请输入权限个数', + permissionNumberGreater0: '权限个数必须大于0' + }; diff --git a/src/i18n/langs/zh/teach.js b/src/i18n/langs/zh/teach.js new file mode 100644 index 000000000..4a148e78d --- /dev/null +++ b/src/i18n/langs/zh/teach.js @@ -0,0 +1,19 @@ +export default { + title: '城市轨道交通教学系统', + describe: '该系统具备真实的业务逻辑,以地铁员工和培训点为要素的业务和流程驱动方式进行软件架构,从业务流程、标准作业、培训方式及开放原则等角度出发,力求打造最符合用户需求及快速响应变化的实训教学系统。', + trainingName: '实训名称:', + trainingTime: '完成实训最佳用时:', + trainingMaximum: '完成实训最大用时:', + trainingInstructions: '实训说明:', + startTraining: '开始实训', + + courseName: '课程名称', + courseDescription: '课程说明', + courseDetails: '课程详情', + free: '免费', + permissionsDetails: '权限详情', + buy: '购买', + permissionDistribute: '权限分发(上课)', + authorityTransferred: '权限转赠', + courseList: '课程列表' +}; diff --git a/src/i18n/langs/zh/tip.js b/src/i18n/langs/zh/tip.js index a96bd9b36..806ebd4ff 100644 --- a/src/i18n/langs/zh/tip.js +++ b/src/i18n/langs/zh/tip.js @@ -8,6 +8,7 @@ export default { hint: '提示', cancelledDelete: '已取消删除', cancelGeneration: '已取消批量生成', + refreshFailure: '刷新失败', updateSuccessfully: '更新成功', saveSuccessfully: '保存成功', @@ -25,6 +26,8 @@ export default { selectedSectionEmpty: '选择的区段为空', selectedStationEmpty: '选择的车站为空', + enterKeywordsFiltering: '输入关键字进行过滤', + selectMap: '请先选择地图', selectTrainType: '请选择查看的列车模型', @@ -59,6 +62,9 @@ export default { deleteProductSuccessfully: '删除产品成功', deleteProductFailed: '删除产品失败', cannotDeleteProduct: '产品已被使用无法删除', + productCodeExists: '产品Code已存在', + narrowScope: '不能缩小上次创建的实训列表的范围', + pathCreationSuccessful: '创建交路成功!', createRoutingFailed: '创建交路失败', pathUpdataSuccessful: '更新交路成功!', @@ -90,7 +96,15 @@ export default { skinCodingExist: '地图皮肤编码已存在', underImport: '正在导入中...', deleteTypeHint: '此操作将删除该类型, 是否继续?', - createRoomFailedHint: '每个用户只能创建一个综合演练房间, 是否进入房间?', - noPermissionHint: '您没有权限,请前往购买产品' + selectValidInterval: '请选择有效的区间', + failedCourse: '获取课程信息失败', + createSimulationFaild: '创建仿真失败', + accessCourseNo: '无此课程权限, 请前往购买!', + + failedSubmitOrder: '提交订单失败', + permissionsNumber: '请输入有效的权限个数', + purchaseMonth: '请输入有效的购买月数', + createRoomFailedHint: '每个用户只能创建一个综合演练房间, 是否进入房间?', + noPermissionHint: '您没有权限,请前往购买产品' }; diff --git a/src/router/index.js b/src/router/index.js index b2058ee8a..4dca952fb 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -27,8 +27,8 @@ import SkinCodeDraft from '@/views/map/skinCode/draft'; import Mapdraft from '@/views/map/mapdraft/index'; import Mapedit from '@/views/map/mapdraft/mapedit/index'; import Runplan from '@/views/map/runplan/index'; +import MapProduct from '@/views/map/product/index'; import RunplanView from '@/views/map/runplan/chart'; -import Trainingcategory from '@/views/lesson/trainingcategory/index'; import Trainingrecord from '@/views/lesson/trainingrecord/index'; import TrainingrecordManage from '@/views/lesson/trainingrecord/manage/index'; import Taskmanage from '@/views/lesson/taskmanage/list'; @@ -389,7 +389,7 @@ export const asyncRouter = [ }, { path: 'product', - component: Trainingcategory, + component: MapProduct, meta: { i18n: 'router.productEdit' } diff --git a/src/views/components/pay/commit.vue b/src/views/components/pay/commit.vue index 73faf0c9e..5ecb4e1b6 100644 --- a/src/views/components/pay/commit.vue +++ b/src/views/components/pay/commit.vue @@ -12,30 +12,30 @@ {{ saleModel.name }} - - {{ systemName }}权限 + + {{ systemName }}{{ $t('global.permissions') }} {{ saleModel.price.toFixed(2) }} - 元/月 + {{ $t('global.yuanMonth') }} - + - + - + {{ $t('global.month') }} - + - + {{ $t('global.indexA') }} - + {{ parseInt(sumPrice) }} . {{ (sumPrice - parseInt(sumPrice)).toFixed(2).toString().replace('.0', '').replace(' ', '') }} @@ -44,9 +44,9 @@ - 提交订单 + {{ $t('global.submitOrders') }} - 返回 + {{ $t('global.back') }} @@ -69,14 +69,14 @@ export default { data() { return { disabled: true, - choose: '一月', + choose: this.$t('global.january'), chooseList: [ - { label: '一月', value: 1 }, - { label: '三月', value: 3 }, - { label: '一年', value: 12 }, - { label: '两年', value: 24 }, - { label: '五年', value: 60 }, - { label: '十年', value: 120 } + { label: this.$t('global.january'), value: 1 }, + { label: this.$t('global.march'), value: 3 }, + { label: this.$t('global.year'), value: 12 }, + { label: this.$t('global.twoYears'), value: 24 }, + { label: this.$t('global.fiveYears'), value: 60 }, + { label: this.$t('global.tenYears'), value: 120 } ], saleModel: { goodsId: '', @@ -94,48 +94,48 @@ export default { nameTitle() { if (this.$route.query.permissionType == PermissionType.EXAM || this.$route.query.permissionType == PermissionType.LESSON) { - return '课程名称'; + return this.$t('global.courseName'); } else if (this.$route.query.permissionType == PermissionType.SCREEN) { - return '大屏名称'; + return this.$t('global.screenName'); } else { - return '产品名称'; + return this.$t('global.productName'); } }, priceTitle() { switch (this.$route.query.permissionType) { - case PermissionType.LESSON: return '课程单价'; - case PermissionType.EXAM: return '考试单价'; - case PermissionType.SIMULATION: return '仿真单价'; - case PermissionType.SCREEN: return '大屏单价'; + case PermissionType.LESSON: return this.$t('global.coursePrice'); + case PermissionType.EXAM: return this.$t('global.testPrice'); + case PermissionType.SIMULATION: return this.$t('global.simulationPrice'); + case PermissionType.SCREEN: return this.$t('global.timeUnitPrice'); } return ''; }, rules() { return { 'name': [ - { required: true, message: '课程名称不能为空', trigger: 'blur' } + { required: true, message: this.$t('rules.courseNameEmpty'), trigger: 'blur' } ], 'months': [ - { required: true, message: '请输入购买月数', trigger: 'blur' }, + { required: true, message: this.$t('rules.purchaseMonth'), trigger: 'blur' }, { validator(rule, value, callback) { if (Number.isInteger(Number(value)) && Number(value) >= 0) { callback(); } else { - callback(new Error('请输入有效的购买月数')); + callback(new Error(this.$t('tip.purchaseMonth'))); } }, trigger: 'blur' } ], 'total': [ - { required: true, message: '请输入权限数量', trigger: 'blur' }, + { required: true, message: this.$t('rules.accessNumber'), trigger: 'blur' }, { validator(rule, value, callback) { if (Number.isInteger(Number(value)) && Number(value) >= 0) { callback(); } else { - callback(new Error('请输入有效的权限个数')); + callback(new Error(this.$t('tip.permissionsNumber'))); } }, trigger: 'blur' @@ -163,7 +163,7 @@ export default { methods: { // 选择自定义时长,修改页面控件状态 chooseEvent(label) { - this.disabled = label !== '自定义'; + this.disabled = label !== this.$t('global.custom'); this.chooseList.forEach(elem => { if (label === elem.label) { this.saleModel.months = elem.value; @@ -184,7 +184,7 @@ export default { commitOrder(model).then(response => { this.$emit('commit', response.data); }).catch(() => { - this.$messageBox('提交订单失败'); + this.$messageBox(this.$t('tip.failedSubmitOrder')); }); } }); diff --git a/src/views/dashboard/echarts/permission.vue b/src/views/dashboard/echarts/permission.vue index 0f8d22452..8ee547d57 100644 --- a/src/views/dashboard/echarts/permission.vue +++ b/src/views/dashboard/echarts/permission.vue @@ -27,7 +27,7 @@ export default { data() { return { option: { - backgroundColor: '#F0F2F5', + backgroundColor: '#f0f0f0', title: { text: '', subtext: '', @@ -35,8 +35,7 @@ export default { color: '#909399' }, y: 10, - left: 'center', - textAlign: 'center' + left: 'center' }, tooltip: { }, @@ -44,7 +43,7 @@ export default { top: '17%', width: '45%', bottom: '5%', - left: 50, + left: 30, containLabel: true }], xAxis: { @@ -68,15 +67,37 @@ export default { series: [{ type: 'bar', z: 3, - barWidth: 10, + barWidth: 25, + itemStyle: { + normal: { + color: new echarts.graphic.LinearGradient( + 0, 0, 0, 1, + [ + {offset: 0, color: '#83bff6'}, + {offset: 0.5, color: '#188df0'}, + {offset: 1, color: '#188df0'} + ] + ) + }, + emphasis: { + color: new echarts.graphic.LinearGradient( + 0, 0, 0, 1, + [ + {offset: 0, color: '#2378f7'}, + {offset: 0.7, color: '#2378f7'}, + {offset: 1, color: '#83bff6'} + ] + ) + } + }, tooltip: { formatter: params => { return `${params.marker} ${params.name}: ${params.value}个`; } }, data: [] }, { type: 'pie', - radius: [0, '70%'], - center: ['75%', '52%'], + radius: [0, '72%'], + center: ['74%', '55%'], tooltip: { formatter: params => { return `${params.marker} ${params.name}: ${params.percent}% (${params.value}个)`; } }, diff --git a/src/views/lesson/taskmanage/list.vue b/src/views/lesson/taskmanage/list.vue index 4391219b6..2c362fb9f 100644 --- a/src/views/lesson/taskmanage/list.vue +++ b/src/views/lesson/taskmanage/list.vue @@ -34,7 +34,7 @@ queryObject: { status: { type: 'select', - label: '状态', + label: this.$t('global.status'), config: { data: [] } @@ -47,7 +47,7 @@ indexShow: true, columns: [ { - title: '皮肤类型', + title: this.$t('lesson.skinType'), prop: 'parameter', type: 'tag', columnValue: (row) => { return this.$convertField(row.parameter, this.skinCodeList, ['code', 'name']) }, @@ -58,7 +58,7 @@ prop: 'createTime' }, { - title: '状态', + title: this.$t('global.status'), prop: 'status', type: 'tag', columnValue: (row) => { return this.$convertField(row.status, this.taskStatusList, ['code', 'name']) }, @@ -79,7 +79,7 @@ }, { type: 'button', - title: '操作', + title: this.$t('global.operate'), width: '250', buttons: [ { @@ -130,32 +130,32 @@ }) }, taskStart(index, node) { - this.$confirm('此操作将开始任务, 是否继续?', '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', + this.$confirm('此操作将开始任务, 是否继续?', this.$t('global.tips'), { + confirmButtonText: this.$t('global.confirm'), + cancelButtonText: this.$t('global.cancel'), type: 'warning' }).then(() => { postTask({ id: node.id }).then(res => { - this.$message.success('操作成功'); + this.$message.success(this.$t('lesson.operateSuccess')); this.reloadTable(); }).catch(error => { this.reloadTable(); - this.$messageBox('操作失败'); + this.$messageBox(this.$t('error.operationFailure')); }) }) }, taskCancel(index, node) { - this.$confirm('此操作将取消任务, 是否继续?', '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', + this.$confirm('此操作将取消任务, 是否继续?', this.$t('global.tips'), { + confirmButtonText: this.$t('global.confirm'), + cancelButtonText: this.$t('global.cancel'), type: 'warning' }).then(() => { postTaskCancel(node.id).then(res => { - this.$message.success('操作成功'); + this.$message.success(this.$t('lesson.operateSuccess')); this.reloadTable(); }).catch(error => { this.reloadTable(); - this.$messageBox('操作失败'); + this.$messageBox(this.$t('error.operationFailure')); }) }) }, diff --git a/src/views/lesson/trainingRule/addBatch.vue b/src/views/lesson/trainingRule/addBatch.vue index 73f6dec55..6dd3d2a1b 100644 --- a/src/views/lesson/trainingRule/addBatch.vue +++ b/src/views/lesson/trainingRule/addBatch.vue @@ -2,8 +2,8 @@ - 确 定 - 取 消 + {{ $t('global.confirm') }} + {{ $t('global.cancel') }} @@ -32,7 +32,7 @@ export default { const form = { labelWidth: '120px', items: [ - { prop: 'skinCode', label: '皮肤类型', type: 'select', required: true, options: this.skinCodeList } + { prop: 'skinCode', label: this.$t('lesson.skinType'), type: 'select', required: true, options: this.skinCodeList } ] }; return form; @@ -40,13 +40,13 @@ export default { rules() { const crules = { skinCode: [ - { required: true, message: '请选择皮肤类型', trigger: 'change' } + { required: true, message: this.$t('rules.inputSkinType'), trigger: 'change' } ] }; return crules; }, title() { - return '自动生成操作'; + return this.$t('lesson.generationOperation'); } }, mounted() { @@ -77,9 +77,9 @@ export default { const self = this; this.$refs.dataform.validateForm(() => { if (this.isShow) { - this.$confirm('此操作将清空改皮肤下所有操作定义, 是否继续?', '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', + this.$confirm(this.$t('global.wellClearOperate'), this.$t('global.tips'), { + confirmButtonText: this.$t('global.confirm'), + cancelButtonText: this.$t('global.cancel'), type: 'warning' }).then(() => { self.create(); @@ -94,12 +94,12 @@ export default { this.loading = true; addTrainingRulesList(this.formModel.skinCode, OperationList[this.formModel.skinCode].list).then(response => { self.loading = false; - self.$message.success('批量生成操作定义成功'); + self.$message.success(this.$t('lesson.batchCreateSuccess')); self.handleClose(); self.$emit('reloadTable'); // 刷新列表 }).catch(error => { self.loading = false; - self.$message.error('批量生成操作定义失败:' + error.message); + self.$message.error(`${this.$('error.batchCreateFailed')}:${error.message}`); }); }, handleClose() { diff --git a/src/views/lesson/trainingRule/addEdit.vue b/src/views/lesson/trainingRule/addEdit.vue index 4e8b18043..99384e442 100644 --- a/src/views/lesson/trainingRule/addEdit.vue +++ b/src/views/lesson/trainingRule/addEdit.vue @@ -2,8 +2,8 @@ - 确 定 - 取 消 + {{ $t('global.confirm') }} + {{ $t('global.cancel') }} @@ -46,15 +46,15 @@ export default { const form = { labelWidth: '120px', items: [ - { prop: 'skinCode', label: '皮肤类型', type: 'select', required: true, options: this.skinCodeList, disabled: !isAdd }, - { prop: 'trainingType', label: '实训类型', type: 'select', required: true, options: this.trainingTypeList, disabled: !isAdd, change: true, onChange: this.changeList }, - { prop: 'operateType', label: '操作类型', type: 'select', required: true, options: this.trainingOperateTypeMap[this.formModel.trainingType], disabled: !isAdd }, + { prop: 'skinCode', label: this.$t('lesson.skinType'), type: 'select', required: true, options: this.skinCodeList, disabled: !isAdd }, + { 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: '实训名称', type: 'text', required: true, rightWidth: true, tooltip: true, info: '选择占位符 ‘{}’ 不可删除,否则名称显示会有问题!' }, - { prop: 'minDuration', label: '最佳用时', type: 'text', required: true }, - { prop: 'maxDuration', label: '最大用时', type: 'text', required: true }, + { 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: '实训说明', type: 'textarea', required: true, tooltip: true, info: '选择占位符 ‘{}’ 不可删除,否则说明显示会有问题!' } + { prop: 'trainingRemark', label: this.$t('lesson.trainingRemark'), type: 'textarea', required: true, tooltip: true, info: this.$t('lesson.tipExplainPlaceholderInfo') } ] }; return form; @@ -62,34 +62,34 @@ export default { rules() { const crules = { trainingName: [ - { required: true, message: '请输入实训名称', trigger: 'blur' } + { required: true, message: this.$t('rules.inputTrainingName'), trigger: 'blur' } ], trainingType: [ - { required: true, message: '请输入实训类型', trigger: 'change' } + { required: true, message: this.$t('rules.inputTrainingType'), trigger: 'change' } ], operateType: [ - { required: true, message: '请输入操作类型', trigger: 'change' } + { required: true, message: this.$t('rules.inputOperationType'), trigger: 'change' } ], skinCode: [ - { required: true, message: '请选择皮肤类型', trigger: 'change' } + { required: true, message: this.$t('rules.inputSkinType'), trigger: 'change' } ], minDuration: [ - { required: true, message: '请输入最佳用时', trigger: 'blur' } + { required: true, message: this.$t('rules.inputMinDuration'), trigger: 'blur' } ], maxDuration: [ - { required: true, message: '请输入最大用时', trigger: 'blur' } + { required: true, message: this.$t('rules.inputMaxDuration'), trigger: 'blur' } ], trainingRemark: [ - { required: true, max: 500, message: '请输入实训说明', trigger: 'blur' } + { required: true, max: 500, message: this.$t('rules.inputTrainingRemark'), trigger: 'blur' } ] }; return crules; }, title() { if (this.type === 'ADD') { - return '创建操作规则'; + return this.$t('lesson.createOperateRule'); } else { - return '编辑操作规则'; + return this.$t('lesson.editOperateRule'); } } }, @@ -247,12 +247,12 @@ export default { this.loading = true; postTrainingRulesData(this.formModel).then(response => { self.loading = false; - self.$message.success('创建操作定义成功'); + self.$message.success(this.$t('lesson.createOperateSuccess')); self.handleClose(); self.$emit('reloadTable'); }).catch(error => { self.loading = false; - self.$message.error('创建操作定义失败:' + error.message); + self.$message.error(`${this.$t('error.createOperateRuleFailed')}:${error.message}`); }); }, update() { @@ -271,12 +271,12 @@ export default { this.loading = true; putTrainingRulesData(this.formModel).then(response => { self.loading = false; - self.$message.success('创建操作定义成功'); + self.$message.success(this.$t('lesson.createOperateSuccess')); self.handleClose(); self.$emit('reloadTable'); }).catch(error => { self.loading = false; - self.$message.error('创建操作定义失败:' + error.message); + self.$message.error(`${this.$t('error.createOperateRuleFailed')}:${error.message}`); }); }, handleClose() { diff --git a/src/views/lesson/trainingRule/detail/edit.vue b/src/views/lesson/trainingRule/detail/edit.vue index 1df092f14..88cc87e3d 100644 --- a/src/views/lesson/trainingRule/detail/edit.vue +++ b/src/views/lesson/trainingRule/detail/edit.vue @@ -2,8 +2,8 @@ - 确 定 - 取 消 + {{ $t('global.confirm') }} + {{ $t('global.cancel') }} @@ -22,6 +22,12 @@ dicId: { type: String, required: true + }, + deviceList: { + type: Array, + default() { + return [] + } } }, data() { @@ -34,18 +40,7 @@ val: '', tip: '' }, - placeholderList: [], - deviceList: [ - { label: '菜单', value: 'bar' }, - { label: '道岔', value: '02' }, - { label: '区段', value: '03' }, - { label: '信号机', value: '04' }, - { label: '控制模式', value: '05' }, - { label: '站台', value: '06' }, - { label: '列车', value: '07' }, - { label: '车站', value: '08' }, - { label: '车次窗', value: '09' } - ], + placeholderList: [] } }, computed: { @@ -54,12 +49,12 @@ let form = { labelWidth: '120px', items: [ - { prop: 'orderNum', label: '步骤序号', type: 'text', required: true, disabled: !isAdd }, - { prop: 'operateCode', label: '步骤操作码', type: 'text', required: true, disabled: !isAdd }, - { prop: 'deviceType', label: '设备类型', type: 'select', required: true, options: this.deviceList, disabled: !isAdd }, - { prop: 'val', label: '步骤返回值', type: 'text', required: false, disabled: !isAdd }, + { prop: 'orderNum', label: this.$t('lesson.stepNo'), type: 'text', required: true, disabled: !isAdd }, + { prop: 'operateCode', label: this.$t('lesson.operateCode'), type: 'text', required: true, disabled: !isAdd }, + { prop: 'deviceType', label: this.$t('lesson.deviceType'), type: 'select', required: true, options: this.deviceList, disabled: !isAdd }, + { prop: 'val', label: this.$t('lesson.stepReturn'), type: 'text', required: false, disabled: !isAdd }, { label: '', type: 'button', options: this.placeholderList, style: 'margin-bottom: 0; margin-top: -10px;', typeBtn: 'info', click: this.addTrainRemark }, - { prop: 'tip', label: '步骤提示信息', type: 'textarea', required: true, tooltip: true, info: '选择占位符 ‘{}’ 不可删除,否则说明显示会有问题!' }, + { prop: 'tip', label: this.$t('lesson.stepTips'), type: 'textarea', required: true, tooltip: true, info: this.$t('lesson.tipExplainPlaceholderInfo') }, ] } return form @@ -67,22 +62,22 @@ rules() { let crules = { operateCode: [ - { required: true, message: '请输入步骤操作码', trigger: 'blur' }, + { required: true, message: this.$t('rules.inputOperateCode'), trigger: 'blur' }, ], orderNum: [ - { required: true, message: '请输入步骤序号', trigger: 'blur' }, + { required: true, message: this.$t('rules.inputStepNo'), trigger: 'blur' }, ], tip: [ - { required: true, max: 500, message: '请输入步骤提示信息', trigger: 'blur' } + { required: true, max: 500, message: this.$t('rules.inputStepTips'), trigger: 'blur' } ] } return crules; }, title() { if (this.type === 'ADD') { - return '创建步骤信息' + return this.$t('lesson.createStepInfo'); } else { - return '编辑步骤信息' + return this.$t('lesson.editStepInfo'); } } }, @@ -138,11 +133,11 @@ this.formModel.definitionId = this.$route.query.id; this.formModel.orderNum = Number(this.formModel.orderNum); postOperateStepData(this.formModel).then(response => { - self.$message.success('创建操作步骤成功') + self.$message.success(this.$t('lesson.createOperateSuccess')) self.handleClose() self.$emit('reloadTable') }).catch(error => { - self.$message.error('创建操作步骤失败:' + error.message) + self.$message.error(`${this.$t('error.createOperateStepFailed')}:${error.message}`) }) }, update() { @@ -155,11 +150,11 @@ }) this.formModel.orderNum = Number(this.formModel.orderNum); putOperateStepData(this.formModel).then(response => { - self.$message.success('更新操作步骤成功') + self.$message.success(this.$t('lesson.updateOperateSuccess')) self.handleClose() self.$emit('reloadTable') }).catch(error => { - self.$message.error('更新操作步骤失败' + error.message) + self.$message.error(`${this.$t('error.updateOperateStepFailed')}:${error.message}`) }) }, handleClose() { diff --git a/src/views/lesson/trainingRule/detail/index.vue b/src/views/lesson/trainingRule/detail/index.vue index b33e5cda9..9f6d36bb2 100644 --- a/src/views/lesson/trainingRule/detail/index.vue +++ b/src/views/lesson/trainingRule/detail/index.vue @@ -1,10 +1,14 @@ @@ -43,7 +47,7 @@ queryObject: { operateCode: { type: 'text', - label: '操作码' + label: this.$t('lesson.operateCode') }, } @@ -54,45 +58,40 @@ indexShow: true, columns: [ { - title: '步骤序号', + title: this.$t('lesson.stepNo'), prop: 'orderNum' }, { - title: '设备类型', + title: this.$t('lesson.deviceType'), prop: 'deviceType', type: 'tag', columnValue: (row) => { return this.$convertField(row.deviceType, this.deviceList, ['value', 'label']) }, tagType: (row) => { return 'success' } }, { - title: '操作码', + title: this.$t('lesson.operateCode'), prop: 'operateCode' }, { - title: '提示信息', + title: this.$t('lesson.stepTips'), prop: 'tip', type: 'replicText', columnValue: (row) => { return this.repliceName(row.tip, this.placeholderList) }, }, { type: 'button', - title: '操作', + title: this.$t('global.operate'), width: '250', buttons: [ { - name: '编辑', + name: this.$t('global.edit'), handleClick: this.handleEdit }, - // { - // name: '删除', - // handleClick: this.handleDelete, - // type: 'danger' - // }, ] } ], actions: [ - { text: '新增', btnCode: 'employee_insert', handler: this.handleAdd }, + { text: this.$t('global.add'), btnCode: 'employee_insert', handler: this.handleAdd }, ] }, @@ -100,12 +99,6 @@ } }, - computed: { - turnbackBarTitle() { - return this.dic.name + '(' + this.dic.code + ')' - } - }, - created() { this.dicId = this.$route.query.id; this.init(); @@ -145,17 +138,17 @@ }, handleDelete(index, row) { - this.$confirm('此操作将删除此实训步骤, 是否继续?', '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', + this.$confirm(this.$t('lesson.wellDelOperate'), this.$t('global.tips'), { + confirmButtonText: this.$t('global.confirm'), + cancelButtonText:this.$t('global.cancel'), type: 'warning' }).then(() => { deleteOperateStepData(row.id).then(response => { - this.$message.success('删除成功') + this.$message.success(this.$t('lesson.deleteSuccess')) this.reloadTable() }).catch(error => { this.reloadTable() - this.$messageBox('删除失败') + this.$messageBox(this.$t('error.deleteFailed')) }) }) }, @@ -169,4 +162,11 @@ } } } - \ No newline at end of file + + \ No newline at end of file diff --git a/src/views/lesson/trainingRule/list.vue b/src/views/lesson/trainingRule/list.vue index 2ee855950..90092c59d 100644 --- a/src/views/lesson/trainingRule/list.vue +++ b/src/views/lesson/trainingRule/list.vue @@ -1,260 +1,258 @@ \ No newline at end of file + reloadTable() { + this.queryList.reload(); + } + } +}; + diff --git a/src/views/lesson/trainingmanage/index.vue b/src/views/lesson/trainingmanage/index.vue index 1a2cbcce8..736022b3d 100644 --- a/src/views/lesson/trainingmanage/index.vue +++ b/src/views/lesson/trainingmanage/index.vue @@ -42,7 +42,7 @@ export default { queryObject: { skinCode: { type: 'select', - label: '皮肤类型', + label: this.$t('lesson.skinType'), change: this.skinCodeChoose, config: { data: [] @@ -58,7 +58,7 @@ export default { }, type: { type: 'select', - label: '实训类型', + label: this.$t('lesson.trainingType'), change: this.typeChoose, config: { data: [] @@ -66,7 +66,7 @@ export default { }, operateType: { type: 'select', - label: '操作类型', + label: this.$t('lesson.operationType'), config: { data: [] } @@ -80,7 +80,7 @@ export default { }, name: { type: 'text', - label: '实训名称' + label: this.$t('lesson.trainingName') } } }, @@ -90,56 +90,56 @@ export default { indexShow: true, columns: [ { - title: '实训名称', + title: this.$t('lesson.trainingName'), prop: 'name' }, { - title: '皮肤类型', + title: this.$t('lesson.skinType'), prop: 'skinCode', type: 'tag', columnValue: (row) => { return this.$convertField(row.skinCode, this.skinCodeList, ['code', 'name']); }, tagType: (row) => { return ''; } }, { - title: '产品', + 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: '实训类型', + 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: '操作类型', + 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: '最小用时', + title: this.$t('lesson.minDuration'), prop: 'minDuration' }, { - title: '最大用时', + title: this.$t('lesson.maxDuration'), prop: 'maxDuration' }, { - title: '描述', + title: this.$t('lesson.remarks'), prop: 'remarks' }, { type: 'button', - title: '操作', + title: this.$t('global.operate'), width: '250', buttons: [ { - name: '演示', + name: this.$t('lesson.demonstration'), handleClick: this.demoDisplay, type: '' } diff --git a/src/views/map/mapdraft/mapedit/mapoperate/train/create.vue b/src/views/map/mapdraft/mapedit/mapoperate/train/create.vue index 743f58480..8ce94cb62 100644 --- a/src/views/map/mapdraft/mapedit/mapoperate/train/create.vue +++ b/src/views/map/mapdraft/mapedit/mapoperate/train/create.vue @@ -1,23 +1,23 @@ @@ -79,14 +79,14 @@ export default { range.end >= range.beg) { callback(); } else { - callback(new Error('请选择有效的区间')); + callback(new Error(this.$t('tip.selectValidInterval'))); } }, trigger: 'blur' } ], modelCode: [ - { required: true, message: '请选择车类型', trigger: 'change' } + { required: true, message: this.$t('rules.selectTrainType'), trigger: 'change' } ] }; } @@ -109,31 +109,35 @@ export default { this.$emit('dispatch', { callback: 'delTrainMode', params: code}); }, handleConfirm() { - const list = []; + this.$refs['form'].validate((valid) => { + if (valid) { + const list = []; - switch (this.mode) { - case '01': - list.push({ - _type: 'Train', - code: getUID('Train'), - modelCode: this.addModel.modelCode, - groupNumber: this.addModel.groupNumber - }); - break; - case '02': - for (var num = this.addModel.range.beg; num <= this.addModel.range.end; num++) { - list.push({ - _type: 'Train', - code: getUID('Train'), - modelCode: this.addModel.modelCode, - groupNumber: ('000'+num).slice(-3) - }); + switch (this.mode) { + case '01': + list.push({ + _type: 'Train', + code: getUID('Train'), + modelCode: this.addModel.modelCode, + groupNumber: this.addModel.groupNumber + }); + break; + case '02': + for (var num = this.addModel.range.beg; num <= this.addModel.range.end; num++) { + list.push({ + _type: 'Train', + code: getUID('Train'), + modelCode: this.addModel.modelCode, + groupNumber: ('000'+num).slice(-3) + }); + } + break; + } + + this.$emit('dispatch', { callback: 'create', params: list}); + this.doClose(); } - break; - } - - this.$emit('dispatch', { callback: 'create', params: list}); - this.doClose(); + }); } } }; diff --git a/src/views/map/mapdraft/mapedit/mapoperate/train/index.vue b/src/views/map/mapdraft/mapedit/mapoperate/train/index.vue index 6ea475221..08870ffc6 100644 --- a/src/views/map/mapdraft/mapedit/mapoperate/train/index.vue +++ b/src/views/map/mapdraft/mapedit/mapoperate/train/index.vue @@ -62,13 +62,13 @@ export default { }, rules: { code: [ - { required: true, message: '请重新选择设备', trigger: 'change' } + { required: true, message: this.$t('rules.pleaseReSelectDevice'), trigger: 'change' } ], groupNumber: [ - { required: true, message: '请输入车组号', trigger: 'blur' } + { required: true, message: this.$t('rules.pleaseEnterGroupNumber'), trigger: 'blur' } ], modelCode: [ - { required: true, message: '请选择车类型', trigger: 'change' } + { required: true, message: this.$t('rules.selectTrainType'), trigger: 'change' } ] }, search: '' @@ -130,7 +130,7 @@ export default { if (Object.keys(this.$store.state.map.map || {}).length) { this.$refs.trainMode.doShow({}, 'ADD'); } else { - this.$messageBox('请先选择地图'); + this.$messageBox(this.$t('tip.selectMap')); } }, uptTrainMode(code) { @@ -138,7 +138,7 @@ export default { if (index >= 0) { this.$refs.trainMode.doShow(this.trainModelList[index], 'UPT'); } else { - this.$messageBox('请选择查看的列车模型'); + this.$messageBox(this.$t('tip.selectTrainType')); } }, delTrainMode(code) { @@ -154,15 +154,15 @@ export default { const train = this.$store.getters['map/getDeviceByCode'](row.code); if (train) { const _that = this; - this.$confirm('是否确认删除?', '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', + this.$confirm(this.$t('tip.confirmDeletion'), this.$t('tip.hint'), { + confirmButtonText: this.$t('tip.confirm'), + cancelButtonText: this.$t('tip.cancel'), type: 'warning' }).then(() => { _that.$emit('delMapModel', train); _that.deviceSelect(); }).catch(() => { - _that.$message.info('已取消删除'); + _that.$message.info(this.$t('tip.cancelledDelete')); }); } }, diff --git a/src/views/map/mapdraft/mapedit/mapoperate/train/trainmodel.vue b/src/views/map/mapdraft/mapedit/mapoperate/train/trainmodel.vue index b209ca46d..b1922bfde 100644 --- a/src/views/map/mapdraft/mapedit/mapoperate/train/trainmodel.vue +++ b/src/views/map/mapdraft/mapedit/mapoperate/train/trainmodel.vue @@ -156,7 +156,13 @@ export default { } else if (this.isUpt) { this.operateTrainModel({ model: this.formModel, type: 'UPT' }); } else if (this.isDel) { - this.operateTrainModel({ model: this.formModel, type: 'DEL'}); + this.$confirm(this.$t('map.wellDelTrianModel'), this.$t('global.tips'), { + confirmButtonText: this.$t('global.confirm'), + cancelButtonText: this.$t('global.cancel'), + type: 'warning' + }).then(() => { + this.operateTrainModel({ model: this.formModel, type: 'DEL'}); + }).catch(() => { }); } this.doClose(); } diff --git a/src/views/map/product/draft.vue b/src/views/map/product/draft.vue deleted file mode 100644 index c1947c450..000000000 --- a/src/views/map/product/draft.vue +++ /dev/null @@ -1,318 +0,0 @@ - - - - diff --git a/src/views/lesson/trainingcategory/edit.vue b/src/views/map/product/edit.vue similarity index 79% rename from src/views/lesson/trainingcategory/edit.vue rename to src/views/map/product/edit.vue index ce5c9e5ae..8fb1913de 100644 --- a/src/views/lesson/trainingcategory/edit.vue +++ b/src/views/map/product/edit.vue @@ -7,10 +7,10 @@ - + - + diff --git a/src/views/lesson/trainingcategory/tree.vue b/src/views/map/product/tree.vue similarity index 93% rename from src/views/lesson/trainingcategory/tree.vue rename to src/views/map/product/tree.vue index c75099a02..17eca4c9b 100644 --- a/src/views/lesson/trainingcategory/tree.vue +++ b/src/views/map/product/tree.vue @@ -1,9 +1,9 @@ diff --git a/src/views/map/runplan/manage/create.vue b/src/views/map/runplan/manage/create.vue index 4028ce95e..c9b4a15d9 100644 --- a/src/views/map/runplan/manage/create.vue +++ b/src/views/map/runplan/manage/create.vue @@ -98,11 +98,11 @@ - {{$t('global.lastStep')}} + {{ $t('global.previousStep') }} - {{$t('global.skip')}} - {{$t('global.create')}} - {{$t('global.confirm')}} + {{ $t('global.skip') }} + {{ $t('global.create') }} + {{ $t('global.confirm') }} @@ -118,7 +118,9 @@ export default { props: { selected: { type: Object, - requited: true + default: function () { + return null; + } } }, data() { diff --git a/src/views/map/runplan/manage/import.vue b/src/views/map/runplan/manage/import.vue index c06ff5e44..644d254c4 100644 --- a/src/views/map/runplan/manage/import.vue +++ b/src/views/map/runplan/manage/import.vue @@ -6,8 +6,8 @@ - {{$t('map.import')}} - {{$t('global.cancel')}} + {{ $t('map.import') }} + {{ $t('global.cancel') }} @@ -21,7 +21,9 @@ export default { props: { selected: { type: Object, - requited: true + default: function () { + return null; + } } }, data() { diff --git a/src/views/map/runplan/manage/list.vue b/src/views/map/runplan/manage/list.vue index 2b8e7b9c5..4fcc7e31c 100644 --- a/src/views/map/runplan/manage/list.vue +++ b/src/views/map/runplan/manage/list.vue @@ -1,7 +1,7 @@ @@ -22,7 +22,9 @@ export default { props: { selected: { type: Object, - requited: true + default: function () { + return null; + } } }, data() { diff --git a/src/views/map/skinCode/draft.vue b/src/views/map/skinCode/draft.vue index 036f11c2b..ace0c8a78 100644 --- a/src/views/map/skinCode/draft.vue +++ b/src/views/map/skinCode/draft.vue @@ -12,9 +12,9 @@
- {{$t('global.create')}} - {{$t('global.update')}} - {{$t('global.return')}} + {{ $t('global.create') }} + {{ $t('global.update') }} + {{ $t('global.return') }}
@@ -48,10 +48,10 @@ export default { computed: { title() { if (this.isAdd) { - return this.$t('map.addMapSkin'); + return this.$t('map.addMapSkin'); } if (this.isEdit) { - return this.$t('map.updateMapSkin'); + return this.$t('map.updateMapSkin'); } return ''; }, diff --git a/src/views/map/skinStyle/draft.vue b/src/views/map/skinStyle/draft.vue index 8726d1bc2..1922c77a4 100644 --- a/src/views/map/skinStyle/draft.vue +++ b/src/views/map/skinStyle/draft.vue @@ -12,8 +12,8 @@
- {{$t('global.create')}} - {{$t('global.update')}} + {{ $t('global.create') }} + {{ $t('global.update') }}
@@ -47,10 +47,10 @@ export default { computed: { title() { if (this.isAdd) { - return this.$t('map.addMapSkin'); + return this.$t('map.addMapSkin'); } if (this.isEdit) { - return this.$t('map.updateMapSkin'); + return this.$t('map.updateMapSkin'); } return ''; }, diff --git a/src/views/map/skinStyle/index.vue b/src/views/map/skinStyle/index.vue index 0c82090ae..cfdb2c82a 100644 --- a/src/views/map/skinStyle/index.vue +++ b/src/views/map/skinStyle/index.vue @@ -25,11 +25,11 @@ export default { queryObject: { name: { type: 'text', - label: this.$t('map.skinDesignation'), + label: this.$t('map.skinDesignation') }, code: { type: 'text', - label: this.$t('map.skinCoding'), + label: this.$t('map.skinCoding') } } }, diff --git a/src/views/package/draft/canDistribute.vue b/src/views/package/draft/canDistribute.vue index 8dfec5c53..b74356b19 100644 --- a/src/views/package/draft/canDistribute.vue +++ b/src/views/package/draft/canDistribute.vue @@ -1,51 +1,59 @@ \ No newline at end of file + }; + }, + computed: { + show() { + return this.dialogShow; + }, + title() { return this.$t('permission.pleaseSelectTransferPermission'); } + }, + methods: { + doShow(data) { + this.dialogShow = true; + this.formModel.canDistribute = true; + }, + doClose() { + this.dialogShow = false; + }, + handleSure() { + this.doClose(); + this.$emit('distribute', this.formModel); + }, + handleClose() { + this.doClose(); + } + } +}; + diff --git a/src/views/package/draft/editRule.vue b/src/views/package/draft/editRule.vue index 32c0f61ad..77f3947b1 100644 --- a/src/views/package/draft/editRule.vue +++ b/src/views/package/draft/editRule.vue @@ -51,7 +51,7 @@ export default { }, DatePicker: { shortcuts: [{ - text: '今天', + text: this.$t('global.today'), onClick(picker) { picker.$emit('pick', new Date()); } @@ -66,13 +66,13 @@ export default { const form = { labelWidth: '120px', items: [ - { prop: 'permissionType', label: '权限类型', type: 'select', required: false, disabled: !this.isAdd, options: this.PermissionTypeList, change: true, onChange: this.permissionTypeChange }, - { prop: 'mapId', label: '地图名称', type: 'select', required: false, disabled: !this.isAdd, show: this.isShowMap, options: this.PublishMapList, change: true, onChange: this.mapChange }, - { prop: 'mapProductCode', label: '地图产品名称', type: 'select', required: false, disabled: !this.isAdd, show: this.isShowMapProduct, options: this.mapProductList, change: true, onChange: this.mapProductChange }, - { prop: 'lessonId', label: '课程名称', type: 'select', required: false, disabled: !this.isAdd, show: this.isShowLesson, options: this.filterPublisLessonList }, - { prop: 'roleName', label: '选择权限所有者', type: 'complete', required: false, disabled: !this.isAdd, show: this.isShowRole, querySearchAsync: this.querySearchAsync, handleSelect: this.prdSelect, placeholder: '请输入昵称/名字/手机号' }, - { prop: 'date', label: '选择时间', type: 'daterange', required: false, viewFormat: 'yyyy-MM-dd HH:mm:ss', valueFormat: 'yyyy-MM-dd HH:mm:ss' }, - { prop: 'amount', label: '权限个数', type: 'number', required: false, min: 0, max: this.maxTotal, message: this.numberMessage } + { prop: 'permissionType', label: this.$t('permission.permissionType'), type: 'select', required: false, disabled: !this.isAdd, options: this.PermissionTypeList, change: true, onChange: this.permissionTypeChange }, + { prop: 'mapId', label: this.$t('permission.mapName'), type: 'select', required: false, disabled: !this.isAdd, show: this.isShowMap, options: this.PublishMapList, change: true, onChange: this.mapChange }, + { prop: 'mapProductCode', label: this.$t('permission.mapProductName'), type: 'select', required: false, disabled: !this.isAdd, show: this.isShowMapProduct, options: this.mapProductList, change: true, onChange: this.mapProductChange }, + { prop: 'lessonId', label: this.$t('permission.lessonName'), type: 'select', required: false, disabled: !this.isAdd, show: this.isShowLesson, options: this.filterPublisLessonList }, + { prop: 'roleName', label: this.$t('permission.belonger'), type: 'complete', required: false, disabled: !this.isAdd, show: this.isShowRole, querySearchAsync: this.querySearchAsync, handleSelect: this.prdSelect, placeholder: '请输入昵称/名字/手机号' }, + { prop: 'date', label: this.$t('permission.selectDate'), type: 'daterange', required: false, viewFormat: 'yyyy-MM-dd HH:mm:ss', valueFormat: 'yyyy-MM-dd HH:mm:ss' }, + { prop: 'amount', label: this.$t('permission.permissionTotal'), type: 'number', required: false, min: 0, max: this.maxTotal, message: this.numberMessage } ] }; return form; @@ -80,28 +80,28 @@ export default { rules() { const crules = { permissionType: [ - { required: true, message: '请选择权限类型', trigger: 'change' } + { required: true, message: this.$t('rules.permissionTypeInput'), trigger: 'change' } ], mapId: [ - { required: true, message: '请选择地图名称', trigger: 'change' } + { required: true, message: this.$t('rules.selectMapName'), trigger: 'change' } ], mapProductCode: [ - { required: true, message: '请选择地图产品名称', trigger: 'change' } + { required: true, message: this.$t('rules.selectMapProductName'), trigger: 'change' } ], lessonId: [ - { required: true, message: '请选择课程', trigger: 'change' } + { required: true, message: this.$t('rules.lessonInput'), trigger: 'change' } ], date: [ - { required: true, message: '请输入时间', trigger: 'blur' } + { required: true, message: this.$t('rules.inputTime'), trigger: 'blur' } ], amount: [ - { required: true, message: '请输入权限个数', trigger: 'change' }, + { required: true, message: this.$t('rules.inputPermissionNumber'), trigger: 'change' }, { validator(rule, value, callback) { if (Number.isInteger(Number(value)) && Number(value) > 0) { callback(); } else { - callback(new Error('权限个数必须大于0')); + callback(new Error(this.$t('rules.permissionNumberGreater0'))); } }, trigger: 'blur' @@ -112,9 +112,9 @@ export default { }, title() { if (this.isAdd) { - return '增加权限打包规则'; + return this.$t('permission.addPermissionPackageRule'); } else { - return '编辑权限打包规则'; + return this.$t('permission.editPermissionPackageRule'); } }, disabled() { @@ -179,7 +179,7 @@ export default { getTotalRemains(model).then(response => { this.maxTotal = response.data; - this.numberMessage = `(剩余最大权限个数:${this.maxTotal})`; + this.numberMessage = this.$t('permission.restPermissionMaxNumber').replace('{0}', this.maxTotal); }).catch(() => { this.numberMessage = ''; }); diff --git a/src/views/package/draft/ruleForm.vue b/src/views/package/draft/ruleForm.vue index 6968f6a9d..659a1dc1b 100644 --- a/src/views/package/draft/ruleForm.vue +++ b/src/views/package/draft/ruleForm.vue @@ -3,11 +3,11 @@
- + - 添加规则 + {{ $t('permission.addRules') }} - + - + - + - + - - - - + + + +
- 打包 - 获取二维码 + {{ $t('permission.package') }} + {{ $t('permission.getQrcode') }} {{ $t('global.back') }}
@@ -109,7 +109,7 @@ export default { const sums = []; columns.forEach((column, index) => { if (index === 0) { - sums[index] = '总数'; + sums[index] = this.$t('global.totoal'); return; } @@ -212,7 +212,7 @@ export default { if (index < 0) { this.ruleList.push(item); } else { - this.$message.warning('已存在此类型规则'); + this.$message.warning(this.$t('permission.hasExitRule')); } }, editRuleForm(item) { @@ -231,7 +231,7 @@ export default { if (this.ruleList.length) { this.$refs.canDistribute.doShow(); } else { - this.$messageBox('请添加规则'); + this.$messageBox(this.$t('permission.pleaseAddRule')); } }, distribute(data) { @@ -242,11 +242,11 @@ export default { packagePermissionDistribute(this.ruleList).then(resp => { this.urlInfo = { url: resp.data, - title: '权限分发二维码' + title: this.$t('global.distributeQrcode') }; this.qrcodeShow(); }).catch(() => { - this.$messageBox('打包权限失败'); + this.$messageBox(this.$t('error.packagePermissionFailed')); }); }, qrcodeShow() { diff --git a/src/views/publish/examRule/index.vue b/src/views/publish/examRule/index.vue index 215dc4ab3..8b46f4397 100644 --- a/src/views/publish/examRule/index.vue +++ b/src/views/publish/examRule/index.vue @@ -133,7 +133,7 @@ export default { { type: 'button', title: this.$t('global.operate'), - width: '300', + width: '380', buttons: [ { name: this.$t('global.fastCreate'), diff --git a/src/views/scriptManage/display/index.vue b/src/views/scriptManage/display/index.vue index 4d197c1f1..170343197 100644 --- a/src/views/scriptManage/display/index.vue +++ b/src/views/scriptManage/display/index.vue @@ -24,7 +24,7 @@ export default { data() { return { size: { - width: document.documentElement.clientWidth - 970, + width: document.documentElement.clientWidth - 780, height: document.documentElement.clientHeight }, group:this.$route.query.group, @@ -36,7 +36,7 @@ export default { }, methods: { resizeHandler() { - this.size = { width: this._clientWidth - 970, height: this._clientHeight}; + this.size = { width: this._clientWidth - 780, height: this._clientHeight}; }, loadInitData() { } @@ -49,7 +49,7 @@ export default { display: flex; flex-flow: row; .script-card { - width: 970px; + width: 780px; } } diff --git a/src/views/scriptManage/display/tipScriptRecord.vue b/src/views/scriptManage/display/tipScriptRecord.vue index bc59ad248..cd151c8e7 100644 --- a/src/views/scriptManage/display/tipScriptRecord.vue +++ b/src/views/scriptManage/display/tipScriptRecord.vue @@ -162,10 +162,6 @@ import {saveScriptScenes, saveScriptData, dumpScriptData, updateMapLocation, scr this.initAutoSaveScript(); }) }, - saveMaplocation() - { - - } } } @@ -190,7 +186,7 @@ import {saveScriptScenes, saveScriptData, dumpScriptData, updateMapLocation, scr float: left; left: 0px; top:0px; - width: 955px; + width: 765px; height:100%; background-color: #fff; overflow: hidden; diff --git a/src/views/scriptManage/scriptRecord/addAction.vue b/src/views/scriptManage/scriptRecord/addAction.vue index c7b0ebd30..b78b1e19a 100644 --- a/src/views/scriptManage/scriptRecord/addAction.vue +++ b/src/views/scriptManage/scriptRecord/addAction.vue @@ -98,6 +98,11 @@ this.$parent.$parent.$parent.setIsParse(this.isPause); this.$refs['modalData'].clearValidate(); this.$refs['commandData'].clearValidate(); + if(!val) + { + this.initActionData(); + this.initCommandActionData(); + } }, }, data() { @@ -219,7 +224,7 @@ this.adding=false; this.$message.success('添加指令成功'); this.$emit('create',true); - this.initCommandActionData(); + // this.initCommandActionData(); }).catch(error => { this.adding=false; this.$messageBox(`添加指令失败: ${error.message}`); @@ -245,7 +250,7 @@ this.modifying=false; this.$message.success('添加对话成功'); this.$emit('create',true); - this.initActionData(); + // this.initActionData(); }).catch(error => { this.modifying=false; this.$messageBox(`添加对话失败: ${error.message}`); @@ -261,7 +266,7 @@ this.$emit('modifyButtonName'); this.$message.success('修改对话成功'); this.$emit('create',false); - this.initActionData(); + // this.initActionData(); }).catch(error => { this.modifying=false; this.$messageBox(`修改对话失败: ${error.message}`); @@ -373,11 +378,11 @@ // width:98%; } .inputStyle{ - width:300px; + width:200px; height:30px; } .textareaStyle{ - width:300px; + width:200px; } .conversitionCard{ margin-left: 20px; diff --git a/src/views/scriptManage/scriptRecord/getAction.vue b/src/views/scriptManage/scriptRecord/getAction.vue index 9255680e8..f8fab3f14 100644 --- a/src/views/scriptManage/scriptRecord/getAction.vue +++ b/src/views/scriptManage/scriptRecord/getAction.vue @@ -14,12 +14,25 @@
+ - {{actionInfo.otherInfo}} + + + {{actionInfo.memberName}} + + {{actionInfo.targetName}} + : + {{actionInfo.reply}} + + + {{actionInfo.memberName}} + 执行指令: + {{actionInfo.command}} +
- 修改 + 修改
@@ -100,7 +113,7 @@ { let target=memberVOList.find(elem=>{return elem.id==element.targetId}); let targetName=target.name==undefined?"":" - "+target.name; - this.actionInfoList.push({id:element.id,detail:""+member.role+memberName+""+" 对 "+""+target.role+targetName+":",otherInfo:element.reply,row:element,disabled:false}); + this.actionInfoList.push({id:element.id,isCoversition:true,memberName:member.role+memberName,targetName:target.role+targetName,reply:element.reply,row:element,visible:true}); break; } case "Command": @@ -110,12 +123,12 @@ { case 'Train_Manual_Route_Blocking_Drive': { - this.actionInfoList.push({id:element.id,detail:""+member.role+memberName+"执行指令 :",otherInfo:deviceCommand.label,row:element,disabled:true}); + this.actionInfoList.push({id:element.id,isCoversition:false,memberName:member.role+memberName,command:deviceCommand.label,row:element,visible:false}); break; } case 'Train_Manual_Limit_Drive': { - this.actionInfoList.push({id:element.id,detail:""+member.role+memberName+"执行指令 : ",otherInfo:deviceCommand.label,row:element,disabled:true}); + this.actionInfoList.push({id:element.id,isCoversition:false,memberName:member.role+memberName,command:deviceCommand.label,row:element,visible:false}); break; } default: @@ -169,14 +182,14 @@ } .addScript{ float:left; - width:450px; + width:380px; display: inline-block; } .actionListTable{ font-size: 15px; - width:490px; + width:380px; display: inline-block; - margin-left:450px; + margin-left:380px; height:100%; } .actionList{ @@ -188,7 +201,7 @@ top: 0; left: 0; margin-right: 20px; - width: 940px; + width: 740px; border-bottom: 1px #ccc solid; } .titleStyle{ @@ -200,7 +213,7 @@ position: relative; } .actionTable{ - width:370px; + width:280px; padding: 15px 0px 10px 15px; display: inline-block; line-height: 200%; @@ -219,11 +232,17 @@ width: 0px; } .el_timeline{ - width: 470px; + width: 360px; margin-top:10px; } .elScrollbar{ - width: 450px; + width: 380px; position: absolute; } + .roleClass{ + color:#409EFF + } + .commandStyle{ + color:#f00; + } diff --git a/src/views/teach/category/tree.vue b/src/views/teach/category/tree.vue index 208f82070..ce3e8379e 100644 --- a/src/views/teach/category/tree.vue +++ b/src/views/teach/category/tree.vue @@ -1,8 +1,7 @@