Prechádzať zdrojové kódy

Merge remote-tracking branch 'origin/master' into master

yaoyq 4 rokov pred
rodič
commit
4df7c9c5ae
29 zmenil súbory, kde vykonal 2064 pridanie a 1147 odobranie
  1. 118 117
      imcs-ui/package.json
  2. 141 131
      imcs-ui/src/api/AuthUser.js
  3. 131 131
      imcs-ui/src/api/classScheduleMgr/shiftChangeMgr.js
  4. 105 0
      imcs-ui/src/api/machiningClient/stationMgr.js
  5. BIN
      imcs-ui/src/assets/yunMap/layout.png
  6. BIN
      imcs-ui/src/assets/yunMap/layout2.png
  7. BIN
      imcs-ui/src/assets/yunMap/layout3.png
  8. 196 360
      imcs-ui/src/components/UserSelects/index.vue
  9. 97 95
      imcs-ui/src/lang/zh/calssSchedule.js
  10. 42 0
      imcs-ui/src/lang/zh/dispatch.js
  11. 13 4
      imcs-ui/src/lang/zh/prepare.js
  12. 3 2
      imcs-ui/src/lang/zh/runCenter.js
  13. 3 0
      imcs-ui/src/lang/zh/zh.js
  14. 14 16
      imcs-ui/src/views/zuihou/classScheduleMgr/classScheduleMgr/Index.vue
  15. 7 5
      imcs-ui/src/views/zuihou/classScheduleMgr/classesMgr/Index.vue
  16. 74 32
      imcs-ui/src/views/zuihou/classScheduleMgr/classesMgr/components/Edit.vue
  17. 9 38
      imcs-ui/src/views/zuihou/classScheduleMgr/schedulingStaffMgr/Index.vue
  18. 82 49
      imcs-ui/src/views/zuihou/classScheduleMgr/settingClassSchedul/Index.vue
  19. 126 12
      imcs-ui/src/views/zuihou/classScheduleMgr/shiftChangeMgr/Index.vue
  20. 30 18
      imcs-ui/src/views/zuihou/classScheduleMgr/shiftChangeMgr/components/Edit.vue
  21. 202 0
      imcs-ui/src/views/zuihou/dispatchMgr/dispatchRecord/Index.vue
  22. 247 0
      imcs-ui/src/views/zuihou/dispatchMgr/exception/Index.vue
  23. 239 0
      imcs-ui/src/views/zuihou/machiningClient/personConf/Index.vue
  24. 33 4
      imcs-ui/src/views/zuihou/machiningClient/touchScreen/Index.vue
  25. 3 1
      imcs-ui/src/views/zuihou/resourceProductMgr/areaMgr/Index.vue
  26. 51 32
      imcs-ui/src/views/zuihou/resourceProductMgr/areaMgr/components/Edit.vue
  27. 1 1
      imcs-ui/src/views/zuihou/resourceProductMgr/equipmentMgr/Index.vue
  28. 24 39
      imcs-ui/src/views/zuihou/runManageCenter/lineRunModel/Index.vue
  29. 73 60
      imcs-ui/src/views/zuihou/runManageCenter/setCurrentLine/Index.vue

+ 118 - 117
imcs-ui/package.json

@@ -1,117 +1,118 @@
-{
-  "name": "zuihou-ui",
-  "version": "1.0.0",
-  "description": "zuihou-admin-cloud 前端项目",
-  "author": "zuihou",
-  "license": "Apache 2.0",
-  "scripts": {
-    "dev": "vue-cli-service serve",
-    "build:prod": "vue-cli-service build",
-    "build:boot": "vue-cli-service build --mode boot",
-    "build:docker": "vue-cli-service build --mode docker",
-    "build:stage": "vue-cli-service build --mode staging",
-    "preview": "node build/index.js --preview",
-    "lint": "eslint --ext .js,.vue src",
-    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
-    "new": "plop"
-  },
-  "keywords": [
-    "vue",
-    "admin",
-    "dashboard",
-    "element-ui",
-    "management-system"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/zuihou/zuihou-ui"
-  },
-  "bugs": {
-    "url": "https://github.com/zuihou/zuihou-ui/issues"
-  },
-  "dependencies": {
-    "@riophae/vue-treeselect": "0.0.38",
-    "axios": "^0.21.4",
-    "chromedriver": "^79.0.0",
-    "clipboard": "2.0.4",
-    "codemirror": "^5.64.0",
-    "driver.js": "0.9.5",
-    "dropzone": "5.5.1",
-    "echarts": "^5.2.2",
-    "element-ui": "2.12.0",
-    "file-saver": "2.0.1",
-    "fuse.js": "3.4.4",
-    "jsbarcode": "^3.11.3",
-    "jsonlint": "1.6.3",
-    "jszip": "^3.7.1",
-    "moment": "^2.29.1",
-    "normalize.css": "7.0.0",
-    "nprogress": "0.2.0",
-    "path-to-regexp": "2.4.0",
-    "screenfull": "4.2.0",
-    "showdown": "^1.9.1",
-    "sortablejs": "1.8.4",
-    "spark-md5": "^3.0.1",
-    "tui-editor": "1.3.3",
-    "vue": "2.6.10",
-    "vue-count-to": "^1.0.13",
-    "vue-echarts": "^6.0.0-rc.5",
-    "vue-i18n": "7.3.2",
-    "vue-lazyload": "^1.3.3",
-    "vue-print-nb": "^1.6.0",
-    "vue-progressbar": "^0.7.5",
-    "vue-router": "3.0.2",
-    "vue-seamless-scroll": "^1.1.23",
-    "vue-simple-uploader": "^0.7.4",
-    "vue-splitpane": "1.0.4",
-    "vuedraggable": "2.20.0",
-    "vuescroll": "^4.17.3",
-    "vuex": "3.1.0",
-    "xlsx": "^0.17.4"
-  },
-  "devDependencies": {
-    "@babel/core": "7.0.0",
-    "@babel/register": "7.0.0",
-    "@vue/cli-plugin-babel": "3.5.3",
-    "@vue/cli-plugin-eslint": "3.5.1",
-    "@vue/cli-plugin-unit-jest": "^3.9.0",
-    "@vue/cli-service": "3.5.3",
-    "@vue/test-utils": "1.0.0-beta.29",
-    "autoprefixer": "^9.5.1",
-    "babel-core": "7.0.0-bridge.0",
-    "babel-eslint": "10.0.1",
-    "babel-jest": "23.6.0",
-    "chalk": "2.4.2",
-    "chokidar": "2.1.5",
-    "compression-webpack-plugin": "^1.1.12",
-    "connect": "3.6.6",
-    "eslint": "5.15.3",
-    "eslint-plugin-vue": "5.2.2",
-    "html-webpack-plugin": "3.2.0",
-    "husky": "1.3.1",
-    "less": "^3.13.1",
-    "less-loader": "^5.0.0",
-    "lint-staged": "8.1.5",
-    "mockjs": "1.0.1-beta3",
-    "node-sass": "^4.14.1",
-    "plop": "2.3.0",
-    "pug": "^3.0.2",
-    "pug-plain-loader": "^1.1.0",
-    "runjs": "^4.3.2",
-    "sass-loader": "^7.1.0",
-    "script-ext-html-webpack-plugin": "2.1.3",
-    "script-loader": "0.7.2",
-    "serve-static": "^1.13.2",
-    "svg-sprite-loader": "4.1.3",
-    "svgo": "1.2.0",
-    "vue-template-compiler": "2.6.10"
-  },
-  "engines": {
-    "node": ">=8.9",
-    "npm": ">= 3.0.0"
-  },
-  "browserslist": [
-    "> 1%",
-    "last 2 versions"
-  ]
-}
+{
+  "name": "zuihou-ui",
+  "version": "1.0.0",
+  "description": "zuihou-admin-cloud 前端项目",
+  "author": "zuihou",
+  "license": "Apache 2.0",
+  "scripts": {
+    "dev": "vue-cli-service serve",
+    "build:prod": "vue-cli-service build",
+    "build:boot": "vue-cli-service build --mode boot",
+    "build:docker": "vue-cli-service build --mode docker",
+    "build:stage": "vue-cli-service build --mode staging",
+    "preview": "node build/index.js --preview",
+    "lint": "eslint --ext .js,.vue src",
+    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
+    "new": "plop"
+  },
+  "keywords": [
+    "vue",
+    "admin",
+    "dashboard",
+    "element-ui",
+    "management-system"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/zuihou/zuihou-ui"
+  },
+  "bugs": {
+    "url": "https://github.com/zuihou/zuihou-ui/issues"
+  },
+  "dependencies": {
+    "@riophae/vue-treeselect": "0.0.38",
+    "axios": "^0.21.4",
+    "chromedriver": "^79.0.0",
+    "clipboard": "2.0.4",
+    "codemirror": "^5.64.0",
+    "driver.js": "0.9.5",
+    "dropzone": "5.5.1",
+    "echarts": "^5.2.2",
+    "element-ui": "2.15.6",
+    "file-saver": "2.0.1",
+    "fuse.js": "3.4.4",
+    "jsbarcode": "^3.11.3",
+    "jsonlint": "1.6.3",
+    "jszip": "^3.7.1",
+    "moment": "^2.29.1",
+    "normalize.css": "7.0.0",
+    "nprogress": "0.2.0",
+    "path-to-regexp": "2.4.0",
+    "screenfull": "4.2.0",
+    "showdown": "^1.9.1",
+    "sortablejs": "1.8.4",
+    "spark-md5": "^3.0.1",
+    "tui-editor": "1.3.3",
+    "vue": "2.6.10",
+    "vue-count-to": "^1.0.13",
+    "vue-echarts": "^6.0.0-rc.5",
+    "vue-i18n": "7.3.2",
+    "vue-lazyload": "^1.3.3",
+    "vue-print-nb": "^1.6.0",
+    "vue-progressbar": "^0.7.5",
+    "vue-router": "3.0.2",
+    "vue-seamless-scroll": "^1.1.23",
+    "vue-simple-uploader": "^0.7.4",
+    "vue-splitpane": "1.0.4",
+    "vuedraggable": "2.20.0",
+    "vuescroll": "^4.17.3",
+    "vuex": "3.1.0",
+    "xlsx": "^0.17.4"
+  },
+  "devDependencies": {
+    "@babel/core": "7.0.0",
+    "@babel/register": "7.0.0",
+    "@vue/cli-plugin-babel": "3.5.3",
+    "@vue/cli-plugin-eslint": "3.5.1",
+    "@vue/cli-plugin-unit-jest": "^3.9.0",
+    "@vue/cli-service": "3.5.3",
+    "@vue/test-utils": "1.0.0-beta.29",
+    "autoprefixer": "^9.5.1",
+    "babel-core": "7.0.0-bridge.0",
+    "babel-eslint": "10.0.1",
+    "babel-jest": "23.6.0",
+    "chalk": "2.4.2",
+    "chokidar": "2.1.5",
+    "compression-webpack-plugin": "^1.1.12",
+    "connect": "3.6.6",
+    "eslint": "5.15.3",
+    "eslint-plugin-vue": "5.2.2",
+    "html-webpack-plugin": "3.2.0",
+    "husky": "1.3.1",
+    "less": "^3.13.1",
+    "less-loader": "^5.0.0",
+    "lint-staged": "8.1.5",
+    "mockjs": "1.0.1-beta3",
+    "node-sass": "^4.14.1",
+    "plop": "2.3.0",
+    "pug": "^3.0.2",
+    "pug-plain-loader": "^1.1.0",
+    "qs": "^6.10.2",
+    "runjs": "^4.3.2",
+    "sass-loader": "^7.1.0",
+    "script-ext-html-webpack-plugin": "2.1.3",
+    "script-loader": "0.7.2",
+    "serve-static": "^1.13.2",
+    "svg-sprite-loader": "4.1.3",
+    "svgo": "1.2.0",
+    "vue-template-compiler": "2.6.10"
+  },
+  "engines": {
+    "node": ">=8.9",
+    "npm": ">= 3.0.0"
+  },
+  "browserslist": [
+    "> 1%",
+    "last 2 versions"
+  ]
+}

+ 141 - 131
imcs-ui/src/api/AuthUser.js

