Bladeren bron

Merge branch 'master' of http://106.15.38.8:3000/yaoyq/imcs-yj-fe

王克恕 3 jaren geleden
bovenliggende
commit
b54751326c

+ 93 - 0
imcs-ui/src/api/prepareProductMgr/customizeCuttingTool.js

@@ -0,0 +1,93 @@
+import axiosApi from '../AxiosApi.js'
+
+const apiList = {
+	getList: {
+    method: 'POST',
+    url: `/authority/customizeCuttingTool/all`
+  },
+  page: {
+    method: 'POST',
+    url: `/authority/customizeCuttingTool/page`
+  },
+  pageList: {
+    method: 'POST',
+    url: `/authority/customizeCuttingTool/pageList`
+  },
+  update: {
+    method: 'POST',
+    url: `/authority/customizeCuttingTool/update`
+  },
+  save: {
+    method: 'POST',
+    url: `/authority/customizeCuttingTool`
+  },
+  remove: {
+    method: 'DELETE',
+    url: `/authority/customizeCuttingTool`
+  },
+  get: {
+    method: 'POST',
+    url: `/authority/customizeCuttingTool/get`
+  },
+  list: {
+    method: 'POST',
+    url: `/authority/customizeCuttingTool/query`
+  }
+}
+
+export default {
+	getList (data) {
+    return axiosApi({
+      ...apiList.getList,
+      data
+    })
+  },
+  page (data) {
+    return axiosApi({
+      ...apiList.page,
+      data
+    })
+  },
+  pageList (data) {
+    return axiosApi({
+      ...apiList.pageList,
+      data
+    })
+  },
+  save (data) {
+    return axiosApi({
+      ...apiList.save,
+      data
+    })
+  },
+  update (data) {
+    return axiosApi({
+      ...apiList.update,
+      data
+    })
+  },
+  remove (data) {
+    return axiosApi({
+      ...apiList.remove,
+      data
+    })
+  },
+  get (data) {
+    return axiosApi({
+      ...apiList.get,
+      data
+    })
+  },
+  list (data) {
+    return axiosApi({
+      ...apiList.list,
+      data
+    })
+  },
+  check (code) {
+    return axiosApi({
+      method: 'GET',
+      url: `/authority/customizeCuttingTool/check/${code}`
+    })
+  },
+}

+ 87 - 0
imcs-ui/src/api/prepareProductMgr/machineCustomizeCuttingTool.js

@@ -0,0 +1,87 @@
+import axiosApi from '../AxiosApi.js'
+
+const apiList = {
+	getList: {
+    method: 'POST',
+    url: `/authority/machineCuttingTool/all`
+  },
+  page: {
+    method: 'POST',
+    url: `/authority/machineCuttingTool/page`
+  },
+  pageList: {
+    method: 'POST',
+    url: `/authority/machineCuttingTool/pageList`
+  },
+  update: {
+    method: 'POST',
+    url: `/authority/machineCuttingTool/update`
+  },
+  save: {
+    method: 'POST',
+    url: `/authority/machineCuttingTool`
+  },
+  remove: {
+    method: 'DELETE',
+    url: `/authority/machineCuttingTool`
+  },
+  get: {
+    method: 'POST',
+    url: `/authority/machineCuttingTool/get`
+  },
+  list: {
+    method: 'POST',
+    url: `/authority/machineCuttingTool/query`
+  }
+}
+
+export default {
+	getList (data) {
+    return axiosApi({
+      ...apiList.getList,
+      data
+    })
+  },
+  page (data) {
+    return axiosApi({
+      ...apiList.page,
+      data
+    })
+  },
+  pageList (data) {
+    return axiosApi({
+      ...apiList.pageList,
+      data
+    })
+  },
+  save (data) {
+    return axiosApi({
+      ...apiList.save,
+      data
+    })
+  },
+  update (data) {
+    return axiosApi({
+      ...apiList.update,
+      data
+    })
+  },
+  remove (data) {
+    return axiosApi({
+      ...apiList.remove,
+      data
+    })
+  },
+  get (data) {
+    return axiosApi({
+      ...apiList.get,
+      data
+    })
+  },
+  list (data) {
+    return axiosApi({
+      ...apiList.list,
+      data
+    })
+  },
+}

+ 109 - 97
imcs-ui/src/api/resourceProductMgr/equipmentMgr.js

@@ -1,97 +1,109 @@
-/************** 【生产单元管理-设备管理】的API *****************/
-import axiosApi from '../AxiosApi.js'
-
-const apiList = {
-	// 【选择设备】-分页列表数据
-	getPageList: {
-	    method: 'POST',
-	    url: `/authority/productionresource/pageList`
-	},
-	
-	// 【设备管理】-列表数据
-	getList: {
-	    method: 'POST',
-	    url: `/authority/productionresource/getList`
-	},
-	
-	//【设备管理-弹出】-列表数据
-	resourcePageList: {
-	    method: 'POST',
-	    url: `/authority/resourceBusiness/resourcePageList`
-	},
-	
-	// 【设置设备-确定】-保存数据
-	setResource: {
-	    method: 'POST',
-	    url: `/authority/zZone/setResource`
-	},
-	
-	// 【生产资源管理-删除】
-	remove: {
-	    method: 'DELETE',
-	    url: `/authority/productionresource`
-	},
-	
-	// 【设备-包含指令】-数据
-	getProductionresourceList: {
-	    method: 'POST',
-	    url: `/authority/productionresource/getProductionresourceList`
-	},
-	
-	removeMore: {
-	    method: 'POST',
-	    url: `/authority/productionresource/delete`
-	},
-}
-
-export default {
-	getList (data) {
-	    return axiosApi({
-	      ...apiList.getList,
-	      data
-	    })
-	},
-	
-	getPageList (data) {
-	    return axiosApi({
-	      ...apiList.getPageList,
-	      data
-	    })
-	},
-	
-	//【设备管理-弹出】-列表数据
-	resourcePageList (data) {
-	    return axiosApi({
-	      ...apiList.resourcePageList,
-	      data
-	    })
-	},
-	
-	getProductionresourceList (data) {
-	    return axiosApi({
-	      ...apiList.getProductionresourceList,
-	      data
-	    })
-	},
-	
-	setResource (data) {
-	    return axiosApi({
-	      ...apiList.setResource,
-	      data
-	    })
-	},
-	
-	remove (data) {
-	    return axiosApi({
-	      ...apiList.remove,
-	      data
-	    })
-	},
-	
-	removeMore (data) {
-	    return axiosApi({
-	      ...apiList.removeMore,
-	      data
-	    })
-	},
-}
+/************** 【生产单元管理-设备管理】的API *****************/
+import axiosApi from '../AxiosApi.js'
+
+const apiList = {
+
+  page: {
+    method: 'POST',
+    url: `/authority/productionresource/page`
+  },
+
+	// 【选择设备】-分页列表数据
+	getPageList: {
+	    method: 'POST',
+	    url: `/authority/productionresource/pageList`
+	},
+
+	// 【设备管理】-列表数据
+	getList: {
+	    method: 'POST',
+	    url: `/authority/productionresource/getList`
+	},
+
+	//【设备管理-弹出】-列表数据
+	resourcePageList: {
+	    method: 'POST',
+	    url: `/authority/resourceBusiness/resourcePageList`
+	},
+
+	// 【设置设备-确定】-保存数据
+	setResource: {
+	    method: 'POST',
+	    url: `/authority/zZone/setResource`
+	},
+
+	// 【生产资源管理-删除】
+	remove: {
+	    method: 'DELETE',
+	    url: `/authority/productionresource`
+	},
+
+	// 【设备-包含指令】-数据
+	getProductionresourceList: {
+	    method: 'POST',
+	    url: `/authority/productionresource/getProductionresourceList`
+	},
+
+	removeMore: {
+	    method: 'POST',
+	    url: `/authority/productionresource/delete`
+	},
+}
+
+export default {
+  page (data) {
+    return axiosApi({
+      ...apiList.page,
+      data
+    })
+  },
+	getList (data) {
+	    return axiosApi({
+	      ...apiList.getList,
+	      data
+	    })
+	},
+
+	getPageList (data) {
+	    return axiosApi({
+	      ...apiList.getPageList,
+	      data
+	    })
+	},
+
+	//【设备管理-弹出】-列表数据
+	resourcePageList (data) {
+	    return axiosApi({
+	      ...apiList.resourcePageList,
+	      data
+	    })
+	},
+
+	getProductionresourceList (data) {
+	    return axiosApi({
+	      ...apiList.getProductionresourceList,
+	      data
+	    })
+	},
+
+	setResource (data) {
+	    return axiosApi({
+	      ...apiList.setResource,
+	      data
+	    })
+	},
+
+	remove (data) {
+	    return axiosApi({
+	      ...apiList.remove,
+	      data
+	    })
+	},
+
+	removeMore (data) {
+	    return axiosApi({
+	      ...apiList.removeMore,
+	      data
+	    })
+	},
+}

+ 92 - 0
imcs-ui/src/lang/zh/cuttingTool.js

@@ -0,0 +1,92 @@
+/***************************【统计分析】***********************************/
+export default {
+  cuttingTool: {
+    // 本模型下的共通
+    common: {
+      machineCuttingTool: '产线刀具动态数据',
+      customizeCuttingTool: '刀具基础数据',
+      onlineStatus: {
+        online: '在线',
+        offline: '离线',
+      }
+    },
+    // 列表搜索表单名称
+    searchForm: {
+      machineCuttingtool: {
+        resourceName: '资源名称',
+        resourceStatus: '在线状态',
+      },
+      customizeCuttingtool: {
+        cuttingtoolName: '刀具名称',
+        specifications: '刀具规格',
+        status: '状态',
+      },
+    },
+    // 按钮的名称
+    buttons: {
+      machineCuttingtool: {
+        synCuttingtool: '刀具同步'
+      }
+    },
+    // 列表的cell名称
+    table: {
+      // 设备刀具管理
+      machineCuttingtool: {
+        resourceName: '设备名称',
+        resourceNo: '设备编号',
+        productlineName: '所属产线',
+        resourceStatus: '设备连接状态',
+        sysTime: '同步时间',
+        cuttingToolNum: '刀库刀具数量',
+        cuttingToolName: '刀具名称',
+        specifications: '刀具规格',
+        cuttingToolType: '刀具类型',
+        cuttingToolPicture: '刀具图片',
+        cuttingToolInstallPicture: '装夹方式',
+        cuttingToolMonitorType: '监控方式',
+        useageCount: '额定使用寿命',
+        surplusCount: '剩余使用寿命',
+        earlyWarnning: '预警极限',
+        cuttingToolId: '刀具ID',
+        sisterCuttingToolId: '姊妹刀号',
+        knifeEdgeNumber: '刀沿号',
+        cuttingToolPosition: '刀具位置',
+        machineCuttingToolType: '刀具类型',
+        cuttingToolRadius: '刀具半径',
+        cuttingToolLife: '刀具寿命'
+      },
+      // 刀具基础数据
+      customizeCuttingtool: {
+        cuttingToolName: '刀具名称',
+        specifications: '刀具规格',
+        cuttingToolType: '刀具类型',
+        cuttingToolPicture: '刀具图片',
+        cuttingToolInstallPicture: '装夹方式',
+        status: '启用状态',
+      }
+    },
+    // 表单数据名称
+    form: {
+      // 刀具基础数据
+      customizeCuttingtool: {
+        cuttingToolName: '刀具名称',
+        specifications: '刀具规格',
+        cuttingToolType: '刀具类型',
+        cuttingToolPicture: '刀具图片',
+        cuttingToolInstallPicture: '装夹方式',
+        remark: '备注',
+        status: '启用状态',
+      }
+    },
+    // 表单验证规则提示信息
+    rules: {
+      customizeCuttingtool: {
+        remark: '备注长度不能超过255位',
+      }
+    },
+    // 提示或者显示信息
+    tips:{
+      fileTips: '只能上传图片文件!',
+    }
+  }
+}

+ 665 - 662
imcs-ui/src/lang/zh/zh.js

