Просмотр исходного кода

刀具检查,刀具申请beta

yejian016332 4 лет назад
Родитель
Сommit
107bc00914

+ 91 - 0
imcs-ui/src/api/prepareProductMgr/CuttingToolApply.js

@@ -0,0 +1,91 @@
+import axiosApi from '../AxiosApi.js'
+
+const apiList = {
+	getList: {
+    method: 'POST',
+    url: `/authority/cuttingToolApply/all`
+  },
+  page: {
+    method: 'POST',
+    url: `/authority/cuttingToolApply/page`
+  },
+  pageList: {
+    method: 'POST',
+    url: `/authority/cuttingToolApply/pageList`
+  },
+  update: {
+    method: 'POST',
+    url: `/authority/cuttingToolApply/update`
+  },
+  save: {
+    method: 'POST',
+    url: `/authority/cuttingToolApply`
+  },
+  remove: {
+    method: 'DELETE',
+    url: `/authority/cuttingToolApply`
+  },
+  get: {
+    method: 'POST',
+    url: `/authority/cuttingToolApply/get`
+  },
+  list: {
+    method: 'POST',
+    url: `/authority/cuttingToolApply/query`
+  },
+  markProcessStatus: {
+    method: 'POST',
+    url: `/authority/cuttingToolApply/markProcessStatus`
+  }
+}
+
+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
+    })
+  },
+  markProcessStatus (data) {
+    return axiosApi({
+      ...apiList.markProcessStatus,
+      data
+    })
+  },
+}

+ 20 - 0
imcs-ui/src/api/runManageCenter/planMgr.js

@@ -112,6 +112,14 @@ const apiList = {
   downloadCraftCards: {
     method: 'POST',
     url: `/authority/plan/downloadCraftCards`
+  },
+  checkPlanCuttingTools: {
+    method: 'POST',
+    url: `/authority/plan/checkPlanCuttingTools`
+  },
+  checkPlanDetailCuttingTools: {
+    method: 'POST',
+    url: `/authority/plan/checkPlanDetailCuttingTools`
   }
 }
 
@@ -291,4 +299,16 @@ export default {
       data
     })
   },
+  checkPlanCuttingTools(data) {
+    return axiosApi({
+      ...apiList.checkPlanCuttingTools,
+      data
+    })
+  },
+  checkPlanDetailCuttingTools(data) {
+    return axiosApi({
+      ...apiList.checkPlanDetailCuttingTools,
+      data
+    })
+  },
 }

+ 7 - 5
imcs-ui/src/components/Plugins/Plugins.js