@@ -1,131 +1,141 @@
-import axiosApi from './AxiosApi.js'
-
-const apiList = {
-	getList: {
-    method: 'POST',
-    url: `/authority/authUser/all`
-  },
-  page: {
-    method: 'POST',
-    url: `/authority/authUser/page`
-  },
-  update: {
-    method: 'POST',
-    url: `/authority/authUser/update`
-  },
-  save: {
-    method: 'POST',
-    url: `/authority/authUser`
-  },
-  updateStatus: {
-    method: 'POST',
-    url: `/authority/authUser/status`
-  },
-  remove: {
-    method: 'DELETE',
-    url: `/authority/authUser`
-  },
-  delete: {
-    method: 'POST',
-    url: `/authority/authUser/delete`
-  },
-  list: {
-    method: 'POST',
-    url: `/authority/authUser/query`
-  },
-  preview: {
-    method: 'POST',
-    url: `/authority/authUser/preview`
-  },
-  export: {
-    method: 'POST',
-    url: `/authority/authUser/export`
-  },
-  import: {
-    method: 'POST',
-    url: `/authority/authUser/import`
-  }
-}
-
-export default {
-	getList (data) {
-    return axiosApi({
-      ...apiList.getList,
-      data
-    })
-  },
-  page (data) {
-    return axiosApi({
-      ...apiList.page,
-      data
-    })
-  },
-  save (data) {
-    return axiosApi({
-      ...apiList.save,
-      data
-    })
-  },
-  update (data) {
-    return axiosApi({
-      ...apiList.update,
-      data
-    })
-  },
-  updateStatus (data) {
-    return axiosApi({
-      ...apiList.updateStatus,
-      data
-    })
-  },
-  remove (data) {
-    return axiosApi({
-      ...apiList.remove,
-      data
-    })
-  },
-  delete (data) {
-    return axiosApi({
-      ...apiList.remove,
-      data
-    })
-  },
-  list (data) {
-    return axiosApi({
-      ...apiList.list,
-      data
-    })
-  },
-  check (code) {
-    return axiosApi({
-      method: 'GET',
-      url: `/authority/authUser/check/${code}`
-    })
-  },
-  checkField (data) {
-    return axiosApi({
-      method: 'POST',
-      url: `/authority/authUser/check`,
-      data
-    })
-  },
-  preview (data) {
-    return axiosApi({
-      ...apiList.preview,
-      data
-    })
-  },
-  export (data) {
-    return axiosApi({
-      ...apiList.export,
-      responseType: "blob",
-      data
-    })
-  },
-  import (data) {
-    return axiosApi({
-      ...apiList.import,
-      data
-    })
-  }
-}
+import axiosApi from './AxiosApi.js'
+
+const apiList = {
+	getList: {
+    method: 'POST',
+    url: `/authority/authUser/all`
+  },
+  page: {
+    method: 'POST',
+    url: `/authority/authUser/page`
+  },
+  selectUserList: {
+    method: 'POST',
+    url: `/authority/authUser/selectUserList`
+  },
+  update: {
+    method: 'POST',
+    url: `/authority/authUser/update`
+  },
+  save: {
+    method: 'POST',
+    url: `/authority/authUser`
+  },
+  updateStatus: {
+    method: 'POST',
+    url: `/authority/authUser/status`
+  },
+  remove: {
+    method: 'DELETE',
+    url: `/authority/authUser`
+  },
+  delete: {
+    method: 'POST',
+    url: `/authority/authUser/delete`
+  },
+  list: {
+    method: 'POST',
+    url: `/authority/authUser/query`
+  },
+  preview: {
+    method: 'POST',
+    url: `/authority/authUser/preview`
+  },
+  export: {
+    method: 'POST',
+    url: `/authority/authUser/export`
+  },
+  import: {
+    method: 'POST',
+    url: `/authority/authUser/import`
+  }
+}
+
+export default {
+	getList (data) {
+    return axiosApi({
+      ...apiList.getList,
+      data
+    })
+  },
+  page (data) {
+    return axiosApi({
+      ...apiList.page,
+      data
+    })
+  },
+  selectUserList (data) {
+    return axiosApi({
+      ...apiList.selectUserList,
+      data
+    })
+  },
+  save (data) {
+    return axiosApi({
+      ...apiList.save,
+      data
+    })
+  },
+  update (data) {
+    return axiosApi({
+      ...apiList.update,
+      data
+    })
+  },
+  updateStatus (data) {
+    return axiosApi({
+      ...apiList.updateStatus,
+      data
+    })
+  },
+  remove (data) {
+    return axiosApi({
+      ...apiList.remove,
+      data
+    })
+  },
+  delete (data) {
+    return axiosApi({
+      ...apiList.remove,
+      data
+    })
+  },
+  list (data) {
+    return axiosApi({
+      ...apiList.list,
+      data
+    })
+  },
+  check (code) {
+    return axiosApi({
+      method: 'GET',
+      url: `/authority/authUser/check/${code}`
+    })
+  },
+  checkField (data) {
+    return axiosApi({
+      method: 'POST',
+      url: `/authority/authUser/check`,
+      data
+    })
+  },
+  preview (data) {
+    return axiosApi({
+      ...apiList.preview,
+      data
+    })
+  },
+  export (data) {
+    return axiosApi({
+      ...apiList.export,
+      responseType: "blob",
+      data
+    })
+  },
+  import (data) {
+    return axiosApi({
+      ...apiList.import,
+      data
+    })
+  }
+}

+ 131 - 131
imcs-ui/src/api/classScheduleMgr/shiftChangeMgr.js

@@ -1,131 +1,131 @@
-import axiosApi from '../AxiosApi.js'
-
-const apiList = {
-	getList: {
-    method: 'POST',
-    url: `/authority/scheduleUserChange/all`
-  },
-  page: {
-    method: 'POST',
-    url: `/authority/scheduleUserChange/page`
-  },
-  update: {
-    method: 'POST',
-    url: `/authority/scheduleUserChange/update`
-  },
-  save: {
-    method: 'POST',
-    url: `/authority/scheduleUserChange`
-  },
-  updateStatus: {
-    method: 'POST',
-    url: `/authority/scheduleUserChange/status`
-  },
-  remove: {
-    method: 'DELETE',
-    url: `/authority/scheduleUserChange`
-  },
-  delete: {
-    method: 'POST',
-    url: `/authority/scheduleUserChange/delete`
-  },
-  list: {
-    method: 'POST',
-    url: `/authority/scheduleUserChange/query`
-  },
-  preview: {
-    method: 'POST',
-    url: `/authority/scheduleUserChange/preview`
-  },
-  export: {
-    method: 'POST',
-    url: `/authority/scheduleUserChange/export`
-  },
-  import: {
-    method: 'POST',
-    url: `/authority/scheduleUserChange/import`
-  }
-}
-
-export default {
-	getList (data) {
-    return axiosApi({
-      ...apiList.getList,
-      data
-    })
-  },
-  page (data) {
-    return axiosApi({
-      ...apiList.page,
-      data
-    })
-  },
-  save (data) {
-    return axiosApi({
-      ...apiList.save,
-      data
-    })
-  },
-  update (data) {
-    return axiosApi({
-      ...apiList.update,
-      data
-    })
-  },
-  updateStatus (data) {
-    return axiosApi({
-      ...apiList.updateStatus,
-      data
-    })
-  },
-  remove (data) {
-    return axiosApi({
-      ...apiList.remove,
-      data
-    })
-  },
-  delete (data) {
-    return axiosApi({
-      ...apiList.remove,
-      data
-    })
-  },
-  list (data) {
-    return axiosApi({
-      ...apiList.list,
-      data
-    })
-  },
-  check (code) {
-    return axiosApi({
-      method: 'GET',
-      url: `/authority/scheduleUserChange/check/${code}`
-    })
-  },
-  checkField (data) {
-    return axiosApi({
-      method: 'POST',
-      url: `/authority/scheduleUserChange/check`,
-      data
-    })
-  },
-  preview (data) {
-    return axiosApi({
-      ...apiList.preview,
-      data
-    })
-  },
-  export (data) {
-    return axiosApi({
-      ...apiList.export,
-      responseType: "blob",
-      data
-    })
-  },
-  import (data) {
-    return axiosApi({
-      ...apiList.import,
-      data
-    })
-  }
-}
+import axiosApi from '../AxiosApi.js'
+
+const apiList = {
+	getList: {
+    method: 'POST',
+    url: `/authority/scheduleUserChange/all`
+  },
+  page: {
+    method: 'POST',
+    url: `/authority/scheduleUserChange/page`
+  },
+  update: {
+    method: 'POST',
+    url: `/authority/scheduleUserChange/update`
+  },
+  save: {
+    method: 'POST',
+    url: `/authority/scheduleUserChange`
+  },
+  updateStatus: {
+    method: 'POST',
+    url: `/authority/scheduleUserChange/updateStatus`
+  },
+  remove: {
+    method: 'DELETE',
+    url: `/authority/scheduleUserChange`
+  },
+  delete: {
+    method: 'POST',
+    url: `/authority/scheduleUserChange/delete`
+  },
+  list: {
+    method: 'POST',
+    url: `/authority/scheduleUserChange/query`
+  },
+  preview: {
+    method: 'POST',
+    url: `/authority/scheduleUserChange/preview`
+  },
+  export: {
+    method: 'POST',
+    url: `/authority/scheduleUserChange/export`
+  },
+  import: {
+    method: 'POST',
+    url: `/authority/scheduleUserChange/import`
+  }
+}
+
+export default {
+	getList (data) {
+    return axiosApi({
+      ...apiList.getList,
+      data
+    })
+  },
+  page (data) {
+    return axiosApi({
+      ...apiList.page,
+      data
+    })
+  },
+  save (data) {
+    return axiosApi({
+      ...apiList.save,
+      data
+    })
+  },
+  update (data) {
+    return axiosApi({
+      ...apiList.update,
+      data
+    })
+  },
+  updateStatus (data) {
+    return axiosApi({
+      ...apiList.updateStatus,
+      data
+    })
+  },
+  remove (data) {
+    return axiosApi({
+      ...apiList.remove,
+      data
+    })
+  },
+  delete (data) {
+    return axiosApi({
+      ...apiList.remove,
+      data
+    })
+  },
+  list (data) {
+    return axiosApi({
+      ...apiList.list,
+      data
+    })
+  },
+  check (code) {
+    return axiosApi({
+      method: 'GET',
+      url: `/authority/scheduleUserChange/check/${code}`
+    })
+  },
+  checkField (data) {
+    return axiosApi({
+      method: 'POST',
+      url: `/authority/scheduleUserChange/check`,
+      data
+    })
+  },
+  preview (data) {
+    return axiosApi({
+      ...apiList.preview,
+      data
+    })
+  },
+  export (data) {
+    return axiosApi({
+      ...apiList.export,
+      responseType: "blob",
+      data
+    })
+  },
+  import (data) {
+    return axiosApi({
+      ...apiList.import,
+      data
+    })
+  }
+}

+ 105 - 0
imcs-ui/src/api/machiningClient/stationMgr.js

@@ -0,0 +1,105 @@
+/*********************** 【机加工人端-待完成任务/已完成任务】API ********************/
+import axiosApi from '../AxiosApi.js'
+
+const apiList = {
+	getList: {
+	    method: 'POST',
+	    url: `/authority/stationUser/query`
+	},  	
+  	update: {
+	    method: 'PUT',
+	    url: `/authority/stationUser`
+  	},
+	saveAll: {
+	    method: 'POST',
+	    url: `/authority/stationUser/saveAll`
+	},
+	updateAll: {
+	    method: 'POST',
+	    url: `/authority/stationUser/updateAll`
+	},
+	allStation: {
+	    method: 'GET',
+	    url: `/authority/stationUser/allStation`
+	}, 
+	allUser: {
+	    method: 'GET',
+	    url: `/authority/stationUser/allUser`
+	}, 
+	stationUser: {
+	    method: 'GET',
+	    url: `/authority/stationUser/stationUser`
+	},	
+	getStation:{
+		method: 'GET',
+	    url: `/authority/stationUser/getStation`
+	},
+  	remove: {
+    	method: 'DELETE',
+    	url: `/authority/stationUser`
+  	},
+}
+
+export default {
+	getList (data) {
+	    return axiosApi({
+	    	...apiList.getList,
+	    	data
+	    })
+  	},
+  	// 获取【所有人员】信息
+  	allUser (data) {
+	    return axiosApi({
+	    	...apiList.allUser,
+	    	data
+	    })
+  	},
+  	page (data) {
+	    return axiosApi({
+	      	...apiList.page,
+	      	data
+	    })
+  	},
+  	saveAll (data) {
+	    return axiosApi({
+	      	...apiList.saveAll,
+	      	data
+	    })
+  	},
+	updateAll (data) {
+	    return axiosApi({
+	      	...apiList.updateAll,
+	      	data
+	    })
+  	},
+  	allStation (data) {
+	    return axiosApi({
+	      	...apiList.allStation,
+	      	data
+	    })
+  	},  
+	stationUser (data) {
+	    return axiosApi({
+	      	...apiList.stationUser,
+	      	data
+	    })
+  	}, 
+	getStation (data) {
+	    return axiosApi({
+	      	...apiList.getStation,
+	      	data
+	    })
+  	},     
+  	update (data) {
+	    return axiosApi({
+	      	...apiList.update,
+	      	data
+	    })
+  	},
+  	remove (data) {
+	    return axiosApi({
+	      	...apiList.remove,
+	      	data
+	    })
+  	}  	
+}

BIN
imcs-ui/src/assets/yunMap/layout.png


BIN
imcs-ui/src/assets/yunMap/layout2.png


BIN
imcs-ui/src/assets/yunMap/layout3.png


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 196 - 360
imcs-ui/src/components/UserSelects/index.vue


+ 97 - 95
imcs-ui/src/lang/zh/calssSchedule.js

