From e74242e9f270404ac3717aeee59e1ab17815eb50 Mon Sep 17 00:00:00 2001 From: Houjie <714924425@qq.com> Date: 星期三, 27 八月 2025 12:06:25 +0800 Subject: [PATCH] 安灯工单:产线多选修改为单选/设备管理模块迁移: 设备台账/设备履历/故障报修/维修工单/保养标准/点检工单/精度参数维护/工艺参数维护/设备附件管理/故障原因维护 (二维码库添加) 设备台账:设备编码重复校验 、自定义控件引用、权限控制 --- src/views/andon/modules/AndonResponseConfigForm.vue | 256 +++++++++++++++++++++++++------------------------- 1 files changed, 129 insertions(+), 127 deletions(-) diff --git a/src/views/andon/modules/AndonResponseConfigForm.vue b/src/views/andon/modules/AndonResponseConfigForm.vue index e9cbdc2..c6e57ec 100644 --- a/src/views/andon/modules/AndonResponseConfigForm.vue +++ b/src/views/andon/modules/AndonResponseConfigForm.vue @@ -1,24 +1,33 @@ <template> <a-spin :spinning="confirmLoading"> - <j-form-container :disabled="formDisabled" class="andon-response-form"> + <j-form-container :disabled="disabled" class="andon-response-form"> <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail"> + <!-- 浜х嚎閫夋嫨 --> <a-row :gutter="24"> <a-col :span="12"> <a-form-model-item label="浜х嚎" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="factoryId"> - <j-select-factory + <a-tree-select :disabled="disabled" v-model="model.factoryId" - :multi="true" - @back="backFactoryInfo" - :backProduction="true" - :treeProductOpera="true" - ></j-select-factory> + :tree-data="factoryTreeData" + :allow-clear="true" + :show-search="false" + :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" + :tree-check-strictly="true" + placeholder="璇烽�夋嫨" + style="width: 100%" + @change="handleFactoryChange" + class="custom-tree-select"> + <template slot="title" slot-scope="item"> + {{ item.title }} + </template> + </a-tree-select> </a-form-model-item> </a-col> </a-row> - + <!-- 瀹夌伅绫诲瀷鍜屽搷搴斾汉閰嶇疆 --> <a-row :gutter="24"> <a-col :span="12"> <a-form-model-item label="瀹夌伅绫诲瀷" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="buttonId"> @@ -30,25 +39,19 @@ </a-form-model-item> </a-col> <a-col :span="12"> - <a-form-model-item label="鍒濆鍝嶅簲浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="firsterResponder"> + <a-form-model-item label="鍒濆鍝嶅簲浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="firstResponder"> <j-select-user-by-dep :multi="false" - v-model="model.firsterResponder" + v-model="model.firstResponder" placeholder="璇烽�夋嫨" ></j-select-user-by-dep> </a-form-model-item> </a-col> </a-row> - <!-- 浜岀骇鍝嶅簲浜� + 涓夌骇鍝嶅簲浜� --> <a-row :gutter="24"> <a-col :span="12"> - <a-form-model-item - label="浜岀骇鍝嶅簲浜�" - :labelCol="labelCol" - :wrapperCol="wrapperCol" - prop="secondResponder" - > + <a-form-model-item label="浜岀骇鍝嶅簲浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="secondResponder"> <j-select-user-by-dep :multi="false" v-model="model.secondResponder" @@ -57,12 +60,7 @@ </a-form-model-item> </a-col> <a-col :span="12"> - <a-form-model-item - label="涓夌骇鍝嶅簲浜�" - :labelCol="labelCol" - :wrapperCol="wrapperCol" - prop="thirdResponder" - > + <a-form-model-item label="涓夌骇鍝嶅簲浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="thirdResponder"> <j-select-user-by-dep :multi="false" v-model="model.thirdResponder" @@ -77,109 +75,117 @@ </template> <script> -import { httpAction } from '@/api/manage' -import JSelectFactory from '@comp/jeecgbiz/JSelectFactory.vue' +import { httpAction, getAction } from '@/api/manage' +import { TreeSelect } from 'ant-design-vue' export default { name: 'AndonResponseConfigForm', components: { - JSelectFactory + 'a-tree-select': TreeSelect }, props: { disabled: { type: Boolean, - default: false, - required: false + default: false } }, - data () { + data() { return { - model: {}, - // 缁熶竴鏍囩鍒楀搴︼紙浜х嚎銆佸畨鐏被鍨嬬瓑鍏辩敤锛� - labelCol: { - xs: { span: 24 }, - sm: { span: 6 }, + model: { + factoryId: '', + buttonId: '', + firstResponder: '', + secondResponder: '', + thirdResponder: '' }, - // 缁熶竴杈撳叆妗嗗垪瀹藉害 - wrapperCol: { - xs: { span: 24 }, - sm: { span: 18 }, - }, + factoryTreeData: [], + labelCol: { xs: { span: 24 }, sm: { span: 6 } }, + wrapperCol: { xs: { span: 24 }, sm: { span: 18 } }, confirmLoading: false, validatorRules: { - factoryId: [ - { required: true, message: '浜х嚎鏄繀閫夐」', trigger: 'change' } - ], - buttonId: [ - { required: true, message: '瀹夌伅绫诲瀷鏄繀閫夐」', trigger: 'change' } - ], - firsterResponder: [ - { required: true, message: '鍒濆鍝嶅簲浜烘槸蹇呴�夐」', trigger: 'change' } - ], - secondResponder: [ - { required: true, message: '浜岀骇鍝嶅簲浜烘槸蹇呴�夐」', trigger: 'change' } - ], - thirdResponder: [ - { required: true, message: '涓夌骇鍝嶅簲浜烘槸蹇呴�夐」', trigger: 'change' } - ], + factoryId: [{ required: true, message: '浜х嚎鏄繀閫夐」', trigger: 'change' }], + buttonId: [{ required: true, message: '瀹夌伅绫诲瀷鏄繀閫夐」', trigger: 'change' }], + firstResponder: [{ required: true, message: '鍒濆鍝嶅簲浜烘槸蹇呴�夐」', trigger: 'change' }], + secondResponder: [{ required: true, message: '浜岀骇鍝嶅簲浜烘槸蹇呴�夐」', trigger: 'change' }], + thirdResponder: [{ required: true, message: '涓夌骇鍝嶅簲浜烘槸蹇呴�夐」', trigger: 'change' }] }, url: { add: "/andonresponseconfig/andonResponseConfig/add", edit: "/andonresponseconfig/andonResponseConfig/edit", - queryById: "/andonresponseconfig/andonResponseConfig/queryById" + factoryTree: "/base/factory/queryTreeList" } } }, - computed: { - formDisabled(){ - return this.disabled - }, - }, - created () { - this.modelDefault = JSON.parse(JSON.stringify(this.model)); + created() { + this.modelDefault = { ...this.model } + this.loadFactoryTree() }, methods: { - backFactoryInfo(info) { - this.model.factoryIds = this.model.factoryId - this.nextFactoryOptions = info.map((item, index, arr) => { - let c = { label: item.text, value: item.value + '' } - return c - }) + loadFactoryTree() { + this.confirmLoading = true + getAction(this.url.factoryTree) + .then(res => { + if (res.success && Array.isArray(res.result)) { + this.factoryTreeData = this.transformData(res.result) + console.log('浜х嚎鏁版嵁鍔犺浇鎴愬姛锛�', this.factoryTreeData) + } else { + this.$message.warning('浜х嚎鏁版嵁涓虹┖鎴栨牸寮忓紓甯�') + this.factoryTreeData = [] + } + }) + .catch(err => { + console.error('浜х嚎鏁版嵁鍔犺浇澶辫触锛�', err) + this.$message.error('鍔犺浇浜х嚎鏁版嵁澶辫触锛岃閲嶈瘯') + }) + .finally(() => { + this.confirmLoading = false + }) }, - add () { - this.edit(this.modelDefault); + + transformData(nodes) { + return nodes.map(node => ({ + key: node.id, + title: node.factoryName, + value: node.id, + children: node.children && node.children.length > 0 ? this.transformData(node.children) : [] + })) }, - edit (record) { - this.model = Object.assign({}, record); - this.visible = true; + + handleFactoryChange(value) { + this.model.factoryId = value }, - submitForm () { - const that = this; + + add() { + this.model = { ...this.modelDefault } + this.visible = true + }, + edit(record) { + this.model = { ...record } + this.visible = true + }, + + submitForm() { this.$refs.form.validate(valid => { if (valid) { - that.confirmLoading = true; - let httpurl = ''; - let method = ''; - if(!this.model.id){ - httpurl+=this.url.add; - method = 'post'; - }else{ - httpurl+=this.url.edit; - method = 'put'; - } - httpAction(httpurl,this.model,method).then((res)=>{ - if(res.success){ - that.$message.success(res.message); - that.$emit('ok'); - }else{ - that.$message.warning(res.message); - } - }).finally(() => { - that.confirmLoading = false; - }) + this.confirmLoading = true + const httpurl = this.model.id ? this.url.edit : this.url.add + const method = this.model.id ? 'put' : 'post' + + httpAction(httpurl, this.model, method) + .then(res => { + if (res.success) { + this.$message.success(res.message) + this.$emit('ok') + } else { + this.$message.warning(res.message) + } + }) + .finally(() => { + this.confirmLoading = false + }) } }) - }, + } } } </script> @@ -187,43 +193,39 @@ <style scoped> .andon-response-form { padding: 24px; - background-color: #fff; + background: #fff; border-radius: 8px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } .a-form-model-item { margin-bottom: 20px !important; } -.a-form-model-item-label { - margin-right: 16px !important; +.ant-tree-select-selection { + min-height: 32px !important; } -.a-input::placeholder, -.a-select-selection-placeholder { - color: #ccc; - font-style: italic; -} -.a-form-model-item-label > span:first-child { - color: #f5222d; - margin-right: 4px; -} -.a-form-footer { - text-align: right; - margin-top: 36px; -} -.a-button-primary { - background-color: #1890ff; - border-color: #1890ff; - transition: all 0.3s ease; -} -.a-button-primary:hover { - background-color: #40a9ff; - border-color: #40a9ff; -} -.a-button-default { - border-color: #d9d9d9; - transition: all 0.3s ease; -} -.a-button-default:hover { - border-color: #bfbfbf; + +/* 鏍戝舰閫夋嫨缁勪欢鑷畾涔夋牱寮� */ +.custom-tree-select { + /* 璋冩暣涓嬫媺鑿滃崟瀹藉害锛屼娇鍏舵洿閫傞厤鍐呭 */ + & .ant-tree-select-dropdown .ant-tree-select-tree { + width: 220px; + } + /* 鑺傜偣 hover 鏁堟灉 */ + & .ant-tree-select-tree-node:hover { + background-color: #e6f7ff !important; + } + /* 鑺傜偣閫変腑鏁堟灉 */ + & .ant-tree-select-tree-node-selected { + background-color: #bae7ff !important; + } + /* 璋冩暣瀛椾綋澶у皬鍜岃楂� */ + & .ant-tree-select-tree-title { + font-size: 14px; + line-height: 24px; + } + /* 璋冩暣缂╄繘锛屼紭鍖栧眰绾ц瑙夋晥鏋� */ + & .ant-tree-select-tree-indent { + width: 16px; + } } </style> \ No newline at end of file -- Gitblit v1.9.3