@@ -1,8 +1,8 @@
 export default {
      install(Vue) {
-     	
+
      	//常量
-        Vue.prototype.$constWKS = { 
+        Vue.prototype.$constWKS = {
         	// 当下拉没有数据的时候,这个是用来测试使用
             OPTIONS: [{value: '选项1', label: '黄金糕', remark: "数字"},{value: '选项2',label: '双皮奶', remark: "文本"},{value: '选项3', label: '蚵仔煎', remark: "文本"},{ value: '选项4',label: '龙须面', remark: "文本"},{value: '选项5', label: '北京烤鸭', remark: "数字"}],
          	// [启用、停用]
@@ -30,6 +30,8 @@ export default {
          	STATUSTASKLIST: [{ value: '', label: '全部'},{ value: '1',label: '执行中'},{ value: '0', label: '停止' },{ value: '2', label: '已完成' }],
          	// 【生产资源】的[在线状态]
          	INLINESTATUSLIST: [{ value: '', label: '全部'},{ value: '0',label: '离线'},{ value: '1', label: '在线'},{ value: '2', label: '未激活'}],
+
+          CUTTINGTOOLAPPLYLIST: [{ value: '', label: '全部'},{ value: '0',label: '未处理'},{ value: '1', label: '缺料' },{ value: '2', label: '标记完成' }],
          	// 【级联选择器】-测试数据
          	CASCADERLIST: [{
 		          value: 'zhinan',
@@ -236,9 +238,9 @@ export default {
 		          }]
 		        }]
         }
-         
+
         //全局方法
-        Vue.prototype.$utilsWKS = { 
+        Vue.prototype.$utilsWKS = {
             getUrlParam: function (name) { //获取url中的参数
                 var reg = new RegExp('(^|&?)' + name + '=([^&]*)(&|$)', 'i');
                 var r = window.location.href.substr(1).match(reg);
@@ -249,4 +251,4 @@ export default {
             }
         }
     }
-}
+}

+ 532 - 532
imcs-ui/src/lang/de/de.js

@@ -1,532 +1,532 @@
-export default {
-  route: {
-    dashboard: '系统主页',
-    profile: '个人中心'
-  },
-  navbar: {
-    setting: '系统设置',
-    github: '项目地址',
-    logOut: '退出登录',
-    profile: '个人中心',
-    docs: '项目文档',
-    theme: '换肤',
-    size: '布局大小',
-    deleteCache: '清除缓存'
-  },
-  login: {
-    title: 'Melden Sie sich',
-    logIn: 'Jetzt einloggen',
-    tenant: 'Unternehmen',
-    username: 'Nummer des Kontos',
-    password: 'Passwort',
-    code: 'Code der Überprüfung',
-    ortherLoginType: 'Andere Anmeldemethoden',
-    chooseToSignIn: ' Wählen Sie das folgende Konto, um sich einzuloggen :',
-    type: {
-      up: 'Passwort einloggen',
-      social: 'Login für Drittanbieter'
-    },
-    shuoming: {
-    	title: 'Intelligentes Steuerungssystem',
-    	tips: 'Enterprise Side'
-    }
-  },
-  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: '导入时间'
-    },
-    status: '状态',
-    refresh: '刷新',
-    operation: '操作',
-    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: {
-    systemError: '系统维护中,请稍微再试~',
-    usernameShouldNotBeEmpty: '用户名不能为空',
-    passwordShouldNotBeEmpty: '密码不能为空',
-    switchLanguageSuccess: '切换语言成功',
-    loginSuccess: '登录成功',
-    loginFail: '登录失败',
-    defaultPassword: '用户的默认密码为123456',
-    getDataFail: '获取数据失败',
-    createSuccess: '新增成功',
-    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个字符。'
-  },
-  rules: {
-    require: 'Kann nicht leer sein',
-    range0to255: 'Die Länge ist zwischen 0 und 255 Zeichen',
-    range2to10: 'Die Länge ist zwischen 2 und 10 Zeichen',
-    range3to10: 'Die Länge ist zwischen 3 und 10 Zeichen',
-    range3to20: 'Die Länge ist zwischen 3 und 20 Zeichen',
-    range4to10: 'Die Länge ist zwischen 4 und 10 Zeichen',
-    range6to20: 'Die Länge ist zwischen 6 und 20 Zeichen',
-    email: 'Bitte geben Sie die richtige E-Mail-Adresse ein',
-    mobile: 'Bitte geben Sie eine legale Handynummer ein',
-    usernameExist: ' Der Benutzername existiert bereits ',
-    clientIdExist: '该Client ID已存在',
-    roleNameExist: '该角色名称已存在',
-    noMoreThan10: '长度不能超过10个字符',
-    noMoreThan11: '长度不能超过11个字符',
-    noMoreThan20: '长度不能超过20个字符',
-    noMoreThan50: '长度不能超过50个字符',
-    noMoreThan100: '长度不能超过100个字符',
-    invalidInteger: '请输入大于零的整数',
-    invalidURL: '不是有效的URL',
-    fields: '请输入正确的字段标志符!'
-   
-  },
-  common: {
-    system: 'SaaS型微服务快速开发平台',
-    desc: {
-      a: '基于SpringBoot 2.2.9 & SpringCloud Hoxton.SR7',
-      b: '使用Jwt自定义统一认证',
-      c: '企业级设计和配置,拒绝demo项目',
-      d: '前后端分离架构,提高软件开发效率',
-      e: '集成多种监控,为微服务保驾护航',
-      f: '提供详细的文档&视频教程,手把手教你从零搭建到部署'
-    },
-    view: '查看',
-    tips: '提示',
-    clear: '清除',
-    confirm: '确定',
-    cancel: '取消',
-    add: '新增',
-    edit: '修改',
-    delete: '删除',
-		search: '搜索',
-		reset: '重置',
-		colse: '关闭',
-    copy: '复制',
-    upload: '上传',
-    preview: '预览',
-    pleaseEnter: '请输入',
-    pleaseSelect: '请选择',
-    serialNo: '序号',
-    show: '显示',
-    hide: '隐藏',
-    frozen: '冻结',
-    yes: '是',
-    no: '否',
-    readonly: '只读',
-    readCreate: '读写',
-    sex: {
-      male: '男性',
-      female: '女性',
-      secret: '保密'
-    },
-    status: {
-      valid: '启用',
-      invalid: '禁用'
-    },
-    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: '尚未绑定任何系统账户,您可以绑定系统账户或者注册一个新的账户并绑定。'
-  }
-}
+export default {
+  route: {
+    dashboard: '系统主页',
+    profile: '个人中心'
+  },
+  navbar: {
+    setting: '系统设置',
+    github: '项目地址',
+    logOut: '退出登录',
+    profile: '个人中心',
+    docs: '项目文档',
+    theme: '换肤',
+    size: '布局大小',
+    deleteCache: '清除缓存'
+  },
+  login: {
+    title: 'Melden Sie sich',
+    logIn: 'Jetzt einloggen',
+    tenant: 'Unternehmen',
+    username: 'Nummer des Kontos',
+    password: 'Passwort',
+    code: 'Code der Überprüfung',
+    ortherLoginType: 'Andere Anmeldemethoden',
+    chooseToSignIn: ' Wählen Sie das folgende Konto, um sich einzuloggen :',
+    type: {
+      up: 'Passwort einloggen',
+      social: 'Login für Drittanbieter'
+    },
+    shuoming: {
+    	title: 'Intelligentes Steuerungssystem',
+    	tips: 'Enterprise Side'
+    }
+  },
+  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: '导入时间'
+    },
+    status: '状态',
+    refresh: '刷新',
+    operation: '操作',
+    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: {
+    systemError: '系统维护中,请稍微再试~',
+    usernameShouldNotBeEmpty: '用户名不能为空',
+    passwordShouldNotBeEmpty: '密码不能为空',
+    switchLanguageSuccess: '切换语言成功',
+    loginSuccess: '登录成功',
+    loginFail: '登录失败',
+    defaultPassword: '用户的默认密码为123456',
+    getDataFail: '获取数据失败',
+    createSuccess: '新增成功',
+    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个字符。'
+  },
+  rules: {
+    require: 'Kann nicht leer sein',
+    range0to255: 'Die Länge ist zwischen 0 und 255 Zeichen',
+    range2to10: 'Die Länge ist zwischen 2 und 10 Zeichen',
+    range3to10: 'Die Länge ist zwischen 3 und 10 Zeichen',
+    range3to20: 'Die Länge ist zwischen 3 und 20 Zeichen',
+    range4to10: 'Die Länge ist zwischen 4 und 10 Zeichen',
+    range6to20: 'Die Länge ist zwischen 6 und 20 Zeichen',
+    email: 'Bitte geben Sie die richtige E-Mail-Adresse ein',
+    mobile: 'Bitte geben Sie eine legale Handynummer ein',
+    usernameExist: ' Der Benutzername existiert bereits ',
+    clientIdExist: '该Client ID已存在',
+    roleNameExist: '该角色名称已存在',
+    noMoreThan10: '长度不能超过10个字符',
+    noMoreThan11: '长度不能超过11个字符',
+    noMoreThan20: '长度不能超过20个字符',
+    noMoreThan50: '长度不能超过50个字符',
+    noMoreThan100: '长度不能超过100个字符',
+    invalidInteger: '请输入大于零的整数',
+    invalidURL: '不是有效的URL',
+    fields: '请输入正确的字段标志符!'
+   
+  },
+  common: {
+    system: 'SaaS型微服务快速开发平台',
+    desc: {
+      a: '基于SpringBoot 2.2.9 & SpringCloud Hoxton.SR7',
+      b: '使用Jwt自定义统一认证',
+      c: '企业级设计和配置,拒绝demo项目',
+      d: '前后端分离架构,提高软件开发效率',
+      e: '集成多种监控,为微服务保驾护航',
+      f: '提供详细的文档&视频教程,手把手教你从零搭建到部署'
+    },
+    view: '查看',
+    tips: '提示',
+    clear: '清除',
+    confirm: '确定',
+    cancel: '取消',
+    add: '新增',
+    edit: '修改',
+    delete: '删除',
+		search: '搜索',
+		reset: '重置',
+		colse: '关闭',
+    copy: '复制',
+    upload: '上传',
+    preview: '预览',
+    pleaseEnter: '请输入',
+    pleaseSelect: '请选择',
+    serialNo: '序号',
+    show: '显示',
+    hide: '隐藏',
+    frozen: '冻结',
+    yes: '是',
+    no: '否',
+    readonly: '只读',
+    readCreate: '读写',
+    sex: {
+      male: '男性',
+      female: '女性',
+      secret: '保密'
+    },
+    status: {
+      valid: '启用',
+      invalid: '禁用'
+    },
+    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: '尚未绑定任何系统账户,您可以绑定系统账户或者注册一个新的账户并绑定。'
+  }
+}