@@ -1,662 +1,665 @@
-// 【订单】
-import zhOrder from './order'
-// 【边线库管理】
-import zhLineSide from './lineSide'
-// 【建模中心】
-import zhModeling from './modeling'
-// 【生产准备中心】
-import zhPrepare from './prepare'
-// 【生产资源中心】
-import zhResource from './resource'
-// 【班表管理】
-import zhCalssSchedule from './calssSchedule'
-// 【基础配置】
-import zhBasicConfig from './basicConfig'
-// 【运行管理中心】
-import zhRunCenter from './runCenter'
-// 【机加工人端】
-import zhMachining from './machining'
-// 【仓储管理】
-import zhWms from './wmsMenu'
-// 【大屏相关】
-import zhLargeScreen from './largeScreen'
-// 【日志管理】
-import zhDeveloper from './developer'
-// 【打标码管理】
-import zhMarking from './marking'
-// 【打标码管理】
-import zhDispatch from './dispatch'
-// 【统计分析】
-import zhStatisticalAnalysis from './statisticalAnalysis'
-
-export default {
-	/********* 分类整理多语言文件(start)  ********/
-	...zhOrder,
-	...zhLineSide,
-	...zhModeling,
-	...zhPrepare,
-	...zhResource,
-	...zhCalssSchedule,
-	...zhBasicConfig,
-	...zhRunCenter,
-	...zhMachining,
-	...zhLargeScreen,
-  ...zhWms,
-  ...zhDeveloper,
-  ...zhMarking,
-  ...zhDispatch,
-  ...zhStatisticalAnalysis,
-	/********* 分类整理多语言文件(end)  ********/
-  	route: {
-    	dashboard: '系统主页',
-    	profile: '个人中心'
-  	},
-  	navbar: {
-	    setting: '系统设置',
-	    github: '项目地址',
-	    logOut: '退出登录',
-	    profile: '个人中心',
-	    docs: '项目文档',
-	    theme: '换肤',
-	    size: '布局大小',
-	    deleteCache: '清除缓存'
-  	},
-  	index: {   // 首页的语言
-  		normalTenant: '在线生产资源数量/总数',
-  		frozenTenant: '待生产订单',
-  		lineNum: '待完成计划',
-  		resourceNum: '待完成任务',
-  		runTimeStatics: '企产线任务完成量统计',
-  		resourceTime: '产线生产资源任务完成量排行',
-  		comBtn: '常用功能',
-  		loginInfo: '登录监控',
-  		tips: '选择不超过30天!',
-  		dates: {
-  			day: '今日',
-  			week: '本周',
-  			month: '本月',
-  			year: '全年'
-  		},
-  		table: {
-  			userName: '名称',
-  			requestIp: 'IP',
-  			createTime: '时间'
-  		}
-  	},
-  	login: {
-	    title: '企业端登录',
-	    logIn: '立即登录',
-	    tenant: '企业',
-	    username: '账号',
-	    password: '密码',
-	    code: '验证码',
-	    ortherLoginType: '其他登录方式',
-	    chooseToSignIn: '选择以下账号登录:',
-	    type: {
-	      up: '账号密码登录',
-	      social: '第三方账号登录'
-	    },
-	    shuoming: {
-	    	title: '智能总控系统-企业端',
-	    	tips: 'IMCS-ECS'
-	    }
-  	},
-  documentation: {
-    documentation: '项目文档',
-    github: '项目地址'
-  },
-  table: {
-    blockList: {
-      id: 'ID',
-      ip: '阻止访问ip',
-      requestUri: '请求URI',
-      requestMethod: '请求方法',
-      limitStart: '限制时间起',
-      limitEnd: '限制时间止',
-      status: '状态',
-      location: '位置',
-    },
-    rateLimiter: {
-      id: 'ID',
-      count: '次数',
-      requestUri: '请求URI',
-      requestMethod: '请求方法',
-      limitStart: '限制时间起',
-      limitEnd: '限制时间止',
-      status: '状态',
-      intervalSec: '时间窗口',
-    },
-    tenant: {
-      code: '企业编码',
-      name: '企业名称',
-      type: '类型',
-      status: '状态',
-      duty: '责任人',
-      expirationTime: '有效期',
-      logo: 'logo',
-      describe: '企业简介',
-      passwordExpire: '密码有效期',
-      isMultipleLogin: '是否允许多地登录',
-      passwordErrorNum: '密码输错次数',
-      passwordErrorLockTime: '账号锁定时间'
-    },
-    user: {
-      account: '账号',
-      name: '姓名',
-      password: '密码',
-      orgId: '组织',
-      stationId: '岗位',
-      email: '邮箱',
-      sex: '性别',
-      status: '状态',
-      mobile: '电话',
-      avatar: '头像',
-      workDescribe: '个人描述',
-      passwordErrorLastTime: '最后一次输错密码时间',
-      passwordErrorNum: '密码错误次数',
-      passwordExpireTime: '密码过期时间',
-      lastLoginTime: '最后登录时间',
-      nation: '民族',
-      education: '学历',
-      positionStatus: '职位状态',
-      createTime: '创建时间',
-      updateTime: '修改时间',
-      oldPassword: '旧密码',
-      newPassword: '新密码',
-      confirmPassword: '确认密码',
-      social: '第三方账号'
-    },
-    role: {
-      code: '编码',
-      name: '角色名称',
-      describe: '角色描述',
-      status: '状态',
-      readonly: '是否内置',
-      createTime: '创建时间',
-      dsType: '数据范围',
-      orgList: '组织'
-    },
-    menu: {
-      id: 'ID',
-      label: '名称',
-      describe: '描述',
-      code: '权限编码',
-      isPublic: '是否公有',
-      path: '路由URI',
-      type: '类型',
-      component: '组件',
-      isEnable: '是否启用',
-      sortValue: '排序',
-      parentId: '上级ID',
-      icon: '图标',
-      group: '分组'
-    },
-    resource: {
-      code: '编码',
-      name: '名称',
-      describe: '描述'
-    },
-    org: {
-      label: '部门名称',
-      abbreviation: '简称',
-      describe: '描述',
-      parentId: '上级ID',
-      sortValue: '排序',
-      status: '状态'
-    },
-    station: {
-      name: '岗位名称',
-      describe: '描述',
-      orgId: '组织',
-      status: '状态'
-    },
-    optLog: {
-      requestIp: 'IP',
-      type: '类型',
-      userName: '操作人',
-      description: '操作描述',
-      classPath: '类路径',
-      actionMethod: '请求方法',
-      requestUri: '请求地址',
-      httpMethod: '请求类型',
-      params: '方法参数',
-      result: '返回值',
-      exDesc: '异常详情信息',
-      consumingTime: '消耗时间',
-      startTime: '开始时间',
-      finishTime: '完成时间',
-      ua: '浏览器请求头'
-    },
-    loginLog: {
-      userName: '姓名',
-      account: '账号',
-      requestIp: 'IP',
-      description: '描述',
-      loginDate: '登录时间',
-      ua: '浏览器请求头',
-      browser: '浏览器',
-      browserVersion: '浏览器版本',
-      operatingSystem: '操作系统',
-      location: '地区'
-    },
-    attachment: {
-      bizId: '业务ID',
-      bizType: '业务类型',
-      dataType: '数据类型',
-      submittedFileName: '文件名',
-      group: '组',
-      path: '路径',
-      relativePath: '相对路径',
-      url: '访问链接',
-      fileMd5: 'md5',
-      contextType: '类型',
-      filename: '唯一文件名',
-      ext: '后缀',
-      size: '大小',
-      orgId: '组织',
-      icon: '图标'
-    },
-    smsTemplate: {
-      providerType: '类型',
-      appId: '应用ID',
-      appSecret: '应用密码',
-      url: 'SMS服务域名',
-      customCode: '模板编码',
-      name: '模板名称',
-      content: '模板内容',
-      templateParams: '模板参数',
-      templateCode: '模板CODE',
-      signName: '模板签名',
-      templateDescribe: '模板描述'
-    },
-    smsTask: {
-      templateId: '短信模板',
-      status: '执行状态',
-      sourceType: '来源类型',
-      receiver: '接收者',
-      topic: '主题',
-      templateParams: '模板参数',
-      sendTime: '发送时间',
-      content: '发送内容',
-      draft: '是否草稿'
-    },
-    smsSendStatus: {
-      taskId: '任务',
-      sendStatus: '发送状态',
-      receiver: '接收者手机号',
-      bizId: '发送回执',
-      ext: '发送返回',
-      code: '状态码',
-      message: '状态码的描述',
-      fee: '计费条数'
-    },
-    msgs: {
-      bizType: '业务类型',
-      bizId: '业务ID',
-      msgsCenterType: '消息类型',
-      title: '标题',
-      content: '内容',
-      author: '作者',
-      handlerUrl: '处理地址',
-      handlerParams: '处理参数',
-      isSingleHandle: '是否单人处理',
-      isDelete: '是否删除',
-      isRead: '状态',
-      readTime: '读消息的时间'
-    },
-    systemApi: {
-      code: "接口编码",
-      name: "接口名称",
-      describe: "资源描述",
-      requestMethod: "请求方式",
-      contentType: "响应类型",
-      serviceId: "服务ID",
-      path: "请求路径",
-      status: "状态",
-      isPersist: "保留数据",
-      isAuth: "是否需要认证",
-      isOpen: "是否公开",
-      className: "类名",
-      methodName: "方法名"
-    },
-    application: {
-      clientId: "clientId",
-      clientSecret: "clientSecret",
-      website: "官网",
-      name: "应用名称",
-      icon: "应用图标",
-      appType: "类型",
-      describe: "备注",
-      status: "状态"
-    },
-    dictionary: {
-      type: "类型",
-      name: "名称",
-      describe: "描述",
-      status: "状态"
-    },
-    dictionaryItem: {
-      dictionaryId: "字典ID",
-      dictionaryType: "类型",
-      code: "编码",
-      name: "名称",
-      describe: "描述",
-      status: "状态",
-      sortValue: "排序"
-    },
-    area: {
-      code: "编码",
-      label: "名称",
-      fullName: '全名',
-      sortValue: '排序',
-      longitude: '经度',
-      latitude: '维度',
-      level: "行政区级",
-      parentCode: '父编码',
-      parentId: '上级地区',
-      source: '数据来源'
-    },
-    parameter: {
-      key: "参数键",
-      name: "参数名称",
-      value: '参数值',
-      describe: '描述',
-      status: '状态',
-      readonly: '只读'
-    },
-    gen: {
-      config: {
-        author: '作者名称',
-        basePackage: '基础包名',
-        entityPackage: 'entity包名',
-        mapperPackage: 'mapper包名',
-        mapperXmlPackage: 'mapperXml包名',
-        servicePackage: 'service包名',
-        serviceImplPackage: 'serviceImpl包名',
-        controllerPackage: 'controller包名',
-        isTrim: '是否去除表前缀',
-        trimValue: '表前缀'
-      },
-      generate: {
-        tableName: '表名',
-        remark: '备注',
-        dataRows: '数据量(行)',
-        createTime: '创建时间',
-        updateTime: '更新时间'
-      }
-    },
-    eximport: {
-      field1: '字段1',
-      field2: '字段2',
-      field3: '字段3',
-      createTime: '导入时间'
-    },
-    update: '更新',
-    status: '状态',
-    refresh: '刷新',
-    operation: '操作',
-    assistOperation: '辅佐操作',
-    search: '搜索',
-    reset: '重置',
-    more: '更多',
-    add: '添加',
-    export: '导出',
-    exportPreview: '导出预览',
-    import: '导入',
-    upload: '上传',
-    download: '下载',
-    templateDownload: '模板下载',
-    delete: '删除',
-    resetPassword: '密码重置',
-    openInNewPage: '新页面打开',
-    createTime: '创建时间',
-    updateTime: '修改时间'
-  },
-  tagsView: {
-    refresh: '刷新当前',
-    close: '关闭当前',
-    closeOthers: '关闭其它',
-    closeAll: '关闭所有'
-  },
-  settings: {
-    title: '系统布局配置',
-    theme: '主题色',
-    tagsView: '开启 Tags-View',
-    fixedHeader: '固定 Header',
-    sidebarLogo: '侧边栏 Logo'
-  },
-  system: {
-    title: '智能总控端'
-  },
-  tips: {
-  	audioTips: '你确定提交审核?',
-    storage: '你确定提交入库?',
-  	comTips: '删除数据后,将会消失,您的努力将白费,请确认删除?',
-    systemError: '系统维护中,请稍微再试~',
-    usernameShouldNotBeEmpty: '用户名不能为空',
-    passwordShouldNotBeEmpty: '密码不能为空',
-    switchLanguageSuccess: '切换语言成功',
-    loginSuccess: '登录成功',
-    loginFail: '登录失败',
-    defaultPassword: '用户的默认密码为123456',
-    getDataFail: '获取数据失败',
-    createSuccess: '新增成功',
-    lockSuccess: '锁定成功!',
-    unlockSuccess: '解锁成功!',
-    copySelected: '复制成功',
-    updateSuccess: '修改成功',
-    deleteSuccess: '删除成功',
-    noDataSelected: '请先选择需要操作的数据',
-    confirmDelete: '选中数据将被永久删除, 是否继续?',
-    confirmDeleteCache: '是否立即清除用户权限缓存?',
-    containCurrentUser: '包含当前登录用户,操作已取消',
-    neverLogin: '从未登录过系统',
-    nothing: '这家伙很懒,什么都没留下',
-    topId: '值为0时表示顶级节点',
-    choose: '已选择:',
-    chooseNothing: '尚未选择任何图标',
-    onlyChooseOne: '只能选择一个节点作为父节点',
-    noNodeSelected: '请先选择节点',
-    confirmDeleteNode: '选中节点及其子结点将被永久删除, 是否继续?',
-    iframeGrant: '用户名:zuihou 密码:zuihou',
-    notEqual: '两次输入不一致',
-    oldPasswordIncorrect: '原密码不正确',
-    uploadSuccess: '上传成功',
-    uploadFailed: '上传失败',
-    onlySupportXlsx: '只支持Xlsx类型文件',
-    updating: '修改中',
-    updateFailed: '修改失败',
-    noPermission: '无权限',
-    confirmRestPassword: '确定重置所选用户密码?',
-    resetPasswordSuccess: '所选用户密码重置已被重置为123456',
-    getCodeImageFailed: '获取图形验证码失败',
-    tooManyRequest: '获取验证码过于频繁,请1分钟后再试',
-    clientOriginSecret: '该客户端原始密码为:',
-    unSelected: '请至少选择一条数据!',
-    mustOne: '请只能选择一条数据!',
-    frozen: '冻结成功!',
-    enable: '启用成功!',
-    numberTips: '不超过100个字符。',
-    optionSuccess: '操作成功!'
-  },
-  rules: {
-    require: '不能为空',
-    range0to255: '长度在 0 到 255 个字符',
-    range2to10: '长度在 2 到 10 个字符',
-    range3to10: '长度在 3 到 10 个字符',
-    range3to20: '长度在 3 到 20 个字符',
-    range4to10: '长度在 4 到 10 个字符',
-    range6to20: '长度在 6 到 20 个字符',
-    email: '请输入正确的邮箱地址',
-    mobile: '请输入合法的手机号',
-    usernameExist: '该用户名已存在',
-    clientIdExist: '该Client ID已存在',
-    roleNameExist: '该角色名称已存在',
-    noMoreThan10: '长度不能超过10个字符',
-    noMoreThan11: '长度不能超过11个字符',
-    noMoreThan20: '长度不能超过20个字符',
-    noMoreThan50: '长度不能超过50个字符',
-    noMoreThan100: '长度不能超过100个字符',
-    invalidInteger: '请输入大于零的整数',
-    invalidURL: '不是有效的URL',
-    fields: '请输入正确的字段标志符!'
-  },
-  common: {
-  	save: '保存',
-    system: 'SaaS型微服务快速开发平台',
-    desc: {
-      a: '基于SpringBoot 2.2.9 & SpringCloud Hoxton.SR7',
-      b: '使用Jwt自定义统一认证',
-      c: '企业级设计和配置,拒绝demo项目',
-      d: '前后端分离架构,提高软件开发效率',
-      e: '集成多种监控,为微服务保驾护航',
-      f: '提供详细的文档&视频教程,手把手教你从零搭建到部署'
-    },
-    date: {
-    	year: '年',
-    	month: '月',
-    	day: '日',
-    	sun: '星期天'
-    },
-    files: {
-    	noFile: '未上传',
-    	yesFile: '已上传'
-    },
-    timeArea: {
-    	lastWeek: '最近一周',
-    	lastMonth: '最近一个月',
-    	lastThreeMonth: '最近三个月'
-    },
-    individual: '个',
-    uploadImg: '上传图片',
-    view: '查看',
-    tips: '提示',
-    clear: '清除',
-    confirm: '确定',
-    cancel: '取消',
-    add: '新增',
-    edit: '修改',
-    delete: '删除',
-	search: '搜索',
-	reset: '重置',
-	colse: '关闭',
-    copy: '复制',
-    upload: '上传',
-    preview: '预览',
-    setting: '设置',
-    execute: '执行',
-    toViod: '作废',
-    sort: '排序',
-    pleaseEnter: '请输入',
-    pleaseSelect: '请选择',
-    separator: '至',
-    startTime: '开始日期',
-    endTime: '结束日期',
-    serialNo: '序号',
-    show: '显示',
-    hide: '隐藏',
-    frozen: '冻结',
-    yes: '是',
-    no: '否',
-    lock: '锁定',
-    unlock: '未锁定',
-    readonly: '只读',
-    readCreate: '读写',
-    noData: '暂无数据',
-    vision: '版本号',
-    remark: '备注',
-    selected: '选择',
-    weight: '权重',
-    audio: {
-    	type: '审核状态',
-    	add: '新增',
-    	addAudio: '提交审核',
-    	addAudioTips: '提交审核成功!',
-    	audio: '审核',
-    	daiAudio: '待审核',
-    	audioOk: '审核通过',
-    	aduioFail: '审核不通过'
-    },
-    adopt: {
-    	adopt: '通过',
-    	unadopt: '不通过'
-    },
-    qualified: {
-    	qualified: '合格',
-    	unqualified: '不合格',
-    },
-    sex: {
-      male: '男性',
-      female: '女性',
-      secret: '保密'
-    },
-    status: {
-    	init: '状态',
-      	valid: '启用',
-      	invalid: '禁用',
-      	stop: '暂停',
-      	start: '开始'
-    },
-    menu: {
-      menu: '菜单',
-      button: '按钮'
-    },
-    tab: {
-      common: '通用类',
-      directivity: '指向性',
-      solid: '填充类',
-      food: '食品类'
-    },
-    aboutMe: '关于我',
-    changeAvatar: '更换头像',
-    lastLoginTime: '上次登录时间',
-    goodMorning: '早上好',
-    goodAfternoon: '下午好',
-    goodEvening: '晚上好',
-    randomMessage: {
-      0: '帮我帮我帮我帮我帮我帮我帮我',
-      1: '喝杯咖啡休息下吧☕',
-      2: '要不要和朋友打局LOL',
-      3: '今天又写了几个Bug🐞呢',
-      4: '今天在群里吹水了吗',
-      5: '今天吃了什么好吃的呢',
-      6: '今天您微笑了吗😊',
-      7: '今天帮别人解决问题了吗',
-      8: '准备吃些什么呢',
-      9: '周末要不要去看电影?'
-    },
-    docDetails: '了解更多',
-    allProject: '所有项目',
-    noEmail: '暂无邮箱',
-    noMobile: '暂无手机',
-    noDept: '暂无部门',
-    noRole: '暂无角色',
-    noWorkDescribe: '这家伙很懒,什么也没留下~',
-    firstLogin: '第一次登录系统',
-    todayIp: '今日IP',
-    todayVisit: '今日访问',
-    TotalVisit: '总访问量',
-    you: '您',
-    total: '总数',
-    visitTitle: '近十天系统访问记录',
-    timeline: '登录时间',
-    account: '账号信息',
-    password: '个人密码',
-    importResult: '导入结果',
-    hthz: '后田花子',
-    al: '阿里系',
-    lm: '脸萌',
-    ctc: '点击选择',
-    pleaseInputUrl: '请输入URL',
-    bind: '绑定',
-    unbind: '解绑',
-    confirmUnbind: '确定解绑该第三方账号?',
-    unbindSuccess: '解绑成功',
-    bindSuccess: '绑定成功',
-    bindLogin: '绑定并登录',
-    signLogin: '注册并登录',
-    current: '当前',
-    socialAccount: '账号',
-    socialTips: '尚未绑定任何系统账户,您可以绑定系统账户或者注册一个新的账户并绑定。'
-  }
-}
+// 【订单】
+import zhOrder from './order'
+// 【边线库管理】
+import zhLineSide from './lineSide'
+// 【建模中心】
+import zhModeling from './modeling'
+// 【生产准备中心】
+import zhPrepare from './prepare'
+// 【生产资源中心】
+import zhResource from './resource'
+// 【班表管理】
+import zhCalssSchedule from './calssSchedule'
+// 【基础配置】
+import zhBasicConfig from './basicConfig'
+// 【运行管理中心】
+import zhRunCenter from './runCenter'
+// 【机加工人端】
+import zhMachining from './machining'
+// 【仓储管理】
+import zhWms from './wmsMenu'
+// 【大屏相关】
+import zhLargeScreen from './largeScreen'
+// 【日志管理】
+import zhDeveloper from './developer'
+// 【打标码管理】
+import zhMarking from './marking'
+// 【打标码管理】
+import zhDispatch from './dispatch'
+// 【统计分析】
+import zhStatisticalAnalysis from './statisticalAnalysis'
+// 【刀具管理】
+import zhCuttingTool from './cuttingTool'
+
+export default {
+	/********* 分类整理多语言文件(start)  ********/
+	...zhOrder,
+	...zhLineSide,
+	...zhModeling,
+	...zhPrepare,
+	...zhResource,
+	...zhCalssSchedule,
+	...zhBasicConfig,
+	...zhRunCenter,
+	...zhMachining,
+	...zhLargeScreen,
+  ...zhWms,
+  ...zhDeveloper,
+  ...zhMarking,
+  ...zhDispatch,
+  ...zhStatisticalAnalysis,
+  ...zhCuttingTool,
+	/********* 分类整理多语言文件(end)  ********/
+  	route: {
+    	dashboard: '系统主页',
+    	profile: '个人中心'
+  	},
+  	navbar: {
+	    setting: '系统设置',
+	    github: '项目地址',
+	    logOut: '退出登录',
+	    profile: '个人中心',
+	    docs: '项目文档',
+	    theme: '换肤',
+	    size: '布局大小',
+	    deleteCache: '清除缓存'
+  	},
+  	index: {   // 首页的语言
+  		normalTenant: '在线生产资源数量/总数',
+  		frozenTenant: '待生产订单',
+  		lineNum: '待完成计划',
+  		resourceNum: '待完成任务',
+  		runTimeStatics: '企产线任务完成量统计',
+  		resourceTime: '产线生产资源任务完成量排行',
+  		comBtn: '常用功能',
+  		loginInfo: '登录监控',
+  		tips: '选择不超过30天!',
+  		dates: {
+  			day: '今日',
+  			week: '本周',
+  			month: '本月',
+  			year: '全年'
+  		},
+  		table: {
+  			userName: '名称',
+  			requestIp: 'IP',
+  			createTime: '时间'
+  		}
+  	},
+  	login: {
+	    title: '企业端登录',
+	    logIn: '立即登录',
+	    tenant: '企业',
+	    username: '账号',
+	    password: '密码',
+	    code: '验证码',
+	    ortherLoginType: '其他登录方式',
+	    chooseToSignIn: '选择以下账号登录:',
+	    type: {
+	      up: '账号密码登录',
+	      social: '第三方账号登录'
+	    },
+	    shuoming: {
+	    	title: '智能总控系统-企业端',
+	    	tips: 'IMCS-ECS'
+	    }
+  	},
+  documentation: {
+    documentation: '项目文档',
+    github: '项目地址'
+  },
+  table: {
+    blockList: {
+      id: 'ID',
+      ip: '阻止访问ip',
+      requestUri: '请求URI',
+      requestMethod: '请求方法',
+      limitStart: '限制时间起',
+      limitEnd: '限制时间止',
+      status: '状态',
+      location: '位置',
+    },
+    rateLimiter: {
+      id: 'ID',
+      count: '次数',
+      requestUri: '请求URI',
+      requestMethod: '请求方法',
+      limitStart: '限制时间起',
+      limitEnd: '限制时间止',
+      status: '状态',
+      intervalSec: '时间窗口',
+    },
+    tenant: {
+      code: '企业编码',
+      name: '企业名称',
+      type: '类型',
+      status: '状态',
+      duty: '责任人',
+      expirationTime: '有效期',
+      logo: 'logo',
+      describe: '企业简介',
+      passwordExpire: '密码有效期',
+      isMultipleLogin: '是否允许多地登录',
+      passwordErrorNum: '密码输错次数',
+      passwordErrorLockTime: '账号锁定时间'
+    },
+    user: {
+      account: '账号',
+      name: '姓名',
+      password: '密码',
+      orgId: '组织',
+      stationId: '岗位',
+      email: '邮箱',
+      sex: '性别',
+      status: '状态',
+      mobile: '电话',
+      avatar: '头像',
+      workDescribe: '个人描述',
+      passwordErrorLastTime: '最后一次输错密码时间',
+      passwordErrorNum: '密码错误次数',
+      passwordExpireTime: '密码过期时间',
+      lastLoginTime: '最后登录时间',
+      nation: '民族',
+      education: '学历',
+      positionStatus: '职位状态',
+      createTime: '创建时间',
+      updateTime: '修改时间',
+      oldPassword: '旧密码',
+      newPassword: '新密码',
+      confirmPassword: '确认密码',
+      social: '第三方账号'
+    },
+    role: {
+      code: '编码',
+      name: '角色名称',
+      describe: '角色描述',
+      status: '状态',
+      readonly: '是否内置',
+      createTime: '创建时间',
+      dsType: '数据范围',
+      orgList: '组织'
+    },
+    menu: {
+      id: 'ID',
+      label: '名称',
+      describe: '描述',
+      code: '权限编码',
+      isPublic: '是否公有',
+      path: '路由URI',
+      type: '类型',
+      component: '组件',
+      isEnable: '是否启用',
+      sortValue: '排序',
+      parentId: '上级ID',
+      icon: '图标',
+      group: '分组'
+    },
+    resource: {
+      code: '编码',
+      name: '名称',
+      describe: '描述'
+    },
+    org: {
+      label: '部门名称',
+      abbreviation: '简称',
+      describe: '描述',
+      parentId: '上级ID',
+      sortValue: '排序',
+      status: '状态'
+    },
+    station: {
+      name: '岗位名称',
+      describe: '描述',
+      orgId: '组织',
+      status: '状态'
+    },
+    optLog: {
+      requestIp: 'IP',
+      type: '类型',
+      userName: '操作人',
+      description: '操作描述',
+      classPath: '类路径',
+      actionMethod: '请求方法',
+      requestUri: '请求地址',
+      httpMethod: '请求类型',
+      params: '方法参数',
+      result: '返回值',
+      exDesc: '异常详情信息',
+      consumingTime: '消耗时间',
+      startTime: '开始时间',
+      finishTime: '完成时间',
+      ua: '浏览器请求头'
+    },
+    loginLog: {
+      userName: '姓名',
+      account: '账号',
+      requestIp: 'IP',
+      description: '描述',
+      loginDate: '登录时间',
+      ua: '浏览器请求头',
+      browser: '浏览器',
+      browserVersion: '浏览器版本',
+      operatingSystem: '操作系统',
+      location: '地区'
+    },
+    attachment: {
+      bizId: '业务ID',
+      bizType: '业务类型',
+      dataType: '数据类型',
+      submittedFileName: '文件名',
+      group: '组',
+      path: '路径',
+      relativePath: '相对路径',
+      url: '访问链接',
+      fileMd5: 'md5',
+      contextType: '类型',
+      filename: '唯一文件名',
+      ext: '后缀',
+      size: '大小',
+      orgId: '组织',
+      icon: '图标'
+    },
+    smsTemplate: {
+      providerType: '类型',
+      appId: '应用ID',
+      appSecret: '应用密码',
+      url: 'SMS服务域名',
+      customCode: '模板编码',
+      name: '模板名称',
+      content: '模板内容',
+      templateParams: '模板参数',
+      templateCode: '模板CODE',
+      signName: '模板签名',
+      templateDescribe: '模板描述'
+    },
+    smsTask: {
+      templateId: '短信模板',
+      status: '执行状态',
+      sourceType: '来源类型',
+      receiver: '接收者',
+      topic: '主题',
+      templateParams: '模板参数',
+      sendTime: '发送时间',
+      content: '发送内容',
+      draft: '是否草稿'
+    },
+    smsSendStatus: {
+      taskId: '任务',
+      sendStatus: '发送状态',
+      receiver: '接收者手机号',
+      bizId: '发送回执',
+      ext: '发送返回',
+      code: '状态码',
+      message: '状态码的描述',
+      fee: '计费条数'
+    },
+    msgs: {
+      bizType: '业务类型',
+      bizId: '业务ID',
+      msgsCenterType: '消息类型',
+      title: '标题',
+      content: '内容',
+      author: '作者',
+      handlerUrl: '处理地址',
+      handlerParams: '处理参数',
+      isSingleHandle: '是否单人处理',
+      isDelete: '是否删除',
+      isRead: '状态',
+      readTime: '读消息的时间'
+    },
+    systemApi: {
+      code: "接口编码",
+      name: "接口名称",
+      describe: "资源描述",
+      requestMethod: "请求方式",
+      contentType: "响应类型",
+      serviceId: "服务ID",
+      path: "请求路径",
+      status: "状态",
+      isPersist: "保留数据",
+      isAuth: "是否需要认证",
+      isOpen: "是否公开",
+      className: "类名",
+      methodName: "方法名"
+    },
+    application: {
+      clientId: "clientId",
+      clientSecret: "clientSecret",
+      website: "官网",
+      name: "应用名称",
+      icon: "应用图标",
+      appType: "类型",
+      describe: "备注",
+      status: "状态"
+    },
+    dictionary: {
+      type: "类型",
+      name: "名称",
+      describe: "描述",
+      status: "状态"
+    },
+    dictionaryItem: {
+      dictionaryId: "字典ID",
+      dictionaryType: "类型",
+      code: "编码",
+      name: "名称",
+      describe: "描述",
+      status: "状态",
+      sortValue: "排序"
+    },
+    area: {
+      code: "编码",
+      label: "名称",
+      fullName: '全名',
+      sortValue: '排序',
+      longitude: '经度',
+      latitude: '维度',
+      level: "行政区级",
+      parentCode: '父编码',
+      parentId: '上级地区',
+      source: '数据来源'
+    },
+    parameter: {
+      key: "参数键",
+      name: "参数名称",
+      value: '参数值',
+      describe: '描述',
+      status: '状态',
+      readonly: '只读'
+    },
+    gen: {
+      config: {
+        author: '作者名称',
+        basePackage: '基础包名',
+        entityPackage: 'entity包名',
+        mapperPackage: 'mapper包名',
+        mapperXmlPackage: 'mapperXml包名',
+        servicePackage: 'service包名',
+        serviceImplPackage: 'serviceImpl包名',
+        controllerPackage: 'controller包名',
+        isTrim: '是否去除表前缀',
+        trimValue: '表前缀'
+      },
+      generate: {
+        tableName: '表名',
+        remark: '备注',
+        dataRows: '数据量(行)',
+        createTime: '创建时间',
+        updateTime: '更新时间'
+      }
+    },
+    eximport: {
+      field1: '字段1',
+      field2: '字段2',
+      field3: '字段3',
+      createTime: '导入时间'
+    },
+    update: '更新',
+    status: '状态',
+    refresh: '刷新',
+    operation: '操作',
+    assistOperation: '辅佐操作',
+    search: '搜索',
+    reset: '重置',
+    more: '更多',
+    add: '添加',
+    export: '导出',
+    exportPreview: '导出预览',
+    import: '导入',
+    upload: '上传',
+    download: '下载',
+    templateDownload: '模板下载',
+    delete: '删除',
+    resetPassword: '密码重置',
+    openInNewPage: '新页面打开',
+    createTime: '创建时间',
+    updateTime: '修改时间'
+  },
+  tagsView: {
+    refresh: '刷新当前',
+    close: '关闭当前',
+    closeOthers: '关闭其它',
+    closeAll: '关闭所有'
+  },
+  settings: {
+    title: '系统布局配置',
+    theme: '主题色',
+    tagsView: '开启 Tags-View',
+    fixedHeader: '固定 Header',
+    sidebarLogo: '侧边栏 Logo'
+  },
+  system: {
+    title: '智能总控端'
+  },
+  tips: {
+  	audioTips: '你确定提交审核?',
+    storage: '你确定提交入库?',
+  	comTips: '删除数据后,将会消失,您的努力将白费,请确认删除?',
+    systemError: '系统维护中,请稍微再试~',
+    usernameShouldNotBeEmpty: '用户名不能为空',
+    passwordShouldNotBeEmpty: '密码不能为空',
+    switchLanguageSuccess: '切换语言成功',
+    loginSuccess: '登录成功',
+    loginFail: '登录失败',
+    defaultPassword: '用户的默认密码为123456',
+    getDataFail: '获取数据失败',
+    createSuccess: '新增成功',
+    lockSuccess: '锁定成功!',
+    unlockSuccess: '解锁成功!',
+    copySelected: '复制成功',
+    updateSuccess: '修改成功',
+    deleteSuccess: '删除成功',
+    noDataSelected: '请先选择需要操作的数据',
+    confirmDelete: '选中数据将被永久删除, 是否继续?',
+    confirmDeleteCache: '是否立即清除用户权限缓存?',
+    containCurrentUser: '包含当前登录用户,操作已取消',
+    neverLogin: '从未登录过系统',
+    nothing: '这家伙很懒,什么都没留下',
+    topId: '值为0时表示顶级节点',
+    choose: '已选择:',
+    chooseNothing: '尚未选择任何图标',
+    onlyChooseOne: '只能选择一个节点作为父节点',
+    noNodeSelected: '请先选择节点',
+    confirmDeleteNode: '选中节点及其子结点将被永久删除, 是否继续?',
+    iframeGrant: '用户名:zuihou 密码:zuihou',
+    notEqual: '两次输入不一致',
+    oldPasswordIncorrect: '原密码不正确',
+    uploadSuccess: '上传成功',
+    uploadFailed: '上传失败',
+    onlySupportXlsx: '只支持Xlsx类型文件',
+    updating: '修改中',
+    updateFailed: '修改失败',
+    noPermission: '无权限',
+    confirmRestPassword: '确定重置所选用户密码?',
+    resetPasswordSuccess: '所选用户密码重置已被重置为123456',
+    getCodeImageFailed: '获取图形验证码失败',
+    tooManyRequest: '获取验证码过于频繁,请1分钟后再试',
+    clientOriginSecret: '该客户端原始密码为:',
+    unSelected: '请至少选择一条数据!',
+    mustOne: '请只能选择一条数据!',
+    frozen: '冻结成功!',
+    enable: '启用成功!',
+    numberTips: '不超过100个字符。',
+    optionSuccess: '操作成功!'
+  },
+  rules: {
+    require: '不能为空',
+    range0to255: '长度在 0 到 255 个字符',
+    range2to10: '长度在 2 到 10 个字符',
+    range3to10: '长度在 3 到 10 个字符',
+    range3to20: '长度在 3 到 20 个字符',
+    range4to10: '长度在 4 到 10 个字符',
+    range6to20: '长度在 6 到 20 个字符',
+    email: '请输入正确的邮箱地址',
+    mobile: '请输入合法的手机号',
+    usernameExist: '该用户名已存在',
+    clientIdExist: '该Client ID已存在',
+    roleNameExist: '该角色名称已存在',
+    noMoreThan10: '长度不能超过10个字符',
+    noMoreThan11: '长度不能超过11个字符',
+    noMoreThan20: '长度不能超过20个字符',
+    noMoreThan50: '长度不能超过50个字符',
+    noMoreThan100: '长度不能超过100个字符',
+    invalidInteger: '请输入大于零的整数',
+    invalidURL: '不是有效的URL',
+    fields: '请输入正确的字段标志符!'
+  },
+  common: {
+  	save: '保存',
+    system: 'SaaS型微服务快速开发平台',
+    desc: {
+      a: '基于SpringBoot 2.2.9 & SpringCloud Hoxton.SR7',
+      b: '使用Jwt自定义统一认证',
+      c: '企业级设计和配置,拒绝demo项目',
+      d: '前后端分离架构,提高软件开发效率',
+      e: '集成多种监控,为微服务保驾护航',
+      f: '提供详细的文档&视频教程,手把手教你从零搭建到部署'
+    },
+    date: {
+    	year: '年',
+    	month: '月',
+    	day: '日',
+    	sun: '星期天'
+    },
+    files: {
+    	noFile: '未上传',
+    	yesFile: '已上传'
+    },
+    timeArea: {
+    	lastWeek: '最近一周',
+    	lastMonth: '最近一个月',
+    	lastThreeMonth: '最近三个月'
+    },
+    individual: '个',
+    uploadImg: '上传图片',
+    view: '查看',
+    tips: '提示',
+    clear: '清除',
+    confirm: '确定',
+    cancel: '取消',
+    add: '新增',
+    edit: '修改',
+    delete: '删除',
+	search: '搜索',
+	reset: '重置',
+	colse: '关闭',
+    copy: '复制',
+    upload: '上传',
+    preview: '预览',
+    setting: '设置',
+    execute: '执行',
+    toViod: '作废',
+    sort: '排序',
+    pleaseEnter: '请输入',
+    pleaseSelect: '请选择',
+    separator: '至',
+    startTime: '开始日期',
+    endTime: '结束日期',
+    serialNo: '序号',
+    show: '显示',
+    hide: '隐藏',
+    frozen: '冻结',
+    yes: '是',
+    no: '否',
+    lock: '锁定',
+    unlock: '未锁定',
+    readonly: '只读',
+    readCreate: '读写',
+    noData: '暂无数据',
+    vision: '版本号',
+    remark: '备注',
+    selected: '选择',
+    weight: '权重',
+    audio: {
+    	type: '审核状态',
+    	add: '新增',
+    	addAudio: '提交审核',
+    	addAudioTips: '提交审核成功!',
+    	audio: '审核',
+    	daiAudio: '待审核',
+    	audioOk: '审核通过',
+    	aduioFail: '审核不通过'
+    },
+    adopt: {
+    	adopt: '通过',
+    	unadopt: '不通过'
+    },
+    qualified: {
+    	qualified: '合格',
+    	unqualified: '不合格',
+    },
+    sex: {
+      male: '男性',
+      female: '女性',
+      secret: '保密'
+    },
+    status: {
+    	init: '状态',
+      	valid: '启用',
+      	invalid: '禁用',
+      	stop: '暂停',
+      	start: '开始'
+    },
+    menu: {
+      menu: '菜单',
+      button: '按钮'
+    },
+    tab: {
+      common: '通用类',
+      directivity: '指向性',
+      solid: '填充类',
+      food: '食品类'
+    },
+    aboutMe: '关于我',
+    changeAvatar: '更换头像',
+    lastLoginTime: '上次登录时间',
+    goodMorning: '早上好',
+    goodAfternoon: '下午好',
+    goodEvening: '晚上好',
+    randomMessage: {
+      0: '帮我帮我帮我帮我帮我帮我帮我',
+      1: '喝杯咖啡休息下吧☕',
+      2: '要不要和朋友打局LOL',
+      3: '今天又写了几个Bug🐞呢',
+      4: '今天在群里吹水了吗',
+      5: '今天吃了什么好吃的呢',
+      6: '今天您微笑了吗😊',
+      7: '今天帮别人解决问题了吗',
+      8: '准备吃些什么呢',
+      9: '周末要不要去看电影?'
+    },
+    docDetails: '了解更多',
+    allProject: '所有项目',
+    noEmail: '暂无邮箱',
+    noMobile: '暂无手机',
+    noDept: '暂无部门',
+    noRole: '暂无角色',
+    noWorkDescribe: '这家伙很懒,什么也没留下~',
+    firstLogin: '第一次登录系统',
+    todayIp: '今日IP',
+    todayVisit: '今日访问',
+    TotalVisit: '总访问量',
+    you: '您',
+    total: '总数',
+    visitTitle: '近十天系统访问记录',
+    timeline: '登录时间',
+    account: '账号信息',
+    password: '个人密码',
+    importResult: '导入结果',
+    hthz: '后田花子',
+    al: '阿里系',
+    lm: '脸萌',
+    ctc: '点击选择',
+    pleaseInputUrl: '请输入URL',
+    bind: '绑定',
+    unbind: '解绑',
+    confirmUnbind: '确定解绑该第三方账号?',
+    unbindSuccess: '解绑成功',
+    bindSuccess: '绑定成功',
+    bindLogin: '绑定并登录',
+    signLogin: '注册并登录',
+    current: '当前',
+    socialAccount: '账号',
+    socialTips: '尚未绑定任何系统账户,您可以绑定系统账户或者注册一个新的账户并绑定。'
+  }
+}

