From 7b33ffb46279fef43174702be156a928ae16b84c Mon Sep 17 00:00:00 2001 From: zhangshun Date: Sat, 20 May 2023 08:27:11 +0800 Subject: [PATCH] =?UTF-8?q?20230520=200826=E5=8C=97=E6=B1=BD=E7=A6=8F?= =?UTF-8?q?=E7=94=B0=E7=8E=B0=E5=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/index.js | 4 +- index.html | 9 +- package.json | 14 +- src/api/BasicData/MenuManagement.js | 6 +- .../maintainInformation.js | 8 +- src/assets/img/SiyuanLOGO.png | Bin 5055 -> 9240 bytes src/assets/img/leftPic.png | Bin 0 -> 2239 bytes src/assets/img/logo.jpg | Bin 0 -> 5859 bytes src/assets/img/logo.png | Bin 0 -> 5859 bytes src/icons/svg/ProcessManagement.svg | 2 + src/main.js | 6 +- src/permission.js | 4 +- src/router/index.js | 7 + src/styles/element-ui.scss | 2 +- src/styles/index.scss | 3 +- src/utils/mqtt.js | 104 +++ src/utils/request.js | 36 +- src/utils/tool.js | 16 + src/views/BasicData/MenuManagement/index.vue | 2 + .../BasicData/PersonnelManagement/index.vue | 164 ++-- .../AlarmVariableMaintenance/index.vue | 32 +- .../BasicVariableQuery/index.vue | 269 ++++++- .../StationInformationMaintenance/index.vue | 11 +- .../index.vue | 389 +++------- .../BomEngineManagement/BomList.vue | 680 +++++++++++++++++ .../BomEngineManagement/BomListCompare.vue | 299 ++++++++ .../BomEngineManagement/index.vue | 31 + .../InterfaceModuleMaintenance/index.vue | 1 - .../MaterialVerificationMaintenance/index.vue | 274 ++++--- .../MonitoringData/EngineModel.vue | 4 +- .../MonitoringData/EngineNumber.vue | 4 +- .../LineHeadStationInformation.vue | 4 +- .../MeasurementDataEquipmentStatusLog.vue | 4 +- .../MonitoringData/OfflineStation.vue | 4 +- .../MonitoringData/Operator.vue | 4 +- .../MonitoringData/OrderNumber.vue | 4 +- .../MonitoringData/PalletNo.vue | 4 +- .../MonitoringData/StationStatus.vue | 4 +- .../MonitoringData/TransferModel.vue | 4 +- .../PdfCardMaintenance/index.vue | 1 + .../ProcessPictureMaintenance/index.vue | 6 +- .../StepContentMaintenance/index.vue | 8 +- .../WarehouseLocation/index.vue | 705 +++++++++++++---- .../AssemblyQualitydataQuery/index.vue | 140 ++-- .../InquiryTransitInformation/index.vue | 46 +- .../QualityAssurance/LineItemQuery/index.vue | 110 ++- .../LineQualityQuery/index.vue | 170 +++-- .../MaterialDataQuery/index.vue | 125 ++- .../ProductionPlanOrderCompletion/index.vue | 12 +- .../RecipeManagement/index.vue | 62 +- .../ReleaseOfProductionPlan/index.vue | 710 ++++++++++++++---- .../ScheduleStatusChange/index.vue | 349 ++++----- src/views/layout/components/Navbar.vue | 46 +- src/views/layout/components/Sidebar/index.vue | 13 +- src/views/layout_HL/Layout.vue | 71 -- src/views/layout_HL/components/AppMain.vue | 30 - src/views/layout_HL/components/Navbar.vue | 455 ----------- .../layout_HL/components/Sidebar/Item.vue | 29 - .../components/Sidebar/SidebarItem.vue | 104 --- .../components/Sidebar/SidebarItem2.vue | 48 -- .../layout_HL/components/Sidebar/index.vue | 69 -- src/views/layout_HL/components/TagsView.vue | 334 -------- src/views/layout_HL/components/index.js | 4 - src/views/layout_HL/mixin/ResizeHandler.js | 52 -- src/views/login/index.vue | 4 +- static/config.js | 43 +- 66 files changed, 3523 insertions(+), 2636 deletions(-) create mode 100644 src/assets/img/leftPic.png create mode 100644 src/assets/img/logo.jpg create mode 100644 src/assets/img/logo.png create mode 100644 src/icons/svg/ProcessManagement.svg create mode 100644 src/utils/mqtt.js create mode 100644 src/views/ProcessManagement/BomEngineManagement/BomList.vue create mode 100644 src/views/ProcessManagement/BomEngineManagement/BomListCompare.vue create mode 100644 src/views/ProcessManagement/BomEngineManagement/index.vue delete mode 100644 src/views/layout_HL/Layout.vue delete mode 100644 src/views/layout_HL/components/AppMain.vue delete mode 100644 src/views/layout_HL/components/Navbar.vue delete mode 100644 src/views/layout_HL/components/Sidebar/Item.vue delete mode 100644 src/views/layout_HL/components/Sidebar/SidebarItem.vue delete mode 100644 src/views/layout_HL/components/Sidebar/SidebarItem2.vue delete mode 100644 src/views/layout_HL/components/Sidebar/index.vue delete mode 100644 src/views/layout_HL/components/TagsView.vue delete mode 100644 src/views/layout_HL/components/index.js delete mode 100644 src/views/layout_HL/mixin/ResizeHandler.js diff --git a/config/index.js b/config/index.js index ec1d2de..1cc4240 100644 --- a/config/index.js +++ b/config/index.js @@ -7,8 +7,8 @@ const os = require('os') const networkInterfaces = os.networkInterfaces() -const ip = networkInterfaces['WLAN'][1] ? networkInterfaces['WLAN'][1].address : networkInterfaces['WLAN'][0].address -// const ip = '127.0.0.1' +// const ip = networkInterfaces['WLAN'][1] ? networkInterfaces['WLAN'][1].address : networkInterfaces['WLAN'][0].address +const ip = '127.0.0.1' module.exports = { dev: { // Paths diff --git a/index.html b/index.html index 910ed0e..63b7375 100644 --- a/index.html +++ b/index.html @@ -4,12 +4,13 @@ MES信息管理系统 - - - - + + + + +
diff --git a/package.json b/package.json index 88a939e..aeed9ce 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,6 @@ "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml" }, "dependencies": { - "@xkeshi/vue-barcode": "^1.0.0", "axios": "0.18.0", "dhtmlx-gantt": "^7.1.12", "docxtemplater": "^3.19.7", @@ -23,17 +22,18 @@ "html2canvas": "^1.0.0-alpha.12", "jquery": "^3.5.1", "js-cookie": "2.2.0", - "jspdf": "^1.5.2", + "jspdf": "2.5.1", "jszip-utils": "^0.1.0", - "node-sass": "^4.10.0", + "mqtt": "^4.3.7", + "node-sass": "latest", "normalize.css": "7.0.0", "npm": "^7.20.5", "nprogress": "0.2.0", "qrcode": "^1.3.2", "stylus": "0.52.4", "stylus-loader": "^3.0.1", - "three-freeform-controls": "^0.1.12", "time-formater": "^1.0.3", + "uuid": "^9.0.0", "v-viewer": "^1.3.1", "view-ui-plus": "^1.3.1", "vue": "2.5.17", @@ -65,7 +65,7 @@ "eventsource-polyfill": "0.9.6", "file-loader": "1.1.11", "friendly-errors-webpack-plugin": "1.7.0", - "html-webpack-plugin": "4.0.0-alpha", + "html-webpack-plugin": "^4.5.2", "mini-css-extract-plugin": "0.4.1", "node-notifier": "5.2.1", "optimize-css-assets-webpack-plugin": "5.0.0", @@ -77,7 +77,7 @@ "raw-loader": "^4.0.2", "rimraf": "2.6.2", "sass-loader": "7.0.3", - "script-ext-html-webpack-plugin": "2.0.1", + "script-ext-html-webpack-plugin": "2.1.3", "script-loader": "^0.7.2", "semver": "5.5.0", "shelljs": "0.8.2", @@ -88,7 +88,7 @@ "vue-loader": "15.3.0", "vue-style-loader": "4.1.2", "vue-template-compiler": "2.5.17", - "webpack": "4.16.5", + "webpack": "4.36.1", "webpack-bundle-analyzer": "2.13.1", "webpack-cli": "3.1.0", "webpack-dev-server": "3.1.5", diff --git a/src/api/BasicData/MenuManagement.js b/src/api/BasicData/MenuManagement.js index a9fe02e..d78f549 100644 --- a/src/api/BasicData/MenuManagement.js +++ b/src/api/BasicData/MenuManagement.js @@ -24,7 +24,7 @@ export function getModule(role) { UserID: state.state.user.id, ModularID: router.currentRoute.path, type: '3', - name: `select * from 基础表_角色模块信息 inner join 基础表_模块信息 on 基础表_角色模块信息.id = 基础表_模块信息.id where 角色编号=${role} order by 角色模块顺序` + name: `select * from 基础表_角色模块信息 inner join 基础表_模块信息 on 基础表_角色模块信息.id = 基础表_模块信息.id where 角色编号=${role} and 是否禁用 = 0 order by 角色模块顺序` } }) } @@ -37,7 +37,7 @@ export function initFisrtLevel() { UserID: state.state.user.id, ModularID: router.currentRoute.path, type: '3', - name: `select id,title from 基础表_模块信息 where [path] = '/'` + name: `select id,title from 基础表_模块信息 where [path] = '/' and 是否禁用 = 0` } }) } @@ -50,7 +50,7 @@ export function initSecondLevel() { UserID: state.state.user.id, ModularID: router.currentRoute.path, type: '3', - name: `select id,title from 基础表_模块信息 where [path] <> '/'` + name: `select id,title from 基础表_模块信息 where [path] <> '/' and 是否禁用 = 0` } }) } diff --git a/src/api/ManufacturingCenter/maintainInformation.js b/src/api/ManufacturingCenter/maintainInformation.js index 6bcf509..6ba2f91 100644 --- a/src/api/ManufacturingCenter/maintainInformation.js +++ b/src/api/ManufacturingCenter/maintainInformation.js @@ -11,7 +11,13 @@ export function getTableData1() { UserID: state.state.user.id, ModularID: router.currentRoute.path, type: '3', - name: 'SELECT * FROM [基础数据_设备工位点检表]inner join dbo.基础数据_点检类型名称 on [基础数据_设备工位点检表].点检表类型 = 基础数据_点检类型名称.点检表类型流水号' + name: ` + SELECT 基础数据_点检类型名称.*,[基础数据_设备工位点检表].*,[MES_计划BOM_工位与名称].工位名称 FROM [基础数据_设备工位点检表] + inner join dbo.基础数据_点检类型名称 + on [基础数据_设备工位点检表].点检表类型 = 基础数据_点检类型名称.点检表类型流水号 + inner join [MES_计划BOM_工位与名称] + on [MES_计划BOM_工位与名称].工位号 = [基础数据_设备工位点检表].工位号 + ` } }) } diff --git a/src/assets/img/SiyuanLOGO.png b/src/assets/img/SiyuanLOGO.png index a80b0e558a88a1c2791ce169a0909274057d699c..7426163c07171bb9f6d59d1dd4c76264e6ea543c 100644 GIT binary patch literal 9240 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 n=TCT21I$zGm`^8PXrZ?>-QkQLvc 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 Ap8x;= literal 5055 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 diff --git a/src/assets/img/leftPic.png b/src/assets/img/leftPic.png new file mode 100644 index 0000000000000000000000000000000000000000..64c4d29af4987b10b69dc666822b2bb715b8e381 GIT binary patch literal 2239 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 literal 0 HcmV?d00001 diff --git a/src/assets/img/logo.png b/src/assets/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9e45f06db8cefe764407e4e043321ef887d83233 GIT binary patch literal 5859 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 literal 0 HcmV?d00001 diff --git a/src/icons/svg/ProcessManagement.svg b/src/icons/svg/ProcessManagement.svg new file mode 100644 index 0000000..bb3afc3 --- /dev/null +++ b/src/icons/svg/ProcessManagement.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/src/main.js b/src/main.js index 26b1ba4..a78618c 100644 --- a/src/main.js +++ b/src/main.js @@ -20,7 +20,7 @@ import time from 'time-formater' import htmlToPdf from '@/vendor/htmlToPdf' import Viewer from 'v-viewer' import 'viewerjs/dist/viewer.css' -import VueBarcode from '@xkeshi/vue-barcode' +// import VueBarcode from '@xkeshi/vue-barcode' import Direction from 'vue-direction-key' import elDragDialog from '@/directive/el-dragDialog' // 全局数字、金额输入框组件 @@ -32,7 +32,7 @@ Vue.prototype.$axios = axios // 修改原型链 // axios.defaults.withCredentials = true Vue.use(elDragDialog) -Vue.component('barcode', VueBarcode) +// Vue.component('barcode', VueBarcode) Vue.use(Direction) Vue.use(curd) Vue.use(htmlToPdf) @@ -107,7 +107,7 @@ export function HashTable() { } this.getValues = function() { // eslint-disable-next-line no-array-constructor - const values = new Array() + const values = [] for (const prop in entry) { values.push(entry[prop]) } diff --git a/src/permission.js b/src/permission.js index ce0ac0c..04361ee 100644 --- a/src/permission.js +++ b/src/permission.js @@ -46,9 +46,9 @@ router.beforeEach((to, from, next) => { store.dispatch('GetInfo').then(res => { // 拉取user_info const data = res.data const asyncRouterMap = getRouter(data, 0) - console.log(asyncRouterMap) asyncRouterMap.push({ path: '*', redirect: '/404', hidden: true }) - store.dispatch('GenerateRoutes', asyncRouterMap).then(() => { // 根据roles权限生成可访问的路由表 + store.dispatch('GenerateRoutes', asyncRouterMap).then(() => { + // 根据roles权限生成可访问的路由表 router.addRoutes(store.getters.addRouters) // 动态添加可访问路由表 next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record }) diff --git a/src/router/index.js b/src/router/index.js index 96f412b..dc6d365 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -21,6 +21,13 @@ import Layout from '../views/layout/Layout' icon: 'svg-name' the icon show in the sidebar, } **/ + +const originalPush = Router.prototype.push +Router.prototype.push = function push(location, onResolve, onReject) { + if (onResolve || onReject) { return originalPush.call(this, location, onResolve, onReject) } + return originalPush.call(this, location).catch((err) => err) +} + export const constantRouterMap = [ { path: '/login', component: () => import('@/views/login/index'), hidden: true }, { path: '/404', component: () => import('@/views/404'), hidden: true }, diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss index 81c2a6a..faf28a1 100644 --- a/src/styles/element-ui.scss +++ b/src/styles/element-ui.scss @@ -70,7 +70,7 @@ background-color: #d8dde6;/*修改斑马线表格背景*/ } .el-table thead.is-group th{ - background-color: rgb(98, 157, 209); + background-color: rgb(134, 172, 206); } /* .el-textarea__inner, diff --git a/src/styles/index.scss b/src/styles/index.scss index aefb00b..5498cb6 100644 --- a/src/styles/index.scss +++ b/src/styles/index.scss @@ -324,7 +324,8 @@ input[type=number]::-webkit-outer-spin-button { } } .el-table__body tr.current-row>td{ - background-color: #5da2ef !important; + background-color: #9bcaff !important; + color: white; } //统一标准全局class 张丁予20200213 .machineTool { // 机床Select diff --git a/src/utils/mqtt.js b/src/utils/mqtt.js new file mode 100644 index 0000000..702a2f6 --- /dev/null +++ b/src/utils/mqtt.js @@ -0,0 +1,104 @@ +import { v4 as uuid } from 'uuid' +import mqtt from 'mqtt' +export { Mqtt } +class Mqtt { + constructor(config) { + this.connection = { + host: config.host, + port: config.port, + endpoint: config.endpoint || '/mqtt', + clean: config.clean || true, + connectTimeout: config.connectTimeout || 4000, + reconnectPeriod: config.reconnectPeriod || 4000, + clientId: config.clientId || uuid(), + username: config.username || '', + password: config.password || '' + } + this.client = { + connected: false + } + } + // 创建连接 + createConnection() { + // 连接字符串, 通过协议指定使用的连接方式 + // ws 未加密 WebSocket 连接 + // wss 加密 WebSocket 连接 + // mqtt 未加密 TCP 连接 + // mqtts 加密 TCP 连接 + // wxs 微信小程序连接 + // alis 支付宝小程序连接 + const { host, port, endpoint, ...options } = this.connection + const connectUrl = `ws://${host}:${port}${endpoint}` + try { + this.client = mqtt.connect(connectUrl, options) + } catch (error) { + // 连接错位、 + this.connectError(error) + } + } + connectError(error) { + console.log('mqtt.connect error', error) + } + // 订阅主题 + doSubscribe(subscription) { + const { topic, qos } = subscription + let subscribeSuccess = false + this.client.subscribe(topic, { qos }, (error, res) => { + if (error) { + subscribeSuccess = false + console.log('Subscribe to topics error', error) + } else { + subscribeSuccess = true + console.log('Subscribe to topics res', res) + } + }) + return subscribeSuccess + } + // 取消订阅 + doUnSubscribe(subscription) { + const { topic } = subscription + let unSubscribeSuccess = false + this.client.unsubscribe(topic, error => { + if (error) { + unSubscribeSuccess = false + console.log('Unsubscribe error', error) + } else { + unSubscribeSuccess = true + } + }) + return unSubscribeSuccess + } + // 发送消息 + doPublish(publish) { + const { topic, qos, payload } = publish + let doPublishSuccess = false + this.client.publish(topic, payload, qos, error => { + if (error) { + doPublishSuccess = false + console.log('Publish error', error) + } else { + doPublishSuccess = true + } + }) + return doPublishSuccess + } + // 断开连接 + destroyConnection() { + let destroyConnectionSuccess = false + if (this.client.connected) { + try { + this.client.end() + this.client = { + connected: false + } + destroyConnectionSuccess = true + console.log('Successfully disconnected!') + } catch (error) { + destroyConnectionSuccess = false + console.log('Disconnect failed', error.toString()) + } + } + return destroyConnectionSuccess + } +} + diff --git a/src/utils/request.js b/src/utils/request.js index 3f55e3d..92949ec 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -1,10 +1,34 @@ import axios from 'axios' -import { wsuri_config, name_config, name1_config, name3_config, name4_config, readFile_config, readImg_config, upload_config, upload2_config, upload3_config, uploadInvoiceScan_config, uploadInvoiceScan1_config, - download_config, uploadPerson_config, uploadOP_config, url_config, ExcelDownLoad_config, ServerIP_config, uploadFileMachine_config, - downloadFileMachine_config, MESUploadFile_config, MESDownloadFile_config, request_config, MESUploadFileProduct_config, MESUploadFileProject_config, MESUploadFileProcess_config } from '../../static/config' import Cookies from 'js-cookie' import store from '@/store' +const wsuri_config = `ws://192.168.1.27:61101//WebMoudule//websocket` +const name_config = `OP8888` +const name1_config = `OP1000` +const name3_config = `OP2000` +const name4_config = `OP9999` +const readFile_config = window.g.baseURL + `/webpage/file/` // invoice +const readImg_config = window.g.baseURL + `/webpage/img/` // delivery/MS/performancebond +const upload_config = window.g.baseURL + `/submit/uploadFile.ashx` // ContractInformationManagement +const upload2_config = window.g.baseURL + `/submit/upload2.ashx` // delivery +const upload3_config = window.g.baseURL + `/submit/upload3.ashx` // performancebond +const uploadInvoiceScan_config = window.g.baseURL + `/submit/uploadInvoiceScan.ashx` // invoice +const uploadInvoiceScan1_config = window.g.baseURL + `/submit/uploadInvoiceScan1.ashx` // invoice(workshop) +const download_config = window.g.baseURL + `/submit/downloadFile.ashx` // ContractInformationManagement +const uploadPerson_config = window.g.baseURL + `/submit/uploadPerson.ashx` +const uploadOP_config = window.g.baseURL + `/submit/uploadOP.ashx` +const url_config = window.g.baseURL + `/submit/MESCommonBase.ashx` // 采购件入库、离线件入库 +const ExcelDownLoad_config = window.g.baseURL + '/submit/MESCommonBase.ashx' // 导出excel +const ServerIP_config = window.g.baseURL + `/webpage/file/` +const uploadFileMachine_config = window.g.baseURL + `/submit/uploadFileMachine.ashx` // 机床总图 发布时改成0.231 +const downloadFileMachine_config = window.g.baseURL + `/submit/downloadFileMachine.ashx` // 机床总图 发布时改成0.231 +const MESUploadFile_config = window.g.baseURL + `/submit/MESUploadFileParts.ashx` +const MESUploadFileProduct_config = window.g.baseURL + `/submit/MESUploadFileProduct.ashx` +const MESDownloadFile_config = window.g.baseURL + `/submit/MESDownloadFile.ashx` +const MESUploadFileProject_config = window.g.baseURL + `/submit/MESUploadFileProject.ashx` +const MESUploadFileProcess_config = window.g.baseURL + `/submit/MESUploadFileProcess.ashx` +const request_config = window.g.baseURL + `/submit/MESCommonBase.ashx` + export const wsuri = wsuri_config export const name = name_config export const name1 = name1_config @@ -41,11 +65,7 @@ const service = axios.create({ service.interceptors.request.use(config => { if (config.data.name !== '菜单系统模块_用户名密码_查询数据_new2' && config.data.name !== '菜单系统模块_获取角色模块_查询数据') { const id = Cookies.get('id') - if (typeof (id) !== 'undefined') { - console.log(id, 123) - console.log(typeof (id)) - } else { - console.log(456) + if (typeof (id) === 'undefined') { store.dispatch('FedLogOut').then(() => { location.reload() // 为了重新实例化vue-router对象 避免bug alert('此账号登录失效,请重新登录') diff --git a/src/utils/tool.js b/src/utils/tool.js index d475aee..e2e59f6 100644 --- a/src/utils/tool.js +++ b/src/utils/tool.js @@ -116,6 +116,22 @@ export function getNowTime1() { const time = year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second return time } +export function getNowTime3(date) { + const month = zeroFill2(date.getMonth() + 1) + const day = zeroFill(date.getDate()) + return date.getFullYear() + '-' + month + '-' + day +} +function zeroFill2(i) { + if (i >= 0 && i <= 9) { + if (i === 0) { + return '01' + } else { + return '0' + i + } + } else { + return i + } +} // 工时统计上个月26-本月25 export function getTime26() { const date = new Date() diff --git a/src/views/BasicData/MenuManagement/index.vue b/src/views/BasicData/MenuManagement/index.vue index 3e672a6..8e63c32 100644 --- a/src/views/BasicData/MenuManagement/index.vue +++ b/src/views/BasicData/MenuManagement/index.vue @@ -11,6 +11,7 @@ + - - - - + @@ -160,11 +193,6 @@ {{ scope.row.变量特点 }} - - - + + +
+ + + + + + + + + + + @@ -246,7 +313,22 @@ import request from '@/utils/request' export default { data() { return { + form: { + tagID: '', + oldValue: '', + newValue: '', + filed: '' + }, + rules: { + tagID: [{ required: true, message: '请输入tagID', trigger: 'blur' }], + oldValue: [{ required: true, message: '请输入oldValue', trigger: 'blur' }], + newValue: [{ required: true, message: '请输入newValue', trigger: 'blur' }], + filed: [{ required: true, message: '请输入filed', trigger: 'blur' }] + }, + title: '', + dialogFormVisible3: false, loading: false, + isUpdate: false, tableData: [], dataType: [], // 工位数组 dataTypeValue: '', // 工位信息 @@ -262,16 +344,36 @@ export default { value: 7 } ], + valueUsed: [ + { + label: '启用', + value: 1 + }, { + label: '禁用', + value: 0 + } + ], + valueMonitor: [ + { + label: '监控', + value: 1 + }, { + label: '不监控', + value: 0 + } + ], valueTypeValue: '', + valueUsedValue: 1, + valueMonitorValue: '', total: 0, // 总条数 pageList: 100, // 每页显示条数 - pageSize: 100, // 每页显示条数 + pageSize: 50, // 每页显示条数 pageCurrent: 1 // 后台获取页 } }, created() { this.getNumber() - this.searchTable() + // this.searchTable() }, methods: { // 初始化获取产品型号 @@ -298,29 +400,114 @@ export default { searchTable() { this.loading = true this.tableData = [] - let stationNumberValue_check, valueType_check + let stationNumberValue_check, valueType_check, valueUsed_check, monitor_check // this.engineTypeValue ? engineTypeValue_check = 1 : (engineTypeValue_check = 0, this.engineTypeValue = '') - this.dataTypeValue ? stationNumberValue_check = 1 : (stationNumberValue_check = 0, this.dataTypeValue = '') - this.valueTypeValue ? valueType_check = 1 : (valueType_check = 0, this.valueTypeValue = '') + this.dataTypeValue ? stationNumberValue_check = 1 : stationNumberValue_check = 0 + this.valueTypeValue ? valueType_check = 1 : valueType_check = 0 + this.valueUsedValue !== 0 && this.valueUsedValue !== 1 ? valueUsed_check = 0 : valueUsed_check = 1 + this.valueMonitorValue !== 0 && this.valueMonitorValue !== 1 ? monitor_check = 0 : monitor_check = 1 var param = [] param[0] = ['变量类型_ischeck', valueType_check] param[1] = ['变量类型', this.valueTypeValue] param[2] = ['工位号_ischeck', stationNumberValue_check] param[3] = ['工位号', this.dataTypeValue] - param[4] = ['PageCurrent', this.pageCurrent] - param[5] = ['PageSize', this.pageSize] - param[6] = ['PageCount', '1111', 'int', '1'] - param[7] = ['ItemCount', '1111', 'int', '1'] + param[4] = ['启用_ischeck', valueUsed_check] + param[5] = ['启用', this.valueUsedValue] + param[6] = ['监控_ischeck', monitor_check] + param[7] = ['监控', this.valueMonitorValue] + param[8] = ['PageCurrent', this.pageCurrent] + param[9] = ['PageSize', this.pageSize] + param[10] = ['PageCount', '1111', 'int', '1'] + param[11] = ['ItemCount', '1111', 'int', '1'] var Data = this.CreateData('11', 'MES_基本变量_查询数据', param) this.ExecDatabase(Data).then(response => { - console.log(response, 66) if (response.data.result.length !== 0) { this.tableData = response.data.result } + for (const valueUsedCheckElement of this.tableData) { + valueUsedCheckElement['是否启用_Value'] = !!parseInt(valueUsedCheckElement['是否启用']) + valueUsedCheckElement['是否监控_Value'] = !!parseInt(valueUsedCheckElement['是否监控']) + } this.total = parseInt(response.data.output[0].ItemCount) this.loading = false }) }, + searchTableAfterEdit(tagID) { + var param = [] + param[0] = ['TagId', tagID] + var Data = this.CreateData('11', 'MES_基本变量_查询数据_TagId', param) + this.ExecDatabase(Data).then(response => { + if (response.data.length !== 0) { + for (let i = 0; i < this.tableData.length; i++) { + if (this.tableData[i]['TagID'] === tagID) { + response.data[0]['是否启用_Value'] = !!parseInt(response.data[0]['是否启用']) + response.data[0]['是否监控_Value'] = !!parseInt(response.data[0]['是否监控']) + console.log(response.data[0]) + this.$set(this.tableData, i, response.data[0]) + // this.tableData[i] = response.data[0] + return + } + } + } + this.isUpdate = !this.isUpdate + }) + }, + editShiftTable(row) {}, + handleDelete(row) {}, + switchChange(status, type, row) { + var param = [] + param[0] = ['Value_type', parseInt(type)] + param[1] = ['Value_edit', status ? 1 : 0] + param[2] = ['TagID', row.TagID] + var Data = this.CreateData('12', 'MES_基本变量_启用与监控编辑', param) + this.ExecDatabase(Data).then(response => { + if (response.data[0].result === '1') { + this.$message({ + message: '修改成功', + type: 'success' + }) + this.searchTableAfterEdit(row.TagID) + } else { + this.$message.error('修改失败!') + } + }) + }, + showEdit(row, column, cell, event) { + console.log(row, column, cell, event) + this.title = `【${column.label}】 修改信息` + this.form.filed = column.label + this.form.oldValue = row[column.label] + this.form.tagID = row.TagID + this.form.newValue = '' + this.dialogFormVisible3 = true + }, + submitAdd() { + var param = [] + param[0] = ['newValue', this.form.newValue] + param[1] = ['filed', this.form.filed] + param[2] = ['TagID', this.form.tagID] + var Data = this.CreateData('12', 'MES_基本变量_字段信息_编辑', param) + this.ExecDatabase(Data).then(response => { + if (response.data[0].result === '1') { + this.$message({ + message: '修改成功', + type: 'success' + }) + this.searchTableAfterEdit(this.form.tagID) + this.dialogFormVisible3 = false + } else { + this.$message.error('修改失败!') + } + }) + }, + callOff() { + this.title = '' + this.form.filed = '' + this.form.oldValue = '' + this.form.tagID = '' + this.form.newValue = '' + this.dialogFormVisible3 = false + }, // 分页 handleSizeChange(val) { this.pageCurrent = 1 diff --git a/src/views/BasicDataMaintenance/StationInformationMaintenance/index.vue b/src/views/BasicDataMaintenance/StationInformationMaintenance/index.vue index f4b0837..91be6bf 100644 --- a/src/views/BasicDataMaintenance/StationInformationMaintenance/index.vue +++ b/src/views/BasicDataMaintenance/StationInformationMaintenance/index.vue @@ -46,6 +46,13 @@ + + + - - - - - - - - - - + + + - + + + + @@ -119,275 +119,30 @@ - -
-
设备保养点检记录表
-
- 设备名称: - {{ 设备名称 }} - 设备编号: - {{ 设备编号 }} -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
点 检 人(操作工)
-
{{ tableData[0] ? tableData[0].姓名1 : '' }}
-
{{ tableData[0] ? tableData[0].姓名2 : '' }}
-
{{ tableData[0] ? tableData[0].姓名3 : '' }}
-
{{ tableData[0] ? tableData[0].姓名4 : '' }}
-
{{ tableData[0] ? tableData[0].姓名5 : '' }}
-
{{ tableData[0] ? tableData[0].姓名6 : '' }}
-
{{ tableData[0] ? tableData[0].姓名7 : '' }}
-
{{ tableData[0] ? tableData[0].姓名8 : '' }}
-
{{ tableData[0] ? tableData[0].姓名9 : '' }}
-
{{ tableData[0] ? tableData[0].姓名10 : '' }}
-
{{ tableData[0] ? tableData[0].姓名11 : '' }}
-
{{ tableData[0] ? tableData[0].姓名12 : '' }}
-
{{ tableData[0] ? tableData[0].姓名13 : '' }}
-
{{ tableData[0] ? tableData[0].姓名14 : '' }}
-
{{ tableData[0] ? tableData[0].姓名15 : '' }}
-
{{ tableData[0] ? tableData[0].姓名16 : '' }}
-
{{ tableData[0] ? tableData[0].姓名17 : '' }}
-
{{ tableData[0] ? tableData[0].姓名18 : '' }}
-
{{ tableData[0] ? tableData[0].姓名19 : '' }}
-
{{ tableData[0] ? tableData[0].姓名20 : '' }}
-
{{ tableData[0] ? tableData[0].姓名21 : '' }}
-
{{ tableData[0] ? tableData[0].姓名22 : '' }}
-
{{ tableData[0] ? tableData[0].姓名23 : '' }}
-
{{ tableData[0] ? tableData[0].姓名24 : '' }}
-
{{ tableData[0] ? tableData[0].姓名25 : '' }}
-
{{ tableData[0] ? tableData[0].姓名26 : '' }}
-
{{ tableData[0] ? tableData[0].姓名27 : '' }}
-
{{ tableData[0] ? tableData[0].姓名28 : '' }}
-
{{ tableData[0] ? tableData[0].姓名29 : '' }}
-
{{ tableData[0] ? tableData[0].姓名30 : '' }}
-
{{ tableData[0] ? tableData[0].姓名31 : '' }}
+ + + + + - - + @@ -425,10 +180,14 @@ + + + diff --git a/src/views/ProcessManagement/BomEngineManagement/BomListCompare.vue b/src/views/ProcessManagement/BomEngineManagement/BomListCompare.vue new file mode 100644 index 0000000..171733c --- /dev/null +++ b/src/views/ProcessManagement/BomEngineManagement/BomListCompare.vue @@ -0,0 +1,299 @@ + + + + + diff --git a/src/views/ProcessManagement/BomEngineManagement/index.vue b/src/views/ProcessManagement/BomEngineManagement/index.vue new file mode 100644 index 0000000..8b39319 --- /dev/null +++ b/src/views/ProcessManagement/BomEngineManagement/index.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/src/views/ProcessManagement/InterfaceModuleMaintenance/index.vue b/src/views/ProcessManagement/InterfaceModuleMaintenance/index.vue index 23ce1db..ec2f4a9 100644 --- a/src/views/ProcessManagement/InterfaceModuleMaintenance/index.vue +++ b/src/views/ProcessManagement/InterfaceModuleMaintenance/index.vue @@ -205,7 +205,6 @@ export default { // param[3] = ['check工位号', stationNumberValue_check] var Data = this.CreateData('11', '工艺管理_界面模块维护_信息查询', param) this.ExecDatabase(Data).then(response => { - console.log(response, 66) if (response.data.length !== 0) { this.tableData = response.data } diff --git a/src/views/ProcessManagement/MaterialVerificationMaintenance/index.vue b/src/views/ProcessManagement/MaterialVerificationMaintenance/index.vue index 695ddb7..c15ab56 100644 --- a/src/views/ProcessManagement/MaterialVerificationMaintenance/index.vue +++ b/src/views/ProcessManagement/MaterialVerificationMaintenance/index.vue @@ -3,7 +3,7 @@
工位号: - + 工位名称: - + 产品型号: 查询物料 创建物料 - 复制物料 - 物料导入 - 物料导出 + + +
- - - + + + + + - + @@ -65,28 +65,28 @@ {{ scope.row.零件图号 }} - + - - - + + + + + - - - + + + + + + @@ -114,7 +115,7 @@ @current-change="handleCurrentChange"/>
- + @@ -134,12 +135,19 @@ :value="item.value"/> - + + + + + + + + + placeholder="请输入零件图号"/> - - - - - - - - - + + + + + + + + + + + + + + - - - - - + + + + + + + + + @@ -43,7 +57,7 @@ import { searchTable1 as searchContractApproval } from '@/api/WorkshopProcuremen /* import { searchTable } from '@/api/PurchasingCenter/PurchaseMaterielModify' import { search } from '@/api/Assembly/DeliveryConfirmation' import { searchtable as searchtableSupplement } from '@/api/WorkshopProcurement/ScrappedSupplementaryInvestment1'*/ // 查询报废补投零件 -import Cookies from 'js-cookie' +// import Cookies from 'js-cookie' export default { components: { Breadcrumb, @@ -51,6 +65,10 @@ export default { }, data() { return { + tableData: [], + errorCount: 0, + showError: false, + dialogFormVisible4: false, timer: '', noticeFund: null, noticeInvoice: null, @@ -89,8 +107,10 @@ export default { 'token' ]) }, + created() { + // this.showOrder() + }, mounted() { - console.log(Cookies.get('id'), 999) /* if (this.id === 3 || Cookies.get('id') === 3) { // id=3 沈大为 总经理 this.checkApproval() this.timer = setInterval(this.checkApproval, 1000 * 60 * 5) @@ -393,6 +413,26 @@ export default { } }) }, + showOrder() { + // 未完成订单查询 + var param = [] + var Data = this.CreateData('11', 'MES_计划BOM_发动机订单计划_未完成计划_查询', param) + this.ExecDatabase(Data).then(response => { + console.log(response.data) + if (response.data.length > 0) { + this.errorCount = response.data.length + this.showError = true + this.dialogFormVisible4 = true + } else { + this.showError = false + } + }) + }, + submitAdd4() { + this.$router.push({ + // param参数用name query 参数用 path + path: '/WorkOrderManagement/ScheduleStatusChange' }) + }, toggleSideBar() { this.$store.dispatch('ToggleSideBar') }, diff --git a/src/views/layout/components/Sidebar/index.vue b/src/views/layout/components/Sidebar/index.vue index 5e48471..e954be8 100644 --- a/src/views/layout/components/Sidebar/index.vue +++ b/src/views/layout/components/Sidebar/index.vue @@ -2,7 +2,7 @@
- + @@ -68,12 +68,13 @@ export default { diff --git a/src/views/layout_HL/Layout.vue b/src/views/layout_HL/Layout.vue deleted file mode 100644 index 5fb5014..0000000 --- a/src/views/layout_HL/Layout.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - - - diff --git a/src/views/layout_HL/components/AppMain.vue b/src/views/layout_HL/components/AppMain.vue deleted file mode 100644 index 63ad836..0000000 --- a/src/views/layout_HL/components/AppMain.vue +++ /dev/null @@ -1,30 +0,0 @@ - - - - - diff --git a/src/views/layout_HL/components/Navbar.vue b/src/views/layout_HL/components/Navbar.vue deleted file mode 100644 index 55de4c3..0000000 --- a/src/views/layout_HL/components/Navbar.vue +++ /dev/null @@ -1,455 +0,0 @@ - - - - - - diff --git a/src/views/layout_HL/components/Sidebar/Item.vue b/src/views/layout_HL/components/Sidebar/Item.vue deleted file mode 100644 index b515f61..0000000 --- a/src/views/layout_HL/components/Sidebar/Item.vue +++ /dev/null @@ -1,29 +0,0 @@ - diff --git a/src/views/layout_HL/components/Sidebar/SidebarItem.vue b/src/views/layout_HL/components/Sidebar/SidebarItem.vue deleted file mode 100644 index ab3b050..0000000 --- a/src/views/layout_HL/components/Sidebar/SidebarItem.vue +++ /dev/null @@ -1,104 +0,0 @@ - - - diff --git a/src/views/layout_HL/components/Sidebar/SidebarItem2.vue b/src/views/layout_HL/components/Sidebar/SidebarItem2.vue deleted file mode 100644 index 51de583..0000000 --- a/src/views/layout_HL/components/Sidebar/SidebarItem2.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - diff --git a/src/views/layout_HL/components/Sidebar/index.vue b/src/views/layout_HL/components/Sidebar/index.vue deleted file mode 100644 index 99467dc..0000000 --- a/src/views/layout_HL/components/Sidebar/index.vue +++ /dev/null @@ -1,69 +0,0 @@ - - - - diff --git a/src/views/layout_HL/components/TagsView.vue b/src/views/layout_HL/components/TagsView.vue deleted file mode 100644 index 511a536..0000000 --- a/src/views/layout_HL/components/TagsView.vue +++ /dev/null @@ -1,334 +0,0 @@ - - - - - - - diff --git a/src/views/layout_HL/components/index.js b/src/views/layout_HL/components/index.js deleted file mode 100644 index 9fc98d6..0000000 --- a/src/views/layout_HL/components/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export { default as Navbar } from './Navbar' -export { default as Sidebar } from './Sidebar' -export { default as AppMain } from './AppMain' -export { default as TagsView } from './TagsView' diff --git a/src/views/layout_HL/mixin/ResizeHandler.js b/src/views/layout_HL/mixin/ResizeHandler.js deleted file mode 100644 index 7bd91b7..0000000 --- a/src/views/layout_HL/mixin/ResizeHandler.js +++ /dev/null @@ -1,52 +0,0 @@ -import store from '@/store' - -const { body } = document -const WIDTH = 1024 -const RATIO = 3 - -export default { - watch: { - $route(route) { - if (this.device === 'mobile' && this.sidebar.opened) { - store.dispatch('CloseSideBar', { withoutAnimation: false }) - } - } - }, - beforeMount() { - window.addEventListener('resize', this.resizeHandler) - }, - mounted() { - const isMobile = this.isMobile() - const isSmallDesktop = this.isSmallDesktop() - if (isSmallDesktop) { - store.dispatch('CloseSideBar', { withoutAnimation: false }) - } - if (isMobile) { - store.dispatch('ToggleDevice', 'mobile') - store.dispatch('CloseSideBar', { withoutAnimation: true }) - } - }, - methods: { - isMobile() { - const rect = body.getBoundingClientRect() - return rect.width - RATIO < WIDTH - }, - isSmallDesktop() { - const rect = body.getBoundingClientRect() - return rect.width - RATIO < 1300 - }, - resizeHandler() { - if (!document.hidden) { - const isMobile = this.isMobile() - const isSmallDesktop = this.isSmallDesktop() - store.dispatch('ToggleDevice', isMobile ? 'mobile' : 'desktop') - if (isSmallDesktop) { - store.dispatch('CloseSideBar', { withoutAnimation: false }) - } - if (isMobile) { - store.dispatch('CloseSideBar', { withoutAnimation: true }) - } - } - } - } -} diff --git a/src/views/login/index.vue b/src/views/login/index.vue index 2950d06..f47aa0d 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -82,7 +82,7 @@ export default { } const validateUsername = (rule, value, callback) => { if (!isvalidUsername(value)) { - callback(new Error('请输入正确的用户名')) + callback(new Error('请输入4-5位工号')) } else { callback() } @@ -99,7 +99,7 @@ export default { againPassword: [ { required: true, message: '请输入确认密码', trigger: 'blur' }, { required: true, trigger: 'blur', validator: validateValue }], - Account: [{ required: true, message: '请输入考勤编号', trigger: 'blur' }], + Account: [{ required: true, trigger: 'blur', validator: validateUsername }], beforPassword: [{ required: true, message: '请输入原始密码', trigger: 'blur' }], newPassword: [{ required: true, message: '请输入新密码', trigger: 'blur' }] }, diff --git a/static/config.js b/static/config.js index a4cae08..ffdc9dc 100644 --- a/static/config.js +++ b/static/config.js @@ -1,33 +1,10 @@ -export const wsuri_config = `ws://192.168.1.27:61101//WebMoudule//websocket` -export const name_config = `OP8888` -export const name1_config = `OP1000` -export const name3_config = `OP2000` -export const name4_config = `OP9999` - -var url = `http://localhost:8100` -// var url = `http://124.220.15.242:8104` -// var url = `http://124.220.15.242:8110` // AP - -export const readFile_config = url + `/webpage/file/` // invoice -export const readImg_config = url + `/webpage/img/` // delivery/MS/performancebond -export const upload_config = url + `/submit/uploadFile.ashx` // ContractInformationManagement -export const upload2_config = url + `/submit/upload2.ashx` // delivery -export const upload3_config = url + `/submit/upload3.ashx` // performancebond -export const uploadInvoiceScan_config = url + `/submit/uploadInvoiceScan.ashx` // invoice -export const uploadInvoiceScan1_config = url + `/submit/uploadInvoiceScan1.ashx` // invoice(workshop) -export const download_config = url + `/submit/downloadFile.ashx` // ContractInformationManagement -export const uploadPerson_config = url + `/submit/uploadPerson.ashx` -export const uploadOP_config = url + `/submit/uploadOP.ashx` -export const url_config = url + `/submit/MESCommonBase.ashx` // 采购件入库、离线件入库 -export const ExcelDownLoad_config = url + '/submit/MESCommonBase.ashx' // 导出excel -// 技术中心程序发布时要更改下面所有的IP到0段 -export const ServerIP_config = url + `/webpage/file/` -export const uploadFileMachine_config = url + `/submit/uploadFileMachine.ashx` // 机床总图 发布时改成0.231 -export const downloadFileMachine_config = url + `/submit/downloadFileMachine.ashx` // 机床总图 发布时改成0.231 -export const MESUploadFile_config = url + `/submit/MESUploadFileParts.ashx` -export const MESUploadFileProduct_config = url + `/submit/MESUploadFileProduct.ashx` -export const MESDownloadFile_config = url + `/submit/MESDownloadFile.ashx` -export const MESUploadFileProject_config = url + `/submit/MESUploadFileProject.ashx` -export const MESUploadFileProcess_config = url + `/submit/MESUploadFileProcess.ashx` - -export const request_config = url + `/submit/MESCommonBase.ashx` +window.g = { + mqttClient: null, + mqttSubscriptionTopic: 'MES/InstantMessaging/PF25/', + mqttPublishTopic: 'MesPrint', + mqttIP: '10.227.246.200', + mqttPortNumber: '8083', + printTemplate: 'BQFT_BarCode_001', + // baseURL: 'http://127.0.0.1:10031' + baseURL: 'http://10.227.246.200:10030' +}