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