@@ -1,95 +1,97 @@
-/**************** 【生产准备中心】菜单  **************/
-export default {
-	calssSchedule: {
-		// 本模型下的共通
-		common: {
-			aduio: '审核产品',
-			schedFlag0: '不需排班',
-			schedFlag1: '需要排班',
-			classSchul: '班表',
-			userSchul: '个人班表'
-		},
-		// 列表搜索表单名称
-		searchForm: {
-			name: '班表名称',
-			no: '编号',
-			numb: '工号',
-			deptName: '部门',
-			userName: '姓名',
-			month: '月份',
-			applyName: '申请人',
-			applyTime: '申请日期',
-			audioStatus: '审核状态'
-		},
-		// 按钮的名称
-	  	buttons: {
-	  		setClass: '设置班表',
-	  		allClear: '全部清除'
-	  	},
-	  	// 列表的cell名称
-		table: {
-			// 【班表管理】列表table字段名称
-			schedule: {
-				year: '年',
-				month: '月',
-				status: '状态',
-				addTime: '新增时间',
-				audioTime: '审核时间'
-			},
-			// 【班次管理】列表table字段名称
-			calsses: {
-				no: '编号',
-				name: '班次名称',
-				model: '班次时间段',
-				hours: '班次时间(小时)',
-				remark: '备注'
-			},
-			// 【排班人员管理】列表table字段名称
-			staff: {
-				type: '类型',
-				numbers: '人员数量',
-			},
-			// 【换班管理】列表table字段名称
-			staffChange: {
-				auditUser: '申请人',
-				applyTime: '申请日期',
-				model: '更换班表',
-				hours: '更换人',
-				changeTime: '更换日期',
-				remark: '更换班表',
-				auditStatus: '审核状态',
-				createTime: '新增时间',
-				statusTime: '审核时间'
-			},
-			// 【设置班表】列表table字段名称
-			setClass: {
-				deptName: '部门',
-				name: '姓名',
-				no: '工号'
-			}
-		},
-		// 表单数据名称
-		form: {
-			timeLength: '时间段',
-			sumTime: '总时间',
-			tipsColor: '标注颜色',
-			month: '班表月份',
-			deptUsers: '部门人员',
-			setDate: '设置日期',
-			setClass: '设置班次'
-		},
-		// 表单验证规则提示信息
-		rules: {
-		},
-		// 提示或者显示信息
-		tips:{
-			accossDay: '第二天',
-			startTime: '开始时间',
-			endTime: '结束时间',
-			areaTips: '删除班次管理数据后,会将班次管理数据全部删除,确认删除?',
-			schedulTips: '删除班表管理数据后,会将班表管理数据全部删除,确认删除?',
-			settingTips: '清除设置班表数据后,会将设置班表人员数据全部清除,确认清除?',
-			settingAllTips: '全部清除设置班表数据后,会将设置班表人员数据全部清除,确认全部清除?'
-		}
-	}
-}
+/**************** 【生产准备中心】菜单  **************/
+export default {
+	calssSchedule: {
+		// 本模型下的共通
+		common: {
+			aduio: '审核产品',
+			schedFlag0: '不需排班',
+			schedFlag1: '需要排班',
+			classSchul: '班表',
+			userSchul: '个人班表'
+		},
+		// 列表搜索表单名称
+		searchForm: {
+			name: '班表名称',
+			no: '编号',
+			numb: '工号',
+			deptName: '部门',
+			userName: '姓名',
+			month: '月份',
+			applyName: '申请人',
+			applyTime: '申请日期',
+			audioStatus: '审核状态'
+		},
+		// 按钮的名称
+	  	buttons: {
+	  		setClass: '设置班表',
+	  		allClear: '全部清除'
+	  	},
+	  	// 列表的cell名称
+		table: {
+			// 【班表管理】列表table字段名称
+			schedule: {
+				year: '年',
+				month: '月',
+				status: '状态',
+				addTime: '新增时间',
+				audioTime: '审核时间'
+			},
+			// 【班次管理】列表table字段名称
+			calsses: {
+				no: '编号',
+				name: '班次名称',
+				model: '班次时间段',
+				hours: '班次时间(小时)',
+				remark: '备注'
+			},
+			// 【排班人员管理】列表table字段名称
+			staff: {
+				type: '类型',
+				numbers: '人员数量',
+			},
+			// 【换班管理】列表table字段名称
+			staffChange: {
+				auditUser: '申请人',
+				applyTime: '申请日期',
+				model: '更换班表',
+				hours: '更换人',
+				changeTime: '更换日期',
+				remark: '更换班表',
+				auditStatus: '审核状态',
+				createTime: '新增时间',
+				statusTime: '审核时间'
+			},
+			// 【设置班表】列表table字段名称
+			setClass: {
+				deptName: '部门',
+				name: '姓名',
+				no: '工号'
+			}
+		},
+		// 表单数据名称
+		form: {
+			beginTime: '班次开始时间',
+      endTime: '班次结束时间',
+			sumTime: '总时间',
+			tipsColor: '标注颜色',
+			month: '班表月份',
+			deptUsers: '部门人员',
+			setDate: '设置日期',
+			setClass: '设置班次'
+		},
+		// 表单验证规则提示信息
+		rules: {
+		},
+		// 提示或者显示信息
+		tips:{
+			accossDay: '第二天',
+			startTime: '开始时间',
+			endTime: '结束时间',
+			areaTips: '删除班次管理数据后,会将班次管理数据全部删除,确认删除?',
+			schedulTips: '删除班表管理数据后,会将班表管理数据全部删除,确认删除?',
+			settingTips: '清除设置班表数据后,会将设置班表人员数据全部清除,确认清除?',
+			settingAllTips: '全部清除设置班表数据后,会将设置班表人员数据全部清除,确认全部清除?',
+      shiftChangeTips: '删除人员换班数据后,会将该人员当前换班数据全部删除,确认删除?',
+		}
+	}
+}

+ 42 - 0
imcs-ui/src/lang/zh/dispatch.js

@@ -0,0 +1,42 @@
+/**************** 【调度对话记录】菜单  **************/
+export default {
+    dispatch: {
+        // 本模型下的共通
+        common: {
+
+        },
+        // 列表搜索表单名称
+        searchForm: {
+            name: '指令名称',
+            type: '分类',
+            status: '状态',
+            startTime: '开始时间',
+            endTime: '结束时间',
+        },
+        table: {
+            record: {
+                name: '指令名称',
+                status: '启用状态',
+                createTime: '创建时间',
+                updateTime: '修改时间',
+                distributeTime: '下发时间'
+            },
+            exception: {
+                operationTime: '操作时间',
+                device: '设备',
+                name: '指令内容',
+                status: {
+                    normal: "状态",
+                    running: "执行中",
+                    runFail: "执行失败",
+                    sendFail: "发送失败"
+                },
+                operation: '操作'
+            }
+        },
+        button: {
+            resend: "指令重新发送",
+            marked: "指令标记完"
+        }
+    }
+}

+ 13 - 4
imcs-ui/src/lang/zh/prepare.js

@@ -134,7 +134,15 @@ export default {
 				brand: '品牌',
 				tradeMark: '牌号',
 				category: '分类',
-       		materialType: '物料类型',
+       		    materialType: '物料类型',
+                heatNo: '原炉批号',
+				mapNo: '图号',
+				period: '周期',
+				num: '数量',
+				expiryDate: '有效期',
+				materialNo: '材料编号',
+				joinDate: '入厂日期',
+       			materialType: '物料类型',
 				status: '启用状态',
 				remark: '备注',
 				jjPosion: '可加工夹紧位置',
@@ -221,9 +229,10 @@ export default {
 				specification: '规格',
 				positionSort: '夹紧位置',
 				status: '启用状态',
-        tray: '可放托盘',
-        number: '可放托盘数量',
-        weight: '排序(升序)'
+        	    tray: '可放托盘',
+                number: '可放托盘数量',
+                weight: '排序(升序)',
+                num: '数量'
 			},
 			// 【托盘管理-新增-夹紧位置】列表table字段名称
 			trayPosition: {

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

@@ -108,11 +108,11 @@ export default {
 			chaOrder: '插单'
 		},
 		// 列表搜索表单名称
-		searchForm: {
+		searchForm: {			
 			customName: '客户名称',
 			orderNo: '订单编号',
 			deliveryTime: '交货期',
-			setCurrent: '设置当前管理的产线',
+			setCurrent: '设置产线运行模式',
 			setModel: '设置产线运行模式',
 			config: '产线运行配置',
 			updownConfig: '上下料工人配置',
@@ -308,6 +308,7 @@ export default {
 			product: '产品',
 			setCurrent: '设置当前管理产线为',
 			setModel: '产线模式',
+			areaName: '产线名称',
 			panseMenu: '暂停订单操作',
 			failOptions:'不合格品操作',
 			productConfig: '排产调度池',

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

@@ -24,6 +24,8 @@ import zhLargeScreen from './largeScreen'
 import zhDeveloper from './developer'
 // 【打标码管理】
 import zhMarking from './marking'
+// 【打标码管理】
+import zhDispatch from './dispatch'
 
 export default {
 	/********* 分类整理多语言文件(start)  ********/
@@ -40,6 +42,7 @@ export default {
     ...zhWms,
     ...zhDeveloper,
     ...zhMarking,
+    ...zhDispatch,
 	/********* 分类整理多语言文件(end)  ********/
   	route: {
     	dashboard: '系统主页',

+ 14 - 16
imcs-ui/src/views/zuihou/classScheduleMgr/classScheduleMgr/Index.vue

@@ -2,13 +2,10 @@
   <div class="app-container">
 		<!-- 搜索模块 -->
     <div class="filter-container">
-    	<span>
-    		<span>{{$t("calssSchedule.searchForm.name")}}:</span>
-    		<el-input v-model="queryParams.model.name" :placeholder='$t("common.pleaseEnter")' style="width: 150px;" size="medium"/>
-    	</span>
+
     	<span style="margin-left: 15px;">
     		<span>{{$t("calssSchedule.searchForm.audioStatus")}}:</span>
-    		<el-select v-model="queryParams.model.status" :placeholder='$t("common.pleaseSelect")' size="medium" style="width: 150px;">
+    		<el-select v-model="queryParams.model.auditStatus" :placeholder='$t("common.pleaseSelect")' size="medium" style="width: 150px;">
         	<el-option
 			      v-for="item in audioStatus"
 			      :key="item.value"
@@ -26,7 +23,7 @@
 	      </el-button>
       </span>
     </div>
-    
+
     <!-- 功能按钮 -->
     <el-row class="filter-container">
     	<el-col>
@@ -145,7 +142,7 @@
         <div v-html="preview.context" />
       </el-scrollbar>
     </el-dialog>
-    
+
     <el-dialog
       v-el-drag-dialog
       :close-on-click-modal="false"
@@ -170,7 +167,7 @@
 			  </el-row>
 			</template>
     </el-dialog>
-    
+
     <el-dialog
 		  title="设置班表"
 		  :visible.sync="dialogVisible"
@@ -192,8 +189,7 @@
 	// 【设置班表】-组件
 	import SettingClassSchedul from "@/views/zuihou/classScheduleMgr/settingClassSchedul/Index"
 	import elDragDialog from '@/directive/el-drag-dialog'
-	import { downloadFile, initEnums, initDicts, initQueryParams } from '@/utils/commons'
-	import axios from 'axios'
+	import { initDicts, initQueryParams } from '@/utils/commons'
 	export default {
 	  name: "WarehouseTypeMgr",
 	  directives: { elDragDialog },
@@ -251,7 +247,7 @@
       }
 	  },
 	  mounted () {
-	    
+
 	  },
 	  methods: {
 	  	// 【设置班表】按钮-事件
@@ -265,7 +261,7 @@
 	  	},
 	  	// 【设置班表-确定】按钮事件
 	  	editClassSuccess(){
-	  		
+
 	  	},
 	  	// 【提交审核】按钮-事件
 	    updateStatus(status){
@@ -395,7 +391,7 @@
 	        })
 	        return
 	      }
-	
+
 	      this.$confirm(this.$t("calssSchedule.tips.schedulTips"), this.$t("common.tips"), {
 	      	distinguishCancelAndClose: true,
 	        confirmButtonText: this.$t("common.confirm"),
@@ -474,12 +470,14 @@
 	      this.dialog.isVisible = true
 	    },
 	    fetch (params = {}) {
+	  	  this.tableKey = !this.tableKey
+        this.selection  = []
 	      this.loading = true
 	      if (this.queryParams.timeRange) {
 	        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
 	      classScheduleMgrApi.page(this.queryParams).then(response => {
@@ -489,7 +487,7 @@
 	        }
 	        // eslint-disable-next-line no-return-assign
 	      }).finally(() => this.loading = false)
-	     
+
 	    },
 	    cellClick (row, column) {
 	      if (column['columnKey'] === "operation") {
@@ -502,7 +500,7 @@
 	          this.$refs.table.toggleRowSelection(row)
 	        }
 	      })
-	
+
 	      if (!flag) {
 	        this.$refs.table.toggleRowSelection(row, true)
 	      }

+ 7 - 5
imcs-ui/src/views/zuihou/classScheduleMgr/classesMgr/Index.vue

@@ -17,7 +17,7 @@
 	      </el-button>
       </span>
     </div>
-    
+
     <!-- 功能按钮 -->
     <el-row class="filter-container">
     	<el-col>
@@ -192,7 +192,7 @@
       }
 	  },
 	  mounted () {
-	    
+
 	  },
 	  methods: {
 	    viewClose () {
@@ -238,7 +238,7 @@
 	        })
 	        return
 	      }
-	
+
 	      this.$confirm(this.$t("calssSchedule.tips.areaTips"), this.$t("common.tips"), {
 	      	distinguishCancelAndClose: true,
 	        confirmButtonText: this.$t("common.confirm"),
@@ -305,6 +305,8 @@
 	      this.dialog.isVisible = true
 	    },
 	    fetch (params = {}) {
+        this.tableKey = !this.tableKey
+	      this.selection = []
 	      this.loading = true
 	      // 搜索日期区间
 	      if (this.queryParams.timeRange) {
@@ -323,7 +325,7 @@
 	        }
 	        // eslint-disable-next-line no-return-assign
 	      }).finally(() => this.loading = false)
-	     
+
 	    },
 	    cellClick (row, column) {
 	      if (column['columnKey'] === "operation") {
@@ -336,7 +338,7 @@
 	          this.$refs.table.toggleRowSelection(row)
 	        }
 	      })
