From af9dc9ead45ecf668d7c51485e2ef8d2f883a46b Mon Sep 17 00:00:00 2001 From: cuilei <ray_tsu1@163.com> Date: 星期五, 20 六月 2025 11:35:46 +0800 Subject: [PATCH] 设备管理-设备采购计划、附件页签页面 --- src/views/eam/purchase/modules/EamEquipmentPurchasePlanForm.vue | 231 ++++++++++++ src/views/eam/purchase/modules/EamEquipmentPurchasePlanModal.vue | 61 +++ src/views/eam/purchase/modules/EamPurchasePlanAttachmentModal.vue | 143 +++++++ src/views/eam/purchase/EamEquipmentPurchasePlanList.vue | 378 +++++++++++++++++++ src/views/eam/purchase/EamPurchasePlanAttachmentList.vue | 186 +++++++++ src/views/eam/purchase/modules/EamEquipmentPurchasePlanAuditModal.vue | 82 ++++ 6 files changed, 1,081 insertions(+), 0 deletions(-) diff --git a/src/views/eam/purchase/EamEquipmentPurchasePlanList.vue b/src/views/eam/purchase/EamEquipmentPurchasePlanList.vue new file mode 100644 index 0000000..0e6d69d --- /dev/null +++ b/src/views/eam/purchase/EamEquipmentPurchasePlanList.vue @@ -0,0 +1,378 @@ +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="閲囪喘璁″垝缂栫爜"> + <j-input placeholder="璇疯緭鍏ラ噰璐鍒掔紪鐮�" v-model="queryParam.planCode"></j-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="閲囪喘璁″垝鍚嶇О"> + <j-input placeholder="璇疯緭鍏ラ噰璐鍒掑悕绉�" v-model="queryParam.planName"></j-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="绠$悊鍒嗙被"> + <j-dict-select-tag dict-code="equipment_abc_flag" placeholder="璇烽�夋嫨绠$悊鍒嗙被" + v-model="queryParam.equipmentImportance"></j-dict-select-tag> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24" v-if="toggleSearchStatus"> + <a-form-item label="璁″垝鐘舵��"> + <j-dict-select-tag dict-code="equipment_purchase_plan_status" placeholder="璇烽�夋嫨璁″垝鐘舵��" + v-model="queryParam.planStatus"></j-dict-select-tag> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + <a @click="handleToggleSearch" style="margin-left: 8px"> + {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }} + <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> + </a> + </span> + </a-col> + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + <a-button type="primary" icon="download" @click="handleExportXls('璁惧閲囪喘璁″垝')">瀵煎嚭</a-button> + <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> + <a-button type="primary" icon="import">瀵煎叆</a-button> + </a-upload> + <a-button type="primary" icon="download" @click="handleTemplateXlsDownload">瀵煎叆妯℃澘涓嬭浇</a-button> + <!-- 楂樼骇鏌ヨ鍖哄煙 --> +<!-- <j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>--> + <a-dropdown v-if="selectedRowKeys.length > 0"> + <a-menu slot="overlay"> + <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item> + </a-menu> + <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button> + </a-dropdown> + </div> + + <!-- table鍖哄煙-begin --> + <div> + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� + <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + </div> + + <a-table + ref="table" + size="middle" + :scroll="{ x: 'max-content' }" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" + class="j-table-force-nowrap" + @change="handleTableChange" + :customRow="customTableRow" + > + + <template slot="htmlSlot" slot-scope="text"> + <div v-html="text"></div> + </template> + <template slot="imgSlot" slot-scope="text,record"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span> + <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> + </template> + <template slot="fileSlot" slot-scope="text"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span> + <a-button + v-else + :ghost="true" + type="primary" + icon="download" + size="small" + @click="downloadFile(text)"> + 涓嬭浇 + </a-button> + </template> + + <span slot="action" slot-scope="text, record"> + <a @click="handleDetail(record)">璇︽儏</a> + <span v-if="record.planStatus === 'NEWLY'"> + <a-divider type="vertical" /> + <a-popconfirm title="纭畾鎻愪氦鍚�?" @confirm="() => handleSubmit(record.id)"> + <a>鎻愪氦</a> + </a-popconfirm> + </span> + <span v-else-if="record.planStatus === 'PENDING_AUDIT'"> + <a-divider type="vertical" /> + <a @click="handleAudit(record)">瀹℃牳</a> + </span> + <span v-if="record.planStatus === 'NEWLY'"> + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a @click="handleEdit(record)">缂栬緫</a> + </a-menu-item> + <a-menu-item> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + </span> + </a-table> + </div> + + <a-tabs defaultActiveKey="1"> + <a-tab-pane tab="璁惧閲囪喘璁″垝闄勪欢" key="1" > + <eam-purchase-plan-attachment-list ref="eamPurchasePlanAttachmentList"></eam-purchase-plan-attachment-list> + </a-tab-pane> + </a-tabs> + + <eam-equipment-purchase-plan-modal ref="modalForm" @ok="modalFormOk"></eam-equipment-purchase-plan-modal> + <eam-equipment-purchase-plan-audit-modal ref="modalAuditForm" @ok="modalFormOk"></eam-equipment-purchase-plan-audit-modal> + </a-card> +</template> + +<script> + + import '@/assets/less/TableExpand.less' + import { mixinDevice } from '@/utils/mixin' + import { JeecgListMixin } from '@/mixins/JeecgListMixin' + import EamEquipmentPurchasePlanModal from './modules/EamEquipmentPurchasePlanModal' + import EamEquipmentPurchasePlanAuditModal from './modules/EamEquipmentPurchasePlanAuditModal.vue' + import EamPurchasePlanAttachmentList from './EamPurchasePlanAttachmentList.vue' + import OutboundDetailList from '../../tms/OutboundDetailList.vue' + import { getAction, templateXlsDownload } from '../../../api/manage' + + export default { + name: 'EamEquipmentPurchasePlanList', + mixins:[JeecgListMixin, mixinDevice], + components: { + OutboundDetailList, + EamEquipmentPurchasePlanModal, + EamEquipmentPurchasePlanAuditModal, + EamPurchasePlanAttachmentList + }, + data () { + return { + description: 'eam_equipment_purchase_plan绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + }, + fixed: 'left' + }, + { + title:'閲囪喘璁″垝缂栫爜', + align:"center", + dataIndex: 'planCode', + fixed: 'left' + }, + { + title:'閲囪喘璁″垝鍚嶇О', + align:"center", + dataIndex: 'planName', + fixed: 'left' + }, + { + title:'璁″垝鐘舵��', + align:"center", + dataIndex: 'planStatus_dictText' + }, + { + title:'鍨嬪彿', + align:"center", + dataIndex: 'equipmentModel' + }, + { + title:'閲囪喘鏁伴噺', + align:"center", + dataIndex: 'purchaseNumber' + }, + { + title:'棰勮鍗曚环', + align:"center", + dataIndex: 'estimatedUnitPrice' + }, + { + title:'鎬讳环', + align:"center", + dataIndex: 'totalPrice' + }, + { + title:'鍚堝悓鎬婚噾棰�', + align:"center", + dataIndex: 'overallContractAmount' + }, + { + title:'绠$悊鍒嗙被', + align:"center", + dataIndex: 'equipmentImportance' + }, + // { + // title:'璁″垝绫诲埆', + // align:"center", + // dataIndex: 'planCategory' + // }, + { + title:'鐢宠浜�', + align:"center", + dataIndex: 'applicant' + }, + { + title:'鐢宠杞﹂棿', + align:"center", + dataIndex: 'applicantProduction_dictText' + }, + { + title:'璁″垝寮�濮嬫棩鏈�', + align:"center", + dataIndex: 'planStartDate' + }, + { + title:'璁″垝瀹屾垚鏃ユ湡', + align:"center", + dataIndex: 'planEndDate' + }, + { + title:'璁″垝鎻忚堪', + align:"center", + dataIndex: 'planDescription' + }, + { + title:'瀹炴柦鍙婂崗鍔╅儴闂�', + align:"center", + dataIndex: 'relatedDeparts' + }, + { + title:'澶囨敞', + align:"center", + dataIndex: 'remark' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align:"center", + fixed:"right", + width:147, + scopedSlots: { customRender: 'action' } + } + ], + url: { + list: "/eam/eamEquipmentPurchasePlan/list", + submit: "/eam/eamEquipmentPurchasePlan/submit", + audit: "/eam/eamEquipmentPurchasePlan/audit", + delete: "/eam/eamEquipmentPurchasePlan/delete", + deleteBatch: "/eam/eamEquipmentPurchasePlan/deleteBatch", + exportXlsUrl: "/eam/eamEquipmentPurchasePlan/exportXls", + importExcelUrl: "eam/eamEquipmentPurchasePlan/importExcel", + templateXlsDownloadUrl: '瀵煎叆妯℃澘/璁惧閲囪喘璁″垝瀵煎叆妯℃澘_v1.1.xlsx' + + }, + dictOptions:{}, + superFieldList:[], + } + }, + created() { + this.getSuperFieldList(); + }, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + }, + }, + methods: { + handleTemplateXlsDownload() { + templateXlsDownload(this.url.templateXlsDownloadUrl) + }, + handleSubmit(id) { + getAction(this.url.submit,{ id: id }).then((res)=>{ + if(res.success){ + this.$message.success(res.message); + this.loadData(this.queryParam); + }else{ + this.$message.warning(res.message); + } + }) + }, + handleAudit(record) { + this.$refs.modalAuditForm.edit(record); + this.$refs.modalAuditForm.title="瀹℃牳"; + this.$refs.modalAuditForm.disableSubmit = true; + }, + onClearSelected() { + this.selectedRowKeys = []; + this.selectionRows = []; + this.$refs.eamPurchasePlanAttachmentList.dataSource = [] + this.$refs.eamPurchasePlanAttachmentList.onClearSelected() + }, + customTableRow(record) { + return { + style: { + cursor: 'pointer' + }, + on: { + click: () => { + this.onSelectChange([record.id]) + } + } + } + }, + onSelectChange(selectedRowKeys, selectionRows) { + this.selectedRowKeys = selectedRowKeys + this.selectionRows = selectionRows + this.$refs.eamPurchasePlanAttachmentList.queryParam.planId = selectedRowKeys[0] + this.$refs.eamPurchasePlanAttachmentList.dataSource = [] + this.$refs.eamPurchasePlanAttachmentList.onClearSelected() + if (selectedRowKeys.length === 1) { + this.$refs.eamPurchasePlanAttachmentList.loadData() + } + }, + initDictConfig(){ + }, + getSuperFieldList(){ + let fieldList=[]; + fieldList.push({type:'string',value:'planName',text:'閲囪喘璁″垝鍚嶇О',dictCode:''}) + fieldList.push({type:'string',value:'planCode',text:'閲囪喘璁″垝缂栫爜',dictCode:''}) + fieldList.push({type:'string',value:'planStatus',text:'璁″垝鐘舵��',dictCode:''}) + fieldList.push({type:'string',value:'equipmentModel',text:'鍨嬪彿',dictCode:''}) + fieldList.push({type:'int',value:'purchaseNumber',text:'閲囪喘鏁伴噺',dictCode:''}) + fieldList.push({type:'BigDecimal',value:'estimatedUnitPrice',text:'棰勮鍗曚环',dictCode:''}) + fieldList.push({type:'BigDecimal',value:'totalPrice',text:'鎬讳环',dictCode:''}) + fieldList.push({type:'BigDecimal',value:'overallContractAmount',text:'鍚堝悓鎬婚噾棰�',dictCode:''}) + fieldList.push({type:'string',value:'equipmentImportance',text:'ABC鏍囪瘑(绠$悊鍒嗙被)',dictCode:''}) + fieldList.push({type:'string',value:'planCategory',text:'璁″垝绫诲埆',dictCode:''}) + fieldList.push({type:'string',value:'applicant',text:'鐢宠浜�',dictCode:''}) + fieldList.push({type:'string',value:'applicantProduction',text:'鐢宠杞﹂棿',dictCode:''}) + fieldList.push({type:'date',value:'planStartDate',text:'璁″垝寮�濮嬫棩鏈�'}) + fieldList.push({type:'date',value:'planEndDate',text:'璁″垝瀹屾垚鏃ユ湡'}) + fieldList.push({type:'string',value:'planDescription',text:'璁″垝鎻忚堪',dictCode:''}) + fieldList.push({type:'string',value:'relatedDeparts',text:'瀹炴柦鍙婂崗鍔╅儴闂�',dictCode:''}) + fieldList.push({type:'string',value:'remark',text:'澶囨敞',dictCode:''}) + this.superFieldList = fieldList + } + } + } +</script> +<style scoped> + @import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/eam/purchase/EamPurchasePlanAttachmentList.vue b/src/views/eam/purchase/EamPurchasePlanAttachmentList.vue new file mode 100644 index 0000000..b0c59be --- /dev/null +++ b/src/views/eam/purchase/EamPurchasePlanAttachmentList.vue @@ -0,0 +1,186 @@ +<template> + <a-card :bordered="false"> + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + <a-dropdown v-if="selectedRowKeys.length > 0"> + <a-menu slot="overlay"> + <a-menu-item key="1" @click="batchDel"> + <a-icon type="delete" /> + 鍒犻櫎 + </a-menu-item> + </a-menu> + <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 + <a-icon type="down" /> + </a-button> + </a-dropdown> + </div> + + <!-- table鍖哄煙-begin --> + <div> + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a + style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� + <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + </div> + + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + class="j-table-force-nowrap" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" + @change="handleTableChange"> + + <span slot="action" slot-scope="text, record"> + <a @click="handleEdit(record)">缂栬緫</a> + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a @click="handlePreview(record)">棰勮</a> + </a-menu-item> + <a-menu-item> + <a-popconfirm title="纭畾涓嬭浇鏂囦欢鍚�?" @confirm="() => handleDownload(record)"> + <a>涓嬭浇</a> + </a-popconfirm> + </a-menu-item> + <a-menu-item> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + + </a-table> + </div> + <!-- table鍖哄煙-end --> + + <!-- 琛ㄥ崟鍖哄煙 --> + <eam-purchase-plan-attachment-modal ref="modalForm" @ok="modalFormOk" :planId="queryParam.planId"></eam-purchase-plan-attachment-modal> + <lx-file-preview ref="lxFilePreview" :fileUrl="fileUrl"></lx-file-preview> + </a-card> +</template> + +<script> +import '@/assets/less/TableExpand.less' +import EamPurchasePlanAttachmentModal from './modules/EamPurchasePlanAttachmentModal.vue' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import { downFile } from '@api/manage' + +export default { + name: 'EamPurchasePlanAttachmentList', + mixins: [JeecgListMixin], + components: { + EamPurchasePlanAttachmentModal + }, + data() { + return { + description: '璁惧閲囪喘璁″垝闄勪欢绠$悊椤甸潰', + disableMixinCreated: true, + fileUrl: '', + queryParam: {}, + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + } + }, + { + title: '鏂囦欢鍔犲瘑鍚�', + align: 'center', + dataIndex: 'fileEncodeName', + ellipsis: true, + }, + { + title: '鏂囦欢鍚嶇О', + align: 'center', + dataIndex: 'fileName', + ellipsis: true, + }, + { + title: '鏂囦欢璺緞', + align: 'center', + dataIndex: 'filePath', + ellipsis: true, + }, + { + title: '鏂囦欢鍚庣紑鍚�', + align: 'center', + dataIndex: 'fileSuffix' + }, + { + title: '鏂囦欢澶у皬', + align: 'center', + dataIndex: 'fileSize' + }, + { + title: '鎻忚堪', + align: 'center', + dataIndex: 'description', + ellipsis: true, + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align: 'center', + scopedSlots: { customRender: 'action' } + } + ], + url: { + list: '/eam/eamPurchasePlanAttachment/list', + delete: '/eam/eamPurchasePlanAttachment/delete', + deleteBatch: '/eam/eamPurchasePlanAttachment/deleteBatch', + download: '/eam/eamPurchasePlanAttachment/downloadFile', + } + } + }, + computed: { + }, + methods: { + handleDownload(record) { + downFile(this.url.download, { id: record.id }).then((res) => { + if (!res) { + this.$message.warning('鏂囦欢涓嬭浇澶辫触') + return + } else { + let fileName = record.fileName; + if (typeof window.navigator.msSaveBlob !== 'undefined') { + window.navigator.msSaveBlob(new Blob([res]), fileName); + } else { + let url = window.URL.createObjectURL(new Blob([res])); + let link = document.createElement('a'); + link.style.display = 'none'; + link.href = url; + link.setAttribute('download', fileName); + document.body.appendChild(link); + link.click() + document.body.removeChild(link) //涓嬭浇瀹屾垚绉婚櫎鍏冪礌 + window.URL.revokeObjectURL(url) //閲婃斁鎺塨lob瀵硅薄 + } + } + }) + }, + handlePreview: function (record) { + this.$refs.lxFilePreview.preview(record.filePath); + }, + } +} +</script> +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/eam/purchase/modules/EamEquipmentPurchasePlanAuditModal.vue b/src/views/eam/purchase/modules/EamEquipmentPurchasePlanAuditModal.vue new file mode 100644 index 0000000..e95c76d --- /dev/null +++ b/src/views/eam/purchase/modules/EamEquipmentPurchasePlanAuditModal.vue @@ -0,0 +1,82 @@ +<template> + <j-modal + :title="title" + :width="width" + :visible="visible" + switchFullscreen + @ok="handleOk" + :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" + @cancel="handleCancel" + cancelText="鍏抽棴"> + + <template slot="footer"> + <a-button type="primary" @click="audit('COMPLETED')">閫氳繃</a-button> + <a-button type="danger" @click="audit('REJECT')">椹冲洖</a-button> + </template> + + <eam-equipment-purchase-plan-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></eam-equipment-purchase-plan-form> + </j-modal> +</template> + +<script> + + import EamEquipmentPurchasePlanForm from './EamEquipmentPurchasePlanForm' + import { postAction } from '../../../../api/manage' + export default { + name: 'EamEquipmentPurchasePlanModal', + components: { + EamEquipmentPurchasePlanForm + }, + data () { + return { + title:'', + width:1200, + visible: false, + disableSubmit: false, + url: { + audit: "/eam/eamEquipmentPurchasePlan/audit" + } + } + }, + methods: { + audit (status) { + console.log(status) + const id = this.$refs.realForm.model.id + postAction(this.url.audit,{ id: id, planStatus: status }).then((res)=>{ + if (res.success) { + this.$message.success(res.message) + this.submitCallback() + } else { + this.$message.warning(res.message) + } + }) + }, + add () { + this.visible=true + this.$nextTick(()=>{ + this.$refs.realForm.add(); + }) + }, + edit (record) { + this.visible=true + this.$nextTick(()=>{ + this.$refs.realForm.edit(record); + }) + }, + close () { + this.$emit('close'); + this.visible = false; + }, + handleOk () { + this.$refs.realForm.submitForm(); + }, + submitCallback(){ + this.$emit('ok'); + this.visible = false; + }, + handleCancel () { + this.close() + } + } + } +</script> \ No newline at end of file diff --git a/src/views/eam/purchase/modules/EamEquipmentPurchasePlanForm.vue b/src/views/eam/purchase/modules/EamEquipmentPurchasePlanForm.vue new file mode 100644 index 0000000..4a26886 --- /dev/null +++ b/src/views/eam/purchase/modules/EamEquipmentPurchasePlanForm.vue @@ -0,0 +1,231 @@ +<template> + <a-spin :spinning="confirmLoading"> + <j-form-container :disabled="formDisabled"> + <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail"> + <a-row> + <a-col :span="12"> + <a-form-model-item label="閲囪喘璁″垝缂栫爜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planCode"> + <a-input v-model="model.planCode" placeholder="绯荤粺鑷姩鐢熸垚" disabled ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="閲囪喘璁″垝鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planName"> + <a-input v-model="model.planName" placeholder="璇疯緭鍏ラ噰璐鍒掑悕绉�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="12" v-if="disabled"> + <a-form-model-item label="璁″垝鐘舵��" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planStatus"> + <j-dict-select-tag dict-code="equipment_purchase_plan_status" placeholder="璇烽�夋嫨璁″垝鐘舵��" + v-model="model.planStatus" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="鍨嬪彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentModel"> + <a-input v-model="model.equipmentModel" placeholder="璇疯緭鍏ュ瀷鍙�" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="閲囪喘鏁伴噺" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="purchaseNumber"> + <a-input-number v-model="model.purchaseNumber" placeholder="璇疯緭鍏ラ噰璐暟閲�" style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="棰勮鍗曚环" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="estimatedUnitPrice"> + <a-input-number v-model="model.estimatedUnitPrice" placeholder="璇疯緭鍏ラ璁″崟浠�" style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="鎬讳环" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="totalPrice"> + <a-input-number v-model="model.totalPrice" placeholder="璇疯緭鍏ユ�讳环" style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="鍚堝悓鎬婚噾棰�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="overallContractAmount"> + <a-input-number v-model="model.overallContractAmount" placeholder="璇疯緭鍏ュ悎鍚屾�婚噾棰�" style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="绠$悊鍒嗙被" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentImportance"> + <j-dict-select-tag dict-code="equipment_abc_flag" placeholder="璇烽�夋嫨绠$悊鍒嗙被" + v-model="model.equipmentImportance" /> + </a-form-model-item> + </a-col> +<!-- <a-col :span="12">--> +<!-- <a-form-model-item label="璁″垝绫诲埆" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planCategory">--> +<!-- <a-input v-model="model.planCategory" placeholder="璇疯緭鍏ヨ鍒掔被鍒�" ></a-input>--> +<!-- </a-form-model-item>--> +<!-- </a-col>--> + <a-col :span="12"> + <a-form-model-item label="鐢宠浜�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="applicant"> + <j-search-select-tag placeholder="璇烽�夋嫨鐢宠浜�" v-model="model.applicant" dict="sys_user,realname, username, del_flag=0 and status=1"/> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="鐢宠杞﹂棿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="applicantProduction"> + <a-tree-select v-model="model.applicantProduction" + style="width: 100%" + :tree-data="treeData" + :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" + placeholder="璇烽�夋嫨浣跨敤杞﹂棿" + allow-clear + tree-default-expand-all + > + </a-tree-select> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="璁″垝寮�濮嬫棩鏈�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planStartDate"> + <j-date :show-time="true" dateFormat="YYYY-MM-DD HH" placeholder="璇烽�夋嫨璁″垝寮�濮嬫棩鏈�" v-model="model.planStartDate" style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="璁″垝瀹屾垚鏃ユ湡" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planEndDate"> + <j-date :show-time="true" dateFormat="YYYY-MM-DD HH" placeholder="璇烽�夋嫨璁″垝瀹屾垚鏃ユ湡" v-model="model.planEndDate" style="width: 100%" /> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="璁″垝鎻忚堪" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="planDescription"> + <a-textarea v-model="model.planDescription" placeholder="璇疯緭鍏ヨ鍒掓弿杩�" ></a-textarea> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="瀹炴柦鍙婂崗鍔╅儴闂�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="relatedDeparts"> + <a-input v-model="model.relatedDeparts" placeholder="璇疯緭鍏ュ疄鏂藉強鍗忓姪閮ㄩ棬" ></a-input> + </a-form-model-item> + </a-col> + <a-col :span="12"> + <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark"> + <a-textarea v-model="model.remark" placeholder="璇疯緭鍏ュ娉�" ></a-textarea> + </a-form-model-item> + </a-col> + </a-row> + </a-form-model> + </j-form-container> + </a-spin> +</template> + +<script> + + import { httpAction, getAction } from '@/api/manage' + import { validateDuplicateValue } from '@/utils/util' + + export default { + name: 'EamEquipmentPurchasePlanForm', + components: { + }, + props: { + //琛ㄥ崟绂佺敤 + disabled: { + type: Boolean, + default: false, + required: false + } + }, + data () { + return { + model:{ + }, + treeData: [], + labelCol: { + xs: { span: 24 }, + sm: { span: 5 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 }, + }, + confirmLoading: false, + validatorRules: { + planName: [ + { required: true, message: '璇疯緭鍏ラ噰璐鍒掑悕绉�!'}, + ], + equipmentModel: [ + { required: true, message: '璇疯緭鍏ュ瀷鍙�!'}, + ], + purchaseNumber: [ + { required: true, message: '璇疯緭鍏ラ噰璐暟閲�!'}, + ], + estimatedUnitPrice: [ + { required: true, message: '璇疯緭鍏ラ璁″崟浠�!'}, + ], + totalPrice: [ + { required: true, message: '璇疯緭鍏ユ�讳环!'}, + ], + overallContractAmount: [ + { required: true, message: '璇疯緭鍏ュ悎鍚屾�婚噾棰�!'}, + ], + planStartDate: [ + { required: true, message: '璇疯緭鍏ヨ鍒掑紑濮嬫棩鏈�!'}, + ], + planEndDate: [ + { required: true, message: '璇疯緭鍏ヨ鍒掑畬鎴愭棩鏈�!'}, + ], + }, + url: { + add: "/eam/eamEquipmentPurchasePlan/add", + edit: "/eam/eamEquipmentPurchasePlan/edit", + queryById: "/eam/eamEquipmentPurchasePlan/queryById", + loadWorkShopOptions:'/mdc/mdcProduction/loadProductionTreeOptions' + } + } + }, + computed: { + formDisabled(){ + return this.disabled + }, + }, + created () { + //澶囦唤model鍘熷鍊� + this.modelDefault = JSON.parse(JSON.stringify(this.model)); + this.loadWorkShopTree() + }, + methods: { + loadWorkShopTree() { + //鍔犺浇杞﹂棿閫夋嫨鏍� + getAction(this.url.loadWorkShopOptions).then(res => { + if (res.success) { + this.treeData = [...res.result] + }else { + that.$message.warning(res.message) + } + }) + }, + add () { + this.edit(this.modelDefault); + }, + edit (record) { + this.model = Object.assign({}, record); + this.visible = true; + }, + submitForm () { + const that = this; + // 瑙﹀彂琛ㄥ崟楠岃瘉 + 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; + }) + } + + }) + }, + } + } +</script> \ No newline at end of file diff --git a/src/views/eam/purchase/modules/EamEquipmentPurchasePlanModal.vue b/src/views/eam/purchase/modules/EamEquipmentPurchasePlanModal.vue new file mode 100644 index 0000000..72cde25 --- /dev/null +++ b/src/views/eam/purchase/modules/EamEquipmentPurchasePlanModal.vue @@ -0,0 +1,61 @@ +<template> + <j-modal + :title="title" + :width="width" + :visible="visible" + switchFullscreen + @ok="handleOk" + :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" + @cancel="handleCancel" + cancelText="鍏抽棴"> + + <eam-equipment-purchase-plan-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></eam-equipment-purchase-plan-form> + </j-modal> +</template> + +<script> + + import EamEquipmentPurchasePlanForm from './EamEquipmentPurchasePlanForm' + export default { + name: 'EamEquipmentPurchasePlanModal', + components: { + EamEquipmentPurchasePlanForm + }, + data () { + return { + title:'', + width:1200, + visible: false, + disableSubmit: false + } + }, + methods: { + add () { + this.visible=true + this.$nextTick(()=>{ + this.$refs.realForm.add(); + }) + }, + edit (record) { + this.visible=true + this.$nextTick(()=>{ + this.$refs.realForm.edit(record); + }) + }, + close () { + this.$emit('close'); + this.visible = false; + }, + handleOk () { + this.$refs.realForm.submitForm(); + }, + submitCallback(){ + this.$emit('ok'); + this.visible = false; + }, + handleCancel () { + this.close() + } + } + } +</script> \ No newline at end of file diff --git a/src/views/eam/purchase/modules/EamPurchasePlanAttachmentModal.vue b/src/views/eam/purchase/modules/EamPurchasePlanAttachmentModal.vue new file mode 100644 index 0000000..d50a53c --- /dev/null +++ b/src/views/eam/purchase/modules/EamPurchasePlanAttachmentModal.vue @@ -0,0 +1,143 @@ +<template> + <j-modal + :title="title" + :width="800" + :visible="visible" + :confirmLoading="confirmLoading" + switchFullscreen + @ok="handleOk" + @cancel="handleCancel" + cancelText="鍏抽棴"> + + <a-spin :spinning="confirmLoading"> + <a-form-model ref="form" :model="model" :rules="validatorRules"> + <a-form-model-item + label="涓婁紶" + :labelCol="labelCol" + :wrapperCol="wrapperCol" + v-if="!editable" + prop="fileList"> + <lx-upload :returnUrl="false" + :isMultiple="false" + v-model="model.fileList" + biz="test"> + </lx-upload> + </a-form-model-item> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fileName" label="鏂囦欢鍚嶇О" v-if="editable"> + <a-input placeholder="璇疯緭鍏ユ枃浠跺悕绉�" v-model="model.fileName" /> + </a-form-model-item> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="description" label="鎻忚堪"> + <a-textarea placeholder="璇疯緭鍏ユ弿杩�" v-model="model.description" /> + </a-form-model-item> + </a-form-model> + </a-spin> + </j-modal> +</template> + +<script> +import { httpAction } from '@/api/manage' + +export default { + name: "EamPurchasePlanAttachmentModal", + props: { + planId: { + type: String, + required: false, + default: '-1' + } + }, + data () { + return { + title:"鎿嶄綔", + visible: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 }, + }, + + confirmLoading: false, + validatorRules:{ + fileName: [ + { required: true, message: '璇疯緭鍏ユ枃浠跺悕绉�!' } + ] + }, + url: { + add: "/eam/eamPurchasePlanAttachment/add", + edit: "/eam/eamPurchasePlanAttachment/edit", + }, + editable: false, + } + }, + created () { + }, + methods: { + add () { + this.editable = false; + //鍒濆鍖栭粯璁ゅ�� + this.model = {}; + this.visible = true + }, + edit (record) { + this.editable = true; + this.model = Object.assign({}, record) + this.visible = true + }, + close () { + this.$emit('close'); + this.visible = false; + this.$refs.form.clearValidate(); + }, + handleOk () { + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + console.log(this.planId) + if (valid) { + if (this.planId == null || this.planId === '-1') { + this.$message.warning('璇峰厛閫夋嫨閲囪喘璁″垝!'); + return + } + this.confirmLoading = true; + let httpurl = ''; + let method = ''; + if(!this.model.id){ + httpurl+=this.url.add; + method = 'post'; + }else{ + httpurl+=this.url.edit; + method = 'put'; + } + this.model.planId = this.planId; + console.log(this.model) + httpAction(httpurl, this.model, method).then((res)=>{ + if(res.success){ + this.$message.success(res.message); + this.$emit('ok'); + this.close(); + }else{ + this.$message.warning(res.message); + } + }).finally(() => { + this.confirmLoading = false; + }) + }else{ + return false; + } + }) + }, + handleCancel () { + this.close() + }, + + + } + } +</script> + +<style lang="less" scoped> + +</style> \ No newline at end of file -- Gitblit v1.9.3