+ 15 - 15
imcs-ui/src/views/zuihou/lineSideLibrary/lineSideEmulate/Index.vue

@@ -33,10 +33,10 @@
         </div>
       </el-col>
     </el-row>
-    
+
   	<!-- 货架区域 -->
   	<div class="areaDiv">
-  		
+
   		<!-- 货架(单个) -->
   		<template v-for="item in shelvesTreeList">
 	  		<div class="tableBlock">
@@ -62,7 +62,7 @@
 	  			<!-- 中部-货架小格子 -->
 	  			<table class="contentDiv" border="0" cellspacing="0" cellpadding="6">
 	  				<tr v-for="objTr in item.layList">
-	  					
+
 	  					<td v-for="objTd in objTr.stockList" :class="objTd.storgeStockCount>0 ? 'blueBg' : ''" @click="editOne(objTd.id)">
 	  						{{objTd.no}}
 	  						<el-image v-if="objTd.lockStatus != '0'" class="locked" :src="resolveLogo(lockImg)" fit="contain"></el-image>
@@ -122,7 +122,7 @@
 	  			<div class="footerDiv">{{item.name}}({{item.no}})</div>
 	  		</div>
   		</template>
-  		
+
   		<!--<div class="tableBlock">
   			<div class="topDiv">
   				<span class="topSpan allTongji">