-	
+
 	      if (!flag) {
 	        this.$refs.table.toggleRowSelection(row, true)
 	      }

+ 74 - 32
imcs-ui/src/views/zuihou/classScheduleMgr/classesMgr/components/Edit.vue

@@ -1,11 +1,11 @@
 <template>
-  <el-dialog 
-  	:close-on-click-modal="false" 
-  	:close-on-press-escape="false" 
-  	:title="title" 
+  <el-dialog
+  	:close-on-click-modal="false"
+  	:close-on-press-escape="false"
+  	:title="title"
   	:append-to-body="true"
-  	:visible.sync="isVisible" 
-  	:width="width" 
+  	:visible.sync="isVisible"
+  	:width="width"
   	top="50px"
   >
     <el-form ref="form" :model="tenant" :rules="rules" label-position="right" label-width="130px">
@@ -14,33 +14,26 @@
 	          <el-option :key="index" :label="item" :value="key" v-for="(item, key, index) in dicts.FREQUENCY" />
 	        </el-select>
       </el-form-item>
-      <el-form-item 
-      	:label='$t("calssSchedule.form.timeLength")+":"' 
+      <el-form-item
+      	:label='$t("calssSchedule.form.beginTime")+":"'
       	prop="startTime"
-      	:rules='[
-		      { required: tenant.name.key == "04" ? false : true, message: this.$t("rules.require"), trigger: "change" }
-		    ]'
       >
-      	<el-col :span="18">
-      		<el-time-picker v-model="tenant.startTime" :disabled='tenant.name.key == "04" ? true : false' value-format="HH:mm:ss" :placeholder='$t("calssSchedule.tips.startTime")' style="width: 48%;"></el-time-picker>
-		      <span>~</span>
-		      <el-time-picker v-model="tenant.endTime" :disabled='tenant.name.key == "04" ? true : false' value-format="HH:mm:ss" :placeholder='$t("calssSchedule.tips.endTime")' style="width: 48%;"></el-time-picker>
+      	<el-col :span="16">
+      		<el-time-picker v-model="tenant.startTime" :disabled='tenant.name.key == "04" ? true : false' format="HH:mm" value-format="HH:mm" :placeholder='$t("calssSchedule.tips.startTime")' style="width: 40%;"></el-time-picker>
 		    </el-col>
-		    <el-col :span="6">
-		    	<span style="margin-left: 20px;">
+      </el-form-item>
+      <el-form-item
+        :label='$t("calssSchedule.form.endTime")+":"'
+        prop="endTime"
+      >
+        <el-col :span="16">
+          <el-time-picker v-model="tenant.endTime" :disabled='tenant.name.key == "04" ? true : false' format="HH:mm" value-format="HH:mm" :placeholder='$t("calssSchedule.tips.endTime")' style="width: 40%;"></el-time-picker>
+        </el-col>
+        <el-col :span="2">
+		    	<span style="margin-left: -220px;">
 		    		<el-checkbox v-model="tenant.accossDay" :disabled='tenant.name.key == "04" ? true : false'>{{$t("calssSchedule.tips.accossDay")}}</el-checkbox>
 		    	</span>
-		    	<!--<template>
-					  <el-checkbox-group v-for="item in updateCheckbox" v-model="tenant.model2">
-					    <el-checkbox :key="item.id" :label="item.name">{{item.name}}</el-checkbox>
-					  </el-checkbox-group>
-					</template>-->
-		    	<!--<template style="margin-left: 20px;">
-					  <el-checkbox-group :disabled='tenant.name.key == "04" ? true : false'>
-					    <el-checkbox v-model="tenant.accossDay" :label="1">{{$t("calssSchedule.tips.accossDay")}}</el-checkbox>
-					  </el-checkbox-group>
-					</template>-->
-		    </el-col>
+        </el-col>
       </el-form-item>
       <el-form-item :label='$t("calssSchedule.form.sumTime")+":"' prop="hours">
           <span>{{sumTime}}</span>
@@ -50,7 +43,7 @@
           <el-color-picker v-model="tenant.color" size="small"></el-color-picker>
       </el-form-item>
       <el-form-item :label='$t("calssSchedule.table.calsses.remark")+":"' prop="remark">
-      	<el-input v-model="tenant.remark" type="textarea" :rows="3" style="width: 100%;"/>
+      	<el-input v-model="tenant.remark" type="textarea" :rows="3" style="width: 100%;" />
       </el-form-item>
     </el-form>
     <div slot="footer" class="dialog-footer">
@@ -60,7 +53,7 @@
   </el-dialog>
 </template>
 <script>
-	
+
 // 【班次管理】-API
 import classesMgrApi from "@/api/classScheduleMgr/classesMgr"
 
@@ -95,6 +88,37 @@ export default {
         ],
         color: [
         	{ required: true, message: this.$t("rules.require"), trigger: 'blur' }
+        ],
+        startTime: [
+          { required: true, validator: (rule, value, callback) => {
+                  if(this.tenant.name.key != '04'){
+                      console.log("value=" + value)
+                      if (value === null) {
+                          callback(new Error("请选择班表开始时间"))
+                      } else {
+                          callback()
+                      }
+                  }else{
+                      callback()
+                  }
+              }, trigger: ['blur','change'] }
+        ],
+        endTime: [
+            { required: true, validator: (rule, value, callback) => {
+                    console.log("value=" + value)
+                    if(this.tenant.name.key != '04'){
+                        if (value === null) {
+                            callback(new Error("请选择班表结束时间"))
+                        } else {
+                            callback()
+                        }
+                    }else{
+                        callback()
+                    }
+                }, trigger: ['blur','change'] }
+        ],
+        remark: [
+          {max: 200,message: "备注长度不能超过200"}
         ]
       }
     }
@@ -110,6 +134,16 @@ export default {
       }
     },
     sumTime(){
+      if(this.tenant.name.key != "04"){
+          if(this.tenant.startTime === null){
+              this.tenant.hours = 0
+              return 0
+          }
+          if(this.tenant.endTime === null){
+              this.tenant.hours = 0
+              return 0
+          }
+      }
     	// 一天的时间,换成毫秒数
     	let minite = 60*60*24*1000
     	let startTime = 0
@@ -141,10 +175,18 @@ export default {
   	// 【班次名称】值变化-事件
   	changeName(val){
   		// 如果是修改,【时间段】不让输入
+      this.$refs.form.validate((valid) => {
+          if (valid) {
+              return true
+          } else {
+              return false
+          }
+      })
   		if(val == "04"){
   			this.tenant.accossDay = false
   			this.tenant.startTime = null
   			this.tenant.endTime = null
+
   		}
   	},
     initTenant () {
@@ -152,8 +194,8 @@ export default {
         name: {
         	key: ''
         },
-        startTime: 0,
-        endTime: 0
+        startTime: null,
+        endTime: null
       }
     },
     initWidth () {

+ 9 - 38
imcs-ui/src/views/zuihou/classScheduleMgr/schedulingStaffMgr/Index.vue

@@ -1,34 +1,5 @@
 <template>
   <div class="app-container">
-		<!-- 搜索模块 -->
-    <!--<div class="filter-container">
-    	<span>
-    		<span>{{$t("calssSchedule.searchForm.name")}}:</span>
-    		<el-input v-model="calssName" :placeholder='$t("common.pleaseEnter")' style="width: 150px;" 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"
@@ -83,7 +54,7 @@
       :total="Number(tableData.total)"
       @pagination="fetch"
     />
-    
+
     <el-dialog
 		  title="选择人员"
 		  :visible.sync="dialogVisible"
@@ -104,8 +75,8 @@
 	// 【排班人员管理】-API
 	import schedulingStaffMgrApi from "@/api/classScheduleMgr/schedulingStaffMgr"
 	import elDragDialog from '@/directive/el-drag-dialog'
-	import { downloadFile, initEnums, initDicts, initQueryParams } from '@/utils/commons'
-	import axios from 'axios'
+	import {initDicts, initQueryParams } from '@/utils/commons'
+
 	export default {
 	  name: "SchedulingStaffMgr",
 	  directives: { elDragDialog },
@@ -161,7 +132,7 @@
       }
 	  },
 	  mounted () {
-	    
+
 	  },
 	  methods: {
 	  	// 【设置】按钮-事件
@@ -230,7 +201,7 @@
 	        })
 	        return
 	      }
-	
+
 	      this.$confirm(this.$t("calssSchedule.tips.areaTips"), this.$t("common.tips"), {
 	      	distinguishCancelAndClose: true,
 	        confirmButtonText: this.$t("common.confirm"),
@@ -305,10 +276,10 @@
 	        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
-	      
+
 	      schedulingStaffMgrApi.pageList(this.queryParams).then(response => {
 	        const res = response.data
 	        if (res.isSuccess) {
@@ -316,7 +287,7 @@
 	        }
 	        // eslint-disable-next-line no-return-assign
 	      }).finally(() => this.loading = false)
-	     
+
 	    },
 	    cellClick (row, column) {
 	      if (column['columnKey'] === "operation") {
@@ -329,7 +300,7 @@
 	          this.$refs.table.toggleRowSelection(row)
 	        }
 	      })
-	
+
 	      if (!flag) {
 	        this.$refs.table.toggleRowSelection(row, true)
 	      }

+ 82 - 49
imcs-ui/src/views/zuihou/classScheduleMgr/settingClassSchedul/Index.vue

@@ -8,22 +8,20 @@
     	</span>
     	<span style="margin-left: 15px;">
     		<span>{{$t("calssSchedule.searchForm.deptName")}}:</span>
-    		<el-select v-model="queryParams.model.status" :placeholder='$t("common.pleaseSelect")' size="medium" style="width: 150px;">
-        	<el-option
-			      v-for="item in audioStatus"
-			      :key="item.value"
-			      :label="item.label"
-			      :value="item.value">
-			    </el-option>
-      	</el-select>
+        <el-cascader
+          v-model="queryParams.deptId"
+          placeholder="请选择"
+          :options="depts"
+          :props="props"
+          filterable
+          change-on-select
+          ref="cascader"
+          @change="handleChange"
+        ></el-cascader>
     	</span>
     	<span style="margin-left: 15px;">
     		<span>{{$t("calssSchedule.searchForm.userName")}}:</span>
-    		<el-input v-model="queryParams.model.userName" :placeholder='$t("common.pleaseEnter")' style="width: 150px;" size="medium"/>
-    	</span>
-    	<span style="margin-left: 15px;">
-    		<span>{{$t("calssSchedule.searchForm.numb")}}:</span>
-    		<el-input v-model="queryParams.model.no" :placeholder='$t("common.pleaseEnter")' style="width: 150px;" size="medium"/>
+    		<el-input v-model="queryParams.userName" :placeholder='$t("common.pleaseEnter")' style="width: 150px;" size="medium"/>
     	</span>
       <span style="margin-left: 15px;">
 	      <el-button plain type="primary" icon="el-icon-search" size="medium" @click="search">
@@ -34,12 +32,12 @@
 	      </el-button>
       </span>
     </div>
-    
+
     <!-- 功能按钮 -->
     <el-row class="filter-container">
     	<el-col>
     		<el-button type="primary" icon="el-icon-setting" size="medium" @click="add">{{ $t("common.setting") }}</el-button>
-    		<el-button type="primary" icon="el-icon-view" size="medium" @click="viewOne">
+    		<el-button type="primary" icon="el-icon-view" size="medium" @click="viewOne(null)">
 	        {{ $t("common.view") }}
 	      </el-button>
 	      <!--<el-button type="success" icon="el-icon-edit" size="medium" @click="editOne">
@@ -122,7 +120,7 @@
         <div v-html="preview.context" />
       </el-scrollbar>
     </el-dialog>
-    
+
     <!-- 【日历-查看】组件 -->
     <calendar-user
       ref="calendar"
@@ -142,9 +140,10 @@
 	import CalendarUser from "./components/CalendarUser"
 	// 【设置班表】-API
 	import settingClassSchedulApi from "@/api/classScheduleMgr/settingClassSchedul"
+  // 【部门】-API
+  import orgApi from '@/api/Org'
 	import elDragDialog from '@/directive/el-drag-dialog'
