From 1a73c77e1d14205014f6a77a8954de480d436c0e Mon Sep 17 00:00:00 2001 From: 张诺 <zhang_12370@163.com> Date: 星期四, 05 六月 2025 16:05:31 +0800 Subject: [PATCH] 联调基础模块信息-》供应商-》客户信息-》煤种信息 采购信息 联调 --- src/views/basicInformation/index.vue | 355 +++++++++++++-- src/views/procureMent/index.vue | 113 ++-- src/api/basicInformation/coalQualityMaintenance.js | 9 src/api/procureMent/index.js | 29 + src/views/procureMent/components/ProductionDialog.vue | 8 src/views/basicInformation/mould/coal.vue | 99 +++- src/api/basicInformation/coal.js | 14 src/api/basicInformation/customer.js | 27 + src/api/tool/publicInterface.js | 9 src/views/basicInformation/mould/supplier.vue | 102 ++-- src/components/Table/ETable.vue | 331 +++++++------- src/views/basicInformation/mould/customer.vue | 182 ++++--- 12 files changed, 845 insertions(+), 433 deletions(-) diff --git a/src/api/basicInformation/coal.js b/src/api/basicInformation/coal.js index 9a62ed6..f519cfc 100644 --- a/src/api/basicInformation/coal.js +++ b/src/api/basicInformation/coal.js @@ -1,7 +1,7 @@ -// 鐓よ川缁存姢 +// 鐓ょ淇℃伅 import request from '@/utils/request' -// 鏌ヨ鐓よ川缁存姢鍒楄〃 +// 鏌ヨ鐓ょ淇℃伅鍒楄〃 export function getCoalInfo(query) { return request({ url: '/coalInfo/list', @@ -10,7 +10,7 @@ }) } -// 鏂板鎴栫紪杈戠叅璐ㄧ淮鎶� +// 鏂板鎴栫紪杈戠叅绉嶄俊鎭� export function addOrEditCoalInfo(query) { return request({ url: '/coalInfo/addOrEditCoalInfo', @@ -18,4 +18,12 @@ data: query }) } +// 鍒犻櫎鐓ょ淇℃伅鏁版嵁 +export function delCoalInfo(query) { + return request({ + url: '/coalInfo/delCoalInfo', + method: 'delete', + data: query + }) +} diff --git a/src/api/basicInformation/coalQualityMaintenance.js b/src/api/basicInformation/coalQualityMaintenance.js index 4322044..6fdca98 100644 --- a/src/api/basicInformation/coalQualityMaintenance.js +++ b/src/api/basicInformation/coalQualityMaintenance.js @@ -17,4 +17,11 @@ data: query }) } - +// 鍒犻櫎鐓よ川缁存姢鏁版嵁 +export function delCoalQuality(query){ + return request({ + url: '/coalQuality/delCoalQuality', + method: 'delete', + data: query + }) +} diff --git a/src/api/basicInformation/customer.js b/src/api/basicInformation/customer.js new file mode 100644 index 0000000..968ae42 --- /dev/null +++ b/src/api/basicInformation/customer.js @@ -0,0 +1,27 @@ +// 瀹㈡埛淇℃伅 +import request from '@/utils/request' + +// 鑾峰彇瀹㈡埛淇℃伅鍒楄〃 +export function getCustomerList(query) { + return request({ + url: '/customer/list', + method: 'get', + params: query + }) +} +// 鏂板鎴栫紪杈戝鎴蜂俊鎭垪琛� +export function addOrEditCustomer(query){ + return request({ + url: '/customer/addOrEditCustomer', + method: 'post', + data: query + }) +} +// 鍒犻櫎瀹㈡埛淇℃伅鍒楄〃 +export function delCustomer(query){ + return request({ + url: '/customer/delCustomer', + method: 'delete', + data: query + }) +} diff --git a/src/api/procureMent/index.js b/src/api/procureMent/index.js new file mode 100644 index 0000000..effbecf --- /dev/null +++ b/src/api/procureMent/index.js @@ -0,0 +1,29 @@ +// 閲囪喘绠$悊 +import request from '@/utils/request' + +// 鏌ヨ閲囪喘绠$悊鍒楄〃 +export function purchaseRegistration(query) { + return request({ + url: '/purchaseRegistration/list', + method: 'get', + params: query + }) +} + +// 鏂板缂栬緫閲囪喘绠$悊 +export function addOrEditPR(query) { + return request({ + url: '/purchaseRegistration/addOrEditPR', + method: 'post', + data: query + }) +} +// 鍒犻櫎閲囪喘绠$悊 +export function delPR(query) { + return request({ + url: '/purchaseRegistration/delPR', + method: 'delete', + data: query + }) +} + diff --git a/src/api/tool/publicInterface.js b/src/api/tool/publicInterface.js new file mode 100644 index 0000000..0de140d --- /dev/null +++ b/src/api/tool/publicInterface.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 鑾峰彇璺敱 +export const testUserList = () => { + return request({ + url: '/test/user/list', + method: 'get' + }) +} \ No newline at end of file diff --git a/src/components/Table/ETable.vue b/src/components/Table/ETable.vue index b6bc89e..6fc7f1d 100644 --- a/src/components/Table/ETable.vue +++ b/src/components/Table/ETable.vue @@ -1,178 +1,169 @@ <template> - <el-table - v-loading="loading" - :data="tableData" - :border="border" - :show-selection="showSelection" - :max-height="maxHeight" - :header-cell-style="{ background: '#EBEEF5', color: '#3D3D3D' }" - @selection-change="handleSelectionChange" - @row-click="handleRowClick" - @row-dblclick="handleRowDblClick" - @cell-click="handleCellClick" - :max-width="maxWidth" - @export="handleExport" - > - <el-table-column v-if="showSelection" type="selection" width="55" align="center" /> - <el-table-column v-if="showIndex" label="搴忓彿" type="index" width="60" align="center" /> - <template v-for="col in columns" :key="col.prop"> - <el-table-column - v-bind="col" - :show-overflow-tooltip="shouldShowTooltip(col, tableData)" - :formatter="(row, column, cellValue) => cellValue == null || cellValue === '' ? '--' : cellValue" - align="center" - > - <template v-if="col.slot" #default> - <slot></slot> - </template> - </el-table-column> - </template> - <!-- 鎿嶄綔鍒� --> - <el-table-column v-if="showOperations" :label="operationsLabel" :width="operationsWidth" fixed="right" align="center"> - <template #default="scope"> - <slot name="operations" :row="scope.row"> - <el-button - v-if="operations.includes('edit')" - link - type="primary" - size="small" - @click="handleEdit(scope.row)" - >缂栬緫</el-button> -<!-- <el-button--> -<!-- v-if="operations.includes('delete')"--> -<!-- link--> -<!-- type="danger"--> -<!-- size="small"--> -<!-- @click="handleDelete(scope.row)"--> -<!-- >鍒犻櫎</el-button>--> - </slot> + <el-table v-loading="loading" :data="tableData" :border="border" :show-selection="showSelection" :max-height="maxHeight" + :header-cell-style="{ background: '#EBEEF5', color: '#3D3D3D' }" @selection-change="handleSelectionChange" + @row-click="handleRowClick" @row-dblclick="handleRowDblClick" @cell-click="handleCellClick" :max-width="maxWidth" + @export="handleExport"> + <el-table-column v-if="showSelection" type="selection" width="55" align="center" /> + <el-table-column v-if="showIndex" label="搴忓彿" type="index" width="60" align="center" /> <template + v-for="col in columns" :key="col.prop"> + <el-table-column v-bind="col" :show-overflow-tooltip="shouldShowTooltip(col, tableData)" + :formatter="col.formatter || defaultFormatter" align="center"> + <template v-if="col.slot" #default> + <slot></slot> </template> </el-table-column> - </el-table> - </template> + </template> + <!-- 鎿嶄綔鍒� --> + <el-table-column v-if="showOperations" :label="operationsLabel" :width="operationsWidth" fixed="right" align="center"> + <template #default="scope"> + <slot name="operations" :row="scope.row"> + <el-button v-if="operations.includes('edit')" link type="primary" size="small" + @click="handleEdit(scope.row)">缂栬緫</el-button> + <!-- <el-button--> + <!-- v-if="operations.includes('delete')"--> + <!-- link--> + <!-- type="danger"--> + <!-- size="small"--> + <!-- @click="handleDelete(scope.row)"--> + <!-- >鍒犻櫎</el-button>--> + </slot> + </template> + </el-table-column> + </el-table> +</template> <script setup> - import { defineEmits } from 'vue' - import { ElMessage, ElMessageBox } from 'element-plus' - const props = defineProps({ - // 鏈�澶у搴� - maxWidth: { - type: [String, Number], - default: 'auto' - }, - handleCellClick: { - type: Function, - default: () => {} - }, - handleRowClick: { - type: Function, - default: () => {} - }, - handleExport: { - type: Function, - default: () => {} - }, - handleRowDblClick: { - type: Function, - default: () => {} - }, - // 楂樺害 - maxHeight: { - type: [String, Number], - default: 'auto' - }, - // 鍔犺浇鐘舵�� - loading: { - type: Boolean, - default: false - }, - // border - border: { - type: Boolean, - default: false - }, - // 琛ㄦ牸鏁版嵁 - tableData: { - type: Array, - default: () => [] - }, - // 鏄惁鏄剧ず閫夋嫨鍒� - showSelection: { - type: Boolean, - default: true - }, - // 鏄惁鏄剧ず搴忓彿鍒� - showIndex: { - type: Boolean, - default: true - }, - // 鍒楅厤缃� - columns: { - type: Array, - default: () => [] - }, - // 鏄惁鏄剧ず鎿嶄綔鍒� - showOperations: { - type: Boolean, - default: true - }, - // 鎿嶄綔鍒楁爣绛� - operationsLabel: { - type: String, - default: '鎿嶄綔' - }, - // 鎿嶄綔鍒楀搴� - operationsWidth: { - type: [String, Number], - default: 100 - }, - // 鏄剧ず鍝簺鎿嶄綔鎸夐挳 - operations: { - type: Array, - default: () => ['edit', 'delete', 'export'] - }, - // 鍒犻櫎纭淇℃伅 - deleteConfirmText: { - type: String, - default: '纭鍒犻櫎璇ヨ褰曪紵' - } - }) - // 妫�鏌ュ垪鏄惁闇�瑕佹樉绀簍ooltip - const shouldShowTooltip = (col, data) => { +import { defineEmits } from 'vue' +import { ElMessage, ElMessageBox } from 'element-plus' +const props = defineProps({ + // 鏈�澶у搴� + maxWidth: { + type: [String, Number], + default: 'auto' + }, + handleCellClick: { + type: Function, + default: () => { } + }, + handleRowClick: { + type: Function, + default: () => { } + }, + handleExport: { + type: Function, + default: () => { } + }, + handleRowDblClick: { + type: Function, + default: () => { } + }, + // 楂樺害 + maxHeight: { + type: [String, Number], + default: 'auto' + }, + // 鍔犺浇鐘舵�� + loading: { + type: Boolean, + default: false + }, + // border + border: { + type: Boolean, + default: false + }, + // 琛ㄦ牸鏁版嵁 + tableData: { + type: Array, + default: () => [] + }, + // 鏄惁鏄剧ず閫夋嫨鍒� + showSelection: { + type: Boolean, + default: true + }, + // 鏄惁鏄剧ず搴忓彿鍒� + showIndex: { + type: Boolean, + default: true + }, + // 鍒楅厤缃� + columns: { + type: Array, + default: () => [] + }, + // 鏄惁鏄剧ず鎿嶄綔鍒� + showOperations: { + type: Boolean, + default: true + }, + // 鎿嶄綔鍒楁爣绛� + operationsLabel: { + type: String, + default: '鎿嶄綔' + }, + // 鎿嶄綔鍒楀搴� + operationsWidth: { + type: [String, Number], + default: 100 + }, + // 鏄剧ず鍝簺鎿嶄綔鎸夐挳 + operations: { + type: Array, + default: () => ['edit', 'delete', 'export'] + }, + // 鍒犻櫎纭淇℃伅 + deleteConfirmText: { + type: String, + default: '纭鍒犻櫎璇ヨ褰曪紵' + } +}) +// 妫�鏌ュ垪鏄惁闇�瑕佹樉绀簍ooltip +const shouldShowTooltip = (col, data) => { + // 濡傛灉鍒楅厤缃腑鏄庣‘璁剧疆浜唖howOverflowTooltip锛屼娇鐢ㄨ璁剧疆 + if (col.hasOwnProperty('showOverflowTooltip')) { + return col.showOverflowTooltip; + } // 濡傛灉娌℃湁prop锛岀洿鎺ヨ繑鍥瀎alse if (!col.prop) return false; - // 妫�鏌ヨ鍒楀湪鎵�鏈夋暟鎹腑鏄惁鏈夐潪绌哄�� + // 妫�鏌ヨ鍒楀湪鎵�鏈夋暟鎹腑鏄惁鏈夐潪绌哄�硷紝榛樿鏄剧ずtooltip return data.some(row => row[col.prop] != null && row[col.prop] !== ''); }; + +// 榛樿鐨勬牸寮忓寲鍑芥暟 +const defaultFormatter = (row, column, cellValue) => { + return cellValue == null || cellValue === '' || cellValue === 0 ? '--' : cellValue; +}; + // 澶勭悊閫夋嫨鍙樺寲銆佺紪杈戙�佸垹闄ゅ拰瀵煎嚭鎿嶄綔 - const emit = defineEmits(['selection-change', 'edit', 'delete', 'export']) - const handleSelectionChange = (selection) => { - emit('selection-change', selection) - } - const handleEdit = (row) => { - emit('edit', row) - } - const handleDelete = (row) => { - ElMessageBox.confirm( - props.deleteConfirmText, - '璀﹀憡', - { - confirmButtonText: '纭畾', - cancelButtonText: '鍙栨秷', - type: 'warning' - } - ).then(() => { - emit('delete', row) - }).catch(() => {}) - } - - const handleExport = (row) => { - emit('export', row) - } - </script> +const emit = defineEmits(['selection-change', 'edit', 'delete', 'export']) +const handleSelectionChange = (selection) => { + emit('selection-change', selection) +} +const handleEdit = (row) => { + emit('edit', row) +} +const handleDelete = (row) => { + ElMessageBox.confirm( + props.deleteConfirmText, + '璀﹀憡', + { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + } + ).then(() => { + emit('delete', row) + }).catch(() => { }) +} + +const handleExport = (row) => { + emit('export', row) +} +</script> <style scoped> - .el-table { +.el-table { margin: 20px 0 !important; } @@ -187,4 +178,16 @@ overflow-x: auto; } } - </style> \ No newline at end of file + + /* 鏀寔鍦板潃鍒楁崲琛屾樉绀� */ + :deep(.el-table .cell) { + white-space: normal !important; + word-break: break-all; + line-height: 1.4; + } + + /* 涓哄湴鍧�鍒楄缃渶灏忛珮搴︿互瀹圭撼澶氳鏂囨湰 */ + :deep(.el-table td) { + padding: 8px 0; + } +</style> \ No newline at end of file diff --git a/src/views/basicInformation/index.vue b/src/views/basicInformation/index.vue index e2007e9..48dcbf6 100644 --- a/src/views/basicInformation/index.vue +++ b/src/views/basicInformation/index.vue @@ -1,12 +1,13 @@ <template> - <div> - <el-form :inline="true" :model="queryParams" class="search-form"> - <el-form-item label="渚涘簲鍟嗗悕绉�"> - <el-input v-model="queryParams.searchAll" placeholder="璇疯緭鍏ュ叧閿瘝" clearable /> + <div> <el-form :inline="true" :model="queryParams" class="search-form" > + <el-form-item label="鎼滅储" v-if="tabName === 'supplier' || tabName === 'customer'"> + <el-input v-model="queryParams.searchAll" placeholder="渚涘簲鍟�/璇嗗埆鐮�/璇︾粏鍦板潃" clearable /> </el-form-item> - + <el-form-item label="鎼滅储" v-if="tabName === 'coal' || tabName === 'coalQualityMaintenance'"> + <el-input v-model="queryParams.searchAll" placeholder="璇疯緭鍏ユ悳绱俊鎭�" clearable /> + </el-form-item> <el-form-item> - <el-button type="primary" @click="getList">鏌ヨ</el-button> + <el-button type="primary" @click="search">鏌ヨ</el-button> <el-button @click="resetQuery">閲嶇疆</el-button> </el-form-item> </el-form> @@ -20,13 +21,14 @@ <el-row :gutter="24" class="table-toolbar"> <el-button type="primary" :icon="Plus" @click="handleAdd">鏂板缓</el-button> <el-button type="danger" :icon="Delete" @click="handleDelete">鍒犻櫎</el-button> - <el-button type="info" :icon="Download" @click="handleExport">瀵煎嚭</el-button> + <el-button type="info" :icon="Download" @click="handleExport" v-show="tabName === 'supplier' || tabName === 'customer'">瀵煎嚭</el-button> </el-row> <!-- 琛ㄦ牸缁勪欢 --> <div> <data-table :loading="loading" :table-data="tableData" :columns="columns" @selection-change="handleSelectionChange" @edit="handleEdit" :show-selection="true" :border="true" /> - </div> <pagination v-if="total>0" :page="pageNum" :limit="pageSizes" :total="total" @pagination="handPagination" + </div> + <pagination v-if="total>0" :page="pageNum" :limit="pageSizes" :total="total" @pagination="handPagination" :layout="'total, prev, pager, next, jumper'" /> <Supplier v-if="tabName === 'supplier'" v-model:supplierDialogFormVisible="dialogFormVisible" :form="form" :title="title" @submit="handleSubmit" @beforeClose="handleBeforeClose" @@ -43,7 +45,7 @@ </template> <script setup> -import { ref, reactive, onMounted } from "vue"; +import { ref, reactive, onMounted, computed } from "vue"; import { ElMessage, ElMessageBox } from "element-plus"; import { Plus, Edit, Delete, Download } from "@element-plus/icons-vue"; import DataTable from "@/components/Table/ETable.vue"; @@ -54,8 +56,12 @@ import coalQualityMaintenance from "./mould/coalQualityMaintenance.vue"; const { proxy } = getCurrentInstance() import { getSupply, addOrEditSupply, delSupply } from "@/api/basicInformation/supplier.js"; -import { getCoalInfo, addOrEditCoalInfo } from "@/api/basicInformation/coal.js"; -import { getCoalQuality, addOrEditCoalQuality } from "@/api/basicInformation/coalQualityMaintenance.js"; +import { getCoalInfo, delCoalInfo } from "@/api/basicInformation/coal.js"; +import { getCoalQuality, delCoalQuality } from "@/api/basicInformation/coalQualityMaintenance.js"; +import { testUserList } from "@/api/tool/publicInterface.js"; +import { getAreaOptions } from "@/api/system/area.js"; +import { getCustomerList, delCustomer } from "@/api/basicInformation/customer.js"; + // 寮圭獥 const coalQualityMaintenanceDialogFormVisible = ref(false); const customerDialogFormVisible = ref(false); @@ -65,6 +71,12 @@ const form = ref({}); const title = ref(""); const copyForm = ref({}); +// 鐢ㄦ埛鍒楄〃鏁版嵁 +const userList = ref([]); +// 鐢ㄦ埛鏄犲皠琛紝鐢ㄤ簬蹇�熸煡鎵� +const userMap = ref({}); +// 鍦板潃鏄犲皠琛紝鐢ㄤ簬蹇�熸煡鎵惧湴鍧�鍚嶇О +const addressMap = ref({}); // 褰撳墠鏍囩 const tabName = ref("supplier"); // 鐘舵�佸彉閲� @@ -76,13 +88,73 @@ const selectedRows = ref([]); // 鏌ヨ鍙傛暟 const queryParams = reactive({ - searchText: "", - supplierName: "", - identifyNumber: "", - address: "", }); -onMounted(() => { - handleTabClick({ props: { name: "supplier" } }); +// 鍦板潃閫夋嫨鏁版嵁 +const addressSelectOptions = ref([]); +const fetchAreaOptions = async () => { + addressSelectOptions.value = []; + const res = await getAreaOptions(); + if (res.code === 200) { + addressSelectOptions.value = res.data; + buildAddressMap(res.data); // 鏋勫缓鍦板潃鏄犲皠琛� + } +} + +// 鏋勫缓鍦板潃鏄犲皠琛紝鐢ㄤ簬蹇�熸煡鎵惧湴鍧�鍚嶇О +const buildAddressMap = (areaData) => { + const buildMap = (list, pathList = []) => { + list.forEach(item => { + const currentPath = [...pathList, item.label]; + addressMap.value[item.id] = { + name: item.label, + fullPath: currentPath.join(' / ') + }; + if (item.children && item.children.length > 0) { + buildMap(item.children, currentPath); + } + }); + }; + buildMap(areaData); +}; + +// 鍦板潃鏍煎紡鍖栧嚱鏁� +const formatAddressArray = (addressIds) => { + // 濡傛灉鍦板潃鏄犲皠琛ㄨ繕娌℃湁鍑嗗濂斤紝鏄剧ず -- + if (!addressMap.value || Object.keys(addressMap.value).length === 0||!addressIds || !Array.isArray(addressIds) || addressIds.length === 0 || addressIds.every(id => !id)) { + return '--'; + } + + const addressNames = addressIds.map(id => { + return addressMap.value[id]?.name || '--'; + }); + + // 濡傛灉鎵�鏈夊湴鍧�鍚嶇О閮芥槸 '--'锛屽垯杩斿洖 '--' + if (addressNames.every(name => name === '--')) { + return '--'; + } + + return addressNames.filter(name => name !== '--').join(' / '); +}; +// 鑾峰彇鐢ㄦ埛鍒楄〃鏁版嵁 +const getUserList = async () => { + try { + const res = await testUserList(); + if (res && res.data) { + userList.value = res.data; + userList.value.forEach(user => { + userMap.value[user.userId] = user.username; + }); + console.log('鐢ㄦ埛鏄犲皠琛�:', userMap.value); + } + } catch (error) { + console.error('鑾峰彇鐢ㄦ埛鍒楄〃澶辫触:', error); + } +}; + +onMounted(async () => { + await handleTabClick({ props: { name: "supplier" } }); + await fetchAreaOptions(); // 鍏堣幏鍙栧湴鍧�閫夋嫨鏁版嵁骞舵瀯寤烘槧灏勮〃 + await getUserList(); // 鑾峰彇鐢ㄦ埛鍒楄〃 }); const columns = ref(); // 鏍囩椤垫暟鎹� @@ -96,40 +168,128 @@ const addOrEdit = ref("add"); // 琛ㄦ牸鏁版嵁 const tableData = ref([]); -// 鏌ヨ鏂规硶 -const handleQuery = () => { - -}; // supplier 渚涘簲鍟嗘暟鎹� const supplierColumns = ref([ - { prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minWidth: 200 }, - { prop: "taxpayerId", label: "缁熶竴浜鸿瘑鍒彿", minWidth: 120 }, - { prop: "businessAddress", label: "缁忚惀鍦板潃", minWidth: 150 }, - { prop: "bids", label: "璇︾粏鍦板潃", minWidth: 150 }, + { prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minWidth: 100 }, + { prop: "taxpayerId", label: "缁熶竴浜鸿瘑鍒彿", minWidth: 170 }, { + prop: "bids", + label: "缁忚惀鍦板潃", + minWidth: 150, + showOverflowTooltip: true, + formatter: (row, column, cellValue) => { + let arr = [ + row.bprovinceId, + row.bcityId, + row.bdistrictId, + ] + return formatAddressArray(arr); + } + }, + { prop: "businessAddress", label: "缁忚惀璇︾粏鍦板潃", minWidth: 150 }, { prop: "bankAccount", label: "寮�鎴疯", minWidth: 120 }, { prop: "bankName", label: "閾惰璐﹀彿", minWidth: 150 }, - { prop: "contactPerson", label: "鑱旂郴浜�", minWidth: 100 }, - { prop: "contactAddress", label: "鑱旂郴鍦板潃", minWidth: 150 }, - { prop: "maintainer", label: "缁存姢浜�", minWidth: 100 }, - { prop: "createTime", label: "缁存姢鏃ユ湡", minWidth: 100 }, + { prop: "contactPerson", label: "鑱旂郴浜�", minWidth: 100 }, + { + prop: "cids", + label: "鑱旂郴浜哄湴鍧�", + minWidth: 150, + showOverflowTooltip: true, + formatter: (row, column, cellValue) => { + let arr = [ + row.cprovinceId, + row.ccityId, + row.cdistrictId, + ] + return formatAddressArray(arr); + } + },{ prop: "contactAddress", label: "鑱旂郴浜鸿缁嗗湴鍧�", minWidth: 120 }, + // { + // prop: "maintainerId", + // label: "缁存姢浜�", + // minWidth: 80, + // formatter: (row, column, cellValue) => { + // // 濡傛灉鐢ㄦ埛鏄犲皠琛ㄨ繕娌℃湁鍑嗗濂斤紝鏄剧ず -- + // if (!userMap.value || Object.keys(userMap.value).length === 0) { + // return '--'; + // } + // // 濡傛灉鍊间负绌烘垨null锛屾樉绀� -- + // if (cellValue === null || cellValue === undefined || cellValue === '') { + // return '--'; + // } + // // 濡傛灉鐢ㄦ埛鏄犲皠琛ㄤ腑鏈夊搴旂殑鐢ㄦ埛鍚嶏紝杩斿洖鐢ㄦ埛鍚� + // if (userMap.value[cellValue]) { + // return userMap.value[cellValue]; + // } + // // 濡傛灉娌℃湁鍖归厤鐨勭敤鎴凤紝鏄剧ず -- + // return '--'; + // } + // }, + { prop: "createTime", label: "缁存姢鏃ユ湡", minWidth: 120 }, ]); // customer 瀹㈡埛鏁版嵁 const customerColumns = ref([ - { prop: "customerName", label: "瀹㈡埛鍚嶇О", minWidth: 200 }, - { prop: "identifyNumber", label: "缁熶竴浜鸿瘑鍒彿", minWidth: 120 }, - { prop: "address", label: "缁忚惀鍦板潃", minWidth: 150 }, - { prop: "detailedaddress", label: "璇︾粏鍦板潃", minWidth: 150 }, - { prop: "bank", label: "寮�鎴疯", minWidth: 120 }, - { prop: "bankAccount", label: "閾惰璐﹀彿", minWidth: 150 }, - { prop: "contacts", label: "鑱旂郴浜�", minWidth: 100 }, - { prop: "contactAddress", label: "鑱旂郴鍦板潃", minWidth: 150 }, - { prop: "maintainer", label: "缁存姢浜�", minWidth: 100 }, - { prop: "maintainDate", label: "缁存姢鏃ユ湡", minWidth: 100 }, + { prop: "customerName", label: "瀹㈡埛鍚嶇О", minWidth: 100 }, + { prop: "taxpayerId", label: "缁熶竴浜鸿瘑鍒彿", minWidth: 120 }, +{ + prop: "bids", + label: "缁忚惀鍦板潃", + minWidth: 150, + showOverflowTooltip: true, + formatter: (row, column, cellValue) => { + console.log(row, column, cellValue); + let arr = [ + row.businessProvinceId, + row.businessCityId, + row.businessDistrictId, + ] + return formatAddressArray(arr); + } + }, + { prop: "businessAddress", label: "璇︾粏鍦板潃", minWidth: 150 }, + { prop: "bankName", label: "寮�鎴疯", minWidth: 120 }, + { prop: "bankAccount", label: "閾惰璐﹀彿", minWidth: 150 }, + { prop: "contactPerson", label: "鑱旂郴浜�", minWidth: 100 }, + { prop: "contactPhone", label: "鑱旂郴浜虹數璇�", minWidth: 100 }, +{ + prop: "cids", + label: "鑱旂郴浜哄湴鍧�", + minWidth: 150, + showOverflowTooltip: true, + formatter: (row, column, cellValue) => { + let arr = [ + row.provinceId, + row.cityId, + row.districtId, + ] + return formatAddressArray(arr); + } + }, + { prop: "contactAddress", label: "鑱旂郴浜鸿缁嗗湴鍧�", minWidth: 150 }, + { prop: "updateTime", label: "缁存姢鏃ユ湡", minWidth: 100 }, ]); // coal 鐓ょ鏁版嵁 const coalColumns = ref([ - { prop: "coalName", label: "鐓ょ鍚嶇О", minWidth: 200 }, - { prop: "maintainerId", label: "缁存姢浜�", minWidth: 120 }, + { prop: "coal", label: "鐓ょ鍚嶇О", minWidth: 200 }, { + prop: "maintainerId", + label: "缁存姢浜�", + minWidth: 120, + formatter: (row, column, cellValue) => { + // 濡傛灉鐢ㄦ埛鏄犲皠琛ㄨ繕娌℃湁鍑嗗濂斤紝鏄剧ず -- + if (!userMap.value || Object.keys(userMap.value).length === 0) { + return '--'; + } + // 濡傛灉鍊间负绌烘垨null锛屾樉绀� -- + if (cellValue === null || cellValue === undefined || cellValue === '') { + return '--'; + } + // 濡傛灉鐢ㄦ埛鏄犲皠琛ㄤ腑鏈夊搴旂殑鐢ㄦ埛鍚嶏紝杩斿洖鐢ㄦ埛鍚� + if (userMap.value[cellValue]) { + return userMap.value[cellValue]; + } + // 濡傛灉娌℃湁鍖归厤鐨勭敤鎴凤紝鏄剧ず -- + return '--'; + } + }, { prop: "maintenanceDate", label: "缁存姢鏃ユ湡", minWidth: 150 }, ]); // coalQualityMaintenance 鐓よ川缁存姢鏁版嵁 @@ -181,6 +341,7 @@ queryParams[key] = ""; } }); + getList() }; // 鏂板 const handleAdd = () => { @@ -220,20 +381,20 @@ }; // 鍒嗛〉 const handPagination = (val) => { - console.log("鍒嗛〉鍙傛暟锛�", val); pageNum.value = val.page; pageSizes.value = val.limit; getList(); }; // 鎻愪氦琛ㄥ崟 const handleSubmit = async (val) => { - console.log(val) - if (val.code !== 200) { - ElMessage.error("鎿嶄綔澶辫触锛�" + result.msg); + console.log(val); + if (val.result.code !== 200) { + ElMessage.error("鎿嶄綔澶辫触锛�" + val.result.msg); return; } - ElMessage.success("鏂板鎴愬姛锛�" + result.msg); + ElMessage.success(val.title + val.result.msg); dialogFormVisible.value = false; + getList(); }; const handleDialogFormVisible = (value) => { dialogFormVisible.value = value; @@ -245,6 +406,34 @@ // 缂栬緫 const handleEdit = (row) => { form.value = JSON.parse(JSON.stringify(row)); + if(form.value.bprovinceId && form.value.bdistrictId && form.value.bcityId ){ + form.value.bids = [ + row.bprovinceId, + row.bcityId, + row.bdistrictId, + ]; + } + if(form.value.cprovinceId && form.value.cdistrictId && form.value.ccityId ){ + form.value.cids = [ + row.cprovinceId, + row.ccityId, + row.cdistrictId, + ]; + } + if(form.value.businessCityId && form.value.businessDistrictId && form.value.businessProvinceId) { + form.value.bids = [ + row.businessProvinceId, + row.businessCityId, + row.businessDistrictId, + ]; + } + if(form.value.cityId && form.value.districtId && form.value.provinceId) { + form.value.cids = [ + row.provinceId, + row.cityId, + row.districtId, + ]; + } addOrEdit.value = "edit"; handleAddEdit(tabName.value); }; @@ -258,7 +447,6 @@ selectedRows.value.forEach(element => { return arr.push(element.id); }); - console.log("閫変腑鐨勬暟鎹甀D锛�", arr); ElMessageBox.confirm("纭畾鍒犻櫎閫変腑鐨勬暟鎹悧锛�", "鎻愮ず", { confirmButtonText: "纭畾", cancelButtonText: "鍙栨秷", @@ -266,13 +454,27 @@ }) .then(async () => { try { - let res = await delSupply(arr) - console.log(res) - selectedRows.value = []; - getlist() - } catch { + let res; + if( tabName.value === "supplier" ) { + res = await delSupply(arr); + } else if (tabName.value === "coal") { + res = await delCoalInfo(arr); + } else if (tabName.value === "coalQualityMaintenance") { + res = await delCoalQuality(arr); + } else if( tabName.value === "customer") { + res = await delCustomer(arr); + } + if(res.code !== 200 && res.meg == "鎿嶄綔鎴愬姛") { + ElMessage.error("鍒犻櫎澶辫触锛�" + res.msg); + return; + } + ElMessage.success("鍒犻櫎鎴愬姛"); + await getList(); + } catch (e) { + console.error(e); ElMessage.error("鍒犻櫎澶辫触锛岃绋嶅悗鍐嶈瘯"); - return; + } finally { + selectedRows.value = []; } }).catch(() => { ElMessage.info("宸插彇娑堝垹闄ゆ搷浣�"); @@ -283,11 +485,23 @@ dialogFormVisible.value = false; form.value = {}; }; -const handleExport = (row) => { - proxy.download("system/post/export", { +const handleExport = () => { + if(tabName.value === "supplier") { + Export("/supply/export", "渚涘簲鍟嗕俊鎭�"); + } else if (tabName.value === "customer") { + Export("/customer/export", "瀹㈡埛淇℃伅"); + } else if (tabName.value === "coal") { + Export("/supply/export", "鐓ょ淇℃伅"); + } else if (tabName.value === "coalQualityMaintenance") { + Export("/supply/export", "鐓よ川缁存姢淇℃伅"); + + } +} +const Export = (api,name) => { + proxy.download(api, { ...queryParams.value - }, `post_${new Date().getTime()}.xlsx`) - ElMessage.success("瀵煎嚭鏁版嵁锛�" + row.supplierName); + }, `${name}${new Date().getTime()}.xlsx`) + ElMessage.success("瀵煎嚭鏁版嵁锛�" + name); }; // 閫夋嫨鎺ュ彛 const selectInterface = () => { @@ -298,26 +512,41 @@ searchAll: queryParams.searchAll, }); } else if (tabName.value === "customer") { - return getSupply({ + return getCustomerList({ current: pageNum.value, pageSize: pageSizes.value, - ...queryParams + searchAll: queryParams.searchAll, }); } else if (tabName.value === "coal") { - console.log(addOrEdit.value) - return getCoalInfo(); + return getCoalInfo({ + current: pageNum.value, + pageSize: pageSizes.value, + searchAll: queryParams.searchAll, + }); } else if (tabName.value === "coalQualityMaintenance") { return getCoalQuality({ current: pageNum.value, pageSize: pageSizes.value, - ...queryParams + searchAll: queryParams.searchAll, }); } } +const search = () => { + pageNum.value = 1; // 閲嶇疆椤电爜 + getList(); +}; +// 鑾峰彇鍒楄〃鏁版嵁 const getList = async () => { loading.value = true; + /* if (Object.keys(addressMap.value).length === 0) { + await fetchAreaOptions(); + } */ let { data, code } = await selectInterface() - console.log(data) + if(code !== 200) { + ElMessage.error("鑾峰彇鏁版嵁澶辫触锛�" + data.msg); + loading.value = false; + return; + } tableData.value = data.records; total.value = data.total; loading.value = false; diff --git a/src/views/basicInformation/mould/coal.vue b/src/views/basicInformation/mould/coal.vue index b31e8bb..59eafad 100644 --- a/src/views/basicInformation/mould/coal.vue +++ b/src/views/basicInformation/mould/coal.vue @@ -6,29 +6,32 @@ width="500" :close-on-click-modal="false" :before-close="handleClose" - > - <el-form + > <el-form ref="formRef" style="max-width: 600px; margin: 0 auto" :model="formData" :rules="rules" - label-width="auto" + label-width="120px" > <el-form-item label="鐓ょ鍚嶇О" prop="coal"> <el-input v-model="formData.coal" placeholder="璇疯緭鍏ョ叅绉嶅悕绉�" /> - </el-form-item> - <el-form-item label="缁存姢浜哄鍚�" prop="maintainerId"> + </el-form-item> <el-form-item label="缁存姢浜哄鍚�" prop="maintainerId"> <el-input - v-model="formData.maintainerId" - placeholder="璇疯緭鍏ョ淮鎶や汉濮撳悕" + :value="userStore.name || ''" + placeholder="缁存姢浜哄鍚�" + disabled + /> + </el-form-item> <el-form-item label="缁存姢鏃ユ湡" prop="maintenanceDate"> + <el-input + :value="getCurrentDate()" + placeholder="缁存姢鏃ユ湡" + disabled /> </el-form-item> - <el-form-item label="缁存姢鏃ユ湡" prop="maintenanceDate"> - <el-input v-model="formData.maintenanceDate" placeholder="璇疯緭鍏ラ摱琛岃处鎴�" /> - </el-form-item> + <el-form-item> <el-button type="primary" @click="submitForm"> 纭畾 @@ -42,8 +45,11 @@ </template> <script setup> -import { ref, watch ,defineProps } from 'vue' +import { ref, watch, defineProps, reactive, onMounted } from 'vue' import { addOrEditCoalInfo } from '@/api/basicInformation/coal' +import useUserStore from '@/store/modules/user' + +const userStore = useUserStore() const props = defineProps({ beforeClose: { @@ -64,8 +70,38 @@ }, }) -const emit = defineEmits(['submit', 'handleBeforeClose','update:coalDialogFormVisible']) +// 鍦ㄧ粍浠舵寕杞芥椂鑾峰彇鐢ㄦ埛淇℃伅 +onMounted(async () => { + // 濡傛灉store涓病鏈夌敤鎴蜂俊鎭紝鍒欒幏鍙栫敤鎴蜂俊鎭� + if (!userStore.name) { + try { + await userStore.getInfo() + console.log('鐢ㄦ埛淇℃伅:', { + id: userStore.id, + name: userStore.name, + nickName: userStore.nickName + }) + // 鑷姩濉厖缁存姢浜篒D + if (props.addOrEdit === 'add') { + formData.value.maintainerId = userStore.id + } + } catch (error) { + console.error('鑾峰彇鐢ㄦ埛淇℃伅澶辫触:', error) + } + } else { + console.log('鐢ㄦ埛淇℃伅:', { + id: userStore.id, + name: userStore.name, + nickName: userStore.nickName + }) + // 鑷姩濉厖缁存姢浜篒D + if (props.addOrEdit === 'add') { + formData.value.maintainerId = userStore.id + } + } +}) +const emit = defineEmits(['submit', 'handleBeforeClose','update:coalDialogFormVisible']) // 琛ㄥ崟寮曠敤 const formRef = ref(null) // 琛ㄥ崟鏁版嵁 @@ -76,6 +112,10 @@ // 鐩戝惉澶栭儴浼犲叆鐨勮〃鍗曟暟鎹彉鍖� watch(() => props.form, (newVal) => { formData.value = { ...newVal } + // 濡傛灉鏄柊澧炴ā寮忥紝璁剧疆缁存姢浜� + if (props.addOrEdit === 'add' && userStore.id) { + formData.value.maintainerId = userStore.id + } }, { deep: true }) // 鐩戝惉鍐呴儴寮圭獥鐘舵�佸彉鍖� @@ -88,7 +128,18 @@ if (!formRef.value) return await formRef.value.validate(async (valid, fields) => { if (valid) { - formData.value.maintenanceDate = "2023-10-01" // 绀轰緥鏃ユ湡 + delete formData.value.createTime + delete formData.value.updateTime + delete formData.value.maintainerName // 鍒犻櫎鏄剧ず鐢ㄧ殑瀛楁锛屽彧淇濈暀ID + + // 纭繚maintainerId鏈夊�� + if (!formData.value.maintainerId) { + formData.value.maintainerId = userStore.id + } + + // 璁剧疆缁存姢鏃ユ湡 + formData.value.maintenanceDate = getCurrentDate() + let result = await addOrEditCoalInfo({ ...formData.value, }) @@ -124,21 +175,15 @@ { required: true, message: "璇锋纭緭鍏ョ撼绋庝汉璇嗗埆鍙�", trigger: "blur" }, { min: 17, max: 20, message: "璇疯緭鍏�17-20浣嶇撼绋庝汉璇嗗埆鍙�", trigger: "blur" }, ], - address: [ - { - required: true, - message: "璇烽�夋嫨缁忚惀鍦板潃", - trigger: "change", - }, - ], - bankAccount: [{ required: true, message: "璇疯緭鍏ラ摱琛岃处鎴�", trigger: "blur" }], - bank: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }], - contacts: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }], - contactsPhone: [ - { required: true, message: "璇疯緭鍏ヨ仈绯讳汉", trigger: "blur" }, - { min: 11, max: 11, message: "璇疯緭鍏�11浣嶈仈绯讳汉鐢佃瘽", trigger: "blur" }, - ], }); +// 鑾峰彇褰撳墠鏃ユ湡骞舵牸寮忓寲涓� YYYY-MM-DD +function getCurrentDate() { + const today = new Date(); + const year = today.getFullYear(); + const month = String(today.getMonth() + 1).padStart(2, '0'); // 鏈堜唤浠�0寮�濮� + const day = String(today.getDate()).padStart(2, '0'); + return `${year}-${month}-${day}`; +} </script> <style lang="sass" scoped> diff --git a/src/views/basicInformation/mould/customer.vue b/src/views/basicInformation/mould/customer.vue index 5dbd82f..4053cd7 100644 --- a/src/views/basicInformation/mould/customer.vue +++ b/src/views/basicInformation/mould/customer.vue @@ -1,70 +1,65 @@ <template> - <div> - <el-dialog - v-model="dialogVisible" - :title="title" - width="600" - :close-on-click-modal="false" - :before-close="handleClose" - > - <el-form - ref="formRef" - style="max-width: 400px; margin: 0 auto" - :model="formData" - :rules="rules" - label-width="auto" - > - <el-form-item label="鍗¤儭" prop="supplierName"> - <el-input - v-model="formData.supplierName" - placeholder="璇疯緭鍏ヤ緵璐у晢鍚嶇О" - /> - </el-form-item> - <el-form-item label="绾崇◣浜鸿瘑鍒彿" prop="identifyNumber"> - <el-input - v-model="formData.identifyNumber" - placeholder="璇疯緭鍏ョ撼绋庝汉璇嗗埆鍙�" - /> - </el-form-item> - <el-form-item label="缁忚惀鍦板潃" prop="address"> - <el-cascader - placeholder="璇烽�夋嫨缁忚惀鍦板潃" - size="default" - :options="addressSelectOptions" - v-model="formData.address" - @change="handleChange" - > - </el-cascader> - </el-form-item> - <el-form-item label="璇︾粏鍦板潃" prop="addressDetail"> - <el-input - v-model="formData.addressDetail" - placeholder="璇疯緭鍏ュ鎴疯缁嗗湴鍧�" - /> - </el-form-item> - <el-form-item label="閾惰璐︽埛" prop="bankAccount"> - <el-input v-model="formData.bankAccount" placeholder="璇疯緭鍏ラ摱琛岃处鎴�" /> - </el-form-item> - <el-form-item> - <el-button type="primary" @click="submitForm"> - 纭畾 - </el-button> - <el-button v-if="addOrEdit === 'edit'" @click="resetForm">閲嶇疆</el-button> - <el-button v-if="addOrEdit === 'add'" @click="cancelForm">鍙栨秷</el-button> - </el-form-item> - </el-form> - </el-dialog> - </div> + <div> + <el-dialog v-model="dialogVisible" :title="title" width="600" :close-on-click-modal="false" + :before-close="handleClose"> + <el-form ref="formRef" style="max-width: 400px; margin: 0 auto" :model="formData" :rules="rules" label-width="auto"> + <el-form-item label="瀹㈡埛鍚嶇О" prop="customerName"> + <el-input v-model="formData.customerName" placeholder="璇疯緭鍏ュ鎴峰悕绉�" /> + </el-form-item> + <el-form-item label="绾崇◣浜鸿瘑鍒彿" prop="taxpayerId"> + <el-input v-model="formData.taxpayerId" placeholder="璇疯緭鍏ョ撼绋庝汉璇嗗埆鍙�" /> + </el-form-item> + <el-form-item label="缁忚惀鍦板潃" prop="bids"> + <el-cascader placeholder="璇烽�夋嫨缁忚惀鍦板潃" size="default" :options="addressSelectOptions" v-model="formData.bids" + :props="cascaderProps" @change="handleChange"> + </el-cascader> + </el-form-item> + <el-form-item label="缁忚惀璇︾粏鍦板潃" prop="businessAddress"> + <el-input v-model="formData.businessAddress" placeholder="璇疯緭鍏ョ粡钀ヨ缁嗗湴鍧�" /> + </el-form-item> + <el-form-item label="寮�鎴疯" prop="bankName"> + <el-input v-model="formData.bankName" placeholder="璇疯緭鍏ュ紑鎴疯" /> + </el-form-item> + <el-form-item label="閾惰璐︽埛" prop="bankAccount"> + <el-input v-model="formData.bankAccount" placeholder="璇疯緭鍏ラ摱琛岃处鎴�" /> + </el-form-item> + <el-form-item label="鑱旂郴浜�" prop="contactPerson"> + <el-input v-model="formData.contactPerson" placeholder="璇疯緭鍏ヨ仈绯讳汉" /> + </el-form-item> + <el-form-item label="鑱旂郴鐢佃瘽" prop="contactPhone"> + <el-input v-model="formData.contactPhone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" /> + </el-form-item> + + <el-form-item label="鑱旂郴浜哄湴鍧�" prop="cids"> + <el-cascader placeholder="璇烽�夋嫨鑱旂郴浜哄湴鍧�" size="default" :options="addressSelectOptions" v-model="formData.cids" + :props="cascaderProps" @change="handleChange"> + </el-cascader> + </el-form-item> + <el-form-item label="鑱旂郴浜鸿缁�" prop="contactAddress"> + <el-input v-model="formData.contactAddress" placeholder="璇疯緭鍏ヨ仈绯讳汉璇︾粏鍦板潃" /> + </el-form-item> + <el-form-item> + <el-button type="primary" @click="submitForm"> + 纭畾 + </el-button> + <el-button v-if="addOrEdit === 'edit'" @click="resetForm">閲嶇疆</el-button> + <el-button v-if="addOrEdit === 'add'" @click="cancelForm">鍙栨秷</el-button> + </el-form-item> + </el-form> + </el-dialog> + </div> </template> <script setup> import { ref, watch, onMounted } from "vue"; +import { getAreaOptions } from "@/api/system/area.js"; import addressList from "@/api/jsonApi/areaList.json"; +import { addOrEditCustomer } from "@/api/basicInformation/customer"; const props = defineProps({ beforeClose: { type: Function, - default: () => {}, + default: () => { }, }, form: { type: Object, @@ -79,6 +74,7 @@ default: "", }, }); + const handleChange = (value) => { console.log(value); }; @@ -88,17 +84,25 @@ "update:customerDialogFormVisible", ]); onMounted(() => { - addressSelectOptions.value = mapAddress(addressList); -}); + fetchAreaOptions() +}) + +// 淇敼鏍戝舰閫夋嫨鐨勬槧灏� +const cascaderProps = ref({ + value: 'id', // 鎸囧畾value瀛楁涓篿d + label: 'label', // 鎸囧畾label瀛楁 + children: 'children' // 鎸囧畾瀛愯妭鐐瑰瓧娈� +}) + // 鍦板潃閫夋嫨鏁版嵁 const addressSelectOptions = ref([]); -// 澶勭悊鍦板潃鏁版嵁杞崲 -function mapAddress(list) { - return list.map((item) => ({ - value: item.no, - label: item.name, - children: item.children ? mapAddress(item.children) : undefined, - })); +const fetchAreaOptions = async () => { + addressSelectOptions.value = []; + + const res = await getAreaOptions(); + if (res.code === 200) { + addressSelectOptions.value = res.data; + } } // 琛ㄥ崟寮曠敤 const formRef = ref(null); @@ -118,6 +122,13 @@ }, { deep: true } ); +watch( + () => props.form, + (newVal) => { + formData.value = { ...newVal }; + }, + { deep: true } +); // 鐩戝惉鍐呴儴寮圭獥鐘舵�佸彉鍖� watch( @@ -130,9 +141,32 @@ // 鎻愪氦琛ㄥ崟 const submitForm = async () => { if (!formRef.value) return; - await formRef.value.validate((valid, fields) => { + await formRef.value.validate(async (valid, fields) => { if (valid) { - emit("submit", formData.value); + const obj = ref({}); + if (props.title.includes('鏂板')) { + let result = await addOrEditCustomer({ + ...formData.value, + }) + obj.value = { + title: "鏂板", + ...formData.value, + result + }; + } else { + delete formData.value.createTime + delete formData.value.updateTime + let result = await addOrEditCustomer({ + ...formData.value, + }) + console.log(result); + obj.value = { + title: "缂栬緫", + ...formData.value, + result + }; + } + emit("submit", obj.value); } }); }; @@ -153,10 +187,10 @@ emit("update:customerDialogFormVisible", false); }; const rules = reactive({ - supplierName: [ + customerName: [ { required: true, message: "璇疯緭鍏ヤ緵璐у晢鍚嶇О", trigger: "blur" }, ], - identifyNumber: [ + taxpayerId: [ { required: true, message: "璇锋纭緭鍏ョ撼绋庝汉璇嗗埆鍙�", trigger: "blur" }, { min: 17, max: 20, message: "璇疯緭鍏�17-20浣嶇撼绋庝汉璇嗗埆鍙�", trigger: "blur" }, ], @@ -168,9 +202,11 @@ }, ], bankAccount: [{ required: true, message: "璇疯緭鍏ラ摱琛岃处鎴�", trigger: "blur" }], - bank: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }], - contacts: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }], - contactsPhone: [ + bankName: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }], + contactPerson: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }], + cids: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }], + bids: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }], + contactPhone: [ { required: true, message: "璇疯緭鍏ヨ仈绯讳汉", trigger: "blur" }, { min: 11, max: 11, message: "璇疯緭鍏�11浣嶈仈绯讳汉鐢佃瘽", trigger: "blur" }, ], diff --git a/src/views/basicInformation/mould/supplier.vue b/src/views/basicInformation/mould/supplier.vue index 9819f41..9580ea2 100644 --- a/src/views/basicInformation/mould/supplier.vue +++ b/src/views/basicInformation/mould/supplier.vue @@ -1,39 +1,41 @@ <template> <div> <el-dialog v-model="dialogVisible" :title="title" width="600" :close-on-click-modal="false" - :before-close="handleClose"> - <el-form ref="formRef" style="max-width: 400px; margin: 0 auto" :model="formData" :rules="rules" - label-width="auto"> + :before-close="handleClose"> + <el-form ref="formRef" style="max-width: 400px; margin: 0 auto" :model="formData" :rules="rules" label-width="auto"> <el-form-item label="瀹㈡埛鍚嶇О" prop="supplierName"> - <el-input v-model="formData.supplierName" placeholder="璇疯緭鍏ヤ緵璐у晢鍚嶇О"/> + <el-input v-model="formData.supplierName" placeholder="璇疯緭鍏ヤ緵璐у晢鍚嶇О" /> </el-form-item> <el-form-item label="绾崇◣浜鸿瘑鍒彿" prop="taxpayerId"> - <el-input v-model="formData.taxpayerId" placeholder="璇疯緭鍏ョ撼绋庝汉璇嗗埆鍙�"/> + <el-input v-model="formData.taxpayerId" placeholder="璇疯緭鍏ョ撼绋庝汉璇嗗埆鍙�" /> </el-form-item> <el-form-item label="缁忚惀鍦板潃" prop="bids"> - <el-cascader placeholder="璇烽�夋嫨缁忚惀鍦板潃" size="default" :options="addressSelectOptions" - v-model="formData.bids" - :props="cascaderProps" - @change="handleChange"> + <el-cascader placeholder="璇烽�夋嫨缁忚惀鍦板潃" size="default" :options="addressSelectOptions" v-model="formData.bids" + :props="cascaderProps" @change="handleChange"> </el-cascader> </el-form-item> <el-form-item label="璇︾粏鍦板潃" prop="businessAddress"> - <el-input v-model="formData.businessAddress" placeholder="璇疯緭鍏ュ鎴疯缁嗗湴鍧�"/> + <el-input v-model="formData.businessAddress" placeholder="璇疯緭鍏ュ鎴疯缁嗗湴鍧�" /> </el-form-item> <el-form-item label="寮�鎴疯" prop="bankAccount"> - <el-input v-model="formData.bankAccount" placeholder="璇疯緭鍏ュ紑鎴疯"/> + <el-input v-model="formData.bankAccount" placeholder="璇疯緭鍏ュ紑鎴疯" /> </el-form-item> <el-form-item label="閾惰璐︽埛" prop="bankName"> - <el-input v-model="formData.bankName" placeholder="璇疯緭鍏ラ摱琛岃处鎴�"/> + <el-input v-model="formData.bankName" placeholder="璇疯緭鍏ラ摱琛岃处鎴�" /> </el-form-item> <el-form-item label="鑱旂郴浜�" prop="contactPerson"> - <el-input v-model="formData.contactPerson" placeholder="璇疯緭鍏ヨ仈绯讳汉"/> + <el-input v-model="formData.contactPerson" placeholder="璇疯緭鍏ヨ仈绯讳汉" /> </el-form-item> <el-form-item label="鑱旂郴浜虹數璇�" prop="contactPhone"> - <el-input v-model="formData.contactPhone" placeholder="璇疯緭鍏ヨ仈绯讳汉鐢佃瘽"/> + <el-input v-model="formData.contactPhone" placeholder="璇疯緭鍏ヨ仈绯讳汉鐢佃瘽" /> </el-form-item> - <el-form-item label="鑱旂郴浜哄湴鍧�" prop="contactAddress"> - <el-input v-model="formData.contactAddress" placeholder="璇疯緭鍏ヨ仈绯讳汉鍦板潃"/> + <el-form-item label="鑱旂郴浜哄湴鍧�" prop="cids"> + <el-cascader placeholder="璇烽�夋嫨鑱旂郴浜哄湴鍧�" size="default" :options="addressSelectOptions" v-model="formData.cids" + :props="cascaderProps" @change="handleChange"> + </el-cascader> + </el-form-item> + <el-form-item label="鑱旂郴浜鸿缁嗗湴鍧�" prop="contactAddress"> + <el-input v-model="formData.contactAddress" placeholder="璇疯緭鍏ヨ仈绯讳汉鍦板潃" /> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm"> 纭畾</el-button> @@ -46,9 +48,9 @@ </template> <script setup> -import {ref, watch, defineProps, onMounted} from "vue"; -import {addOrEditSupply} from "@/api/basicInformation/supplier"; -import {getAreaOptions} from "@/api/system/area.js"; +import { ref, watch, defineProps, onMounted } from "vue"; +import { addOrEditSupply } from "@/api/basicInformation/supplier"; +import { getAreaOptions } from "@/api/system/area.js"; const props = defineProps({ beforeClose: { @@ -106,7 +108,7 @@ // 琛ㄥ崟寮曠敤 const formRef = ref(null); // 琛ㄥ崟鏁版嵁 -const formData = ref({...props.form}); +const formData = ref({ ...props.form }); // 寮圭獥鍙鎬� const dialogVisible = defineModel("supplierDialogFormVisible", { required: true, @@ -114,19 +116,19 @@ }); // 鐩戝惉澶栭儴浼犲叆鐨勮〃鍗曟暟鎹彉鍖� watch( - () => props.form, - (newVal) => { - formData.value = {...newVal}; - }, - {deep: true} + () => props.form, + (newVal) => { + formData.value = { ...newVal }; + }, + { deep: true } ); // 鐩戝惉鍐呴儴寮圭獥鐘舵�佸彉鍖� watch( - () => dialogVisible.value, - (newVal) => { - emit("update:supplierDialogFormVisible", newVal); - } + () => dialogVisible.value, + (newVal) => { + emit("update:supplierDialogFormVisible", newVal); + } ); // 澶勭悊鍦板潃閫夋嫨鍙樺寲 const handleChange = (value) => { @@ -137,11 +139,13 @@ if (!formRef.value) return; await formRef.value.validate(async (valid, fields) => { if (valid) { + const obj = ref({}); if (props.title.includes('鏂板')) { let result = await addOrEditSupply({ ...formData.value, }) - let obj = { + obj.value = { + title: "鏂板", ...formData.value, result }; @@ -151,9 +155,13 @@ let result = await addOrEditSupply({ ...formData.value, }) - console.log(result) + obj.value = { + title: "缂栬緫", + ...formData.value, + result + }; } - emit("submit", obj); + emit("submit", obj.value); } }); }; @@ -175,25 +183,25 @@ }; const rules = reactive({ supplierName: [ - {required: true, message: "璇疯緭鍏ヤ緵璐у晢鍚嶇О", trigger: "blur"}, + { required: true, message: "璇疯緭鍏ヤ緵璐у晢鍚嶇О", trigger: "blur" }, ], taxpayerId: [ - {required: true, message: "璇锋纭緭鍏ョ撼绋庝汉璇嗗埆鍙�", trigger: "blur"}, - {min: 17, max: 20, message: "璇疯緭鍏�17-20浣嶇撼绋庝汉璇嗗埆鍙�", trigger: "blur"}, + { required: true, message: "璇锋纭緭鍏ョ撼绋庝汉璇嗗埆鍙�", trigger: "blur" }, + { min: 17, max: 20, message: "璇疯緭鍏�17-20浣嶇撼绋庝汉璇嗗埆鍙�", trigger: "blur" }, ], - bids: [ - { - required: true, - message: "璇烽�夋嫨缁忚惀鍦板潃", - trigger: "change", - }, - ], - bankName: [{required: true, message: "璇疯緭鍏ラ摱琛岃处鎴�", trigger: "blur"}], - bankAccount: [{required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur"}], - contactPerson: [{required: true, message: "鑱旂郴浜�", trigger: "blur"}], + // bids: [ + // { + // required: true, + // message: "璇烽�夋嫨缁忚惀鍦板潃", + // trigger: "change", + // }, + // ], + bankName: [{ required: true, message: "璇疯緭鍏ラ摱琛岃处鎴�", trigger: "blur" }], + bankAccount: [{ required: true, message: "璇疯緭鍏ュ紑鎴疯", trigger: "blur" }], + contactPerson: [{ required: true, message: "鑱旂郴浜�", trigger: "blur" }], contactPhone: [ - {required: true, message: "璇疯緭鍏ヨ仈绯讳汉", trigger: "blur"}, - {min: 11, max: 11, message: "璇疯緭鍏�11浣嶈仈绯讳汉鐢佃瘽", trigger: "blur"}, + { required: true, message: "璇疯緭鍏ヨ仈绯讳汉", trigger: "blur" }, + { min: 11, max: 11, message: "璇疯緭鍏�11浣嶈仈绯讳汉鐢佃瘽", trigger: "blur" }, ], }); </script> diff --git a/src/views/procureMent/components/ProductionDialog.vue b/src/views/procureMent/components/ProductionDialog.vue index 1de700b..547129c 100644 --- a/src/views/procureMent/components/ProductionDialog.vue +++ b/src/views/procureMent/components/ProductionDialog.vue @@ -1,7 +1,7 @@ <template> <div> <el-dialog - v-model="dialogVisible" + v-model="dialogFormVisible" :title="title" width="600" :close-on-click-modal="false" @@ -81,8 +81,8 @@ default: "", }, }); -const emit = defineEmits(["update:visible", "success"]); -const dialogVisible = defineModel("dialogFormVisible", { +const emit = defineEmits(["update:dialogFormVisible", "success"]); +const dialogFormVisible = defineModel("dialogFormVisible", { required: true, type: Boolean, }); @@ -109,7 +109,7 @@ }; // 鍏抽棴寮圭獥 const handleClose = () => { - dialogVisible.value = false; + dialogFormVisible.value = false; console.log(form.value); }; const handleReset = () => { diff --git a/src/views/procureMent/index.vue b/src/views/procureMent/index.vue index 790146a..b04a0f1 100644 --- a/src/views/procureMent/index.vue +++ b/src/views/procureMent/index.vue @@ -58,18 +58,15 @@ :show-selection="true" :border="true" :maxHeight="440" - /> - <pagination + /> <pagination v-if="total>0" - :page-num="pageNum" - :page-size="pageSize" + :page="pageNum" + :limit="pageSize" :total="total" - @pagination="handleQuery" + @pagination="handlePagination" :layout="'total, prev, pager, next, jumper'" /> - </el-card> - <ProductionDialog - v-if="total>0" + </el-card> <ProductionDialog v-model:dialogFormVisible="dialogFormVisible" :form="form" :title="title" @@ -80,14 +77,14 @@ </template> <script setup> -import { ref, reactive, onMounted } from "vue"; +import { ref, reactive, onMounted, getCurrentInstance } from "vue"; import { ElMessage, ElMessageBox } from "element-plus"; import { Plus, Edit, Delete, Download } from "@element-plus/icons-vue"; import DataTable from "@/components/Table/ETable.vue"; import Pagination from "@/components/Pagination"; -import ProductionDialog from "./components/ProductionDialog.vue"; +import ProductionDialog from './components/ProductionDialog.vue'; +import { purchaseRegistration } from "@/api/procureMent"; const { proxy } = getCurrentInstance() - const dialogFormVisible = ref(false); const form = ref({}); const title = ref(""); @@ -103,7 +100,8 @@ supplierName: "", identifyNumber: "", address: "", - + pageNum: 1, + pageSize: 10 }); // 鏄惁缂栬緫 const addOrEdit = ref("add"); @@ -113,21 +111,30 @@ const handleQuery = () => { loading.value = true; // 杩欓噷娣诲姞瀹為檯鐨勬煡璇㈤�昏緫 - setTimeout(() => { - loading.value = false; - }, 500); + getList(); +}; + +// 鍒嗛〉澶勭悊 +const handlePagination = (val) => { + console.log("鍒嗛〉鍙傛暟锛�", val); + pageNum.value = val.page; + pageSize.value = val.limit; + queryParams.pageNum = val.page; + queryParams.pageSize = val.limit; + getList(); }; // supplier 渚涘簲鍟嗘暟鎹� const columns = ref([ { prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minWidth: 200 }, - { prop: "category", label: "鐓ょ", minWidth: 120 }, { prop: "unit", label: "鍗曚綅", minWidth: 150 }, - { prop: "purchaseAmount", label: "閲囪喘鏁伴噺", minWidth: 120 }, - { prop: "priceBeforeTax", label: "鍗曚环(绋庡墠)", minWidth: 150 }, - { prop: "totalBeforeTax", label: "鎬讳环(绋庡墠)", minWidth: 100 }, - { prop: "calorificValue", label: "鐑��", minWidth: 150 }, - { prop: "registrant", label: "鐧昏浜�", minWidth: 100 }, + { prop: "coal", label: "鐓ょ绫诲瀷", minWidth: 120 }, + { prop: "purchaseQuantity", label: "閲囪喘鏁伴噺", minWidth: 100 }, + { prop: "priceIncludingTax", label: "鍗曚环锛堝惈绋庯級", minWidth: 150 }, + { prop: "totalPriceIncludingTax", label: "鎬讳环锛堝惈绋庯級", minWidth: 100 }, + { prop: "taxRate", label: "绋庣巼", minWidth: 100 }, + { prop: "priceExcludingTax", label: "涓嶅惈绋庡崟浠�", minWidth: 100 }, + { prop: "registrantId", label: "鐧昏浜�", minWidth: 100 }, { prop: "registrationDate", label: "鐧昏鏃ユ湡", minWidth: 100 }, ]); @@ -142,6 +149,7 @@ }; // 鏂板 const handleAdd = () => { + console.log("鐐瑰嚮鏂板鎸夐挳"); addOrEdit.value = "add"; handleAddEdit(); }; @@ -154,11 +162,24 @@ // 鎵撳紑寮圭獥 const openDialog = () => { if (addOrEdit.value === "edit") { + // 纭繚澶嶅埗涓�浠芥暟鎹紝閬垮厤鐩存帴寮曠敤 + form.value = JSON.parse(JSON.stringify(form.value)); dialogFormVisible.value = true; return; } - form.value = {}; - dialogFormVisible.value = true; + // 鏂板缓鏃跺垵濮嬪寲琛ㄥ崟 + form.value = { + supplierName: "", + category: "", + unit: "", + purchaseAmount: "", + priceBeforeTax: "", + totalBeforeTax: "", + calorificValue: "", + registrant: "", + registrationDate: new Date().toISOString().split('T')[0] + }; dialogFormVisible.value = true; + console.log("openDialog 璁剧疆 dialogFormVisible =", dialogFormVisible.value); }; // 鎻愪氦琛ㄥ崟 @@ -221,36 +242,26 @@ total.value = tableData.value.length; ElMessage.success("鎿嶄綔鎴愬姛"); }; -const getList = () => { +const getList = async () => { loading.value = true; - setTimeout(() => { - tableData.value = [ - { - supplierName: "涓浗鐭虫补鍖栧伐鑲′唤鏈夐檺鍏徃", - category: "鐓�", - unit: "鍚�", - purchaseAmount: "1000", - priceBeforeTax: "100", - totalBeforeTax: "100000", - calorificValue: "5000", - registrant: "寮犱笁", - registrationDate: "2025-01-01", - }, - { - supplierName: "涓浗涓煶鍖�", - category: "绮惧搧鐓�", - unit: "鍗冨厠", - purchaseAmount: "1000", - priceBeforeTax: "100", - totalBeforeTax: "100000", - calorificValue: "5000", - registrant: "鏉庡洓", - registrationDate: "2025-01-01", - } - ] - total.value = tableData.value.length; + try { + // 浼犻�掑垎椤靛弬鏁� + let res = await purchaseRegistration({ + pageNum: pageNum.value, + pageSize: pageSize.value, + ...queryParams + }); + console.log("API杩斿洖鏁版嵁:", res); + if (res && res.data) { + tableData.value = res.data.records || []; + total.value = res.data.total || 0; + } + } catch (error) { + console.error("鑾峰彇鏁版嵁澶辫触:", error); + ElMessage.error("鑾峰彇鏁版嵁澶辫触"); + } finally { loading.value = false; - }, 500); + } }; getList(); </script> -- Gitblit v1.9.3