@@ -196,9 +196,9 @@
   			</table>
   			<div class="footerDiv">货架A(hj34233)</div>
   		</div>-->
-  		
+
   	</div>
-    
+
     <tenant-edit
       ref="edit"
       :dialog-visible="dialog.isVisible"
@@ -234,7 +234,7 @@
 	import areaMgrAPI from "@/api/resourceProductMgr/areaMgr"
 	// 【边线库管理】-API
 	import lineSideMgrApi from "@/api/lineSideLibrary/lineSideMgr"
-	
+
 	import elDragDialog from '@/directive/el-drag-dialog'
 	import { downloadFile, initEnums, initDicts, initQueryParams } from '@/utils/commons'
 	import axios from 'axios'
@@ -298,7 +298,7 @@
       }
 	  },
 	  mounted () {
-	    
+
 	  },
 	  methods: {
 	  	// 加载背景颜色
@@ -351,7 +351,7 @@
 	        })
 	        return
 	      }
-	
+
 	      this.$confirm(this.$t("lineSide.tips.wareTips"), this.$t("common.tips"), {
 	      	distinguishCancelAndClose: true,
 	        confirmButtonText: this.$t("common.confirm"),
@@ -402,7 +402,7 @@
 	        this.queryParams.map.createTime_st = this.queryParams.timeRange[0]
 	        this.queryParams.map.createTime_ed = this.queryParams.timeRange[1]
 	      }
-	
+
 	      this.queryParams.current = params.current ? params.current : this.queryParams.current
 	      this.queryParams.size = params.size ? params.size : this.queryParams.size
 	      areaMgrAPI.page(this.queryParams).then(response => {
@@ -412,7 +412,7 @@
 	        }
 	        // eslint-disable-next-line no-return-assign
 	      }).finally(() => this.loading = false)