+ 50 - 0
imcs-ui/src/lang/zh/cuttingToolApply.js

@@ -0,0 +1,50 @@
+/***************************【统计分析】***********************************/
+export default {
+  cuttingToolApply: {
+    // 本模型下的共通
+    common: {
+      markProcessComplete: '标记已处理',
+      markNoCuttingTool: '标记缺料'
+    },
+    // 列表搜索表单名称
+    searchForm: {
+      partNo: '零部件编号',
+      productNo: '产品代号',
+      partName: '零件名称',
+      partsAlias: '零件代号',
+      processStatus: '处理状态'
+    },
+    // 按钮的名称
+    buttons: {
+      markProcessComplete: '标记处理完成',
+      markNoCuttingTool: '标记缺料'
+    },
+    // 列表的cell名称
+    table: {
+      resourceName: '设备',
+      cuttingToolName: '刀具名称',
+      cuttingToolPicture: '刀具图片',
+      cuttingToolInstallPicture: '安装指导',
+      orderName:'订单名称',
+      orderDeliveryTime:'订单交期',
+      orderPartDeliveryTime:'零件交期',
+      partNo:'零部件编号',
+      productNo:'产品代号',
+      partName:'零件名称',
+      procedureNo:'工序号',
+      procedureName:'工序名',
+      processStatus:'状态'
+    },
+    // 表单数据名称
+    form: {
+    },
+    // 表单验证规则提示信息
+    rules: {
+    },
+    // 提示或者显示信息
+    tips:{
+      markProcessComplete: '标记完成',
+      markNoCuttingTool: '标记缺料完成'
+    }
+  }
+}

+ 16 - 3
imcs-ui/src/lang/zh/runCenter.js

