From accebdce93486d3b4f26e55ffdea047549cce20c Mon Sep 17 00:00:00 2001 From: cuijian <cuijian@xalxzn.com> Date: 星期一, 28 七月 2025 21:12:38 +0800 Subject: [PATCH] Merge branch 'master' of http://125.76.225.53:18448/r/xhj/vue_mdc_xhj --- src/views/mdc/base/modules/EquipmentList/UserModal.vue | 628 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 628 insertions(+), 0 deletions(-) diff --git a/src/views/mdc/base/modules/EquipmentList/UserModal.vue b/src/views/mdc/base/modules/EquipmentList/UserModal.vue new file mode 100644 index 0000000..cb93b44 --- /dev/null +++ b/src/views/mdc/base/modules/EquipmentList/UserModal.vue @@ -0,0 +1,628 @@ +<template> + <a-modal + :title="title" + :maskClosable="true" + :width="drawerWidth" + @cancel="visible=false" + :visible="visible" + :footer="null" + style="height: 100%;overflow: auto;padding-bottom: 53px;"> + + <template slot="title"> + <div style="width: 100%;"> + <span>{{ title }}</span> + <span style="display:inline-block;width:calc(100% - 51px);padding-right:10px;text-align: right"> + <a-button @click="toggleScreen" icon="appstore" style="height:20px;width:20px;border:0px"></a-button> + </span> + </div> + + </template> + + <a-spin :spinning="confirmLoading"> + <a-form-model ref="form" :form="form" :model="model" :rules="validatorRules" :labelCol="labelCol" + :wrapperCol="wrapperCol"> + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item label="缁熶竴缂栫爜" prop="equipmentId"> + <a-input-search v-model="model.equipmentId" readOnly :disabled="disableSubmit" @search="deviceSearch" + enter-button + placeholder='璇烽�夋嫨缁熶竴缂栫爜'/> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="璁惧鍚嶇О"> + <a-input allow-clear placeholder="璇疯緭鍏ヨ澶囧悕绉�" + v-model="model.equipmentName"/> + </a-form-model-item> + </a-col> + </a-row> + + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item v-if="isDepartType == 0" label="閮ㄩ棬鍒嗛厤" + v-show="!departDisabled"> + <j-select-equipment-depart :disabled="disableSubmit" v-model="model.selectedDeparts" :multi="false" + @back="backDepartInfo" :backDepart="true" + :treeOpera="true"></j-select-equipment-depart> + </a-form-model-item> + + <a-form-model-item v-if="isDepartType == -1" label="璁惧绫诲瀷"> + <a-select :disabled="disableSubmit" placeholder="璇烽�夋嫨璁惧绫诲瀷" + :triggerChange="true" + v-model="model.equipmentType"> + <a-select-option v-for='item in selectList' :key='item.id' :value='item.equipmentTypeName'> + {{item.equipmentTypeName}} + </a-select-option> + </a-select> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="杞﹂棿鍒嗛厤" v-show="!productionDisabled" + ref="selectedProduction" prop="selectedProduction"> + <!--<j-select-equipment-production v-decorator="['selectedProduction',{rules:[{required:true,message:'璇烽�夋嫨杞﹂棿!'}]}]" :multi="false" @back="backProductionInfo" :backProduction="true" :treeProductOpera="true"></j-select-equipment-production>--> + <j-select-equipment-production :disabled="disableSubmit" v-model="model.selectedProduction" :multi="false" + @back="backProductionInfo" :backProduction="true" + :treeProductOpera="true"></j-select-equipment-production> + </a-form-model-item> + + </a-col> + </a-row> + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item v-if="isDepartType == -1" label="绯荤粺鐗堟湰鍙�"> + <a-input :disabled="disableSubmit" allow-clear placeholder="璇疯緭鍏ョ郴缁熺増鏈彿" + v-model="model.systemVersion"/> + </a-form-model-item> + <a-form-model-item v-if="isDepartType == 0" label="璁惧绫诲瀷"> + <a-select :disabled="disableSubmit" placeholder="璇烽�夋嫨璁惧绫诲瀷" + :triggerChange="true" + v-model="model.equipmentType"> + <a-select-option v-for='item in selectList' :key='item.id' :value='item.equipmentTypeName'> + {{item.equipmentTypeName}} + </a-select-option> + </a-select> + </a-form-model-item> + + </a-col> + <a-col :span="12"> + <a-form-model-item label="璁惧鍔熺巼(kw)"> + <a-input :disabled="disableSubmit" allow-clear placeholder="璇疯緭鍏ヨ澶囧姛鐜�" + v-model="model.devicePower"/> + </a-form-model-item> + </a-col> + </a-row> + + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item label="鏈哄簥IP"> + <a-input :disabled="true" placeholder="璇疯緭鍏ユ満搴奍P" + v-model="model.equipmentIp"/> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="鏈哄簥绔彛"> + <a-input :disabled="true" placeholder="璇疯緭鍏ユ満搴婄鍙�" + v-model="model.dataPort"/> + </a-form-model-item> + </a-col> + </a-row> + + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item label="椹卞姩绫诲瀷"> + <j-dict-select-tag :disabled="true" placeholder="璇烽�夋嫨椹卞姩绫诲瀷" + :triggerChange="true" dictCode="mdc_driveType" + v-model="model.driveType" allow-clear/> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="璁惧鍨嬪彿"> + <a-input :disabled="true" allow-clear placeholder="璇疯緭鍏ヨ澶囧瀷鍙�" + v-model="model.equipmentModel"/> + </a-form-model-item> + </a-col> + </a-row> + + <a-row :gutter="24"> + <a-col :span="12"> + <a-form-model-item label="绯荤粺绫诲瀷"> + <j-dict-select-tag placeholder="璇烽�夋嫨绯荤粺绫诲瀷" :triggerChange="true" dictCode="system_type" + :disabled="disableSubmit" + v-model="model.systemType" allow-clear/> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="鎺掑簭"> + <a-input :disabled="disableSubmit" :readOnly="disableSubmit" placeholder="璇疯緭鍏ユ帓搴�" + v-model="model.sortNo" style="width: 100%"/> + </a-form-model-item> + </a-col> + </a-row> + + <a-row :gutter="24"> + <a-col :span='12' v-if="systemType"> + <a-form-model-item label="绯荤粺绫诲瀷"> + <a-radio-group name="radioGroup" v-model="systemValue" :disabled="disableSubmit"> + <a-radio value="1">DNC</a-radio> + <a-radio value="2">MDC</a-radio> + <a-radio value="3">閫氱敤</a-radio> + </a-radio-group> + </a-form-model-item> + </a-col> + <a-col :span='12'> + <a-form-model-item label="瀹夎浣嶇疆"> + <a-input v-model="model.equipmentAddress" allow-clear placeholder="璇疯緭鍏ュ畨瑁呬綅缃�" :disabled="disableSubmit"/> + </a-form-model-item> + </a-col> + </a-row> + + + <a-row :gutter="24"> + <a-col :span='12'> + <a-form-model-item v-if="isDepartType == 0" label="绯荤粺鐗堟湰鍙�"> + <a-input :disabled="disableSubmit" :readOnly="disableSubmit" allow-clear placeholder="璇疯緭鍏ョ郴缁熺増鏈彿" + v-model="model.systemVersion"/> + </a-form-model-item> + </a-col> + </a-row> + + <a-row :gutter="24"> + <a-col :span="24"> + <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" label="澶囨敞"> + <a-textarea :disabled="disableSubmit" :readOnly="disableSubmit" placeholder="璇疯緭鍏ュ娉�" + v-model="model.remark"/> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </a-spin> + + + <div class="drawer-bottom-button" v-show="!disableSubmit"> + <a-popconfirm title="纭畾鏀惧純鎿嶄綔锛�" @confirm="close" okText="纭畾" cancelText="鍙栨秷"> + <a-button style="margin-right: .8rem">鍙栨秷</a-button> + </a-popconfirm> + <a-button @click="handleSubmit" type="primary" :loading="confirmLoading">鎻愪氦</a-button> + </div> + <device-list-model ref="deviceListModel" @sendSelectionRows="getDeviceRows"></device-list-model> + </a-modal> + +</template> + +<script> + import pick from 'lodash.pick' + import moment from 'moment' + import Vue from 'vue' + import { ACCESS_TOKEN } from '@/store/mutation-types' + import { getAction } from '@/api/manage' + import { addEquipment, editEquipment } from '@/api/api' + import { disabledAuthFilter } from '@/utils/authFilter' + import { duplicateCheck } from '@/api/api' + import JSelectEquipmentProduction from '../../../../../components/jeecgbiz/JSelectEquipmentProduction' + import JSelectProduction from '../../../../../components/jeecgbiz/JSelectProduction' + import DeviceListModel from './DeviceListModal' + import JSelectEquipmentDepart from '../../../../../components/jeecgbiz/JSelectEquipmentDepart' + import { mapActions } from 'vuex' + + export default { + name: 'UserModal', + components: { + JSelectProduction, + JSelectEquipmentDepart, + JSelectEquipmentProduction, + DeviceListModel + }, + data() { + return { + departDisabled: false, //鏄惁鏄垜鐨勯儴闂ㄨ皟鐢ㄨ椤甸潰 + productionDisabled: false, //鏄惁鏄垜鐨勮溅闂磋皟鐢ㄨ椤甸潰 + roleDisabled: false, //鏄惁鏄鑹茬淮鎶よ皟鐢ㄨ椤甸潰 + modalWidth: 800, + drawerWidth: 700, + modalToggleFlag: true, + confirmDirty: false, + userId: '', //淇濆瓨鐢ㄦ埛id + // disableSubmit:false, + disableSubmit: true, + dateFormat: 'YYYY-MM-DD', + form: this.$form.createForm(this), + + validatorRules: { + // equipmentId: [{required: false, message: '璇烽�夋嫨璁惧缂栧彿!'}, {validator: this.validatequipmentId}], + equipmentId: + [ + { + required: true, message: '璇烽�夋嫨璁惧缂栧彿锛�', trigger: 'change' + } + // { + // validator: this.validatequipmentId + // } + ], + // trigger: 'blur' // 瑙﹀彂鏂瑰紡 + + selectedProduction: + [ + { + required: true, message: '璇烽�夋嫨杞﹂棿锛�' + } + ] + + }, + departIdShow: false, + title: '鎿嶄綔', + visible: false, + model: { + equipmentId: '', + equipmentName: '', + equipmentModel: '', + equipmentIp: '', + dataPort: '', + driveType: '', + systemType: '', + deviceLevel: '', + deviceCategory: '', + deviceTypeDnc: '', + deviceTypeMdc: '' + }, + labelCol: { + xs: { span: 24 }, + sm: { span: 8 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 14 } + }, + labelColLong: { + xs: { span: 24 }, + sm: { span: 4 } + }, + wrapperColLong: { + xs: { span: 24 }, + sm: { span: 19 } + }, + uploadLoading: false, + confirmLoading: false, + headers: {}, + systemType: false, + systemValue: '3', + url: { + fileUpload: window._CONFIG['domianURL'] + '/sys/common/upload', + userWithDepart: '/mdc/mdcEquipment/equipmentDepartList', // 寮曞叆涓烘寚瀹氱敤鎴锋煡鐪嬮儴闂ㄤ俊鎭渶瑕佺殑url + //寮曞叆涓烘寚瀹氱敤鎴锋煡鐪嬭溅闂翠俊鎭渶瑕佺殑url + userProductionList: '/mdc/mdcEquipment/equipmentProductionList', + userId: '/sys/user/generateUserId', // 寮曞叆鐢熸垚娣诲姞鐢ㄦ埛鎯呭喌涓嬬殑url + syncUserByUserName: '/act/process/extActProcess/doSyncUserByUserName',//鍚屾鐢ㄦ埛鍒板伐浣滄祦 + queryTenantList: '/sys/tenant/queryList', + check: '/sys/duplicate/check', + queryEquipmentType: '/mdc/mdcEquipmentType/queryEquipmentType' + }, + tenantsOptions: [], + rolesOptions: [], + nextDepartOptions: [], + nextProductionOptions: [], + selectList: [], + isDepartType: '' + } + }, + created() { + const token = Vue.ls.get(ACCESS_TOKEN) + this.headers = { 'X-Access-Token': token } + this.queryGroup() + this.queryTreeData() + this.getAppPlatformName() + // this.initRoleList() + // this.initTenantList() + }, + computed: { + uploadAction: function() { + return this.url.fileUpload + } + }, + methods: { + ...mapActions(['QueryDepartTree']), + queryTreeData() { + this.QueryDepartTree().then(res => { + if (res.success) { + this.isDepartType = res.result[0].value + } else { + // this.$message.warn(res.message) + this.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }).finally(() => { + }) + }, + getAppPlatformName() { + getAction(`/system/sysParams/query/by/settingKey?settingKey=system_type`).then(res => { + if (res.success) { + this.systemType = res.result.settingValue === '0' + } + }) + }, + queryGroup() { + getAction(this.url.queryEquipmentType).then(res => { + if (res.success) { + this.selectList = res.result + // this.selectList = res.result.map((item, index, arr) => { + // return { label: item.id, value: item.equipmentTypeName + '' } + // }) + } else { + // this.$message.warning(res.message) + this.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }).finally(() => { + this.loading = false + }) + }, + getDeviceRows(val) { + console.log(val) + if (val.equipmentid) { + this.model.equipmentId = val.equipmentid + this.model.equipmentName = val.equipmentname + this.model.equipmentModel = val.equipmentmodel + this.model.equipmentIp = val.equipmentip + this.model.dataPort = val.dataport + this.model.driveType = val.drivetype + this.model.controlSystem = val.controlsystem + this.model.saveTableName = val.savetablename + this.model.systemType = val.controlsystem + } + + }, + deviceSearch() { + this.$refs.deviceListModel.openPage() + this.$refs.deviceListModel.title = '閫夋嫨璁惧' + this.$refs.deviceListModel.disableSubmit = false + }, + add() { + this.refresh() + this.edit({ + activitiSync: '1', + userIdentity: 1, + equipmentId: '', + equipmentName: '', + equipmentModel: '', + equipmentIp: '', + dataPort: '', + driveType: '', + controlSystem: '', + saveTableName: '' + }) + }, + edit(record) { + let that = this + that.visible = true + //鏍规嵁灞忓箷瀹藉害鑷�傚簲鎶藉眽瀹藉害 + this.resetScreenSize() + + // that.userId = record.id; + // console.log(record) + if (record.systemValue != null) { + this.systemValue = record.systemValue + } else { + this.systemValue = '3' + } + that.model = Object.assign({}, record) + // that.model = Object.assign({},{selectedroles:'',selectedProduction:''}, record); + // this.model = Object.assign({}, record) + + this.$nextTick(() => { + this.form.setFieldsValue(pick(that.model, 'selectedDeparts', 'selectedProduction', 'equipmentId', 'equipmentName', 'equipmentModel', 'equipmentType', 'equipmentIp', 'dataPort', + 'driveType', 'sortNo', 'remark', 'systemVersion', 'devicePower', 'controlSystem', 'saveTableName', 'systemValue', 'equipmentAddress')) + }) + if (record.hasOwnProperty('id')) { + // that.getUserRoles(record.id); + that.getUserDeparts(record.id) + } + // console.log('that.model=',that.model) + }, + isDisabledAuth(code) { + return disabledAuthFilter(code) + }, + //绐楀彛鏈�澶у寲鍒囨崲 + toggleScreen() { + if (this.modalToggleFlag) { + this.modalWidth = window.innerWidth + } else { + this.modalWidth = 800 + } + this.modalToggleFlag = !this.modalToggleFlag + }, + // 鏍规嵁灞忓箷鍙樺寲,璁剧疆鎶藉眽灏哄 + resetScreenSize() { + let screenWidth = document.body.clientWidth + if (screenWidth < 500) { + this.drawerWidth = screenWidth + } else { + this.drawerWidth = 800 + } + }, + getUserDeparts(userid) { + let that = this + //閮ㄩ棬鐨剈rl + getAction(that.url.userWithDepart, { equipmentId: userid }).then((res) => { + if (res.success) { + // console.log(res.result) + let departOptions = [] + let selectDepartKeys = [] + for (let i = 0; i < res.result.length; i++) { + selectDepartKeys.push(res.result[i].key) + //鏂板璐熻矗閮ㄩ棬閫夋嫨涓嬫媺妗� + departOptions.push({ + value: res.result[i].key, + label: res.result[i].title + }) + } + + that.model.selectedDeparts = selectDepartKeys.join(',') + // that.model.selectedProduction = selectDepartKeys.join(",") + + that.nextDepartOptions = departOptions + // console.log('that.nextDepartOptions=',that.nextDepartOptions) + } + }) + + getAction(that.url.userProductionList, { equipmentId: userid }).then((res) => { + if (res.success) { + // console.log(res.result) + let ProductionOptions = [] + let selectProductKeys = [] + // console.log(res.result) + for (let i = 0; i < res.result.length; i++) { + selectProductKeys.push(res.result[i].key) + //鏂板璐熻矗閮ㄩ棬閫夋嫨涓嬫媺妗� + ProductionOptions.push({ + value: res.result[i].key, + label: res.result[i].title + }) + } + + that.model.selectedProduction = selectProductKeys.join(',') + + that.nextProductionOptions = ProductionOptions + // console.log('that.nextProductionOptions=',that.nextProductionOptions) + } + }) + //杞﹂棿鐨剈rl + }, + backDepartInfo(info) { + // console.log(info) + this.model.departIds = this.model.selectedDeparts + this.nextDepartOptions = info.map((item, index, arr) => { + let c = { label: item.text, value: item.value + '' } + return c + }) + }, + backProductionInfo(info) { + // console.log(info) + this.model.productionIds = this.model.selectedProduction + this.nextProductionOptions = info.map((item, index, arr) => { + let c = { label: item.text, value: item.value + '' } + return c + }) + }, + + refresh() { + this.userId = '' + this.nextDepartOptions = [] + this.nextProductionOptions = [] + this.departIdShow = false + }, + close() { + this.$emit('close') + this.visible = false + this.disableSubmit = false + this.nextDepartOptions = [] + this.nextProductionOptions = [] + this.departIdShow = false + // this.$refs.form.resetFields(); + }, + moment, + handleSubmit() { + const that = this + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = true + //濡傛灉鏄笂绾ф嫨浼犲叆departIds,鍚﹀垯涓虹┖ + // if(this.model.userIdentity!==2){ + // this.model.departIds=""; + // } + if (this.systemValue == null) { + this.$message.warning('璇烽�夋嫨绯荤粺绫诲瀷!') + return false + } + let obj + if (!this.model.id) { + this.model.id = this.userId + this.model.systemValue = this.systemValue + obj = addEquipment(this.model) + } else { + this.model.systemValue = this.systemValue + obj = editEquipment(this.model, { + id: this.model.id + }) + } + obj.then((res) => { + if (res.success) { + that.$notification.success({ + message: '娑堟伅', + description: res.message + }) + that.$emit('ok') + } else { + that.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }).finally(() => { + that.confirmLoading = false + that.close() + }) + } else { + return false + } + }) + }, + + handleConfirmBlur(e) { + const value = e.target.value + this.confirmDirty = this.confirmDirty || !!value + }, + identityChange(e) { + if (e.target.value === 1) { + this.departIdShow = false + } else { + this.departIdShow = true + } + }, + /** + * 缂栬緫鎴栨煡鐪嬭鎯呮暟鎹椂娓呴櫎鎶藉眽琛ㄥ崟楠岃瘉 + */ + removeValidate() { + this.$refs.form.clearValidate() + } + } + + } +</script> + +<style scoped> + .avatar-uploader > .ant-upload { + width: 104px; + height: 104px; + } + + .ant-upload-select-picture-card i { + font-size: 49px; + color: #999; + } + + .ant-upload-select-picture-card .ant-upload-text { + margin-top: 8px; + color: #666; + } + + .ant-table-tbody .ant-table-row td { + padding-top: 10px; + padding-bottom: 10px; + } + + .drawer-bottom-button { + position: absolute; + bottom: -8px; + width: 100%; + border-top: 1px solid #e8e8e8; + padding: 10px 16px; + text-align: right; + left: 0; + background: #fff; + border-radius: 0 0 2px 2px; + } +</style> \ No newline at end of file -- Gitblit v1.9.3