-	import { downloadFile, initEnums, initDicts, initQueryParams } from '@/utils/commons'
-	import axios from 'axios'
+	import {initDicts, initQueryParams } from '@/utils/commons'
 	export default {
 	  name: "ShiftChangeMgr",
 	  directives: { elDragDialog },
@@ -155,7 +154,8 @@
 	  data () {
 	    return {
 	    	tags: ['','warning','success','danger'],
-	    	audioStatus: [],
+	    	depts: [],
+        deptId:null,
 	      dialog: {
 	        isVisible: false,
 	        title: ""
@@ -209,6 +209,11 @@
               picker.$emit('pick', [start, end]);
             }
           }]
+        },
+        props: {  // 配置数据格式
+            checkStrictly: true, // 是否严格的遵守父子节点不互相关联(官网配置项)
+            value: 'id',
+            label: 'label',
         }
 	    }
 	  },
@@ -225,16 +230,14 @@
     },
 	  // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
 	  created() {
-	  	// 调用常量-审核状态
-	  	this.audioStatus = this.$constWKS.AUDIOLIST
 	  	// 加载【字典】
 	  	initDicts(['NATION'], this.dicts);
+        this.getTreeData()
 	  	// 加载列表数据
 	  	this.fetch()
 		},
 	  computed: {
 	  	settingColunm(e){
-	  		console.log("值是什么:", e)
 	  		return "1111"
 	  	},
 	    currentUser () {
@@ -252,7 +255,6 @@
 	  		let str = ""
 	  		// 如果值存在
 	  		if(!!cellValue){
-	  			console.log("渲染的值!",row, column, cellValue, index)
 	  			let arr = cellValue.split(",")
 	  			arr.map(item => {
 	  				let list = item.split(";")
@@ -262,6 +264,8 @@
 	  		return str
 	  	},
 	  	resetInit(){
+        // 加载Tree数据
+        this.getTreeData()
 	  		// 加载列表数据
 	  		this.fetch()
 	  	},
@@ -274,7 +278,7 @@
 	    },
 	    // 【日历-查看】确认-事件
 	    editUserSuccess(){
-	    	
+
 	    },
 	    editClose () {
 	      this.dialog.isVisible = false
@@ -291,7 +295,8 @@
 	      })
 	    },
 	    reset () {
-	      this.queryParams = initQueryParams({})
+	  	  this.objData.deptId = null
+        this.queryParams = initQueryParams({})
 	      this.$refs.table.clearSort()
 	      this.$refs.table.clearFilter()
 	      this.search()
@@ -315,7 +320,7 @@
 	        })
 	        return
 	      }
-	
+
 	      this.$confirm(this.$t("calssSchedule.tips.settingTips"), this.$t("common.tips"), {
 	      	distinguishCancelAndClose: true,
 	        confirmButtonText: this.$t("common.confirm"),
@@ -406,28 +411,30 @@
 	    },
 	    // 【查看】表头上Btn-事件
 	    viewOne(row) {
-	    	if(row){
-		    	this.viewCalendar(row);
+	    	if(null === row){
+            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.viewCalendar(this.selection[0]);
+
 	    	}else{
-	    		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.viewCalendar(this.selection[0]);
+            this.viewCalendar(row);
 	    	}
 	    },
 	    // 打开【日历-查看】组件
 	    viewCalendar(row){
+	  	  console.log(row)
 	    	this.$refs.calendar.setTenant(row, this.objData)
 	      this.userDialog.title = this.$t("calssSchedule.common.userSchul")
 	      this.userDialog.isVisible = true
@@ -444,10 +451,21 @@
 	        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
-	      
+
+        const selectDeptId = []
+        if(null != this.queryParams.deptId || this.queryParams.deptId === "undefined"){
+            this.queryParams.deptId.forEach(item => {
+                selectDeptId.push(item)
+            });
+            if(selectDeptId.length > 0){
+                this.objData.deptId = selectDeptId[selectDeptId.length-1]
+            }
+        }
+        this.objData.userName = this.queryParams.userName
+
 	      this.queryParams.model = this.objData
 	      settingClassSchedulApi.pageList(this.queryParams).then(response => {
 	        const res = response.data
@@ -457,7 +475,7 @@
 	        }
 	        // eslint-disable-next-line no-return-assign
 	      }).finally(() => this.loading = false)
-	     
+
 	    },
 	    // 格式化,自己需要的渲染数据
 	    formatData(data){
@@ -492,7 +510,6 @@
 	    		})
 	    		data.data = list
 	    	}
-	    	console.log("数据后的内容:", data)
 	    	this.tableData = data
 	    },
 	    cellClick (row, column) {
@@ -506,11 +523,27 @@
 	          this.$refs.table.toggleRowSelection(row)
 	        }
 	      })
-	
+
 	      if (!flag) {
 	        this.$refs.table.toggleRowSelection(row, true)
 	      }
-	    }
+	    },
+      // 加载Tree数据
+      getTreeData(){
+          orgApi.allTree({}).then((response) => {
+              const res = response.data
+              this.depts = res.data
+          })
+      },
+      handleChange() {
+          const el = this.$refs.cascader;
+          // 官方文档中有提供获取子节点的方法 getCheckedNodes;
+          // 通过监听当前的点击事件,判断是否还有子节点,如果没有,则关闭选项卡;
+          const mark = el.getCheckedNodes()[0].children.length;
+          if(!mark) {
+              el.dropDownVisible = false;
+          }
+      }
 	  }
 	}
 </script>

+ 126 - 12
imcs-ui/src/views/zuihou/classScheduleMgr/shiftChangeMgr/Index.vue

@@ -40,7 +40,7 @@
 	      </el-button>
       </span>
     </div>
-    
+
     <!-- 功能按钮 -->
     <el-row class="filter-container">
     	<el-col>
@@ -51,6 +51,8 @@
 	      <el-button type="danger" icon="el-icon-delete" size="medium" @click="batchDelete">
 	        {{ $t("table.delete") }}
 	      </el-button>
+        <el-button type="primary" icon="el-icon-thumb" size="medium" @click="updateStatus('1')">{{$t("common.audio.addAudio")}}</el-button>
+        <el-button type="primary" icon="el-icon-suitcase" size="medium" @click="audioBtn()">{{$t("common.audio.audio")}}</el-button>
     	</el-col>
     </el-row>
 
@@ -154,6 +156,31 @@
         <div v-html="preview.context" />
       </el-scrollbar>
     </el-dialog>
+
+    <el-dialog
+      v-el-drag-dialog
+      :close-on-click-modal="false"
+      :close-on-press-escape="true"
+      :title='$t("common.audio.audio")'
+      width="400px"
+      top="150px"
+      :visible.sync="audioIsVisible"
+    >
+      <template>
+        <el-row>
+          <el-radio v-model="audioVal" label="2">{{$t("common.audio.audioOk")}}</el-radio>
+          <el-radio v-model="audioVal" label="3">{{$t("common.audio.aduioFail")}}</el-radio>
+        </el-row>
+        <el-row style="margin-top: 30px;text-align: center;">
+          <el-button plain type="primary" size="medium" @click="audioOk">
+            {{ $t("common.confirm") }}
+          </el-button>
+          <el-button plain type="danger" size="medium" @click="colseAudio">
+            {{ $t("common.cancel") }}
+          </el-button>
+        </el-row>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
@@ -164,8 +191,7 @@
 	// 【换班管理】-API
 	import shiftChangeMgrApi from "@/api/classScheduleMgr/shiftChangeMgr"
 	import elDragDialog from '@/directive/el-drag-dialog'
-	import { downloadFile, initEnums, initDicts, initQueryParams } from '@/utils/commons'
-	import axios from 'axios'
+	import {initDicts, initQueryParams } from '@/utils/commons'
 	export default {
 	  name: "ShiftChangeMgr",
 	  directives: { elDragDialog },
@@ -176,6 +202,8 @@
 	    return {
 	    	tags: ['','warning','success','danger'],
 	    	audioStatus: [],
+        audioIsVisible: false,
+        audioVal: '2', //默认【审核通过】
 	      dialog: {
 	        isVisible: false,
 	        title: ""
@@ -246,7 +274,7 @@
       }
 	  },
 	  mounted () {
-	    
+
 	  },
 	  methods: {
 	    viewClose () {
@@ -291,9 +319,9 @@
 	        })
 	        return
 	      }
-	
+
 	      const readonlyIndex = this.selection.findIndex(item => item.readonly)
-	
+
 	      if (readonlyIndex > -1) {
 	        this.$message({
 	          message: this.$t("tips.systemData"),
@@ -301,8 +329,8 @@
 	        })
 	        return
 	      }
-	
-	      this.$confirm(this.$t("lineSide.tips.wareTips"), this.$t("common.tips"), {
+
+	      this.$confirm(this.$t("calssSchedule.tips.shiftChangeTips"), this.$t("common.tips"), {
 	      	distinguishCancelAndClose: true,
 	        confirmButtonText: this.$t("common.confirm"),
 	        cancelButtonText: this.$t("common.cancel"),
@@ -385,7 +413,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
 	      shiftChangeMgrApi.page(this.queryParams).then(response => {
@@ -395,7 +423,7 @@
 	        }
 	        // eslint-disable-next-line no-return-assign
 	      }).finally(() => this.loading = false)
-	     
+
 	    },
 	    cellClick (row, column) {
 	      if (column['columnKey'] === "operation") {
@@ -408,11 +436,97 @@
 	          this.$refs.table.toggleRowSelection(row)
 	        }
 	      })
-	
+
 	      if (!flag) {
 	        this.$refs.table.toggleRowSelection(row, true)
 	      }
-	    }
+	    },
+      // 【提交审核】按钮-事件
+      updateStatus(status){
+          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
+          }
+          // 调用API
+          this.audio(status)
+      },
+      // 【取消】审核按钮-事件
+      colseAudio(){
+          this.audioIsVisible = false
+      },
+      // 【确定】审核按钮-事件
+      audioOk(){
+          // 调用审核
+          this.audio(false)
+      },
+      // 【审核产品】-按钮事件
+      audioBtn(){
+          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.audioIsVisible = true
+      },
+      // 【审核产品】-Table的Row操作事件
+      audioBtnRow(row) {
+          // 清除所有的选择数据
+          this.$refs.table.clearSelection()
+          // 设置当前行为选中的数据
+          this.$refs.table.toggleRowSelection(row, true)
+          // 弹出审核页面
+          this.audioIsVisible = true
+      },
+      // 【审核通过/审核不通过】接口-事件
+      audio(status){
+          if(!status){
+              status =  this.audioVal
+          }
+          // 赋值
+          this.selection[0].status = status
+          let msg = "提交审核成功!"
+          if(status == "2"){
+              msg = "审核通过!"
+          }
+          if(status == "3"){
+              msg = "审核不通过!"
+          }
+          shiftChangeMgrApi.updateStatus({ id: this.selection[0].id, auditStatus: status}).then(response => {
+              if (response.status == 200) {
+                  // 如果是审核,成功后,关闭弹出框
+                  if(status == '2' || status == '3'){
+                      this.audioIsVisible = false
+                      // 审核成功后,改成默认值
+                      this.audioVal = '2'
+                  }
+                  this.$message({
+                      message: msg,
+                      type: "success"
+                  })
+                  // 重新查询列表数据
+                  this.search()
+              }
+          })
+      },
 	  }
 	}
 </script>

+ 30 - 18
imcs-ui/src/views/zuihou/classScheduleMgr/shiftChangeMgr/components/Edit.vue

@@ -1,23 +1,23 @@
 <template>
-  <el-dialog 
-  	:close-on-click-modal="false" 
-  	:close-on-press-escape="false" 
-  	:title="title" 
+  <el-dialog
+  	:close-on-click-modal="false"
+  	:close-on-press-escape="false"
+  	:title="title"
   	:append-to-body="true"
-  	:visible.sync="isVisible" 
-  	width="500px" 
+  	:visible.sync="isVisible"
+  	width="500px"
   	top="50px"
   >
     <el-form ref="form" :model="tenant" :rules="rules" label-position="right" label-width="130px">
     	<el-form-item :label='$t("calssSchedule.table.staffChange.auditUser")+":"' prop="applyUserId">
-          <el-cascader 
-          	v-model="tenant.applyUserId" 
+          <el-cascader
+          	v-model="tenant.applyUserId"
           	key="1"
-          	:options="applyList" 
-          	:props="{ checkStrictly: true , emitPath: false, expandTrigger: 'click'}" 
+          	:options="applyList"
+          	:props="{ checkStrictly: true , emitPath: false, expandTrigger: 'click'}"
           	:show-all-levels="false"
           	filterable
-          	clearable 
+          	clearable
           	:placeholder='$t("common.pleaseSelect")'
           	style="width: 100%;"
           	@change="cascaderChange"
@@ -34,16 +34,16 @@
 				  </el-checkbox-group>
 				</template>
       </el-form-item>
-      
+
       <el-form-item :label='$t("calssSchedule.table.staffChange.hours")+":"' prop="changeUserId">
-          <el-cascader 
-          	v-model="tenant.changeUserId" 
+          <el-cascader
+          	v-model="tenant.changeUserId"
           	key="2"