-	     
+
 	    },
 	    cellClick (row, column) {
 	      if (column['columnKey'] === "operation") {
@@ -425,7 +425,7 @@
 	          this.$refs.table.toggleRowSelection(row)
 	        }
 	      })
-	
+
 	      if (!flag) {
 	        this.$refs.table.toggleRowSelection(row, true)
 	      }
@@ -433,7 +433,7 @@
 	    // 获取列表数据
 	    getTabList(group){
 	    	lineSideMgrApi.iconList({}).then(res => {
-	    		res = res.data 
+	    		res = res.data
 	    		console.log("方块列表:", res)
 	    		if(res.isSuccess){
     				// 设备的货架数据
@@ -629,10 +629,10 @@
 	}
 	.linkLine{
 		/*background: #13CE66;*/
-	}      
+	}
 	.jianguan{
 		/*background: #0A76A4;*/
-	}   
+	}
 	.producting{
 		/*background: #3888FA;*/
 	}

+ 131 - 0
imcs-ui/src/views/zuihou/prepareProductMgr/cuttingToolMgr/Index.vue

@@ -0,0 +1,131 @@
+<template>
+  <div class="app-container">
+    <!-- 订单主要模块区域 -->
+    <el-tabs class="noTabPadding" v-model="activeTab" type="border-card" @tab-click="tabClick">
+      <el-tab-pane name="machineCuttingTool" :label='$t("cuttingTool.common.machineCuttingTool")+"("+tabNum.tab1+")"'>
+        <!-- 【设备刀具管理】 -->
+        <machine-cutting-tool ref="machineCuttingTool" @setTabNums="setTabNums"></machine-cutting-tool>
+      </el-tab-pane>
+      <el-tab-pane name="customizeCuttingTool" :label='$t("cuttingTool.common.customizeCuttingTool")+"("+tabNum.tab2+")"'>
+        <!-- 刀具基础数据 -->
+        <customize-cutting-tool ref="customizeCuttingTool" @setTabNums="setTabNums"></customize-cutting-tool>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+	//【设备刀具管理】组件
+	import MachineCuttingTool from "./components/machineCuttingTool"
+  //【刀具基础数据】组件
+  import CustomizeCuttingTool from "./components/customizeCuttingTool"
+	import elDragDialog from '@/directive/el-drag-dialog'
+	export default {
+	  name: "CuttingtoolMgr",
+	  directives: { elDragDialog },
+	  components: { MachineCuttingTool, CustomizeCuttingTool,},
+	  props: {
+	  },
+	  data () {
+	    return {
+	    	tabNum: {tab1: 0, tab2: 0},
+	    	activeTab: "machineCuttingTool"  // 默认选择的tab(进行中)
+	    }
+	  },
+	  // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
+	  created() {
+		},
+		// 监听数据的变化
+	  watch: {
+	  },
+	  computed: {
+	  },
+	  mounted () {
+
+	  },
+	  methods: {
+	  	tabClick(e){
+	  		console.log("被选择的tab:", e.index)
+	  		// 进行中-tab
+	  		if(e.index == 0){
+	  			this.$refs.machineCuttingTool.search()
+	  		}
+	  		// 待审核-tab
+	  		if(e.index == 1){
+	  			this.$refs.customizeCuttingTool.search()
+	  		}
+	  	},
+	  	// 每一个Tab的值变化,设置总Tabs的数量
+	  	setTabNums(val, field){
+	  		// 统计数量
+	  		this.tabNum[field] = val
+	  	},
+	  }
+	}
+</script>
+<style type="text/css">
+	.noTabPadding .el-tabs__content{
+		padding: 0;
+	}
+</style>
+<style lang="scss" scoped>
+	.blockDiv{
+		position: relative;
+		border: 1px solid #EEEEEE;
+		padding-left: 15px;
+		-moz-border-radius: 5px;
+		-webkit-border-radius: 5px;
+		border-radius: 5px;
+		text-align: center;
+		color: white;
+		-moz-box-shadow: 1px 5px 5px #c0b7b7;
+		webkit-box-shadow: 1px 5px 5px #c0b7b7;
+		box-shadow: 1px 5px 5px #c0b7b7;
+		h1{
+			margin: 20px;
+			font-size: 45px;
+		}
+		p{
+			text-align: left;
+			color: #FFFFFF;
+		}
+	}
+	.danweiSpan{
+		display: inline-block;
+		font-size: 16px;
+		color: black;
+	}
+	.blockBg1{
+		background: #009999;
+		border: 1px solid #009999;
+	}
+	.blockBg2{
+		background: #CC9966;
+		border: 1px solid #CC9966;
+	}
+	.blockBg3{
+		background: #BD987A;
+		border: 1px solid #BD987A;
+	}
+	.blockBg4{
+		background: #FF9999;
+		border: 1px solid #FF9999;
+	}
+	.blockBg5{
+		background: #33CCCC;
+		border: 1px solid #33CCCC;
+	}
+	.blockBg6{
+		background: #E37B3D;
+		border: 1px solid #E37B3D;
+	}
+	.rowCls{
+		background: white;
+		box-sizing: border-box;
+		border-bottom: 2px dotted #AAAAAA;
+		margin-bottom: 15px;
+	}
+	.rowCls .el-col{
+		margin-bottom: 20px;
+	}
+</style>

+ 420 - 0
imcs-ui/src/views/zuihou/prepareProductMgr/cuttingToolMgr/components/customizeCuttingTool/components/Edit.vue

@@ -0,0 +1,420 @@
+<template>
+  <el-dialog
+  	:close-on-click-modal="false"
+  	:close-on-press-escape="false"
+  	:title="title"
+  	:append-to-body="true"
+  	:visible.sync="isVisible"
+  	width="750px"
+  	top="50px"
+  >
+    <el-form ref="form" :disabled="formDisabled" :model="customizeCuttingTool" :rules="rules" label-position="right" label-width="100px">
+      <!-- 刀具规格 -->
+      <el-form-item :label='$t("cuttingTool.form.customizeCuttingtool.specifications")+":"' prop="specifications">
+        <el-input v-model.trim="customizeCuttingTool.specifications"  :label='$t("common.pleaseEnter")' maxlength="255"></el-input>
+      </el-form-item>
+
+      <!-- 刀具名称-->
+      <el-form-item :label='$t("cuttingTool.form.customizeCuttingtool.cuttingToolName")+":"' prop="cuttingToolName">
+        <el-input v-model.trim="customizeCuttingTool.cuttingToolName"  :label='$t("common.pleaseEnter")' maxlength="128"></el-input>
+      </el-form-item>
+
+      <el-form-item :label='$t("cuttingTool.form.customizeCuttingtool.cuttingToolType")+":"' prop="cuttingToolType">
+      	<el-select v-model="customizeCuttingTool.cuttingToolType.key" :placeholder='$t("common.pleaseSelect")' style="width: 50%;">
+          <el-option :key="index" :label="item" :value="key" v-for="(item, key, index) in dicts.CUTTING_TOOL_TYPE" />
+      	</el-select>
+      </el-form-item>
+      <el-form-item :label='$t("cuttingTool.form.customizeCuttingtool.cuttingToolPicture")+":"' prop="cuttingToolPicture">
+        <el-upload
+          class="upload-demo"
+          :headers="headers"
+          :action="action"
+          :data="cuttingToolPictureData"
+          :on-preview="handleCuttingToolPicturePreview"
+          :on-remove="handleCuttingToolPictureRemove"
+          :before-remove="beforeCuttingToolPictureRemove"
+          :on-success="handleCuttingToolPictureSuccess"
+          :on-error='handleCuttingToolPictureError'
+          :on-progress="handleCuttingToolPicturePropress"
+          multiple
+          :limit="1"
+          :on-exceed="handleCuttingToolPictureExceed"
+          :file-list="cuttingToolPictureFileList">
+          <el-button size="small" type="primary">{{$t("common.upload")}}</el-button>
+          <div slot="tip" class="el-upload__tip">{{$t("cuttingTool.tips.fileTips")}}</div>
+        </el-upload>
+        <div class="img-wrapper" v-if="customizeCuttingTool.cuttingToolPicture" style="margin:5px;">
+          <el-image :src="customizeCuttingTool.cuttingToolPicture" fit="cover" />
+        </div>
+      </el-form-item>
+      <el-form-item :label='$t("cuttingTool.form.customizeCuttingtool.cuttingToolInstallPicture")+":"' prop="cuttingToolInstallPicture">
+        <el-upload
+          class="upload-demo"
+          :headers="headers"
+          :action="action"
+          :data="cuttingToolInstallPictureData"
+          :on-preview="handleCuttingToolInstallPicturePreview"
+          :on-remove="handleCuttingToolInstallPictureRemove"
+          :before-remove="beforeCuttingToolInstallPictureRemove"
+          :on-success="handleCuttingToolInstallPictureSuccess"
+          :on-error='handleCuttingToolInstallPictureError'
+          :on-progress="handleCuttingToolInstallPicturePropress"
+          multiple
+          :limit="1"
+          :on-exceed="handleCuttingToolInstallPictureExceed"
+          :file-list="cuttingToolInstallPictureFileList">
+          <el-button size="small" type="primary">{{$t("common.upload")}}</el-button>
+          <div slot="tip" class="el-upload__tip">{{$t("cuttingTool.tips.fileTips")}}</div>
+        </el-upload>
+        <div class="img-wrapper" v-if="customizeCuttingTool.cuttingToolInstallPicture" style="margin:5px;">
+          <el-image :src="customizeCuttingTool.cuttingToolInstallPicture" fit="cover" />
+        </div>
+      </el-form-item>
+
+      <!-- 备注-->
+      <el-form-item :label='$t("cuttingTool.form.customizeCuttingtool.remark")+":"' prop="remark">
+        <el-input v-model.trim="customizeCuttingTool.remark" type="textarea" :rows="3"  style="width: 93%;" :label='$t("common.pleaseEnter")' maxlength="255"></el-input>
+        <el-tooltip
+          class="item"
+          :content="'备注长度不能超过255位'"
+          effect="dark"
+          placement="top-end"
+        >
+          <i class="el-icon-question" />
+        </el-tooltip>
+      </el-form-item>
+
+      <el-form-item :label='$t("cuttingTool.form.customizeCuttingtool.status")+":"' prop="status">
+        <template>
+				  <el-radio v-model="customizeCuttingTool.status" label="1">{{$t("common.show")}}</el-radio>
+				  <el-radio v-model="customizeCuttingTool.status" label="0">{{$t("common.hide")}}</el-radio>
+				</template>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button plain type="warning" @click="isVisible = false">{{ $t('common.cancel') }}</el-button>
+      <el-button plain type="primary" :disabled="confirmDisabled" @click="submitForm">{{ $t('common.confirm') }}</el-button>
+    </div>
+
+  </el-dialog>
+</template>
+<script>
+	// 【刀具管理】-API
+	import customizeCuttingToolMgrApi from "@/api/prepareProductMgr/customizeCuttingTool"
+  import db from "@/utils/localstorage";
+  import {Base64} from 'js-base64';
+export default {
+  name: 'CustomizeCuttingToolEdit',
+  components: {},
+  props: {
+    dialogVisible: {
+      type: Boolean,
+      default: false
+    },
+    title: {
+      type: String,
+      default: ''
+    }
+  },
+  data () {
+    return {
+      type: 'add',
+      // 附件上传
+      action: `${process.env.VUE_APP_BASE_API}/file/attachment/upload`,
+      // 附件其它参数
+      cuttingToolPictureData: {
+          bizId: "",
+          bizType: "cuttingToolPictureData"
+      },
+      cuttingToolInstallPictureData: {
+          bizId: "",
+          bizType: "cuttingToolInstallPictureData"
+      },
+      // 附件的值
+      cuttingToolPictureFileList: [],
+      cuttingToolInstallPictureFileList: [],
+      customizeCuttingTool: this.initCustomizeCuttingTool(),
+      screenWidth: 0,
+      width: this.initWidth(),
+      confirmDisabled: false,
+      dialog: {
+        isVisible: false,
+        title: ""
+      },
+      dicts:{
+        CUTTING_TOOL_TYPE: {}
+      },
+      roles: [],
+      rules: {
+        specifications: [
+        	{ required: true, message: this.$t("rules.require"), trigger: 'blur' },
+        ],
+        cuttingToolName: [
+        	{ required: true, message: this.$t("rules.require"), trigger: 'change' },
+        ],
+        cuttingToolType: [
+          { required: true, validator: (rule, value, callback) => {
+              console.log("this.customizeCuttingTool.cuttingToolType.key="+this.customizeCuttingTool.cuttingToolType.key)
+            if (this.customizeCuttingTool.cuttingToolType.key === null || this.customizeCuttingTool.cuttingToolType.key === "") {
+                callback(new Error("请选择刀具类型"))
+            } else {
+                callback()
+            }
+          }, trigger: ['blur','change'] }
+        ],
+      }
+    }
+  },
+  // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
+  created() {
+	},
+  computed: {
+    headers() {
+      return {
+        token: 'Bearer ' + db.get("TOKEN", ""),
+        tenant: db.get("TENANT", "") || "",
+        Authorization: `Basic ${Base64.encode(`${process.env.VUE_APP_CLIENT_ID}:${process.env.VUE_APP_CLIENT_SECRET}`)}`
+      };
+    },
+  	formDisabled(){
+      this.confirmDisabled = false
+      return false
+  	},
+    isVisible: {
+      get () {
+        return this.dialogVisible
+      },
+      set () {
+        this.close()
+        this.reset()
+      }
+    }
+  },
+  mounted () {
+    window.onresize = () => {
+      return (() => {
+        this.width = this.initWidth()
+      })()
+    }
+  },
+  methods: {
+  	// 【新增-修改】弹出框,关闭
+  	editClose () {
+      this.dialog.isVisible = false
+    },
+    add () {
+      this.$refs.edit.type = "add"
+      this.dialog.title = this.$t("prepare.common.selectEq")
+      this.dialog.isVisible = true
+    },
+    initCustomizeCuttingTool () {
+      return {
+        id: '',
+        specifications: '',
+        cuttingToolName: '',
+        cuttingToolType: {
+            key: ''
+        },
+        cuttingToolPicture: '',
+        cuttingToolInstallPicture: '',
+        remark: '',
+        status: '1'
+      }
+    },
+    initWidth () {
+      this.screenWidth = document.body.clientWidth
+      if (this.screenWidth < 991) {
+        return '90%'
+      } else if (this.screenWidth < 1400) {
+        return '45%'
+      } else {
+        return '800px'
+      }
+    },
+    setCustomizeCuttingTool (val, dicts) {
+    	if(val){
+    		this.customizeCuttingTool = { ...val }
+    	}
+      // 字典表
+      this.dicts = dicts
+      console.log(this.dicts)
+    },
+    close () {
+      this.$emit('close')
+    },
+    reset () {
+      // 先清除校验,再清除表单,不然有奇怪的bug
+      this.$refs.form.clearValidate()
+      this.$refs.form.resetFields()
+      this.customizeCuttingTool = this.initCustomizeCuttingTool()
+      // 清空上传附件
+      this.cuttingToolPictureFileList = []
+      this.cuttingToolInstallPictureFileList = []
+    },
+    submitForm () {
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          this.confirmDisabled = true
+          // 添加数据
+          if (this.type === 'add') {
+            this.save()
+          } else {
+            this.update()
+          }
+        } else {
+          return false
+        }
+      })
+    },
+    save () {
+  	    console.log(this.customizeCuttingTool)
+      customizeCuttingToolMgrApi.save(this.customizeCuttingTool)
+        .then((response) => {
+          const res = response.data
+          if (res.isSuccess) {
+            this.isVisible = false
+            this.$message({
+              message: this.$t('tips.createSuccess'),
+              type: 'success'
+            })
+            // 通知列表
+	          this.$emit("success");
+	          // 通知列表-并关闭弹出框
+	          this.$emit("close");
+          }
+        }).finally(() => {
+          this.confirmDisabled = false
+          return true
+        })
+    },
+    update () {
+      customizeCuttingToolMgrApi.update(this.customizeCuttingTool)
+        .then((response) => {
+          const res = response.data
+          if (res.isSuccess) {
+            this.isVisible = false
+            this.$message({
+              message: this.$t('tips.updateSuccess'),
+              type: 'success'
+            })
+            // 通知列表
+	          this.$emit("success");
+	          // 通知列表-并关闭弹出框
+	          this.$emit("close");
+          }
+        }).finally(() => {
+          this.confirmDisabled = false
+          return true
+        })
+    },
+    // 文件列表移除文件时的钩子
+    handleCuttingToolPictureRemove(file, fileList) {
+        console.log("删除事件:", file, fileList);
+        // 还原数据
+        this.resetCuttingToolPictureFile()
+    },
+    // 点击文件列表中已上传的文件时的钩子
+    handleCuttingToolPicturePreview(file) {
+        console.log("上传之前事件:",file);
+    },
+    // 文件超出个数限制时的钩子
+    handleCuttingToolPictureExceed(files, fileList) {
+        this.$message.warning(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
+    },
+    // 删除文件之前的钩子,参数为上传的文件和文件列表,若返回 false 或者返回 Promise 且被 reject,则停止删除。
+    beforeCuttingToolPictureRemove(file, fileList) {
+        return this.$confirm(`确定移除 ${ file.name }?`);
+    },
+    // 文件上传成功时的钩子
+    handleCuttingToolPictureSuccess(response, file, fileList){
+        console.log("文件上传成功!", response)
+        if(response.isSuccess){
+            // [上传程序]字段的值
+            this.customizeCuttingTool.cuttingToolPicture = response.data.url
+        }
+    },
+    // 文件上传失败时的钩子
+    handleCuttingToolPictureError(err, file, fileList){
+        console.log("文件上传失败~", err)
+    },
+    // 文件上传时的钩子
+    handleCuttingToolPicturePropress(event, file, fileList){
+        console.log("文件上传~", event)
+    },
+
+
+    // 文件列表移除文件时的钩子
+    handleCuttingToolInstallPictureRemove(file, fileList) {
+        console.log("删除事件:", file, fileList);
+        // 还原数据
+        this.resetCuttingToolInstallPictureFile()
+    },
+    // 点击文件列表中已上传的文件时的钩子
+    handleCuttingToolInstallPicturePreview(file) {
+        console.log("上传之前事件:",file);
+    },
+    // 文件超出个数限制时的钩子
+    handleCuttingToolInstallPictureExceed(files, fileList) {
+        this.$message.warning(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
+    },
+    // 删除文件之前的钩子,参数为上传的文件和文件列表,若返回 false 或者返回 Promise 且被 reject,则停止删除。
+    beforeCuttingToolInstallPictureRemove(file, fileList) {
+        return this.$confirm(`确定移除 ${ file.name }?`);
+    },
+    // 文件上传成功时的钩子
+    handleCuttingToolInstallPictureSuccess(response, file, fileList){
+        console.log("文件上传成功!", response)
+        if(response.isSuccess){
+            // [上传程序]字段的值
+            this.customizeCuttingTool.cuttingToolInstallPicture = response.data.url
+        }
+    },
+    // 文件上传失败时的钩子
+    handleCuttingToolInstallPictureError(err, file, fileList){
+        console.log("文件上传失败~", err)
+    },
+    // 文件上传时的钩子
+    handleCuttingToolInstallPicturePropress(event, file, fileList){
+        console.log("文件上传~", event)
+    },
+    resetCuttingToolPictureFile(){
+        // [上传程序]字段的值
+        this.customizeCuttingTool.cuttingToolPicture = ''
+    },
+    resetCuttingToolInstallPictureFile(){
+        // [上传程序]字段的值
+        this.customizeCuttingTool.cuttingToolInstallPicture = ''
+    },
+  }
+}
+</script>
+<style lang="scss" >
+.avatar-uploader .el-upload {
+  border: 1px dashed #d9d9d9;
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+}
+.avatar-uploader .el-upload:hover {
+  border-color: #409eff;
+}
+.avatar-uploader-icon {
+  font-size: 28px;
+  color: #8c939d;
+  width: 100px;
+  height: 100px;
+  line-height: 100px;
+  text-align: center;
+}
+.avatar {
+  width: 100px;
+  height: 100px;
+  display: block;
+}
+.checkUsed{
+	display: inline-block;
+	margin-left: 10px;
+	color: #1890ff;
+}
+</style>