@@ -39,6 +39,8 @@ export default {
 			prodNums: '修改产品数量',
 			addPlan: '新增计划',
 			echartTitle: '设备周排产工时统计',
+      checkCuttingToolsDialogName: '刀具校验',
+      checkDetailCuttingToolsDialogName: '刀具校验详情',
 			orderStatus: {  //0-暂停1-待开始2-进行中3-已完成
 				zero: '暂停',
 				one: '待开始',
@@ -108,7 +110,7 @@ export default {
 			chaOrder: '插单'
 		},
 		// 列表搜索表单名称
-		searchForm: {			
+		searchForm: {
 			customName: '客户名称',
 			orderNo: '订单编号',
 			deliveryTime: '交货期',
@@ -147,7 +149,8 @@ export default {
 	  		changeBtn: '切换列表样式',
 	  		editNums: '修改数量',
 	  		waitBtn: '待计划订单',
-	  		pleseSet: '请设置'
+	  		pleseSet: '请设置',
+        checkCuttingTool: '刀具校验',
 	  	},
 	  	// 列表的cell名称
 		table: {
@@ -297,7 +300,17 @@ export default {
 				endTime: '结束时间',
 				feedback: '反馈信息',
 				feedbackFile: '反馈附件'
-			}
+			},
+      checkCuttingTool: {
+			  partName: '零件',
+        hasCuttingTools:'刀具齐套性',
+        remark: '备注',
+        partNo: '零件编号',
+        procedureNo: '工序',
+        machine: '可生产设备',
+        cuttingToolName: '刀具名称',
+        checkResult: '检查结果',
+      }
 		},
 		// 表单数据名称
 		form: {

+ 3 - 0
imcs-ui/src/lang/zh/zh.js

@@ -30,6 +30,8 @@ import zhDispatch from './dispatch'
 import zhStatisticalAnalysis from './statisticalAnalysis'
 // 【刀具管理】
 import zhCuttingTool from './cuttingTool'
+// 【刀具申请】
+import zhCuttingToolApply from './cuttingToolApply'
 
 export default {
 	/********* 分类整理多语言文件(start)  ********/
@@ -49,6 +51,7 @@ export default {
   ...zhDispatch,
   ...zhStatisticalAnalysis,
   ...zhCuttingTool,
+  ...zhCuttingToolApply,
 	/********* 分类整理多语言文件(end)  ********/
   	route: {
     	dashboard: '系统主页',

+ 277 - 0
imcs-ui/src/views/zuihou/prepareProductMgr/cuttingToolApplyMgr/Index.vue

@@ -0,0 +1,277 @@
+<template>
+  <div class="app-container">
+		<!-- 搜索模块 -->
+    <div class="filter-container">
+    	<span>
+    		<span>{{$t("cuttingToolApply.searchForm.partNo")}}:</span>
+    		<el-input v-model="queryParams.model.partNo" :placeholder='$t("common.pleaseEnter")' style="width: 120px;" size="medium"/>
+    	</span>
+    	<span style="margin-left: 15px;">
+    		<span>{{$t("cuttingToolApply.searchForm.productNo")}}:</span>
+    		<el-input v-model="queryParams.model.productNo" :placeholder='$t("common.pleaseEnter")' style="width: 120px;" size="medium"/>
+    	</span>
+      <span style="margin-left: 15px;">
+    		<span>{{$t("cuttingToolApply.searchForm.partName")}}:</span>
+    		<el-input v-model="queryParams.model.partName" :placeholder='$t("common.pleaseEnter")' style="width: 120px;" size="medium"/>
+    	</span>
+      <span style="margin-left: 15px;">
+    		<span>{{$t("cuttingToolApply.searchForm.partsAlias")}}:</span>
+    		<el-input v-model="queryParams.model.partsAlias" :placeholder='$t("common.pleaseEnter")' style="width: 120px;" size="medium"/>
+    	</span>
+      <span style="margin-left: 15px;">
+    		<span>{{$t("cuttingToolApply.searchForm.processStatus")}}:</span>
+    		<el-select v-model="queryParams.model.processStatus" :placeholder='$t("common.pleaseSelect")' size="medium" style="width: 150px;">
+        	<el-option
+            v-for="item in processStatus"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+			    </el-option>
+      	</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-plus" size="medium" @click="markProcessComplete()">{{ $t("cuttingToolApply.common.markProcessComplete") }}</el-button>
+      <el-button type="success" icon="el-icon-edit" size="medium" @click="markNoCuttingTool()">{{ $t("cuttingToolApply.common.markNoCuttingTool") }}</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" :reserve-selection="true" />
+    <!-- 设备 -->
+    <el-table-column align="center" prop="resourceName" :label='$t("cuttingToolApply.table.resourceName")' width="200" :show-overflow-tooltip="true"></el-table-column>
+    <!-- 刀具名称 -->
+    <el-table-column align="center" prop="cuttingToolName" :label='$t("cuttingToolApply.table.cuttingToolName")' :show-overflow-tooltip="true"></el-table-column>
+    <!-- 刀具图片 -->
+    <el-table-column align="center" :label='$t("cuttingToolApply.table.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("cuttingToolApply.table.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 align="center" prop="orderName" :label='$t("cuttingToolApply.table.orderName")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 订单交期 -->
+      <el-table-column align="center" prop="orderDeliveryTime" :label='$t("cuttingToolApply.table.orderDeliveryTime")' width="200" :show-overflow-tooltip="true"></el-table-column>
+      <!-- 零件交期 -->
+      <el-table-column align="center" prop="orderPartDeliveryTime" :label='$t("cuttingToolApply.table.orderPartDeliveryTime")' width="200" :show-overflow-tooltip="true"></el-table-column>
+      <!-- 零部件编号 -->
+      <el-table-column align="center" prop="partNo" :label='$t("cuttingToolApply.table.partNo")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 产品代号 -->
+      <el-table-column align="center" prop="productNo" :label='$t("cuttingToolApply.table.productNo")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 零件名称 -->
+      <el-table-column align="center" prop="partName" :label='$t("cuttingToolApply.table.partName")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 工序号 -->
+      <el-table-column align="center" prop="procedureNo" :label='$t("cuttingToolApply.table.procedureNo")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 工序名 -->
+      <el-table-column align="center" prop="procedureName" :label='$t("cuttingToolApply.table.procedureName")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 状态 -->
+      <el-table-column align="center" prop="processStatusName" :label='$t("cuttingToolApply.table.processStatus")' :show-overflow-tooltip="true"></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"
+    />
+  </div>
+</template>
+
+<script>
+	import Pagination from "@/components/Pagination"
+	// 【刀具基础数据】-API
+  // 【刀具管理】-API
+  import cuttingToolApplyMgrApi from "@/api/prepareProductMgr/CuttingToolApply"
+	import elDragDialog from '@/directive/el-drag-dialog'
+	import { initQueryParams } from '@/utils/commons'
+	export default {
+	  name: "cuttingToolApply",
+	  directives: { elDragDialog },
+	  components: { Pagination },
+	  props: {
+	  },
+	  data () {
+	    return {
+	      tableKey: 0,
+        processStatus: [],
+	      queryParams: initQueryParams({}),
+	      selection: [],
+	      loading: false,
+	      tableData: {
+	        total: 0
+	      }
+	    }
+	  },
+	  // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
+	  created() {
+      // 加载【字典】
+      this.processStatus = this.$constWKS.CUTTINGTOOLAPPLYLIST
+	  	// 加载列表数据
+	  	this.fetch()
+		},
+	  computed: {
+	  },
+	  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()
+	    },
+	    clearSelections () {
+	      this.$refs.table.clearSelection()
+	    },
+	    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
+        cuttingToolApplyMgrApi.page(this.queryParams).then(response => {
+	        const res = response.data
+	        if (res.isSuccess) {
+	          this.tableData = res.data
+	        }
+	        // 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)
+	      }
+	    },
+      markProcessComplete(){
+          if (!this.selection.length) {
+              this.$message({
+                  message: this.$t("tips.noDataSelected"),
+                  type: "warning"
+              })
+              return
+          }
+          const ids = []
+          this.selection.forEach(item => {
+              ids.push(item.id)
+          })
+
+          this.loading = true
+          cuttingToolApplyMgrApi.markProcessStatus({"ids":ids, "processStatus":"2"}).then(response => {
+              const res = response.data
+              if (res.isSuccess) {
+                  if (res.isSuccess) {
+                      this.$message({
+                          message: this.$t('cuttingToolApply.tips.markProcessComplete'),
+                          type: 'success'
+                      })
+                  }
+              }
+          }).finally(() => this.loading = false)
+
+          this.fetch()
+      },
+      markNoCuttingTool(){
+          if (!this.selection.length) {
+              this.$message({
+                  message: this.$t("cuttingToolApply.tips.noDataSelected"),
+                  type: "warning"
+              })
+              return
+          }
+          const ids = []
+          this.selection.forEach(item => {
+              ids.push(item.id)
+          })
+
+          this.loading = true
+          cuttingToolApplyMgrApi.markProcessStatus({"ids":ids, "processStatus":"1"}).then(response => {
+              const res = response.data
+              if (res.isSuccess) {
+                  if (res.isSuccess) {
+                      this.$message({
+                          message: this.$t('cuttingToolApply.tips.markNoCuttingTool'),
+                          type: 'success'
+                      })
+                  }
+              }
+          }).finally(() => this.loading = false)
+
+          this.fetch()
+      }
+	  }
+	}
+</script>
+<style lang="scss" scoped></style>

+ 6 - 6
imcs-ui/src/views/zuihou/resourceProductMgr/programTask/Index.vue

@@ -36,7 +36,7 @@
 	      </el-button>
       </span>
     </div>
-    
+
     <!-- 功能按钮 -->
     <el-row class="filter-container">
     	<el-col>
@@ -243,7 +243,7 @@
       }
 	  },
 	  mounted () {
-	    
+
 	  },
 	  methods: {
 	    viewClose () {
@@ -288,7 +288,7 @@
 	        })
 	        return
 	      }
-	
+
 	      this.$confirm(this.$t("resource.tips.taskTips"), this.$t("common.tips"), {
 	      	distinguishCancelAndClose: true,
 	        confirmButtonText: this.$t("common.confirm"),
@@ -355,7 +355,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
 	      programTaskApi.page(this.queryParams).then(response => {
@@ -365,7 +365,7 @@
 	        }
 	        // eslint-disable-next-line no-return-assign
 	      }).finally(() => this.loading = false)
-	     
+
 	    },
 	    cellClick (row, column) {
 	      if (column['columnKey'] === "operation") {
@@ -378,7 +378,7 @@
 	          this.$refs.table.toggleRowSelection(row)
 	        }
 	      })
-	
+
 	      if (!flag) {
 	        this.$refs.table.toggleRowSelection(row, true)
 	      }

+ 1 - 1
imcs-ui/src/views/zuihou/runManageCenter/orderMgr/components/finishedOrder/index.vue

@@ -215,7 +215,7 @@
       custom-class="dialogNoTop"
       @close="craftCardsClose"
     >
-      <!--【	维保】 -->
+      <!--【工艺卡片】 -->
       <craftCards
         :row-data="rowData"
         :order-id="orderId"

+ 106 - 0
imcs-ui/src/views/zuihou/runManageCenter/orderMgr/components/runningOrder/components/checkCuttingTools/checkDetailCuttingTools.vue

@@ -0,0 +1,106 @@
+<template>
+  <div class="app-container">
+		<!-- 列表数据 -->
+    <el-table
+      :key="tableKey"
+      ref="table"
+      v-loading="loading"
+      :data="tableData"
+      border
+      fit
+      row-key="id"
+      style="width: 100%;"
+    >
+      <!-- 零件 -->
+      <el-table-column prop="name" :label='$t("runCenter.table.checkCuttingTool.partNo")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 工序 -->
+      <el-table-column prop="produceNo" :label='$t("runCenter.table.checkCuttingTool.procedureNo")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 可生产设备 -->
+      <el-table-column prop="resourceName" :label='$t("runCenter.table.checkCuttingTool.machine")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 刀具名称 -->
+      <el-table-column prop="needCuttingTools" :label='$t("runCenter.table.checkCuttingTool.cuttingToolName")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 检测结果 -->
+      <el-table-column prop="checkResult" :label='$t("runCenter.table.checkCuttingTool.checkResult")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 操作 -->
+      <el-table-column
+        :label="$t('table.operation')"
+        fixed="right"
+        align="center"
+        column-key="operation"
+      >
+        <template slot-scope="{ row }">
+          <a @click="applyCuttingTool(row)" style="color: #2db7f5">{{ row.checkResult === '不足' ? (row.applyId == null ? "申请装刀" : '已申请') : ''}} </a>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+	// 【订单计划】-API
+	import planMgrApi from "@/api/runManageCenter/planMgr"
+  // 【刀具安装申请】-API
+  import cuttingToolApplyMgrApi from "@/api/prepareProductMgr/CuttingToolApply"
+	export default {
+	  name: "checkDetailCuttingTool",
+	  directives: {},
+	  components: {},
+    props: {
+      detailPlanId: {
+        type:String,
+        default:''
+      }
+    },
+	  data () {
+	    return {
+	      tableKey: 0,
+	      loading: false,
+        tableData:[]
+	    }
+	  },
+	  // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
+	  created() {
+	  	// 加载列表数据
+	  	this.fetch()
+		},
+	  computed: {
+	  },
+	  mounted () {
+	  },
+	  methods: {
+	    // 查询计划刀具可用性
+	    fetch () {
+	      this.loading = true
+        planMgrApi.checkPlanDetailCuttingTools({ "planId": this.detailPlanId }).then(response => {
+	        const res = response.data
+	        if (res.isSuccess) {
+	          this.tableData = res.data
+	        }
+	      }).finally(() => this.loading = false)
+	    },
+
+      applyCuttingTool(data){
+	      // 申请装刀
+        if(data.checkResult === '不足' ){
+          if(data.applyId === null ) {
+            this.loading = true
+            data.cuttingToolName = data.needCuttingTools
+            cuttingToolApplyMgrApi.save(data).then(response => {
+              const res = response.data
+              if (res.isSuccess) {
+                this.$message({
+                    message: this.$t('tips.createSuccess'),
+                    type: 'success'
+                })
+              }
+            }).finally(() => this.loading = false)
+            fetch()
+          }else{ // 已装刀跳转到装刀申请页面
+            this.$router.push({path:'/prepareProductMgr/cuttingToolApplyMgr',query: data});
+          }
+        }
+      }
+	  }
+	}
+</script>
+<style lang="scss" scoped></style>

+ 107 - 0
imcs-ui/src/views/zuihou/runManageCenter/orderMgr/components/runningOrder/components/checkCuttingTools/index.vue

@@ -0,0 +1,107 @@
+<template>
+  <div class="app-container">
+		<!-- 列表数据 -->
+    <el-table
+      :key="tableKey"
+      ref="table"
+      v-loading="loading"
+      :data="tableData"
+      border
+      fit
+      row-key="id"
+      style="width: 100%;"
+    >
+      <!-- 零件 -->
+      <el-table-column prop="name" :label='$t("runCenter.table.checkCuttingTool.partName")' :show-overflow-tooltip="true"></el-table-column>
+      <!-- 刀具齐套性 -->
+      <el-table-column
+        :label="$t('runCenter.table.checkCuttingTool.hasCuttingTools')"
+        fixed="right"
+        align="center"
+        column-key="operation"
+      >
+        <template slot-scope="{ row }">
+          <a @click="showCheckDetails(row)" style="color: #2db7f5">{{row.hasCuttingToolsFlag}} </a>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 刀具校验详情对话框-->
+    <el-dialog
+      :visible.sync="checkDetailCuttingToolsVisible"
+      :title='$t("runCenter.common.checkDetailCuttingToolsDialogName")'
+      append-to-body
+      width="80%"
+      custom-class="dialogNoTop"
+      @close="checkDetailCuttingToolsClose"
+    >
+      <!--【	刀具校验对话框】 -->
+      <checkDetailCuttingTools
+        :detail-plan-id="detailPlanId"
+        @close="checkDetailCuttingToolsClose"
+      />
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+	// 【订单计划】-API
+	import planMgrApi from "@/api/runManageCenter/planMgr"
+  import checkDetailCuttingTools from "@/views/zuihou/runManageCenter/orderMgr/components/runningOrder/components/checkCuttingTools/checkDetailCuttingTools"
+	export default {
+	  name: "checkCuttingTool",
+	  directives: {},
+	  components: {checkDetailCuttingTools},
+    props: {
+      planId: {
+        type:String,
+        default:''
+      }
+    },
+	  data () {
+	    return {
+	      tableKey: 0,
+	      loading: false,
+        checkDetailCuttingToolsVisible: false,
+        detailPlanId: '',
+        tableData: []
+	    }
+	  },
+	  // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
+	  created() {
+	  	// 加载列表数据
+	  	this.fetch()
+		},
+	  computed: {
+	  },
+	  mounted () {
+	  },
+	  methods: {
+	    // 查询计划刀具可用性
+	    fetch () {
+	      this.loading = true
+        // TOTO 临时写死一个测试,后面订单页面调整完成后直接用选中的计划id
+        this.planId = '1483374961870503936'
+        planMgrApi.checkPlanCuttingTools({ "planId": this.planId }).then(response => {
+	        const res = response.data
+	        if (res.isSuccess) {
+	          this.tableData = res.data
+	        }
+	      }).finally(() => this.loading = false)
+	    },
+
+      showCheckDetails(data){
+	        if(data.hasCuttingToolsFlag === '是'){
+            return
+          }
+          this.detailPlanId = data.planId
+          this.checkDetailCuttingToolsVisible = true
+      },
+
+      checkDetailCuttingToolsClose(){
+          this.checkDetailCuttingToolsVisible = false
+      },
+	  }
+	}
+</script>
+<style lang="scss" scoped></style>

+ 67 - 22
imcs-ui/src/views/zuihou/runManageCenter/orderMgr/components/runningOrder/index.vue

@@ -33,10 +33,13 @@
 	      </el-button>
       </span>
     </div>
-    
+
     <!-- 功能按钮 -->
     <el-row class="filter-container">
     	<el-col>
+        <!-- 刀具校验 -->
+        <el-button type="primary" icon="el-icon-data-analysis" size="medium" v-has-permission="['order:checkCuttingTool']" @click="checkCuttingTool">{{$t("runCenter.buttons.checkCuttingTool")}}</el-button>
+
     		<el-button type="primary" icon="el-icon-finished" size="medium" v-has-permission="['order:onebtn']" @click="viewPg">{{$t("runCenter.buttons.onebtn")}}</el-button>
 	      <el-button type="success" icon="el-icon-finished" size="medium" v-has-permission="['order:gostBtn']" @click="editOne">{{$t("runCenter.buttons.gostBtn")}}</el-button>
 	      <el-dropdown v-has-permission="['order:more']" @command="handleCommand" trigger="click">
@@ -223,10 +226,10 @@
         <div v-html="preview.context" />
       </el-scrollbar>
     </el-dialog>
-    
+
     <!-- 【一键排产】 -->
     <el-dialog
-    	:close-on-click-modal="false" 
+    	:close-on-click-modal="false"
   		:close-on-press-escape="false"
 		  :title='$t("runCenter.buttons.onebtn")'
 		  :visible.sync="dialogVisible"
@@ -241,7 +244,7 @@
 		    <el-button plain type="warning" @click="dialogVisible = false">{{ $t('common.cancel') }}</el-button>
 		  </span>
 		</el-dialog>
-		
+
 		<!-- 【生成排产方案】 -->
     <production-programme
       ref="prodProg"
@@ -251,10 +254,10 @@
       @close="editPPClose"
       @success="editSuccess"
     ></production-programme>
-    
+
     <!-- 【优先级/生产单元】 -->
     <el-dialog
-    	:close-on-click-modal="false" 
+    	:close-on-click-modal="false"
   		:close-on-press-escape="false"
 		  :title="setTitle"
 		  :visible.sync="dialogMoreVisible"
@@ -285,13 +288,28 @@
 					  </el-checkbox-group>
 					</template>
       	</el-form-item>
-			</el-form>	
+			</el-form>
 		  <span slot="footer" class="dialog-footer">
 		  	<el-button type="primary" :disabled="confirmDisabled" @click="submitForm">{{ $t('common.confirm') }}</el-button>
 		    <el-button plain type="warning" @click="dialogMoreVisible = false">{{ $t('common.cancel') }}</el-button>
 		  </span>
 		</el-dialog>
-    
+
+    <!-- 刀具校验对话框-->
+    <el-dialog
+      :visible.sync="checkCuttingToolsVisible"
+      :title='$t("runCenter.common.checkCuttingToolsDialogName")'
+      width="80%"
+      custom-class="dialogNoTop"
+      @close="checkCuttingToolsClose"
+    >
+      <!--【	刀具校验对话框】 -->
+      <checkCuttingTools
+        :plan-id="planId"
+        @close="checkCuttingToolsClose"
+      />
+    </el-dialog>
+
   </div>
 </template>
 
@@ -305,6 +323,7 @@
 	import ProductionProgramme from "./components/ProductionProgramme"
 	// 【区域管理】-API
 	import areaMgrApi from "@/api/resourceProductMgr/areaMgr"
+  import checkCuttingTools from "@/views/zuihou/runManageCenter/orderMgr/components/runningOrder/components/checkCuttingTools/index"
 	// 【订单管理】-API
 	import orderMgrApi from "@/api/runManageCenter/orderMgr"
 	import elDragDialog from '@/directive/el-drag-dialog'
@@ -313,7 +332,7 @@
 	export default {
 	  name: "DraftOrder",
 	  directives: { elDragDialog },
-	  components: { Pagination, TenantEdit, TenantView, ProductionProgramme },
+	  components: { Pagination, TenantEdit, TenantView, ProductionProgramme, checkCuttingTools},
 	  props: {
 	  },
 	  data () {
@@ -341,6 +360,9 @@
 	    	confirmDisabled: false,
 	    	dialogVisible: false,
 	    	dialogMoreVisible: false,
+        // 刀具检验对话框是否展示标志
+        planId:"",
+        checkCuttingToolsVisible: false,
 	    	dialogPP: {
 	        isVisible: false,
 	        title: ""
@@ -421,10 +443,10 @@
 	    }
 	  },
 	  mounted () {
-	    
+
 	  },
 	  methods: {
-	  	
+
 	  	// 【全选】checkbox-事件
 	  	handleCheckAllChange(val) {
 	  		// 全选赋值
@@ -466,17 +488,17 @@
         	this.moreTitle = "production"
         	this.productionBtn()
         }
-        
+
         // 如果是:【暂停】
         if(command == "stop"){
         	this.panseBtn('0')
         }
-        
+
         // 如果是:【启用】
         if(command == "start"){
         	this.panseBtn('1')
         }
-        
+
         // 如果是:【删除】
         if(command == "del"){
         	this.orderDelete()
@@ -748,7 +770,7 @@
 	        })
 	        return
 	      }
-	
+
 	      this.$confirm(this.$t("lineSide.tips.wareTips"), this.$t("common.tips"), {
 	      	distinguishCancelAndClose: true,
 	        confirmButtonText: this.$t("common.confirm"),
@@ -779,13 +801,13 @@
 	        }
 	      })
 	    },