-          	:options="applyList" 
-          	:props="{ checkStrictly: true , emitPath: false, expandTrigger: 'click'}" 
+          	:options="applyList"
+          	:props="{ checkStrictly: true , emitPath: false, expandTrigger: 'click'}"
           	:show-all-levels="false"
           	filterable
-          	clearable 
+          	clearable
           	:placeholder='$t("common.pleaseSelect")'
           	style="width: 100%;"
           	@change="cascaderChange2"
@@ -109,7 +109,19 @@ export default {
         ],
         changeUserId: [
         	{ required: true, message: this.$t("rules.require"), trigger: 'change' }
-        ]
+        ],
+        applyTime: [
+          { required: true, message: this.$t("rules.require"), trigger: 'change' }
+        ],
+        changeTime: [
+          { required: true, message: this.$t("rules.require"), trigger: 'change' }
+        ],
+        applyList: [
+            { required: true, message: this.$t("rules.require"), trigger: 'change' }
+        ],
+        changeList: [
+            { required: true, message: this.$t("rules.require"), trigger: 'change' }
+        ],
       }
     }
   },

+ 202 - 0
imcs-ui/src/views/zuihou/dispatchMgr/dispatchRecord/Index.vue

@@ -0,0 +1,202 @@
+<template>
+  <div class="app-container">
+    <!-- 搜索模块 -->
+    <div class="filter-container">
+      <span>
+        <span>{{ $t("dispatch.searchForm.name") }}:</span>
+        <el-input
+          v-model="queryParams.model.name"
+          :placeholder="$t('common.pleaseEnter')"
+          style="width: 150px"
+          size="medium"
+        />
+      </span>
+      <span style="margin-left: 15px">
+        <span>{{ $t("dispatch.searchForm.startTime") }}:</span>        
+        <el-date-picker
+          v-model="queryParams.timeRange"
+          type="datetimerange"
+          range-separator="至"
+          start-placeholder="开始时间"
+          end-placeholder="结束时间" >
+        </el-date-picker>
+      </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-table
+      :key="tableKey"
+      ref="table"
+      v-loading="loading"
+      :data="tableData.records"
+      border
+      fit
+      row-key="id"
+      style="width: 100%"
+    >
+      <!-- 序号 -->
+      <el-table-column
+        :label="$t('common.serialNo')"
+        width="150px"
+        align="center"
+      >
+        <template slot-scope="scope">
+          <div>
+            {{
+              scope.$index + (queryParams.current - 1) * queryParams.size + 1
+            }}
+          </div>
+        </template>
+      </el-table-column>
+      <!-- 指令内容 -->
+      <el-table-column
+        prop="name"
+        :label="$t('dispatch.table.record.name')"
+        :show-overflow-tooltip="true"
+        align="center"
+      ></el-table-column>
+
+      <!-- 下发时间 -->
+      <el-table-column
+        prop="distributeTime"
+        :label="$t('dispatch.table.record.distributeTime')"
+        width="200px"
+      ></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"
+    />
+    <el-dialog
+      v-el-drag-dialog
+      :close-on-click-modal="false"
+      :close-on-press-escape="true"
+      :title="$t('common.preview')"
+      width="80%"
+      top="50px"
+      :visible.sync="preview.isVisible"
+    >
+      <el-scrollbar>
+        <div v-html="preview.context" />
+      </el-scrollbar>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import Pagination from "@/components/Pagination";
+import areaMgrApi from "@/api/resourceProductMgr/areaMgr";
+
+import elDragDialog from "@/directive/el-drag-dialog";
+import { initDicts, initQueryParams } from "@/utils/commons";
+import { convertEnum } from "@/utils/utils";
+export default {
+  name: "dispatchRecordMgr",
+  directives: { elDragDialog },
+  components: { Pagination },
+  props: {},
+  data() {
+    return {
+      queryParams: initQueryParams({}),
+      selection: [],
+      tableKey: 0,
+      loading: false,
+      tableData: {
+        total: 0,
+      },
+      preview: {
+        isVisible: false,
+        context: "",
+      },
+      dicts: {
+        NATION: {},
+        RUN_MODE: {},
+      },
+    };
+  },
+  // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
+  created() {
+    // 调用常量-审核状态
+    this.audioStatus = this.$constWKS.SHOWHIDE;
+    // 加载列表数据
+    this.fetch();
+    //this.checkCount()
+  },
+  computed: {
+    currentUser() {
+      return this.$store.state.account.user;
+    },
+    nationList() {
+      return convertEnum(this.dicts.NATION);
+    },
+  },
+  mounted() {},
+  methods: {
+    search() {
+      this.fetch({
+        ...this.queryParams,
+      });
+    },
+    reset() {
+      this.queryParams = initQueryParams({});
+      this.$refs.table.clearSort();
+      this.$refs.table.clearFilter();
+      this.search();
+    },
+    fetch(params = {}) {
+      this.loading = true;
+      if (this.queryParams.timeRange) {
+        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) => {
+          const res = response.data;
+          if (res.isSuccess) {
+            //this.tableData = res.data
+            this.tableData.records = [
+              { name: "执行完成", distributeTime: "2019-03-01 12:07:37" },
+            ];
+            this.tableData.total = this.tableData.records.length;
+          }
+          // eslint-disable-next-line no-return-assign
+        })
+        .finally(() => (this.loading = false));
+    },
+  },
+};
+</script>
+<style type="text/css">
+.dialogNoTop .el-dialog__body {
+  padding: 0;
+}
+</style>
+<style lang="scss" scoped></style>

+ 247 - 0
imcs-ui/src/views/zuihou/dispatchMgr/exception/Index.vue

@@ -0,0 +1,247 @@
+<template>
+  <div class="app-container">
+    <!-- 搜索模块 -->
+    <div class="filter-container">
+      <span>
+        <span>{{ $t("dispatch.searchForm.name") }}:</span>
+        <el-input
+          v-model="queryParams.model.name"
+          :placeholder="$t('common.pleaseEnter')"
+          style="width: 150px"
+          size="medium"
+        />
+      </span>
+      <span style="margin-left: 15px">
+        <span>{{ $t("dispatch.searchForm.startTime") }}:</span>        
+        <el-date-picker
+          v-model="queryParams.timeRange"
+          type="datetimerange"
+          range-separator="至"
+          start-placeholder="开始时间"
+          end-placeholder="结束时间" >
+        </el-date-picker>
+      </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-table
+      :key="tableKey"
+      ref="table"
+      v-loading="loading"
+      :data="tableData.records"
+      border
+      fit
+      row-key="id"
+      style="width: 100%"
+    >
+      <!-- 序号 -->
+      <el-table-column
+        :label="$t('common.serialNo')"
+        width="80px"
+        align="center"
+      >
+        <template slot-scope="scope">
+          <div>
+            {{
+              scope.$index + (queryParams.current - 1) * queryParams.size + 1
+            }}
+          </div>
+        </template>
+      </el-table-column>      
+
+      <!-- 执行时间 -->
+      <el-table-column
+        prop="operationTime"
+        :label="$t('dispatch.table.exception.operationTime')"
+        width="150px"
+      ></el-table-column>
+
+       <!-- 设备 -->
+      <el-table-column
+        prop="device"
+        :label="$t('dispatch.table.exception.device')"
+        :show-overflow-tooltip="true"
+        align="center"
+      ></el-table-column>
+
+      <!-- 指令内容 -->
+      <el-table-column
+        prop="name"
+        :label="$t('dispatch.table.exception.name')"
+        :show-overflow-tooltip="true"
+        align="center"
+        width="250px"
+      ></el-table-column>
+
+       <!-- 状态 -->
+      <el-table-column
+        prop="status"
+        :label="$t('dispatch.table.exception.status.normal')"
+        width="100px"
+        align="center"
+      >
+        <template slot-scope="{ row }">
+          <el-tag :type="row.status=='1' ? 'success' : 'danger'">
+          	{{ row.status=='1' ? $t('dispatch.table.exception.status.running') : (row.status=='2') ? $t("dispatch.table.exception.status.runFail") : $t('dispatch.table.exception.status.sendFail') }}
+          </el-tag>
+        </template>
+      </el-table-column>
+
+      <!-- 操作 -->
+      <el-table-column        
+        :label="$t('dispatch.table.exception.operation')"
+        width="300px"  align="center">        
+        <template slot-scope="{ row }">
+          <el-button plain type="primary" size="medium" @click="resend">
+	        {{ $t("dispatch.button.resend") }}
+	       </el-button>
+	        <el-button plain type="primary" size="medium" @click="marked">
+	          {{ $t("dispatch.button.marked") }}
+	        </el-button>
+        </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"
+    />
+    <el-dialog
+      v-el-drag-dialog
+      :close-on-click-modal="false"
+      :close-on-press-escape="true"
+      :title="$t('common.preview')"
+      width="80%"
+      top="50px"
+      :visible.sync="preview.isVisible"
+    >
+      <el-scrollbar>
+        <div v-html="preview.context" />
+      </el-scrollbar>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import Pagination from "@/components/Pagination";
+import areaMgrApi from "@/api/resourceProductMgr/areaMgr";
+
+import elDragDialog from "@/directive/el-drag-dialog";
+import { initDicts, initQueryParams } from "@/utils/commons";
+import { convertEnum } from "@/utils/utils";
+export default {
+  name: "dispatchRecordMgr",
+  directives: { elDragDialog },
+  components: { Pagination },
+  props: {},
+  data() {
+    return {
+      queryParams: initQueryParams({}),
+      selection: [],
+      tableKey: 0,
+      loading: false,
+      tableData: {
+        total: 0,
+      },
+      preview: {
+        isVisible: false,
+        context: "",
+      },
+      dicts: {
+        NATION: {},
+        RUN_MODE: {},
+      },
+    };
+  },
+  // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
+  created() {
+    // 调用常量-审核状态
+    this.audioStatus = this.$constWKS.SHOWHIDE;
+    // 加载列表数据
+    this.fetch();
+    //this.checkCount()
+  },
+  computed: {
+    currentUser() {
+      return this.$store.state.account.user;
+    },
+    nationList() {
+      return convertEnum(this.dicts.NATION);
+    },
+  },
+  mounted() {},
+  methods: {
+    search() {
+      this.fetch({
+        ...this.queryParams,
+      });
+    },
+    reset() {
+      this.queryParams = initQueryParams({});
+      this.$refs.table.clearSort();
+      this.$refs.table.clearFilter();
+      this.search();
+    },
+    resend(){
+
+    },
+    marked(){
+
+    },
+    fetch(params = {}) {
+      this.loading = true;
+      if (this.queryParams.timeRange) {
+        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) => {
+          const res = response.data;
+          if (res.isSuccess) {
+            //this.tableData = res.data
+            this.tableData.records = [
+              { name: "执行完成",device: "AGV", status: "1", operationTime: "2019-03-01 12:07:37" },
+            ];
+            this.tableData.total = this.tableData.records.length;
+          }
+          // eslint-disable-next-line no-return-assign
+        })
+        .finally(() => (this.loading = false));
+    },
+  },
+};
+</script>
+<style type="text/css">
+.dialogNoTop .el-dialog__body {
+  padding: 0;
+}
+</style>
+<style lang="scss" scoped></style>

+ 239 - 0
imcs-ui/src/views/zuihou/machiningClient/personConf/Index.vue