+ 334 - 0
imcs-ui/src/views/zuihou/prepareProductMgr/cuttingToolMgr/components/customizeCuttingTool/index.vue

@@ -0,0 +1,334 @@
+<template>
+  <div class="app-container">
+		<!-- 搜索模块 -->
+    <div class="filter-container">
+    	<span>
+    		<span>{{$t("cuttingTool.searchForm.customizeCuttingtool.cuttingtoolName")}}:</span>
+    		<el-input v-model="queryParams.model.cuttingToolName" :placeholder='$t("common.pleaseEnter")' style="width: 120px;" size="medium"/>
+    	</span>
+    	<span style="margin-left: 15px;">
+    		<span>{{$t("cuttingTool.searchForm.customizeCuttingtool.specifications")}}:</span>
+    		<el-input v-model="queryParams.model.specifications" :placeholder='$t("common.pleaseEnter")' style="width: 120px;" size="medium"/>
+    	</span>
+
+      <span style="margin-left: 15px;">
+	      <el-button plain type="primary" icon="el-icon-search" size="medium" @click="search">
+	        {{ $t("table.search") }}
+	      </el-button>
+	      <el-button plain type="warning" icon="el-icon-refresh" size="medium" @click="reset">
+	        {{ $t("table.reset") }}
+	      </el-button>
+      </span>
+    </div>
+    <!-- 功能按钮 -->
+    <el-row class="filter-container">
+    	<el-col>
+    		<el-button type="primary" icon="el-icon-plus" size="medium" @click="add">{{ $t("common.add") }}</el-button>
+	      <el-button type="success" icon="el-icon-edit" size="medium" @click="editOne">
+	        {{ $t("common.edit") }}
+	      </el-button>
+	      <el-button type="danger" icon="el-icon-delete" size="medium" @click="batchDelete">
+	        {{ $t("table.delete") }}
+	      </el-button>
+    	</el-col>
+    </el-row>
+
+		<!-- 列表数据 -->
+    <el-table
+      :key="tableKey"
+      ref="table"
+      v-loading="loading"
+      :data="tableData.records"
+      border
+      fit
+      row-key="id"
+      style="width: 100%;"
+      @selection-change="onSelectChange"
+      @cell-click="cellClick"
+    >
+    	<el-table-column :label='$t("common.serialNo")' width="55px" align="center">
+	      <template slot-scope="scope">
+	        <div>
+	          {{scope.$index+(queryParams.current - 1) * queryParams.size + 1}}
+	        </div>
+	      </template>
+      </el-table-column>
+      <el-table-column align="center" type="selection" width="50" :reserve-selection="true" />
+      <!-- 刀具名称 -->
+      <el-table-column align="center" prop="cuttingToolName" :label='$t("cuttingTool.table.customizeCuttingtool.cuttingToolName")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 刀具规格 -->
+      <el-table-column align="center" prop="specifications" :label='$t("cuttingTool.table.customizeCuttingtool.specifications")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 刀具类型 -->
+      <el-table-column align="center"
+        :filter-multiple="false"
+        :filters="cuttingToolTypeList"
+        column-key="cuttingToolType.key"
+        :label="$t('cuttingTool.table.customizeCuttingtool.cuttingToolType')"
+        :show-overflow-tooltip="true"
+      >
+        <template slot-scope="scope">
+          <span>{{ scope.row.cuttingToolType['data'] ? scope.row.cuttingToolType['data'] : scope.row.cuttingToolType['key'] }}</span>
+        </template>
+      </el-table-column>
+      <!-- 刀具图片 -->
+<!--      <el-table-column prop="cuttingToolPicture" :label='$t("cuttingTool.table.customizeCuttingtool.cuttingToolPicture")' :show-overflow-tooltip="true"></el-table-column>-->
+      <el-table-column align="center" :label='$t("cuttingTool.table.customizeCuttingtool.cuttingToolPicture")' :show-overflow-tooltip="true">
+        <template slot-scope="{ row }">
+          <el-image
+            style="width: 100px; height: 100px"
+            :src="row.cuttingToolPicture"
+            :preview-src-list="[row.cuttingToolPicture]">
+          </el-image>
+        </template>
+      </el-table-column>
+      <!-- 装夹方式 -->
+      <el-table-column align="center" :label='$t("cuttingTool.table.customizeCuttingtool.cuttingToolInstallPicture")' :show-overflow-tooltip="true">
+        <template slot-scope="{ row }">
+          <el-image
+            style="width: 100px; height: 100px"
+            :src="row.cuttingToolInstallPicture"
+            :preview-src-list="[row.cuttingToolInstallPicture]">
+          </el-image>
+        </template>
+      </el-table-column>
+      <!-- 启用状态 -->
+      <el-table-column prop="status" :label='$t("runCenter.table.oder.status")' align="center">
+      	<template slot-scope="{ row }">
+          <el-tag :type="row.status=='1' ? 'success' : 'danger'">
+          	{{ row.status=='1' ? $t("common.status.valid") : $t("common.frozen") }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <!-- 操作 -->
+      <el-table-column
+        :label="$t('table.operation')"
+        fixed="right"
+        align="center"
+        column-key="operation"
+        width="80px"
+      >
+        <template slot-scope="{ row }">
+          <el-tooltip class="item" :content='$t("common.edit")' effect="dark" placement="top-start">
+	          <i
+	            class="el-icon-edit table-operation"
+	            style="color: #2db7f5;"
+	            @click="edit(row)"
+	          />
+          </el-tooltip>
+          <el-tooltip class="item" :content='$t("common.delete")' effect="dark" placement="top-start">
+	          <i
+	            class="el-icon-delete table-operation"
+	            style="color: #f50;"
+	            @click="singleDelete(row)"
+	          />
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="tableData.total > 0"
+      :limit.sync="queryParams.size"
+      :page.sync="queryParams.current"
+      :total="Number(tableData.total)"
+      @pagination="fetch"
+    />
+    <edit
+      ref="edit"
+      :dialog-visible="dialog.isVisible"
+      :title="dialog.title"
+      @close="editClose"
+      @success="editSuccess"
+    />
+  </div>
+</template>
+
+<script>
+	import Pagination from "@/components/Pagination"
+	import Edit from "./components/Edit"
+  import { convertEnum } from '@/utils/utils'
+	// 【刀具基础数据】-API
+  // 【刀具管理】-API
+  import customizeCuttingToolMgrApi from "@/api/prepareProductMgr/customizeCuttingTool"
+	import elDragDialog from '@/directive/el-drag-dialog'
+	import { initDicts,initQueryParams } from '@/utils/commons'
+	export default {
+	  name: "CustomizeCuttingTool",
+	  directives: { elDragDialog },
+	  components: { Pagination, Edit },
+	  props: {
+	  },
+	  data () {
+	    return {
+	      dialog: {
+	        isVisible: false,
+	        title: ""
+	      },
+        dicts: {
+          CUTTING_TOOL_TYPE: {}
+        },
+	      tableKey: 0,
+	      queryParams: initQueryParams({
+            model: {
+              cuttingToolType: {
+                  key: ''
+              },
+
+            }
+        }),
+	      selection: [],
+	      loading: false,
+	      tableData: {
+	        total: 0
+	      }
+	    }
+	  },
+	  // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
+	  created() {
+      // 加载【字典】
+      initDicts(['CUTTING_TOOL_TYPE'], this.dicts);
+	  	// 加载列表数据
+	  	this.fetch()
+		},
+	  computed: {
+      cuttingToolTypeList() {
+          return convertEnum(this.dicts.CUTTING_TOOL_TYPE)
+      }
+	  },
+	  mounted () {
+	  },
+	  methods: {
+	    editClose () {
+	      this.dialog.isVisible = false
+	    },
+	    editSuccess () {
+	      this.search()
+	    },
+	    onSelectChange (selection) {
+	      this.selection = selection
+	    },
+	    search () {
+	      this.fetch({
+	        ...this.queryParams
+	      })
+	    },
+	    reset () {
+	      this.queryParams = initQueryParams({})
+	      this.$refs.table.clearSort()
+	      this.$refs.table.clearFilter()
+	      this.search()
+	    },
+	    add () {
+	      this.$refs.edit.type = "add"
+	      this.$refs.edit.setCustomizeCuttingTool(false, this.dicts)
+	      this.dialog.title = this.$t("common.add")
+	      this.dialog.isVisible = true
+	    },
+	    singleDelete (row) {
+	      this.$refs.table.clearSelection()
+	      this.$refs.table.toggleRowSelection(row, true)
+	      this.batchDelete()
+	    },
+	    batchDelete () {
+	      if (!this.selection.length) {
+	        this.$message({
+	          message: this.$t("tips.noDataSelected"),
+	          type: "warning"
+	        })
+	        return
+	      }
+
+	      this.$confirm(this.$t("runCenter.tips.orderTips"), this.$t("common.tips"), {
+	      	distinguishCancelAndClose: true,
+	        confirmButtonText: this.$t("common.confirm"),
+	        cancelButtonText: this.$t("common.cancel"),
+	        type: "warning"
+	      }).then(() => {
+	      	const ids = []
+		      this.selection.forEach(item => {
+		        ids.push(item.id)
+		      })
+		      this.delete(ids)
+	      }).catch(() => {})
+	    },
+	    clearSelections () {
+	      this.$refs.table.clearSelection()
+	    },
+	    delete (ids) {
+          customizeCuttingToolMgrApi.remove({ ids: ids }).then(response => {
+	        const res = response.data
+	        if (res.isSuccess) {
+	          this.$message({
+	            message: this.$t("tips.deleteSuccess"),
+	            type: "success"
+	          })
+	          this.search()
+	          // 清理已经删除的数据
+	          this.$refs.table.clearSelection()
+	        }
+	      })
+	    },
+	    // 【修改】表头上Btn-事件
+	    editOne() {
+	    	if (!this.selection.length) {
+	        this.$message({
+	          message: this.$t("tips.noDataSelected"),
+	          type: "warning"
+	        })
+	        return
+	      }
+	    	if (this.selection.length > 1) {
+	        this.$message({
+	          message: this.$t("tips.mustOne"),
+	          type: "warning"
+	        })
+	        return
+	      }
+	    	this.edit(this.selection[0]);
+	    },
+	    edit (row) {
+	      this.$refs.edit.setCustomizeCuttingTool(row, this.dicts)
+	      this.$refs.edit.type = "edit"
+	      this.dialog.title = this.$t("common.edit")
+	      this.dialog.isVisible = true
+	    },
+	    fetch (params = {}) {
+	      this.loading = true
+	      if (this.queryParams.timeRange) {
+	        this.queryParams.map.deliveryTime_st = this.queryParams.timeRange[0]
+	        this.queryParams.map.deliveryTime_ed = this.queryParams.timeRange[1]
+	      }
+
+	      this.queryParams.current = params.current ? params.current : this.queryParams.current
+	      this.queryParams.size = params.size ? params.size : this.queryParams.size
+        customizeCuttingToolMgrApi.page(this.queryParams).then(response => {
+	        const res = response.data
+	        if (res.isSuccess) {
+	          this.tableData = res.data
+              console.log(this.tableData)
+              // 给列表设置条数
+	          this.$emit('setTabNums', res.data.total, 'tab2')
+	        }
+	        // eslint-disable-next-line no-return-assign
+	      }).finally(() => this.loading = false)
+
+	    },
+	    cellClick (row, column) {
+	      if (column['columnKey'] === "operation") {
+	        return
+	      }
+	      let flag = false
+	      this.selection.forEach((item) => {
+	        if (item.id === row.id) {
+	          flag = true
+	          this.$refs.table.toggleRowSelection(row)
+	        }
+	      })
+
+	      if (!flag) {
+	        this.$refs.table.toggleRowSelection(row, true)
+	      }
+	    }
+	  }
+	}
+</script>
+<style lang="scss" scoped></style>

+ 339 - 0
imcs-ui/src/views/zuihou/prepareProductMgr/cuttingToolMgr/components/machineCuttingTool/index.vue

@@ -0,0 +1,339 @@
+<template>
+  <div class="app-container">
+    <!-- 搜索模块 -->
+    <div class="filter-container">
+    	<span>
+    		<span>{{$t("cuttingTool.searchForm.machineCuttingtool.resourceName")}}:</span>
+    		<el-input v-model="queryMachineParams.model.name" :placeholder='$t("common.pleaseEnter")' style="width: 120px;" size="medium"/>
+    	</span>
+      <span style="margin-left: 15px;">
+    		<span>{{$t("cuttingTool.searchForm.machineCuttingtool.resourceStatus")}}:</span>
+        <el-select v-model="queryMachineParams.model.linkStatus" :placeholder='$t("common.pleaseSelect")' size="medium" style="width: 180px;">
+        	<el-option :key="index" :label="item" :value="key" v-for="(item, key, index) in dicts.LINK_STATUS" />
+      	</el-select>
+    	</span>
+
+      <span style="margin-left: 15px;">
+	      <el-button plain type="primary" icon="el-icon-search" size="medium" @click="search">
+	        {{ $t("table.search") }}
+	      </el-button>
+	      <el-button plain type="warning" icon="el-icon-refresh" size="medium" @click="reset">
+	        {{ $t("table.reset") }}
+	      </el-button>
+      </span>
+    </div>
+    <!-- 功能按钮 -->
+    <el-row class="filter-container">
+      <el-col>
+        <el-button type="primary" icon="el-icon-loading" size="medium" @click="batchSysMachineCuttingTools">{{ $t("cuttingTool.buttons.machineCuttingtool.synCuttingtool") }}</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table
+      :style="isVisible=false"
+      :key="machineTableKey"
+      ref="table"
+      v-loading="loading"
+      :data="tableData.records"
+      border
+      fit
+      row-key="id"
+      style="width: 100%;"
+      @selection-change="onSelectChange"
+    >
+      <el-table-column :label='$t("common.serialNo")' width="55px" align="center">
+        <template slot-scope="scope">
+          <div>
+            {{scope.$index+(queryMachineParams.current - 1) * queryMachineParams.size + 1}}
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" type="selection" width="50" :reserve-selection="true" />
+      <!-- 设备名称 -->
+      <el-table-column align="center" prop="name" :label='$t("cuttingTool.table.machineCuttingtool.resourceName")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 设备编号 -->
+      <el-table-column align="center" prop="code" :label='$t("cuttingTool.table.machineCuttingtool.resourceNo")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 所属产线 -->
+      <el-table-column align="center" prop="lineDesc" :label='$t("cuttingTool.table.machineCuttingtool.productlineName")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 设备连接状态 -->
+      <el-table-column prop="onlineStatus" :label='$t("cuttingTool.table.machineCuttingtool.resourceStatus")' align="center">
+        <template slot-scope="{ row }">
+          <el-tag :type="row.onlineStatus=='1' ? 'success' : 'info'">
+            {{ row.status=='1' ? $t("cuttingTool.common.onlineStatus.online") : $t("cuttingTool.common.onlineStatus.offline") }}
+          </el-tag>
+        </template>
+      </el-table-column>
+      <!-- 同步时间 -->
+      <el-table-column align="center" prop="toolSynTime" :label='$t("cuttingTool.table.machineCuttingtool.sysTime")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 刀具数量 -->
+      <el-table-column align="center" prop="toolNum" :label='$t("cuttingTool.table.machineCuttingtool.cuttingToolNum")' :show-overflow-tooltip="true">
+        <template slot-scope="{ row }">
+          <a style="color: #2db7f5;" @click="queryMachineCuttingTools(row)" >{{row.toolNum}}</a>
+        </template>
+      </el-table-column>
+      <!-- 操作 -->
+      <el-table-column
+        :label="$t('table.operation')"
+        fixed="right"
+        align="center"
+        column-key="operation"
+        width="80px"
+      >
+        <template slot-scope="{ row }">
+          <el-tooltip class="item" :content='$t("cuttingTool.buttons.machineCuttingtool.synCuttingtool")' effect="dark" placement="top-start">
+            <i
+              class="el-icon-loading table-operation"
+              style="color: #2db7f5;"
+              @click="sysMachineCuttingTools(row)"
+            />
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+    <pagination
+      v-show="tableData.total > 0"
+      :limit.sync="queryMachineParams.size"
+      :page.sync="queryMachineParams.current"
+      :total="Number(tableData.total)"
+      @pagination="fetch"
+    />
+
+    <!--设备刀具信息-->
+    <el-row>
+      <el-col ><div class="grid-content bg-purple-dark">刀具列表</div></el-col>
+    </el-row>
+
+    <el-table
+      :key="machineCuttingToolsTableKey"
+      ref="table"
+      v-loading="loading"
+      :data="machineCuttingToolstableData.records"
+      border
+      fit
+      row-key="id"
+      style="width: 100%;"
+    >
+      <el-table-column :label='$t("common.serialNo")' width="55px" align="center">
+        <template slot-scope="scope">
+          <div>
+            {{scope.$index+(queryMachineCuttingToolsParams.current - 1) * queryMachineCuttingToolsParams.size + 1}}
+          </div>
+        </template>
+      </el-table-column>
+      <!-- 刀具名称 -->
+      <el-table-column align="center" prop="cuttingToolName" :label='$t("cuttingTool.table.machineCuttingtool.cuttingToolName")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 刀具规格 -->
+      <el-table-column align="center" prop="specifications" :label='$t("cuttingTool.table.machineCuttingtool.specifications")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 刀具图片 -->
+      <el-table-column align="center" :label='$t("cuttingTool.table.machineCuttingtool.cuttingToolPicture")' :show-overflow-tooltip="true">
+        <template slot-scope="{ row }">
+          <el-image
+            style="width: 100px; height: 100px"
+            :src="row.cuttingToolPicture"
+            :preview-src-list="[row.cuttingToolPicture]">
+          </el-image>
+        </template>
+      </el-table-column>
+      <!-- 装夹方式 -->
+      <el-table-column align="center" :label='$t("cuttingTool.table.machineCuttingtool.cuttingToolInstallPicture")' :show-overflow-tooltip="true">
+        <template slot-scope="{ row }">
+          <el-image
+            style="width: 100px; height: 100px"
+            :src="row.cuttingToolInstallPicture"
+            :preview-src-list="[row.cuttingToolInstallPicture]">
+          </el-image>
+        </template>
+      </el-table-column>
+
+      <!-- 监控方式 -->
+      <el-table-column prop="cuttingToolMonitorType" :label='$t("cuttingTool.table.machineCuttingtool.cuttingToolMonitorType")' align="center"></el-table-column>
+      <!-- 额定使用寿命 -->
+      <el-table-column align="center" prop="useageCount" :label='$t("cuttingTool.table.machineCuttingtool.useageCount")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 剩余使用寿命 -->
+      <el-table-column align="center" prop="surplusCount" :label='$t("cuttingTool.table.machineCuttingtool.surplusCount")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 预警极限 -->
+      <el-table-column align="center" prop="earlyWarnning" :label='$t("cuttingTool.table.machineCuttingtool.earlyWarnning")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 刀具id -->
+      <el-table-column align="center" prop="cuttingToolId" :label='$t("cuttingTool.table.machineCuttingtool.cuttingToolId")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 姊妹刀号 -->
+      <el-table-column align="center" prop="sisterCuttingToolId" :label='$t("cuttingTool.table.machineCuttingtool.sisterCuttingToolId")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 刀沿号 -->
+      <el-table-column align="center" prop="knifeEdgeNumber" :label='$t("cuttingTool.table.machineCuttingtool.knifeEdgeNumber")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 刀具位置 -->
+      <el-table-column align="center" prop="cuttingToolPosition" :label='$t("cuttingTool.table.machineCuttingtool.cuttingToolPosition")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 刀具半径 -->
+      <el-table-column align="center" prop="cuttingToolRadius" :label='$t("cuttingTool.table.machineCuttingtool.cuttingToolRadius")' :show-overflow-tooltip="true"></el-table-column>
+    </el-table>
+    <pagination
+      v-show="machineCuttingToolstableData.total > 0"
+      :limit.sync="queryMachineCuttingToolsParams.size"
+      :page.sync="queryMachineCuttingToolsParams.current"
+      :total="Number(machineCuttingToolstableData.total)"
+      @pagination="queryMachineCuttingTools"
+    />
+  </div>
+</template>
+
+<script>
+	import Pagination from "@/components/Pagination"
+	// 【设备资源管理】-API
+  import equipmentMgrApi from "@/api/resourceProductMgr/equipmentMgr"
+  // 【设备刀具动态资源管理】-API
+  import machineCustomizeCuttingToolMgrApi from "@/api/prepareProductMgr/machineCustomizeCuttingTool"
+	import elDragDialog from '@/directive/el-drag-dialog'
+	import {initDicts, initQueryParams } from '@/utils/commons'
+	export default {
+	  name: "MachineCuttingTool",
+	  directives: { elDragDialog },
+	  components: { Pagination },
+	  props: {
+	  },
+	  data () {
+	    return {
+	      machineTableKey: 0,
+        machineCuttingToolsTableKey: 1,
+	      queryMachineParams: initQueryParams({
+        }),
+        queryMachineCuttingToolsParams: initQueryParams({
+        }),
+        onlineStatusList: [],
+	      selection: [],
+	      loading: false,
+	      tableData: {
+	        total: 0
+	      },
+        machineCuttingToolstableData: {
+            total: 0
+        },
+	      dicts: {
+          LINK_STATUS: {}
+        },
+	    }
+	  },
+	  // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
+	  created() {
+      // 加载【字典】
+      initDicts(['LINK_STATUS'], this.dicts);
+	  	// 加载列表数据
+	  	this.fetch()
+		},
+	  computed: {
+	  },
+	  mounted () {
+
+	  },
+	  methods: {
+	    onSelectChange (selection) {
+	      this.selection = selection
+	    },
+	    search () {
+	      this.fetch({
+	        ...this.queryMachineParams
+	      })
+	    },
+	    reset () {
+	      this.queryMachineParams = initQueryParams({})
+        this.queryMachineCuttingToolsParams = initQueryParams({})
+	      this.$refs.table.clearSort()
+	      this.$refs.table.clearFilter()
+	      this.search()
+	    },
+	    clearSelections () {
+	      this.$refs.table.clearSelection()
+	    },
+	    fetch (params = {}) {
+	      this.loading = true
+	      this.queryMachineParams.current = params.current ? params.current : this.queryMachineParams.current
+	      this.queryMachineParams.size = params.size ? params.size : this.queryMachineParams.size
+          //TODO 等字典调整后修改
+          this.queryMachineParams.model.resourcesCategory = '1'
+	      // 查询必须参数
+          equipmentMgrApi.page(this.queryMachineParams).then(response => {
+	        const res = response.data
+	        if (res.isSuccess) {
+	          this.tableData = res.data
+	          // 给列表设置条数
+	          this.$emit('setTabNums', res.data.total, 'tab1')
+	        }
+	        // eslint-disable-next-line no-return-assign
+	      }).finally(() => this.loading = false)
+
+	    },
+      sysMachineCuttingTools(row){
+          this.$refs.table.clearSelection()
+          this.$refs.table.toggleRowSelection(row, true)
+          this.batchSysMachineCuttingTools()
+      },
+
+      batchSysMachineCuttingTools(){
+        if (!this.selection.length) {
+            this.$message({
+                message: this.$t("tips.noDataSelected"),
+                type: "warning"
+            })
+            return
+        }
+        console.log(this.selection.length)
+        if (this.selection.length > 1) {
+            this.$message({
+                message: this.$t("tips.mustOne"),
+                type: "warning"
+            })
+            return
+        }
+
+        const ids = []
+        this.selection.forEach(item => {
+            ids.push(item.id)
+        })
+        this.sysCuttingTools(ids)
+      },
+
+      sysCuttingTools (ids) {
+        equipmentMgrApi.sysCuttingTools({ ids: ids }).then(response => {
+          const res = response.data
+          if (res.isSuccess) {
+            this.$message({
+                message: this.$t("tips.deleteSuccess"),
+                type: "success"
+            })
+            this.search()
+            // 清理已经删除的数据
+            this.$refs.table.clearSelection()
+          }
+        })
+      },
+
+      queryMachineCuttingTools(row){
+        let params = {}
+        this.queryMachineCuttingToolsParams.current = params.current ? params.current : this.queryMachineCuttingToolsParams.current
+        this.queryMachineCuttingToolsParams.size = params.size ? params.size : this.queryMachineCuttingToolsParams.size
+        this.queryMachineCuttingToolsParams.model.machineId = row.id
+          machineCustomizeCuttingToolMgrApi.page(this.queryMachineCuttingToolsParams).then(response => {
+          const res = response.data
+          if (res.isSuccess) {
+            this.machineCuttingToolstableData = res.data
+          }
+        })
+      }
+	  }
+	}
+</script>
+<style lang="scss" scoped>
+  .el-row {
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+  }
+  .el-col {
+    border-radius: 4px;
+  }
+  .bg-purple-dark {
+    background: #00DD77;
+  }
+  .grid-content {
+    border-radius: 4px;
+    font-size: xx-large;
+  }
+</style>

+ 1 - 0
imcs-ui/src/views/zuihou/user/user/Index.vue

@@ -641,6 +641,7 @@
           const res = response.data;
           if (res.isSuccess) {
             this.tableData = res.data;
+            console.log("userlist=" + this.tableData.records[0])
           }
         }).finally(() => this.loading = false);
       },