-	    
+
 	    // 生产详情
 	    view (row) {
 	      this.$refs.view.setTenant(row)
 	      this.tenantViewVisible = true
 	    },
-	    
+
 	   	// 【查看排产方案】按钮-事件
 	    viewPg(){
 	    	if (!this.selection.length) {
@@ -849,7 +871,7 @@
 	    // 查询【生产单元】下拉数据
 	    getAreaList(){
 	    	areaMgrApi.getList().then(res => {
-	    		res =  res.data 
+	    		res =  res.data
 	    		// console.log("查询【生产单元】: ", res)
 	    		if(res.isSuccess){
 	    			this.areaList = res.data
@@ -862,7 +884,7 @@
 	        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
 	      // 查询必须参数:进行中(当审核完成的时候,同时设置orderstaut=2)
@@ -878,7 +900,7 @@
 	        }
 	        // eslint-disable-next-line no-return-assign
 	      }).finally(() => this.loading = false)
-	     
+
 	    },
 	    cellClick (row, column) {
 	      if (column['columnKey'] === "operation") {
@@ -891,11 +913,34 @@
 	          this.$refs.table.toggleRowSelection(row)
 	        }
 	      })
-	
+
 	      if (!flag) {
 	        this.$refs.table.toggleRowSelection(row, true)
 	      }
-	    }
+	    },
+      checkCuttingTool(row){
+        if (!this.selection.length) {
+            this.$message({
+                message: this.$t("tips.noDataSelected"),
+                type: "warning"
+            })
+            return
+        }
+        let planIds = ""
+        this.selection.forEach(item => {
+          planIds = planIds + item.id + ","
+        })
+        if(planIds.length > 0){
+            planIds = planIds.substr(0,planIds.length -1)
+        }
+
+        this.planId = planIds
+        this.checkCuttingToolsVisible = true
+      },
+
+      checkCuttingToolsClose(){
+        this.checkCuttingToolsVisible = false
+      },
 	  }
 	}
 </script>