@@ -0,0 +1,239 @@
+<template>
+  <div class="formContaner" style="height: 200px; margin-top: 15px">
+    <el-form
+      ref="form"
+      :model="tenant"
+      :rules="rules"
+      label-position="right"
+      label-width="150px"
+    >
+      <el-form-item
+        :label="station.stationName + ':'"
+        v-for="(station, index) in stationList"
+        :key="station.stationId"
+      >
+        <el-select
+          :id="'select' + index"
+          v-model="tenant.userIds[station.stationId]"
+          style="width: 300px"
+          :placeholder="$t('common.pleaseSelect')"
+          multiple
+          @change="
+            (val) => {
+              selChange(val, station.stationId);
+            }
+          "
+        >
+          <el-option
+            :label="user.userName"
+            :value="user.userId"
+            v-for="user in userList"
+            :key="user.userId"
+          />
+        </el-select>
+      </el-form-item>
+    </el-form>
+
+    <div slot="footer" class="dialog-footer">
+      <el-button
+        type="primary"
+        icon="el-icon-check"
+        :disabled="confirmDisabled"
+        @click="submitForm"
+        >{{ $t("runCenter.buttons.ok") }}</el-button
+      >
+    </div>
+  </div>
+</template>
+
+<script>
+// 【产线管理】-API
+import stationMgrApi from "@/api/machiningClient/stationMgr";
+
+// 共通的【查询方法】
+import { initDicts, initQueryParams } from "@/utils/commons";
+// 共通【工具方法】(字典分解)
+import { convertEnum } from "@/utils/utils";
+import qs from "qs";
+export default {
+  name: "PersonConf",
+  components: {},
+  props: {},
+  data() {
+    return {
+      dataList: [],
+      stationList: [],
+      userList: [],
+      confirmDisabled: false,
+      bool: true,
+      tenant: this.initTenant(),
+      rules: {},
+    };
+  },
+  // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
+  created() {
+    // 查询所有当前产线信息
+    this.getAllStation();
+    this.getAllUser();
+    this.getStateUser();
+  },
+  computed: {
+    currentUser() {
+      return this.$store.state.account.user;
+    },
+  },
+  mounted() {},
+  methods: {
+    initTenant() {
+      return {
+        ids: {},
+        stationIds: [],
+        userIds: {},
+      };
+    },
+    reset() {
+      // 先清除校验,再清除表单,不然有奇怪的bug
+      this.$refs.form.clearValidate();
+      this.$refs.form.resetFields();
+      this.tenant = this.initTenant();
+    },
+    submitForm() {
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          // 获取父组件传值ID
+          this.tenant.stationIds = this.stationList.map((item) => {
+            return item.stationId;
+          });
+          this.confirmDisabled = true;
+
+          //this.bool = this.tenant.ids.length>0? true : false
+          //console.log(this.dataList)
+          if (this.dataList.length == 0) {
+            let arr = [];
+            for (let prop in this.tenant.userIds) {
+              let obj = this.tenant.userIds[prop];
+              arr.push(obj.join(","));
+            }
+            this.tenant.userIds = arr;
+            //console.log(this.tenant)
+            stationMgrApi
+              .saveAll(qs.stringify(this.tenant, { arrayFormat: "brackets" }))
+              .then((res) => {
+                res = res.data;
+                if (res.isSuccess) {
+                  this.$message({
+                    message: this.$t("tips.optionSuccess"),
+                    type: "success",
+                  });
+                  // 恢复按钮
+                  this.confirmDisabled = false;
+                }
+              });
+          } else {
+            let ids = [];
+            let userIds = [];
+            let stationIds = [];
+            for (let prop in this.tenant.ids) {
+              for (let i = 0; i < this.tenant.userIds[prop].length; i++) {
+                stationIds.push(prop);
+                ids.push(
+                  this.tenant.ids[prop][i] ? this.tenant.ids[prop][i] : "0"
+                );
+                userIds.push(this.tenant.userIds[prop][i]);
+              }
+            }
+
+            let params = {
+              userIds: userIds,
+              ids: ids,
+              stationIds: stationIds,
+            };
+            console.log(params);
+            stationMgrApi
+              .updateAll(qs.stringify(params, { arrayFormat: "brackets" }))
+              .then((res) => {
+                res = res.data;
+                if (res.isSuccess) {
+                  this.$message({
+                    message: this.$t("tips.optionSuccess"),
+                    type: "success",
+                  });
+                  // 恢复按钮
+                  this.confirmDisabled = false;
+                }
+              });
+          }
+        } else {
+          return false;
+        }
+      });
+      this.$emit("close");
+      //location.reload()
+    },
+    // 查询所有当前产线信息
+    getAllStation() {
+      stationMgrApi.allStation({}).then((res) => {
+        res = res.data;
+        if (res.isSuccess) {
+          // 给当前赋值
+          //console.log(res.data);
+          this.stationList = res.data;
+        }
+      });
+    },
+    getAllUser() {
+      stationMgrApi.allUser({}).then((res) => {
+        res = res.data;
+        if (res.isSuccess) {
+          // 给当前赋值
+          //console.log(res.data);
+          this.userList = res.data;
+        }
+      });
+    },
+    getStateUser() {
+      return new Promise((resolve, reject) => {
+        stationMgrApi.stationUser({}).then((res) => {
+          res = res.data;
+          if (res.isSuccess) {
+            // 给当前赋值
+            //console.log(res.data)
+            if (res.data.length > 0) {
+              res.data.map((data) => {
+                this.tenant.ids[data.stationId] = data.ids.split(",");
+                this.tenant.userIds[data.stationId] = data.userIds.split(",");
+              });
+              this.dataList = res.data;
+            }
+          }
+        });
+        resolve(true);
+      }).catch(() => {
+        reject(false);
+      });
+    },
+    selChange(data, stationId) {
+      this.tenant.userIds[stationId] = data;
+      console.log(this.tenant.userIds[stationId]);
+      this.$forceUpdate();
+    },
+  },
+};
+</script>
+
+<!-- 本组件的css -->
+<style lang="scss" scoped>
+.formTitle {
+  font-size: 16px;
+  font-weight: 700;
+  margin: 30px 30px 20px 30px;
+  padding-bottom: 20px;
+  border-bottom: 1px solid #cccccc;
+}
+.formContaner form {
+  max-width: 600px;
+}
+.dialog-footer {
+  margin-left: 180px;
+}
+</style>

+ 33 - 4
imcs-ui/src/views/zuihou/machiningClient/touchScreen/Index.vue

@@ -40,7 +40,7 @@
 		      			</el-button>
 				  </span> 
 				  <span :span="2" style="margin-right: 5%; float:right;">
-                       <el-button plain type="primary" icon="el-icon-view" size="medium" >
+                       <el-button plain type="primary" icon="el-icon-view" size="medium" @click="navigator">
 		         			我的班表
 		      			</el-button>
 				  </span>	  
@@ -48,7 +48,7 @@
 
 			<el-tabs style="text-align: left;margin-top:25px;">
   				<el-tab-pane label="未完成">
-    				<span class="tabTitle" slot="label"><el-badge :value="taskCount" class="item"><i class="el-icon-date"></i> 未完成</el-badge> </span>					
+    				<span class="tabTitle" slot="label"><el-badge :value="taskCount" class="badge"><i class="el-icon-date"></i> 未完成</el-badge> </span>					
                     	<el-col :span="(index==0)? 12:8" :gutter="24" v-for="(item, index) in taskData.slice(0,3)" :key="item.id" :offset="(index==0)?0:1"  v-show="(item.status==0)?true:false"  :style="(index==0)?'zoom:1;min-width:300px;':'zoom:0.6;min-width:180px;'">
                               <el-card :gutter="24" class="box-card" style="margin:5px;" >
                                     <div class="card_content">
@@ -91,7 +91,9 @@
 						</el-col>				 					
   				</el-tab-pane>
   				 <el-tab-pane label="已完成">
-                    <span class="tabTitle" slot="label"><i class="el-icon-date"></i> 已完成</span>
+                    <span class="tabTitle" slot="label">						  
+						 <i class="el-icon-date"></i> 已完成						  
+					</span>
 				    <el-table
       					:data="finishData"
 						stripe  
@@ -140,6 +142,7 @@
     // 【查看】组件
 	import TaskView from "../waitingTasks/components/View"
 	import { fullScreen, exitFullScreen } from '@/utils/commons'
+	import stationMgrApi from "@/api/machiningClient/stationMgr";
 export default {
   name: 'TouchScreen',
   components: { TaskView },
@@ -159,8 +162,12 @@ export default {
   },
   	// 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
   	created() {
+	   this.fetch()	  
 	},
   	computed: {
+	   currentUser () {
+	      return this.$store.state.account.user
+	   }  
   	},
   	mounted () {
   	},
@@ -191,6 +198,16 @@ export default {
 		selectChange(value){
           console.log(value)
 		},
+		fetch(){		   	
+		   stationMgrApi.getStation({userId:this.$store.state.account.user.id}).then((res) => {
+              	res = res.data;
+				if(res.isSuccess){
+					if(res.data.length>0){
+                      this.options = res.data
+					}					
+				}  
+		     });		
+		},
 		readView(){			
 			//this.tenantViewVisible = true
 			this.$refs.view.read(null)			
@@ -222,7 +239,9 @@ export default {
 			this.taskCount = this.taskCount - 1
 			this.finishData.push(item)
 			this.taskData.shift()
-
+		},
+		navigator(){
+			this.$router.push("/classScheduleMgr/classScheduleMgr")
 		}	
   	}
 }
@@ -296,4 +315,14 @@ export default {
 	.el-form-item {
 		margin-bottom: 0;
 	}
+	
+	.tabTitle >>> .el-badge {
+		position: relative;
+        display: inline-block;
+		vertical-align: baseline;
+	} 
+	.badge {
+	   margin-top: 10px;
+  	   margin-right: 20px;	
+	}
 </style>

+ 3 - 1
imcs-ui/src/views/zuihou/resourceProductMgr/areaMgr/Index.vue

@@ -64,7 +64,7 @@
 	  <el-table-column prop="layoutMap" :label='$t("resource.table.area.layoutMap")' align="center" :show-overflow-tooltip="true" width="180px">
 		    <template slot-scope="{ row }">
 	        	<div class="img-wrapper">
-	          		<img :src="row.imgUrl"  />
+	          		<el-image :src="row.imgUrl" fit="cover" />
 	        	</div>
 	       </template>
 	  </el-table-column> 
@@ -318,6 +318,7 @@
 	    add () {
 	      this.$refs.edit.type = "add"
 	      this.$refs.edit.setTenant(false, this.dicts)
+		  this.$refs.edit.setFileData({id:"", bizId:""})		  
 	      this.dialog.title = this.$t("common.add")
 	      this.dialog.isVisible = true
 	    },
@@ -443,6 +444,7 @@
 	      }
 	      this.$refs.edit.setTenant(row, this.dicts)
 	      this.$refs.edit.type = "edit"
+		  this.$refs.edit.setFileData({id:row.layoutMap, bizId:row.id})		 
 	      this.dialog.title = this.$t("common.edit")
 	      this.dialog.isVisible = true
 	    },

+ 51 - 32
imcs-ui/src/views/zuihou/resourceProductMgr/areaMgr/components/Edit.vue

@@ -19,10 +19,13 @@
 				</template>
       </el-form-item>
       <el-form-item :label='$t("resource.table.area.layoutMap")+":"' prop="layoutMap">          
-          <fileUpload :acceptSize="5*1024*1024" :auto-upload="false" :limit="1" @fileLengthVaild="fileLengthVaild" @setId="setIdAndSubmit" ref="fileRef">
-              <el-button size="small" slot="trigger" type="primary">选取文件</el-button>              
+          <fileUpload :acceptSize="5*1024*1024" :auto-upload="false" :limit="1" :fileOtherData="this.fileData" @fileLengthVaild="fileLengthVaild" @setId="setIdAndSubmit" ref="fileRef">              
+              <el-button size="small" slot="trigger" type="primary" >选取文件</el-button>              
               <div class="el-upload__tip" slot="tip">文件不超过5MB</div>
           </fileUpload>
+          <div class="img-wrapper" v-if="tenant.imgUrl" style="margin:5px;">
+	          		<el-image :src="tenant.imgUrl" fit="cover" />
+	        </div> 
       </el-form-item>
       <el-form-item :label='$t("resource.table.area.remark")+":"' prop="remark">
       	<el-input v-model="tenant.remark" type="textarea" :rows="3" style="width: 100%;"/>
@@ -30,7 +33,7 @@
     </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>
+      <el-button plain type="primary" :disabled="confirmDisabled" @click="submitForm" v-loading.fullscreen.lock="loading">{{ $t('common.confirm') }}</el-button>
     </div>
   </el-dialog>
 </template>
@@ -57,12 +60,15 @@ export default {
   data () {
     return {
       type: 'add',
+      loading: false,
       tenant: this.initTenant(),      
       screenWidth: 0,
       width: this.initWidth(),
       accept: "image/jpeg, image/gif, image/png",
       fileLength: 0,
       fileId: "",
+      fileData: {},
+      formData: {},
       confirmDisabled: false,
       dicts:{
         NATION: {}
@@ -105,14 +111,16 @@ export default {
       return (() => {
         this.width = this.initWidth()
       })()
-    }
+    } 
   },
   methods: {
     initTenant () {
       return {
         id: '',
         name: '',
-        status: '1'
+        layoutMap: '',
+        status: '1',
+        remark:'',
       }
     },
     initWidth () {
@@ -131,11 +139,18 @@ export default {
       vm.fileLength = data || 0;
     },
     setTenant (val, dicts) {
-    	if(val){
-    		this.tenant = { ...val }
+    	if(val){        
+    		this.tenant = { ...val }        
     	}
       // 字典表
-      this.dicts = dicts
+      this.dicts = dicts     
+    },
+    setFileData (val) {
+    	if(val){        
+    		this.fileData = { ...val }        
+    	}
+      this.fileData.bizType = "TRAY"
+      this.fileData.isSingle = true
     },
     close () {
       this.$emit('close')
@@ -152,43 +167,47 @@ export default {
       })
     },
     setIdAndSubmit (isUploadCompleted, res) {
-      const vm = this
-      console.log(res)
       if (isUploadCompleted) {
-        vm.disabled = false
-        vm.isVisible = false
-        vm.$message({
-          message: vm.$t('tips.createSuccess'),
+        this.loading = false
+        this.confirmDisabled = false
+        this.isVisible = false
+        this.$message({
+          message: this.$t('tips.createSuccess'),
           type: 'success'
         })        
-        vm.$emit('success')
+        this.$emit('success') 
         this.tenant.layoutMap = res.data.id
-        // 后续提交处理
-        if (this.type === 'add') {
-            this.save()
-        } else {
-            this.update()
-        } 
+        this.formData = JSON.parse(localStorage.getItem("formData"))        
+        this.formData.layoutMap = res.data.id
+        if (this.type === 'add') {            
+            this.save(this.formData)
+          } else {
+            this.update(this.formData)
+        }
+        localStorage.removeItem("formData");
       }      
     },
-    editSubmit () {
-      const vm = this
-      vm.disabled = true
+    editSubmit () {      
+      this.disabled = true
+      this.loading = true
       let id =  this.tenant.layoutMap!=null? this.tenant.layoutMap: ""
-      vm.$refs.fileRef.submitFile(id, this.tenant.id, 'TRAY')
+      this.$refs.fileRef.submitFile(id, this.tenant.id, 'TRAY')
     },
     submitForm () {
       this.$refs.form.validate((valid) => {
-        if (valid) {
+        if (valid) {          
+          this.formData = this.tenant 
+          localStorage.setItem("formData", JSON.stringify(this.formData));         
           this.confirmDisabled = true
           this.editSubmit()
+          // 后续提交处理          
         } else {
           return false
         }
       })
     },
-    save () {
-      areaMgrApi.save(this.tenant)
+    save (formData) {
+      areaMgrApi.save(formData)
         .then((response) => {
           const res = response.data
           if (res.isSuccess) {
@@ -207,8 +226,8 @@ export default {
           return true
         })
     },
-    update () {
-      areaMgrApi.update(this.tenant)
+    update (formData) {
+      areaMgrApi.update(formData)
         .then((response) => {
           const res = response.data
           if (res.isSuccess) {
@@ -218,9 +237,9 @@ export default {
               type: 'success'
             })
             // 通知列表
-	          this.$emit("success");
+	          this.$emit("success")
 	          // 通知列表-并关闭弹出框
-	          this.$emit("close");
+	          this.$emit("close")
           }
         }).finally(() => {
           this.confirmDisabled = false

+ 1 - 1
imcs-ui/src/views/zuihou/resourceProductMgr/equipmentMgr/Index.vue

@@ -38,7 +38,7 @@
 					    :preview-src-list="row.srcList">
 					  </el-image>
 					</div>
-					<span v-else="">{{$t("common.noData")}}</span>
+					<span v-else>{{$t("common.noData")}}</span>
       	</template>
       </el-table-column>
       <el-table-column prop="name" :label='$t("resource.table.equipment.name")' :show-overflow-tooltip="true" width="180px"></el-table-column>

+ 24 - 39
imcs-ui/src/views/zuihou/runManageCenter/lineRunModel/Index.vue

@@ -1,9 +1,10 @@
 <template>
   <div class="formContaner" style="height:200px;">  		
-	    <el-form ref="form" :model="tenant" :rules="rules" label-position="right" label-width="150px">
-	      <el-form-item :label='$t("runCenter.form.setModel")+":"' prop="runMode">
-	      	<el-select style="width:300px;" :placeholder='$t("common.pleaseSelect")' v-model="tenant.runMode"  @change="changeMode" value>
-	          <el-option :key="index" :label="item" :value="key" v-for="(item, key, index) in dicts.RUN_MODE" />
+	    <el-form ref="form" :model="rowData" :rules="rules" label-position="right" label-width="150px">
+		  <el-form-item :label='$t("runCenter.form.areaName")+":"' v-model="rowData.name" >{{rowData.name}}</el-form-item>	
+	      <el-form-item :label='$t("runCenter.form.setModel")+":"' >
+	      	<el-select style="width:300px;" :placeholder='$t("common.pleaseSelect")' v-model="rowData.runMode"  @change="changeMode" >
+	          <el-option :key="value" :label="key" :value="value" v-for="(key, value) in this.dicts.RUN_MODE" />
 	        </el-select>
 	      </el-form-item>
 	    </el-form>
@@ -15,9 +16,7 @@
 </template>
 
 <script>
-	// 【产线管理】-API
-	import productionLineMgrApi from "@/api/runManageCenter/productionLineMgr"
-	
+		
 	// 【区域管理】-API
 	import areaMgrApi from "@/api/resourceProductMgr/areaMgr"
 	import orderMgrApi from "@/api/runManageCenter/orderMgr"
@@ -33,7 +32,7 @@
 	  },
 	  data () {
 	    return {
-	    	dicts: {
+	    dicts: {
           RUN_MODE: {}  //运行模式
         },
 	      confirmDisabled: false,
@@ -48,12 +47,11 @@
 	    }
 	  },
 	  // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
-	  created() {
-	  	// 查询所有当前产线信息
-	  	//this.getCurrentLine()
+	  created() {	  	
 	  	// 加载【字典】
-	  	initDicts(['RUN_MODE'], this.dicts)
-		this.tenant.runMode = this.rowData.runMode
+	  	initDicts(['RUN_MODE'], this.dicts)		
+		//console.log(this.tenant)
+		this.tenant = this.rowData		
         this.checkCount()		
 		},
 	  computed: {
@@ -61,15 +59,15 @@
 	      return this.$store.state.account.user
 	    },
 	    runModelList() {
-        return convertEnum(this.dicts.RUN_MODE)
-      }
+          return convertEnum(this.dicts.RUN_MODE)
+      	}
 	  },
 	  mounted () {	     
 	  },
 	  methods: {
 	  	initTenant () {
 	      return {
-		    id: '',
+		    id: '',			
 	      	runMode: '',
 	      }
 	    },
@@ -79,14 +77,10 @@
 	      this.$refs.form.resetFields()
 	      this.tenant = this.initTenant()
 	    },		
-		changeMode(val) {
+		changeMode(val) {			
 		    this.bool = true 
 			let runMode = this.rowData.runMode
-			if( runMode === val){
-			   this.bool = false
-			   return false
-			}
-			
+
 			if ( runMode === "1" || runMode === "3"){
 			    //弹框确认
 				this.$confirm('确认要切换产线模式吗?', this.$t("common.tips"), {
@@ -126,20 +120,19 @@
 					})
 				})			    			
 			}
-			
-			
-			
+
 			if(this.bool){			
 				this.tenant.runMode = val
 			}
 	
 		},
-	    submitForm () {
+	    submitForm () {		 	
 	      this.$refs.form.validate((valid) => {
 	        if (valid && this.bool) {
 			  // 获取父组件传值ID
 			  this.tenant.id = this.rowData.id
 	          this.confirmDisabled = true
+			  console.log(this.tenant)
 	          //productionLineMgrApi.update(this.tenant).then(res => {
 			  areaMgrApi.update(this.tenant).then(res => {
 	          	res = res.data 
@@ -157,19 +150,11 @@
 	        }
 	      })
 		  this.$emit("close")
-		  location.reload()
-	    },	    
-	    // 查询所有当前产线信息
-	    getCurrentLine(){
-	    	productionLineMgrApi.getCurrent({}).then(res => {
-	    		res = res.data 
-	    		if(res.isSuccess){
-	    			// 给当前赋值
-					console.log(res.data)
-	    			this.tenant = res.data
-	    		}
-	    	})
-	    }
+		  //location.reload()
+	    },
+		checkCount(){
+
+		}
 	  }
 	}
 </script>

+ 73 - 60
imcs-ui/src/views/zuihou/runManageCenter/setCurrentLine/Index.vue

@@ -1,39 +1,62 @@
 <template>
   <div class="formContaner">
   		<div class="formTitle">{{$t("runCenter.searchForm.setCurrent")}}</div>
-			<!-- 表单模块 -->
-	    <el-form ref="form" :model="tenant" :rules="rules" label-position="right" label-width="180px">
-	      <el-form-item :label='$t("runCenter.form.setCurrent")+":"' prop="id">
-	          <el-select v-model="tenant.id" :placeholder='$t("common.pleaseSelect")' style="width: 300px;">
-		        	<el-option
-					      v-for="item in lineList"
-					      :key="item.id"
-					      :label="item.name"
-					      :value="item.id">
-					    </el-option>
-		      	</el-select>
-	      </el-form-item>
-	    </el-form>
-	    
-	    <div slot="footer" class="dialog-footer">
-	      <el-button type="primary" icon="el-icon-refresh" :disabled="confirmDisabled" @click="submitForm">{{ $t('runCenter.buttons.change') }}</el-button>
-	    </div>
+			<!-- 表单模块 -->        	    
+			<el-descriptions class="description" :column="2" v-for="item in lineList" :key="item.id" :colon="false">
+			  	<template slot="extra">
+      				<el-button type="primary" icon="el-icon-refresh" size="small" @click="config(item)"  >配置</el-button>
+    		 	</template>
+			 	<el-descriptions-item>
+					   <h1>{{item.name}}</h1>
+				       <span>运行模式:{{ dicts.RUN_MODE[item.runMode] }}</span>
+				</el-descriptions-item>             	
+             	<el-descriptions-item>
+                      <div class="block">    					
+    						<el-image :src="item.imgUrl" fit="cover" lazy>
+      							<div slot="placeholder" class="image-slot">
+        								加载中<span class="dot">...</span>
+      							</div>
+    						</el-image>
+  						</div>
+				 </el-descriptions-item>
+           </el-descriptions>
+
+        <el-dialog
+		  title="产线模式"
+		  :visible.sync="modeVisible"
+		  width="50%"
+		  custom-class="dialogNoTop"
+		>
+			<!--【产线模式】 -->
+		    <lineRunMode :rowData="rowData" @close="modeClose" @success="editModeSuccess" />			
+		</el-dialog>
+
     </div>
 </template>
 
 <script>
 	// 【产线管理】-API
 	import productionLineMgrApi from "@/api/runManageCenter/productionLineMgr"
-	import { initQueryParams } from '@/utils/commons'
+	import areaMgrApi from "@/api/resourceProductMgr/areaMgr"
+	import elDragDialog from '@/directive/el-drag-dialog'
+	import lineRunMode from "../../runManageCenter/lineRunModel/Index"
+	import { initQueryParams, initDicts } from '@/utils/commons'
 	export default {
 	  name: "SetCurrentLine",
-	  components: {},
+	  directives: { elDragDialog },
+	  components: {lineRunMode},
 	  props: {
 	  },
 	  data () {
 	    return {
-	    	lineList: [],
-	    	confirmDisabled: false,
+		  dicts: {
+			RUN_MODE: {}  //运行模式
+		  },
+		  modeVisible: false,
+		  rowData: {}, // row数据
+		  queryParams: initQueryParams({}),		  
+	      lineList: [{name:"智能生产保障系统", runMode:"2",imgUrl:require("@/assets/yunMap/layout.png")},{name:"舱体类加工单元", runMode:"2",imgUrl:require("@/assets/yunMap/layout2.png")},{name:"框体类加工单元", runMode:"1",imgUrl:require("@/assets/yunMap/layout3.png")}],
+	      confirmDisabled: false,
 	      tenant: this.initTenant(),
 	      rules: {
 	        id: [
@@ -44,10 +67,9 @@
 	  },
 	  // 实例已经在内存中创建好,此时data和methods已将ok,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作
 	  created() {
+		initDicts(['RUN_MODE'], this.dicts)  
 	  	// 获取【产线】数据下拉
-	    this.getLineList()
-	    // 查询所有当前产线信息
-	  	this.getCurrentLine()
+	    this.fetch()	    
 		},
 	  computed: {
 	    currentUser () {
@@ -67,47 +89,27 @@
 	      this.$refs.form.clearValidate()
 	      this.$refs.form.resetFields()
 	      this.tenant = this.initTenant()
-	    },
-	    // 【切换】按钮-事件
-	    submitForm () {
-	      this.$refs.form.validate((valid) => {
-	        if (valid) {
-	          this.confirmDisabled = true
-	          productionLineMgrApi.setCurrent(this.tenant).then(res => {
-	          	res = res.data 
-	          	if (res.isSuccess) {
-		            this.$message({
-		              message: this.$t('tips.optionSuccess'),
-		              type: 'success'
-		            })
-		            // 恢复按钮
-		            this.confirmDisabled = false
-		          }
-	          })
-	        } else {
-	          return false
-	        }
-	      })
-	    },
+	    },	    
 	    // 获取【产线】数据下拉
-	    getLineList(){
-	    	productionLineMgrApi.getList({}).then(res => {
+	    fetch(){
+	    	//productionLineMgrApi.getList({}).then(res => {
+			 areaMgrApi.page(this.queryParams).then(res => {	
 	    		res = res.data 
 	    		if(res.isSuccess){
-	    			this.lineList = res.data
+	    			this.lineList = res.data.records
 	    		}
 	    	})
-	    },
-	    // 查询所有当前产线信息
-	    getCurrentLine(){
-	    	productionLineMgrApi.getCurrent({}).then(res => {
-	    		res = res.data 
-	    		if(res.isSuccess){
-	    			// 给当前赋值
-	    			this.tenant = res.data
-	    		}
-	    	})
-	    }
+	    },	    
+		modeClose(){
+	  		this.modeVisible = false
+	  	},
+	  	editModeSuccess(){
+	  		this.fetch()
+	  	},
+		config(item){
+		  this.rowData = item		  
+	  	  this.modeVisible = true
+		}  
 	  }
 	}
 </script>
@@ -121,6 +123,17 @@
 		padding-bottom: 20px;
 		border-bottom: 1px solid #CCCCCC;
 	}
+	.description {
+		width:90%;
+		margin: 10px auto;
+		padding:0 3%;		
+	}
+    .el-descriptions >>> .el-descriptions__table{
+		height:180px;
+	}
+	.el-descriptions >>> .el-descriptions-item__label{
+		margin-left:15px;
+	}
 	.formContaner form{
 		max-width: 600px;
 	}

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov