From e0ed87e28da597222766f101beae1a152068d949 Mon Sep 17 00:00:00 2001 From: 张诺 <zhang_12370@163.com> Date: 星期一, 09 六月 2025 16:32:13 +0800 Subject: [PATCH] 测试基础管理模块、配置方案、配置字段完善 --- src/views/basicInformation/index.vue | 818 ++++++++++++++++++++++--------------- src/views/procureMent/index.vue | 14 src/api/basicInformation/coalFieldMaintenance.js | 28 + src/views/basicInformation/mould/coalMeiZhiZiDuanWeiHu.vue | 71 ++ src/api/basicInformation/coalQualityMaintenance.js | 32 + src/api/basicInformation/coal.js | 2 src/components/Table/ETable.vue | 9 src/views/basicInformation/mould/coalQualityMaintenance.vue | 300 ++++++++++--- 8 files changed, 833 insertions(+), 441 deletions(-) diff --git a/src/api/basicInformation/coal.js b/src/api/basicInformation/coal.js index f519cfc..635c0dd 100644 --- a/src/api/basicInformation/coal.js +++ b/src/api/basicInformation/coal.js @@ -6,7 +6,7 @@ return request({ url: '/coalInfo/list', method: 'get', - params: query + data: query }) } diff --git a/src/api/basicInformation/coalFieldMaintenance.js b/src/api/basicInformation/coalFieldMaintenance.js new file mode 100644 index 0000000..bbfcb39 --- /dev/null +++ b/src/api/basicInformation/coalFieldMaintenance.js @@ -0,0 +1,28 @@ +// 鐓よ川瀛楁缁存姢 +import request from '@/utils/request' + +// 瀵煎嚭涓�涓嚱鏁帮紝鐢ㄤ簬鑾峰彇鐓ょ熆鍒楄〃 +export function coalField(query){ + return request({ + url: '/coalField/list', + method: 'get', + data: query + }) +} +// 鏂板鎴栫紪杈戠叅璐ㄥ瓧娈� +export function addOrEditCoalField(query){ + return request({ + url: '/coalField/addOrEditCoalField', + method: 'post', + data: query + }) +} +// 鍒犻櫎鐓よ川瀛楁淇℃伅 +export function deleteCoalField(query){ + return request({ + url: '/coalField/delCoalInfo', + method: 'delete', + data: query + }) +} + diff --git a/src/api/basicInformation/coalQualityMaintenance.js b/src/api/basicInformation/coalQualityMaintenance.js index 6fdca98..0c94d65 100644 --- a/src/api/basicInformation/coalQualityMaintenance.js +++ b/src/api/basicInformation/coalQualityMaintenance.js @@ -1,27 +1,39 @@ -// 鐓よ川缁存姢 +// 鐓よ川鏂规缁存姢 import request from '@/utils/request' -// 鏌ヨ鐓よ川缁存姢鏁版嵁鍒楄〃 -export function getCoalQuality(query) { +// 瀵煎嚭涓�涓嚱鏁帮紝鐢ㄤ簬鑾峰彇鐓よ鍒掑垪琛� +export function getCoalPlanList(query) { + // 鍙戦�佷竴涓猤et璇锋眰锛岃姹傜殑url涓�'/coalPlan/list'锛岃姹傚弬鏁颁负query return request({ - url: '/coalQuality/list', + url: '/coalPlan/list', method: 'get', params: query }) } -// 鏂板鎴栫紪杈戠叅璐ㄧ淮鎶� -export function addOrEditCoalQuality(query){ +// 瀵煎嚭涓�涓嚱鏁帮紝鐢ㄤ簬鏂板鎴栫紪杈戠叅璁″垝 +export function addOrEditCoalPlan(query) { + // 鍙戦�佷竴涓猵ost璇锋眰锛岃姹傜殑url涓�'/coalPlan/addOrEdit'锛岃姹傚弬鏁颁负query return request({ - url: '/coalQuality/addOrEditCoalQuality', + url: '/coalPlan/addOrEditCoalPlan', method: 'post', data: query }) } -// 鍒犻櫎鐓よ川缁存姢鏁版嵁 -export function delCoalQuality(query){ +// 瀵煎嚭涓�涓嚱鏁癲elCoalPlan锛岀敤浜庡彂閫乨elete璇锋眰锛屽垹闄oalPlan +export function delCoalPlan(query) { + // 鍙戦�佷竴涓猟elete璇锋眰锛岃姹傜殑url涓�'/coalPlan/delCoalPlan'锛岃姹傚弬鏁颁负query return request({ - url: '/coalQuality/delCoalQuality', + url: '/coalPlan/delCoalPlan', method: 'delete', data: query }) } + +// 鑾峰彇鐓よ川瀛楁淇℃伅 +export function getCoalFieldList(query){ + return request({ + url: '/coalField/coalFieldList', + method: 'get', + data: query + }) +} \ No newline at end of file diff --git a/src/components/Table/ETable.vue b/src/components/Table/ETable.vue index 6fc7f1d..7f0f3fc 100644 --- a/src/components/Table/ETable.vue +++ b/src/components/Table/ETable.vue @@ -3,13 +3,12 @@ :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-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 v-if="col.slot" #default="scope"> + <slot :name="col.prop" :row="scope.row" :column="scope.column" :index="scope.$index"></slot> </template> </el-table-column> </template> diff --git a/src/views/basicInformation/index.vue b/src/views/basicInformation/index.vue index 336ae2c..9f5927e 100644 --- a/src/views/basicInformation/index.vue +++ b/src/views/basicInformation/index.vue @@ -1,10 +1,7 @@ <template> <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 label="鎼滅储" v-if="shouldShowSearch"> + <el-input v-model="queryParams.searchAll" :placeholder="searchPlaceholder" clearable /> </el-form-item> <el-form-item> <el-button type="primary" @click="search">鏌ヨ</el-button> @@ -21,12 +18,25 @@ <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" v-show="tabName === 'supplier' || tabName === 'customer'">瀵煎嚭</el-button> - </el-row> - <!-- 琛ㄦ牸缁勪欢 --> + <el-button type="info" :icon="Download" @click="handleExport" v-show="canExport">瀵煎嚭</el-button> + </el-row> <!-- 琛ㄦ牸缁勪欢 --> <div> <data-table :loading="loading" :table-data="tableData" :columns="columns" - @selection-change="handleSelectionChange" @edit="handleEdit" :show-selection="true" :border="true" /> + @selection-change="handleSelectionChange" @edit="handleEdit" :show-selection="true" :border="true"> <!-- 瀛楁鍚嶇О鍒楃殑鑷畾涔夋彃妲� - 鏄剧ず涓烘爣绛� --> + <template v-if="tabName === 'coalQualityMaintenance'" #coalFields="{ row }"> + <template v-if="typeof row.coalFields === 'string' && row.coalFields.includes(',')"> + <el-tag v-for="(field, index) in row.coalFields.split(',')" :key="index" type="primary" size="small" + style="margin-right: 4px; margin-bottom: 2px;"> + {{ getFieldDisplayName(field.trim()) }} + </el-tag> + </template> + <template v-else> + <el-tag type="primary" size="small"> + {{ getFieldDisplayName(row.coalFields) || '--' }} + </el-tag> + </template> + </template> + </data-table> </div> <pagination v-if="total > 0" :page="pageNum" :limit="pageSizes" :total="total" @pagination="handPagination" :layout="'total, prev, pager, next, jumper'" /> @@ -38,20 +48,23 @@ :addOrEdit="addOrEdit" @beforeClose="handleBeforeClose" /> <Coal v-if="tabName === 'coal'" v-model:copyForm="copyForm" v-model:coalDialogFormVisible="dialogFormVisible" :form="form" :title="title" :addOrEdit="addOrEdit" @submit="handleSubmit" /> - <coalQualityMaintenance v-if="tabName === 'coalQualityMaintenance'" + <coalQualityMaintenance v-if="tabName === 'coalQualityMaintenance'" v-model:copyForm="copyForm" v-model:coalQualityMaintenanceDialogFormVisible="dialogFormVisible" :form="form" :title="title" :addOrEdit="addOrEdit" @submit="handleSubmit" /> - <coalMeiZhiZiDuanWeiHu v-if="tabName === 'coalMeiZhiZiDuanWeiHu'" - v-model:coalMaintenanceFieldDialogVisible="dialogFormVisible" :form="form" :title="title" - :addOrEdit="addOrEdit" @submit="handleSubmit" /> + <coalMeiZhiZiDuanWeiHu v-if="tabName === 'coalMeiZhiZiDuanWeiHu'" v-model:copyForm="copyForm" + v-model:coalMaintenanceFieldDialogVisible="dialogFormVisible" :form="form" :title="title" :addOrEdit="addOrEdit" + @submit="handleSubmit" /> </el-card> </div> </template> <script setup> -import { ref, reactive, onMounted, computed } from "vue"; +// ===== 鏍稿績渚濊禆瀵煎叆 ===== +import { ref, reactive, onMounted, computed, 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 Supplier from "./mould/supplier.vue"; @@ -59,54 +72,89 @@ import Coal from "./mould/coal.vue"; import coalQualityMaintenance from "./mould/coalQualityMaintenance.vue"; import coalMeiZhiZiDuanWeiHu from "./mould/coalMeiZhiZiDuanWeiHu.vue"; -const { proxy } = getCurrentInstance() -import { getSupply, addOrEditSupply, delSupply } from "@/api/basicInformation/supplier.js"; + +// ===== API 鏈嶅姟瀵煎叆 ===== +import { getSupply, delSupply } from "@/api/basicInformation/supplier.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"; +import { coalField, deleteCoalField } from "@/api/basicInformation/coalFieldMaintenance.js"; +import { getCoalFieldList, getCoalPlanList } from "@/api/basicInformation/coalQualityMaintenance"; -// 寮圭獥 -const coalMaintenanceFieldDialogVisible = ref(false); -const coalQualityMaintenanceDialogFormVisible = ref(false); -const customerDialogFormVisible = ref(false); -const coalDialogFormVisible = ref(false); -const supplierDialogFormVisible = ref(false); +const { proxy } = getCurrentInstance(); + +// ===== 鍝嶅簲寮忕姸鎬佺鐞� ===== + +// 寮圭獥鎺у埗鐘舵�� const dialogFormVisible = ref(false); const form = ref({}); const title = ref(""); const copyForm = ref({}); -// 鐢ㄦ埛鍒楄〃鏁版嵁 +const addOrEdit = ref("add"); + +// 鏁版嵁缂撳瓨鏄犲皠 const userList = ref([]); -// 鐢ㄦ埛鏄犲皠琛紝鐢ㄤ簬蹇�熸煡鎵� -const userMap = ref({}); -// 鍦板潃鏄犲皠琛紝鐢ㄤ簬蹇�熸煡鎵惧湴鍧�鍚嶇О -const addressMap = ref({}); -// 褰撳墠鏍囩 +const userMap = ref({}); // 鐢ㄦ埛ID -> 鐢ㄦ埛鍚嶆槧灏勮〃 +const addressMap = ref({}); // 鍦板潃ID -> 鍦板潃淇℃伅鏄犲皠琛� +const coalFieldList = ref([]); // 鐓よ川瀛楁鍒楄〃 + +// 椤甸潰鐘舵�佹帶鍒� const tabName = ref("supplier"); -// 鐘舵�佸彉閲� const loading = ref(false); -const total = ref(0); +const activeTab = ref("supplier"); + +// 鍒嗛〉鐘舵�佺鐞� const pageNum = ref(1); const pageSizes = ref(10); -const activeTab = ref("supplier"); +const total = ref(0); + +// 琛ㄦ牸鐘舵�佺鐞� const selectedRows = ref([]); +const tableData = ref([]); +const columns = ref(); + // 鏌ヨ鍙傛暟 -const queryParams = reactive({ -}); +const queryParams = reactive({}); + // 鍦板潃閫夋嫨鏁版嵁 const addressSelectOptions = ref([]); -const fetchAreaOptions = async () => { - addressSelectOptions.value = []; - const res = await getAreaOptions(); - if (res.code === 200) { - addressSelectOptions.value = res.data; - buildAddressMap(res.data); // 鏋勫缓鍦板潃鏄犲皠琛� - } -} -// 鏋勫缓鍦板潃鏄犲皠琛紝鐢ㄤ簬蹇�熸煡鎵惧湴鍧�鍚嶇О +// ===== 閰嶇疆甯搁噺 ===== + +// 鏍囩椤甸厤缃� +const tabs = reactive([ + { name: "supplier", label: "渚涘簲鍟嗕俊鎭�" }, + { name: "customer", label: "瀹㈡埛淇℃伅" }, + { name: "coal", label: "鐓ょ淇℃伅" }, + { name: "coalQualityMaintenance", label: "鐓よ川鏂规" }, + { name: "coalMeiZhiZiDuanWeiHu", label: "鐓よ川瀛楁" } +]); + +// ===== 宸ュ叿鍑芥暟 ===== + +/** + * 鑾峰彇鍦板潃閫夋嫨鏁版嵁骞舵瀯寤烘槧灏勮〃 + * @description 寮傛鑾峰彇鍦板潃鏁版嵁锛屾瀯寤哄揩閫熸煡鎵剧殑鏄犲皠琛� + */ +const fetchAreaOptions = async () => { + try { + addressSelectOptions.value = []; + const res = await getAreaOptions(); + if (res.code === 200) { + addressSelectOptions.value = res.data; + buildAddressMap(res.data); + } + } catch (error) { + console.error('鑾峰彇鍦板潃閫夐」澶辫触:', error); + } +}; + +/** + * 鏋勫缓鍦板潃鏄犲皠琛� + * @param {Array} areaData - 鍦板潃鏁版嵁 + * @description 閫掑綊鏋勫缓鍦板潃鏄犲皠琛紝鏀寔澶氱骇鍦板潃鏌ユ壘 + */ const buildAddressMap = (areaData) => { const buildMap = (list, pathList = []) => { list.forEach(item => { @@ -123,22 +171,32 @@ buildMap(areaData); }; -// 鍦板潃鏍煎紡鍖栧嚱鏁� +/** + * 鏍煎紡鍖栧湴鍧�鏁扮粍涓烘樉绀哄瓧绗︿覆 + * @param {Array} addressIds - 鍦板潃ID鏁扮粍 + * @returns {string} 鏍煎紡鍖栧悗鐨勫湴鍧�瀛楃涓� + * @description 灏嗗湴鍧�ID鏁扮粍杞崲涓哄彲璇荤殑鍦板潃瀛楃涓� + */ const formatAddressArray = (addressIds) => { - // 濡傛灉鍦板潃鏄犲皠琛ㄨ繕娌℃湁鍑嗗濂斤紝鏄剧ず -- - if (!addressMap.value || Object.keys(addressMap.value).length === 0 || !addressIds || !Array.isArray(addressIds) || addressIds.length === 0 || addressIds.every(id => !id)) { + 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 || '--'; - }); - // 濡傛灉鎵�鏈夊湴鍧�鍚嶇О閮芥槸 '--'锛屽垯杩斿洖 '--' + + const addressNames = addressIds.map(id => addressMap.value[id]?.name || '--'); + if (addressNames.every(name => name === '--')) { return '--'; } + return addressNames.filter(name => name !== '--').join(' / '); }; -// 鑾峰彇鐢ㄦ埛鍒楄〃鏁版嵁 + +/** + * 鑾峰彇鐢ㄦ埛鍒楄〃鏁版嵁骞舵瀯寤烘槧灏勮〃 + * @description 鑾峰彇鐢ㄦ埛鏁版嵁骞舵瀯寤篒D鍒扮敤鎴峰悕鐨勬槧灏勫叧绯� + */ const getUserList = async () => { try { const res = await testUserList(); @@ -152,39 +210,93 @@ console.error('鑾峰彇鐢ㄦ埛鍒楄〃澶辫触:', error); } }; -onMounted(async () => { - await handleTabClick({ props: { name: "supplier" } }); - await fetchAreaOptions(); // 鍏堣幏鍙栧湴鍧�閫夋嫨鏁版嵁骞舵瀯寤烘槧灏勮〃 - await getUserList(); // 鑾峰彇鐢ㄦ埛鍒楄〃 + +/** + * 鑾峰彇鐓よ川瀛楁鏁版嵁 + * @description 鑾峰彇鐓よ川瀛楁鍒楄〃锛岀敤浜庡瓧娈靛悕绉板尮閰� + */ +const coalFieldData = async () => { + try { + const { data, code } = await getCoalFieldList(); + if (code === 200) { + coalFieldList.value = data; + } + } catch (error) { + console.error('鑾峰彇鐓よ川瀛楁鏁版嵁澶辫触:', error); + } +}; + +/** + * 鏍规嵁瀛楁ID鑾峰彇瀛楁鏄剧ず鍚嶇О + * @param {string|number} fieldId - 瀛楁ID + * @returns {string} 瀛楁鏄剧ず鍚嶇О + * @description 閫氳繃瀛楁ID鍖归厤瀵瑰簲鐨勫瓧娈靛悕绉� + */ +const getFieldDisplayName = (fieldId) => { + if (!fieldId) return '--'; + + const numId = parseInt(fieldId); + const matchedField = coalFieldList.value.find(item => item.id === numId); + + return matchedField ? matchedField.fieldName : numId; +}; + +// ===== 璁$畻灞炴�� ===== + +/** + * 褰撳墠鏍囩椤垫槸鍚︽敮鎸佸鍑哄姛鑳� + */ +const canExport = computed(() => { + return ['supplier', 'customer'].includes(tabName.value); }); -const columns = ref(); -// 鏍囩椤垫暟鎹� -const tabs = reactive([ - { name: "supplier", label: "渚涘簲鍟嗕俊鎭�" }, - { name: "customer", label: "瀹㈡埛淇℃伅" }, - { name: "coal", label: "鐓ょ淇℃伅" }, - { name: "coalQualityMaintenance", label: "鐓よ川鏂规" }, - { name: "coalMeiZhiZiDuanWeiHu", label: "鐓よ川瀛楁" } -]); -// 鏄惁缂栬緫 -const addOrEdit = ref("add"); -// 琛ㄦ牸鏁版嵁 -const tableData = ref([]); -// supplier 渚涘簲鍟嗘暟鎹� + +/** + * 鎼滅储妗嗗崰浣嶇鏂囨湰 + */ +const searchPlaceholder = computed(() => { + const placeholderMap = { + supplier: "渚涘簲鍟�/璇嗗埆鐮�/璇︾粏鍦板潃", + customer: "渚涘簲鍟�/璇嗗埆鐮�/璇︾粏鍦板潃", + coal: "璇疯緭鍏ユ悳绱俊鎭�", + coalQualityMaintenance: "璇疯緭鍏ユ悳绱俊鎭�", + coalMeiZhiZiDuanWeiHu: "璇疯緭鍏ユ悳绱俊鎭�" + }; + return placeholderMap[tabName.value] || "璇疯緭鍏ユ悳绱俊鎭�"; +}); + +/** + * 鏄惁鏄剧ず鎼滅储妗� + */ +const shouldShowSearch = computed(() => { + return ['supplier', 'customer', 'coal', 'coalQualityMaintenance','coalMeiZhiZiDuanWeiHu'].includes(tabName.value); +}); + +/** + * 褰撳墠閫変腑琛屾暟閲� + */ +const selectedCount = computed(() => selectedRows.value.length); + +/** + * 鏄惁鏈夐�変腑鐨勮 + */ +const hasSelectedRows = computed(() => selectedCount.value > 0); + +// ===== 琛ㄦ牸鍒楅厤缃� ===== + +/** + * 渚涘簲鍟嗚〃鏍煎垪閰嶇疆 + */ const supplierColumns = ref([ { prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minWidth: 100 }, - { prop: "taxpayerId", label: "缁熶竴浜鸿瘑鍒彿", minWidth: 170 }, { + { 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); + formatter: (row) => { + const addressIds = [row.bprovinceId, row.bcityId, row.bdistrictId]; + return formatAddressArray(addressIds); } }, { prop: "businessAddress", label: "缁忚惀璇︾粏鍦板潃", minWidth: 150 }, @@ -196,39 +308,18 @@ label: "鑱旂郴浜哄湴鍧�", minWidth: 150, showOverflowTooltip: true, - formatter: (row, column, cellValue) => { - let arr = [ - row.cprovinceId, - row.ccityId, - row.cdistrictId, - ] - return formatAddressArray(arr); + formatter: (row) => { + const addressIds = [row.cprovinceId, row.ccityId, row.cdistrictId]; + return formatAddressArray(addressIds); } - }, { 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: "contactAddress", label: "鑱旂郴浜鸿缁嗗湴鍧�", minWidth: 120 }, { prop: "createTime", label: "缁存姢鏃ユ湡", minWidth: 120 }, ]); -// customer 瀹㈡埛鏁版嵁 + +/** + * 瀹㈡埛琛ㄦ牸鍒楅厤缃� + */ const customerColumns = ref([ { prop: "customerName", label: "瀹㈡埛鍚嶇О", minWidth: 100 }, { prop: "taxpayerId", label: "缁熶竴浜鸿瘑鍒彿", minWidth: 120 }, @@ -237,13 +328,9 @@ label: "缁忚惀鍦板潃", minWidth: 150, showOverflowTooltip: true, - formatter: (row, column, cellValue) => { - let arr = [ - row.businessProvinceId, - row.businessCityId, - row.businessDistrictId, - ] - return formatAddressArray(arr); + formatter: (row) => { + const addressIds = [row.businessProvinceId, row.businessCityId, row.businessDistrictId]; + return formatAddressArray(addressIds); } }, { prop: "businessAddress", label: "璇︾粏鍦板潃", minWidth: 150 }, @@ -256,149 +343,189 @@ label: "鑱旂郴浜哄湴鍧�", minWidth: 150, showOverflowTooltip: true, - formatter: (row, column, cellValue) => { - let arr = [ - row.provinceId, - row.cityId, - row.districtId, - ] - return formatAddressArray(arr); + formatter: (row) => { + const addressIds = [row.provinceId, row.cityId, row.districtId]; + return formatAddressArray(addressIds); } }, { prop: "contactAddress", label: "鑱旂郴浜鸿缁嗗湴鍧�", minWidth: 150 }, { prop: "updateTime", label: "缁存姢鏃ユ湡", minWidth: 100 }, ]); -// coal 鐓ょ鏁版嵁 + +/** + * 鐓ょ琛ㄦ牸鍒楅厤缃� + */ const coalColumns = ref([ - { prop: "coal", label: "鐓ょ鍚嶇О", minWidth: 200 }, { + { 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 '--'; + return userMap.value[cellValue] || '--'; } }, { prop: "maintenanceDate", label: "缁存姢鏃ユ湡", minWidth: 150 }, ]); -// coalQualityMaintenance 鐓よ川缁存姢鏁版嵁 + +/** + * 鐓よ川鏂规琛ㄦ牸鍒楅厤缃� + */ const coalQualityMaintenanceColumns = ref([ - { prop: "coal", label: "鐓ょ鍚嶇О", minWidth: 200 }, - { prop: "totalMoisture", label: "鍏ㄦ按鍚噺鐧惧垎姣� (%)", minWidth: 200 }, - { prop: "analysisMoisture", label: "鍒嗘瀽姘村惈閲忕櫨鍒嗘瘮 (%)", minWidth: 200 }, - { prop: "volatileMatter", label: "鎸ュ彂鍒嗙櫨鍒嗘瘮 (%)", minWidth: 100 }, - { prop: "sulfurContent", label: "纭惈閲忕櫨鍒嗘瘮 (%)", minWidth: 100 }, - { prop: "contacts", label: "鍥哄畾纰崇櫨鍒嗘瘮 (%)", minWidth: 100 }, - { prop: "contactAddress", label: "楂樹綅鍙戠儹閲�", minWidth: 100 }, - { prop: "maintainer", label: "浣庝綅鍙戠儹閲�", minWidth: 100 }, + { prop: "plan", label: "鏂规鍚嶇О", minWidth: 100 }, + { + prop: "coalFields", + label: "瀛楁鍚嶇О", + minWidth: 200, + showOverflowTooltip: true, + slot: true, + formatter: (row, column, cellValue) => { + if (Array.isArray(cellValue)) { + return cellValue.map(item => item); + } + return cellValue || '--'; + } + }, + { prop: "schemeDesc", label: "瀛楁鎻忚堪", minWidth: 100 }, ]); + +/** + * 鐓よ川瀛楁琛ㄦ牸鍒楅厤缃� + */ const coalMeiZhiZiDuanWeiHuColumns = ref([ { prop: "fieldName", label: "瀛楁鍚嶇О", minWidth: 200 }, { prop: "fieldDescription", label: "瀛楁鎻忚堪", minWidth: 200 }, ]); -// 鏍囩椤电偣鍑� +// ===== 浜嬩欢澶勭悊鍑芥暟 ===== + +/** + * 鏍囩椤靛垏鎹簨浠跺鐞� + * @param {Object} tab - 鏍囩椤靛璞� + * @description 澶勭悊鏍囩椤靛垏鎹紝閲嶇疆琛ㄥ崟鍜岀姸鎬侊紝鍔犺浇瀵瑰簲鏁版嵁 + */ const handleTabClick = (tab) => { + // 閲嶇疆琛ㄥ崟鍜岀姸鎬� form.value = {}; addOrEdit.value = "add"; loading.value = true; tabName.value = tab.props.name; tableData.value = []; - switch (tabName.value) { - case "supplier": + + // 鏍规嵁鏍囩椤电被鍨嬭缃搴旂殑鍒楅厤缃� + const tabConfig = { + supplier: () => { columns.value = supplierColumns.value; - dialogFormVisible.value = supplierDialogFormVisible.value; - getList("supplier"); - break; - case "customer": + getList(); + }, + customer: () => { columns.value = customerColumns.value; - dialogFormVisible.value = customerDialogFormVisible.value; - getList("customer"); - break; - case "coal": + getList(); + }, + coal: () => { columns.value = coalColumns.value; - dialogFormVisible.value = coalDialogFormVisible.value; - getList("coal"); - break; - case "coalQualityMaintenance": + getList(); + }, + coalQualityMaintenance: () => { columns.value = coalQualityMaintenanceColumns.value; - dialogFormVisible.value = coalQualityMaintenanceDialogFormVisible.value; - getList("coalQualityMaintenance"); - break; - case "coalMeiZhiZiDuanWeiHu": + getList(); + coalFieldData(); // 鍔犺浇鐓よ川瀛楁鏁版嵁 + }, + coalMeiZhiZiDuanWeiHu: () => { columns.value = coalMeiZhiZiDuanWeiHuColumns.value; - dialogFormVisible.value = coalMaintenanceFieldDialogVisible.value; - getList("coalMeiZhiZiDuanWeiHu"); - break; + getList(); + } + }; + + // 鎵ц瀵瑰簲鐨勯厤缃嚱鏁� + const configFn = tabConfig[tabName.value]; + if (configFn) { + configFn(); } }; -// 閲嶇疆鏌ヨ + +/** + * 閲嶇疆鏌ヨ鏉′欢 + * @description 閲嶇疆鏌ヨ鍙傛暟骞堕噸鏂板姞杞芥暟鎹� + */ const resetQuery = () => { Object.keys(queryParams).forEach((key) => { if (key !== "pageNum" && key !== "pageSizes") { queryParams[key] = ""; } }); - getList() + getList(); }; -// 鏂板 + +/** + * 鎼滅储鍔熻兘 + * @description 閲嶇疆椤电爜骞舵墽琛屾悳绱� + */ +const search = () => { + pageNum.value = 1; + getList(); +}; + +/** + * 鏂板鎸夐挳鐐瑰嚮澶勭悊 + */ const handleAdd = () => { addOrEdit.value = "add"; handleAddEdit(tabName.value); }; -// 鏂板缂栬緫 -const handleAddEdit = (tabName) => { - addOrEdit.value == "add" ? title.value = "鏂板" : title.value = "缂栬緫"; - if (tabName === "supplier") { - dialogFormVisible.value = true; - title.value = title.value + "渚涘簲鍟嗕俊鎭�"; - openDialog(); - } else if (tabName === "customer") { - dialogFormVisible.value = true; - title.value = title.value + "瀹㈡埛淇℃伅"; - openDialog(); - } else if (tabName === "coal") { - dialogFormVisible.value = true; - title.value = title.value + "鐓ょ淇℃伅"; - openDialog(); - } else if (tabName === "coalQualityMaintenance") { - dialogFormVisible.value = true; - title.value = title.value + "鐓よ川鏂规缁存姢"; - openDialog(); - } else if (tabName === "coalMeiZhiZiDuanWeiHu") { - dialogFormVisible.value = true; - title.value = title.value + "鐓よ川瀛楁缁存姢"; - openDialog(); - } + +/** + * 鏂板/缂栬緫寮圭獥澶勭悊 + * @param {string} currentTabName - 褰撳墠鏍囩椤靛悕绉� + * @description 鏍规嵁鏍囩椤电被鍨嬭缃脊绐楁爣棰樺苟鎵撳紑寮圭獥 + */ +const handleAddEdit = (currentTabName) => { + const actionText = addOrEdit.value === "add" ? "鏂板" : "缂栬緫"; + + const tabTitleMap = { + supplier: "渚涘簲鍟嗕俊鎭�", + customer: "瀹㈡埛淇℃伅", + coal: "鐓ょ淇℃伅", + coalQualityMaintenance: "鐓よ川鏂规缁存姢", + coalMeiZhiZiDuanWeiHu: "鐓よ川瀛楁缁存姢" + }; + + title.value = `${actionText}${tabTitleMap[currentTabName] || ''}`; + openDialog(); }; -// 鎵撳紑寮圭獥 + +/** + * 鎵撳紑寮圭獥 + * @description 鏍规嵁缂栬緫鐘舵�佸喅瀹氭槸鍚﹀鍒惰〃鍗曟暟鎹� + */ const openDialog = () => { if (addOrEdit.value === "edit") { copyForm.value = JSON.parse(JSON.stringify(form.value)); - dialogFormVisible.value = true; - return; + } else { + form.value = {}; } - form.value = {}; dialogFormVisible.value = true; }; -// 鍒嗛〉 + +/** + * 鍒嗛〉澶勭悊 + * @param {Object} val - 鍒嗛〉鍙傛暟瀵硅薄 + */ const handPagination = (val) => { pageNum.value = val.page; pageSizes.value = val.limit; getList(); }; -// 鎻愪氦琛ㄥ崟 + +/** + * 琛ㄥ崟鎻愪氦澶勭悊 + * @param {Object} val - 鎻愪氦缁撴灉瀵硅薄 + */ const handleSubmit = async (val) => { if (val.result.code !== 200) { ElMessage.error("鎿嶄綔澶辫触锛�" + val.result.msg); @@ -408,179 +535,210 @@ dialogFormVisible.value = false; getList(); }; + +/** + * 寮圭獥鏄剧ず鐘舵�佸鐞� + * @param {boolean} value - 鏄剧ず鐘舵�� + */ const handleDialogFormVisible = (value) => { dialogFormVisible.value = value; }; -// 閫夋嫨琛� + +/** + * 琛ㄦ牸琛岄�夋嫨澶勭悊 + * @param {Array} selection - 閫変腑鐨勮鏁版嵁 + */ const handleSelectionChange = (selection) => { selectedRows.value = selection; }; -// 缂栬緫 +/** + * 缂栬緫鎸夐挳鐐瑰嚮澶勭悊 + * @param {Object} row - 琛屾暟鎹� + * @description 澶勭悊缂栬緫鎿嶄綔锛屾瀯寤哄湴鍧�鏁扮粍骞舵墦寮�缂栬緫寮圭獥 + */ 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, - ]; + 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, - ]; + 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, - ]; + 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, - ]; + form.value.cids = [row.provinceId, row.cityId, row.districtId]; } + addOrEdit.value = "edit"; handleAddEdit(tabName.value); }; -// 鎵归噺鍒犻櫎 -const handleDelete = () => { + +/** + * 鎵归噺鍒犻櫎澶勭悊 + * @description 鎵归噺鍒犻櫎閫変腑鐨勮褰� + */ +const handleDelete = async () => { if (selectedRows.value.length === 0) { ElMessage.warning("璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁"); return; } - let arr = reactive([]); - selectedRows.value.forEach(element => { - return arr.push(element.id); - }); - ElMessageBox.confirm("纭畾鍒犻櫎閫変腑鐨勬暟鎹悧锛�", "鎻愮ず", { - confirmButtonText: "纭畾", - cancelButtonText: "鍙栨秷", - type: "warning", - }) - .then(async () => { - try { - 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("鍒犻櫎澶辫触锛岃绋嶅悗鍐嶈瘯"); - } finally { - selectedRows.value = []; - } - }).catch(() => { - ElMessage.info("宸插彇娑堝垹闄ゆ搷浣�"); + + const deleteIds = selectedRows.value.map(item => item.id); + + try { + await ElMessageBox.confirm("纭畾鍒犻櫎閫変腑鐨勬暟鎹悧锛�", "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", }); -} -// 鍏抽棴寮圭獥 + + const deleteApiMap = { + supplier: delSupply, + coal: delCoalInfo, + coalQualityMaintenance: () => { throw new Error('delCoalQuality API not imported'); }, + customer: delCustomer, + coalMeiZhiZiDuanWeiHu: deleteCoalField + }; + + const deleteApi = deleteApiMap[tabName.value]; + if (!deleteApi) { + ElMessage.error("鍒犻櫎鎺ュ彛鏈厤缃�"); + return; + } + + const res = await deleteApi(deleteIds); + + if (res.code !== 200 && res.msg !== "鎿嶄綔鎴愬姛") { + ElMessage.error("鍒犻櫎澶辫触锛�" + res.msg); + return; + } + + ElMessage.success("鍒犻櫎鎴愬姛"); + await getList(); + } catch (error) { + if (error.message !== 'cancel') { + console.error('鍒犻櫎鎿嶄綔澶辫触:', error); + ElMessage.error("鍒犻櫎澶辫触锛岃绋嶅悗鍐嶈瘯"); + } else { + ElMessage.info("宸插彇娑堝垹闄ゆ搷浣�"); + } + } finally { + selectedRows.value = []; + } +}; + +/** + * 鍏抽棴寮圭獥澶勭悊 + */ const handleBeforeClose = () => { dialogFormVisible.value = false; form.value = {}; }; -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 handleExport = () => { + const exportConfig = { + supplier: { api: "/supply/export", name: "渚涘簲鍟嗕俊鎭�" }, + customer: { api: "/customer/export", name: "瀹㈡埛淇℃伅" }, + coal: { api: "/supply/export", name: "鐓ょ淇℃伅" }, + coalQualityMaintenance: { api: "/supply/export", name: "鐓よ川缁存姢淇℃伅" } + }; + + const config = exportConfig[tabName.value]; + if (config) { + exportData(config.api, config.name); } -} -const Export = (api, name) => { - proxy.download(api, { - ...queryParams.value - }, `${name}${new Date().getTime()}.xlsx`) +}; + +/** + * 瀵煎嚭鏁版嵁 + * @param {string} api - 瀵煎嚭鎺ュ彛璺緞 + * @param {string} name - 瀵煎嚭鏂囦欢鍚嶅墠缂� + */ +const exportData = (api, name) => { + proxy.download(api, { ...queryParams }, `${name}${new Date().getTime()}.xlsx`); ElMessage.success("瀵煎嚭鏁版嵁锛�" + name); }; -// 閫夋嫨鎺ュ彛 +// ===== 鏁版嵁鑾峰彇鍑芥暟 ===== + +/** + * 鏍规嵁褰撳墠鏍囩椤甸�夋嫨瀵瑰簲鐨凙PI鎺ュ彛 + * @returns {Promise} API璋冪敤Promise + * @description 缁熶竴鐨勬帴鍙i�夋嫨鍑芥暟锛屾牴鎹爣绛鹃〉绫诲瀷璋冪敤瀵瑰簲鐨凙PI + */ const selectInterface = () => { - if (tabName.value === "supplier") { - return getSupply({ - current: pageNum.value, - pageSize: pageSizes.value, - searchAll: queryParams.searchAll, - }); - } else if (tabName.value === "customer") { - return getCustomerList({ - current: pageNum.value, - pageSize: pageSizes.value, - searchAll: queryParams.searchAll, - }); - } else if (tabName.value === "coal") { - return getCoalInfo({ - current: pageNum.value, - pageSize: pageSizes.value, - searchAll: queryParams.searchAll, - }); - } else if (tabName.value === "coalQualityMaintenance") { - return getCoalQuality({ - current: pageNum.value, - pageSize: pageSizes.value, - searchAll: queryParams.searchAll, - }); - } else if (tabName.value === "coalMeiZhiZiDuanWeiHu") { - return { - code: 200, - data: { - records: [ - { fieldName: "瀛楁1", fieldDescription: "鎻忚堪1" }, - { fieldName: "瀛楁2", fieldDescription: "鎻忚堪2" }, - { fieldName: "瀛楁3", fieldDescription: "鎻忚堪3" } - ], - total: 10 - } - }; - // return getCoalQuality({ - // current: pageNum.value, - // pageSize: pageSizes.value, - // searchAll: queryParams.searchAll, - // }); - } -} -const search = () => { - pageNum.value = 1; // 閲嶇疆椤电爜 - getList(); + const apiParams = { + current: pageNum.value, + pageSize: pageSizes.value, + searchAll: queryParams.searchAll, + }; + + const apiMap = { + supplier: () => getSupply(apiParams), + customer: () => getCustomerList(apiParams), + coal: () => getCoalInfo(apiParams), + coalQualityMaintenance: () => getCoalPlanList(apiParams), + coalMeiZhiZiDuanWeiHu: () => coalField(apiParams) + }; + + const apiFunction = apiMap[tabName.value]; + return apiFunction ? apiFunction() : Promise.reject(new Error('鏈壘鍒板搴旂殑API鎺ュ彛')); }; -// 鑾峰彇鍒楄〃鏁版嵁 + +/** + * 鑾峰彇鍒楄〃鏁版嵁 + * @description 缁熶竴鐨勬暟鎹幏鍙栧嚱鏁帮紝澶勭悊鍔犺浇鐘舵�佸拰閿欒澶勭悊 + */ const getList = async () => { - loading.value = true; - /* if (Object.keys(addressMap.value).length === 0) { - await fetchAreaOptions(); - } */ - let { data, code } = await selectInterface() - console.log("鑾峰彇鏁版嵁锛�", code, data); - if (code !== 200) { - ElMessage.error("鑾峰彇鏁版嵁澶辫触锛�" + data.msg); + try { + loading.value = true; + const { data, code } = await selectInterface(); + + if (code !== 200) { + ElMessage.error("鑾峰彇鏁版嵁澶辫触锛�" + (data?.msg || '鏈煡閿欒')); + return; + } + + tableData.value = data.records || []; + total.value = data.total || 0; + } catch (error) { + console.error('鑾峰彇鍒楄〃鏁版嵁澶辫触:', error); + ElMessage.error("鑾峰彇鏁版嵁澶辫触锛岃绋嶅悗鍐嶈瘯"); + } finally { loading.value = false; - return; } - tableData.value = data.records; - total.value = data.total; - loading.value = false; }; + +// ===== 鐢熷懡鍛ㄦ湡閽╁瓙 ===== + +/** + * 缁勪欢鎸傝浇鍚庣殑鍒濆鍖栨搷浣� + */ +onMounted(async () => { + try { + // 骞惰鎵ц鍒濆鍖栨搷浣� + await Promise.all([ + handleTabClick({ props: { name: "supplier" } }), + fetchAreaOptions(), + getUserList() + ]); + } catch (error) { + console.error('缁勪欢鍒濆鍖栧け璐�:', error); + ElMessage.error("椤甸潰鍒濆鍖栧け璐ワ紝璇峰埛鏂伴噸璇�"); + } +}); </script> <style scoped> diff --git a/src/views/basicInformation/mould/coalMeiZhiZiDuanWeiHu.vue b/src/views/basicInformation/mould/coalMeiZhiZiDuanWeiHu.vue index 22d4448..a7dcbdb 100644 --- a/src/views/basicInformation/mould/coalMeiZhiZiDuanWeiHu.vue +++ b/src/views/basicInformation/mould/coalMeiZhiZiDuanWeiHu.vue @@ -19,18 +19,17 @@ v-model="formData.fieldName" placeholder="璇疯緭鍏ュ瓧娈靛悕绉�" /> + </el-form-item> <el-form-item label="瀛楁鎻忚堪" prop="fieldDescription"> + <el-input v-model="formData.fieldDescription" type="textarea" placeholder="璇疯緭鍏ュ瓧娈垫弿杩�" /> </el-form-item> - <el-form-item label="Activity form" props="dielDescription"> - <el-input v-model="formData.fieldDescription" type="textarea" placeholder="璇疯緭鍏ュ瓧娈垫弿杩�" /> - </el-form-item> - <el-form-item> - <el-button type="primary" @click="submitForm"> 纭畾 </el-button> + <el-form-item class="dialog-footer"> <el-button v-if="addOrEdit === 'edit'" @click="resetForm" >閲嶇疆</el-button > <el-button v-if="addOrEdit === 'add'" @click="cancelForm" >鍙栨秷</el-button > + <el-button type="primary" @click="submitForm"> 纭畾 </el-button> </el-form-item> </el-form> </el-dialog> @@ -38,13 +37,9 @@ </template> <script setup> -import { ref, watch, defineProps, onMounted } from "vue"; -import addressList from "@/api/jsonApi/areaList.json"; +import { ref, reactive, watch, defineProps } from "vue"; +import { addOrEditCoalField } from "@/api/basicInformation/coalFieldMaintenance.js"; const props = defineProps({ - beforeClose: { - type: Function, - default: () => {}, - }, form: { type: Object, default: () => ({}), @@ -58,10 +53,20 @@ default: "", }, }); - +const copyForm = defineModel("copyForm", { + required: true, + type: Object, +}); +// 琛ㄥ崟寮曠敤 +const formRef = ref(); const emit = defineEmits(["submit", "handleBeforeClose"]); // 琛ㄥ崟鏁版嵁 const formData = ref({ ...props.form }); + +// 鐩戝惉props.form鐨勫彉鍖栵紝鏇存柊formData +watch(() => props.form, (newForm) => { + formData.value = { ...newForm }; +}, { deep: true, immediate: true }); // 寮圭獥鍙鎬� const dialogVisible = defineModel("coalMaintenanceFieldDialogVisible", { required: true, @@ -72,6 +77,32 @@ if (!formRef.value) return; await formRef.value.validate(async (valid, fields) => { if (valid) { + const obj = ref({}); + + console.log("鎻愪氦琛ㄥ崟", formData.value); + if (props.title.includes('鏂板')) { + let result = await addOrEditCoalField( + {...formData.value} + ,) + console.log(result); + obj.value = { + title: "鏂板", + ...formData.value, + result + }; + } else { + delete formData.value.createTime + delete formData.value.updateTime + let result = await addOrEditCoalField({ + ...formData.value, + }) + obj.value = { + title: "缂栬緫", + ...formData.value, + result + }; + } + emit("submit", obj.value); } }); }; @@ -82,9 +113,9 @@ }; // 閲嶇疆琛ㄥ崟 const resetForm = () => { - - -}; + if (!formRef.value) return + formData.value = JSON.parse(JSON.stringify(copyForm.value)); +} // 鍏抽棴寮圭獥 const handleClose = () => { // 瑙﹀彂鐖剁粍浠剁殑鍏抽棴鍑芥暟 @@ -92,10 +123,16 @@ emit("update:coalMaintenanceFieldDialogVisible", false); }; const rules = reactive({ - coal: [ + fieldName: [ { required: true, message: "璇疯緭鍏ョ叅绉嶅悕绉�", trigger: "blur" }, ], }); </script> -<style lang="sass" scoped> +<style lang="scss" scoped> +.dialog-footer { + display: flex; + justify-content: flex-end; + margin-top: 20px; + flex-direction: column; +} </style> \ No newline at end of file diff --git a/src/views/basicInformation/mould/coalQualityMaintenance.vue b/src/views/basicInformation/mould/coalQualityMaintenance.vue index d1bb443..4f3dd9f 100644 --- a/src/views/basicInformation/mould/coalQualityMaintenance.vue +++ b/src/views/basicInformation/mould/coalQualityMaintenance.vue @@ -1,121 +1,265 @@ +<!-- 鐓よ川鏂规缁存姢寮圭獥缁勪欢 --> <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="schemeName"> - <el-input v-model="formData.schemeName" placeholder="璇疯緭鍏ユ柟妗堝悕绉�" prop="schemeName" /> - </el-form-item> - <el-form-item label="鏂规绫诲瀷" props="fieldName"> - <el-select v-model="formData.fieldName" placeholder="Select" style="width: 240px" clearable multiple> - <template #label="{ label }"> - <span>{{ label }}: </span> - <span style="font-weight: bold">{{ value }}</span> - </template> - <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" /> - </el-select> - </el-form-item> - <template #footer> - <el-form-item label="瀛楁鎻忚堪" prop="fieldDescription"> - <el-input v-model="formData.fieldDescription" type="textarea" placeholder="璇疯緭鍏ュ瓧娈垫弿杩�" /> - </el-form-item> + <el-dialog + v-model="dialogVisible" + :title="title" + width="600" + :close-on-click-modal="false" + :before-close="handleClose" + > + <!-- 琛ㄥ崟鍖哄煙 --> + <el-form + ref="formRef" + :model="formData" + :rules="formRules" + label-width="120px" + style="max-width: 400px; margin: 0 auto" + > + <!-- 鏂规鍚嶇О杈撳叆妗� --> + <el-form-item label="鐓よ川鏂规鍚嶇О" prop="plan"> + <el-input + v-model="formData.plan" + placeholder="璇疯緭鍏ョ叅璐ㄦ柟妗堝悕绉�" + clearable + /> + </el-form-item> - </template> - <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> + <!-- 鐓よ川瀛楁澶氶�変笅鎷夋 --> + <el-form-item label="鐓よ川鏂规绫诲瀷" prop="coalFields"> + <el-select + v-model="formData.coalFields" + placeholder="璇烽�夋嫨鐓よ川鏂规绫诲瀷" + style="width: 100%" + clearable + multiple + > + <el-option + v-for="item in fieldOptions" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + + <!-- 鏂规鎻忚堪鏂囨湰鍩� --> + <el-form-item label="鐓よ川鏂规鎻忚堪" prop="schemeDesc"> + <el-input + v-model="formData.schemeDesc" + type="textarea" + placeholder="璇疯緭鍏ョ叅璐ㄦ柟妗堟弿杩�" + :rows="3" + /> + </el-form-item> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <el-form-item class="dialog-footer"> + <el-button v-if="isEditMode" @click="resetForm">閲嶇疆</el-button> + <el-button v-else @click="cancelForm">鍙栨秷</el-button> + <el-button type="primary" @click="submitForm">纭畾</el-button> + </el-form-item> + </el-form> + </el-dialog> </template> - <script setup> -import { ref, watch, defineProps, onMounted } from "vue"; -import addressList from "@/api/jsonApi/areaList.json"; +import { ref, reactive, watch, computed, onMounted } from "vue"; +import { getCoalFieldList, addOrEditCoalPlan } from "@/api/basicInformation/coalQualityMaintenance"; + +// ===== 缁勪欢灞炴�у畾涔� ===== const props = defineProps({ + /** 鍏抽棴寮圭獥鍓嶇殑鍥炶皟鍑芥暟 */ beforeClose: { type: Function, - default: () => { }, + default: () => {}, }, + /** 琛ㄥ崟鏁版嵁 */ form: { type: Object, default: () => ({}), }, + /** 鎿嶄綔绫诲瀷锛歛dd-鏂板锛宔dit-缂栬緫 */ addOrEdit: { type: String, default: "add", }, + /** 寮圭獥鏍囬 */ title: { type: String, default: "", }, }); -const options = [ - { - value: 'Option1', - label: 'Label1', - }, - { - value: 'Option2', - label: 'Label2', - }, - { - value: 'Option3', - label: 'Label3', - }, - { - value: 'Option4', - label: 'Label4', - }, - { - value: 'Option5', - label: 'Label5', - }, -] + +// ===== 浜嬩欢瀹氫箟 ===== const emit = defineEmits(["submit", "handleBeforeClose"]); -// 琛ㄥ崟鏁版嵁 -const formData = ref({ ...props.form }); -// 寮圭獥鍙鎬� +// ===== 鍝嶅簲寮忔暟鎹� ===== +/** 琛ㄥ崟寮曠敤 */ +const formRef = ref(); + +/** 鐓よ川瀛楁閫夐」鍒楄〃 */ +const fieldOptions = reactive([]); + +/** 寮圭獥鏄剧ず鐘舵�� */ const dialogVisible = defineModel("coalQualityMaintenanceDialogFormVisible", { required: true, type: Boolean, }); -// 鎻愪氦琛ㄥ崟 + +/** 琛ㄥ崟鏁版嵁 */ +const formData = ref({}); + +// ===== 璁$畻灞炴�� ===== +/** 鏄惁涓虹紪杈戞ā寮� */ +const isEditMode = computed(() => props.addOrEdit === 'edit'); + +// ===== 琛ㄥ崟楠岃瘉瑙勫垯 ===== +const formRules = reactive({ + plan: [ + { required: true, message: "璇疯緭鍏ユ柟妗堝悕绉�", trigger: "blur" }, + ], + coalFields: [ + { required: true, message: "璇烽�夋嫨鏂规绫诲瀷", trigger: "blur" }, + ], +}); + +// ===== 宸ュ叿鍑芥暟 ===== +/** + * 灏嗗瓧绗︿覆鏍煎紡鐨勭叅璐ㄥ瓧娈佃浆鎹负鏁扮粍 + */ +const parseCoalFields = (coalFieldsStr) => { + if (!coalFieldsStr || typeof coalFieldsStr !== 'string') return []; + return coalFieldsStr + .split(',') + .map(id => parseInt(id.trim())) + .filter(id => !isNaN(id)); +}; + +/** + * 灏嗘暟缁勬牸寮忕殑鐓よ川瀛楁杞崲涓哄瓧绗︿覆 + */ +const stringifyCoalFields = (coalFieldsArray) => { + if (!Array.isArray(coalFieldsArray)) return ''; + return coalFieldsArray.join(','); +}; + +/** + * 鍒濆鍖栬〃鍗曟暟鎹� + * @param {Object} newForm - 鏂扮殑琛ㄥ崟鏁版嵁 + */ +const initFormData = (newForm) => { + formData.value = { ...newForm }; + + // 澶勭悊coalFields瀛楁锛氱紪杈戞椂闇�瑕佸皢瀛楃涓茶浆鎹负鏁扮粍渚涘閫夌粍浠朵娇鐢� + if (newForm.coalFields) { + if (typeof newForm.coalFields === 'string') { + formData.value.coalFields = parseCoalFields(newForm.coalFields); + } else if (Array.isArray(newForm.coalFields)) { + // 纭繚鏁扮粍涓殑鍊奸兘鏄暟瀛楃被鍨� + formData.value.coalFields = newForm.coalFields + .map(id => parseInt(id)) + .filter(id => !isNaN(id)); + } + } +}; + +// ===== 鐢熷懡鍛ㄦ湡閽╁瓙 ===== +/** + * 缁勪欢鎸傝浇鏃惰幏鍙栫叅璐ㄥ瓧娈甸�夐」 + */ +onMounted(async () => { + try { + const { data, code } = await getCoalFieldList(); + if (code === 200) { + // 鏋勫缓閫夐」鏁版嵁锛屾牸寮忓寲涓簕 label, value } + fieldOptions.push(...data.map(item => ({ + label: item.fieldName, + value: item.id, + }))); + } else { + console.error("鑾峰彇鐓よ川瀛楁鍒楄〃澶辫触", data); + } + } catch (error) { + console.error("鑾峰彇鐓よ川瀛楁鍒楄〃寮傚父", error); + } +}); + +// ===== 鐩戝惉鍣� ===== +/** + * 鐩戝惉琛ㄥ崟鏁版嵁鍙樺寲锛屽疄鐜版暟鎹洖鏄� + */ +watch(() => props.form, initFormData, { + deep: true, + immediate: true +}); + +// ===== 浜嬩欢澶勭悊鍑芥暟 ===== +/** + * 鎻愪氦琛ㄥ崟 + */ const submitForm = async () => { if (!formRef.value) return; - await formRef.value.validate(async (valid, fields) => { - if (valid) { - // let result = await addOrEditCoalQuality({...formData.value}); - // console.log(result); - // emit("submit", formData.value); + + try { + const isValid = await formRef.value.validate(); + if (!isValid) return; + + // 鍑嗗鎻愪氦鏁版嵁锛氬皢coalFields鏁扮粍杞崲涓哄瓧绗︿覆 + const submitData = { + ...formData.value, + coalFields: stringifyCoalFields(formData.value.coalFields) + }; + + // 鍒犻櫎涓嶉渶瑕佺殑鏃堕棿瀛楁锛堢紪杈戞椂锛� + if (isEditMode.value) { + delete submitData.createTime; + delete submitData.updateTime; } - }); + + // 璋冪敤API鎻愪氦鏁版嵁 + const result = await addOrEditCoalPlan(submitData); + + // 鏋勫缓鍝嶅簲鏁版嵁骞惰Е鍙戞彁浜や簨浠� + const responseData = { + title: isEditMode.value ? "缂栬緫" : "鏂板", + ...submitData, + result + }; + + emit("submit", responseData); + } catch (error) { + console.error("琛ㄥ崟鎻愪氦澶辫触", error); + } }; -// 鍙栨秷琛ㄥ崟 + +/** + * 鍙栨秷鎿嶄綔 + */ const cancelForm = () => { - emit("update:coalQualityMaintenanceDialogFormVisible", false); + dialogVisible.value = false; formData.value = {}; }; -// 閲嶇疆琛ㄥ崟 + +/** + * 閲嶇疆琛ㄥ崟 + */ const resetForm = () => { if (!formRef.value) return; formRef.value.resetFields(); }; -// 鍏抽棴寮圭獥 + +/** + * 鍏抽棴寮圭獥 + */ const handleClose = () => { - // 瑙﹀彂鐖剁粍浠剁殑鍏抽棴鍑芥暟 emit("handleBeforeClose"); - emit("update:coalQualityMaintenanceDialogFormVisible", false); + dialogVisible.value = false; }; -const rules = reactive({ - coal: [ - { required: true, message: "璇疯緭鍏ョ叅绉嶅悕绉�", trigger: "blur" }, - ], -}); </script> -<style lang="sass" scoped> +<style lang="scss" scoped> +.dialog-footer { + display: flex; + justify-content: flex-end; + margin-top: 20px; + flex-direction: column; +} </style> \ No newline at end of file diff --git a/src/views/procureMent/index.vue b/src/views/procureMent/index.vue index 68d304d..5b96d12 100644 --- a/src/views/procureMent/index.vue +++ b/src/views/procureMent/index.vue @@ -44,6 +44,20 @@ import ProductionDialog from './components/ProductionDialog.vue'; import { purchaseRegistration } from "@/api/procureMent"; import useUserStore from '@/store/modules/user' +import useDictStore from "@/store/modules/dict"; +// 寮曞叆瀛楀吀鏁版嵁 +const useDictStores = useDictStore(); +useDictStores.setDict({ + id: 1, + name: "鐓ょ绫诲瀷", + type: "coalType", + items: [ + { label: "鏃犵儫鐓�", value: "anthracite" }, + { label: "鐑熺叅", value: "bituminous" }, + { label: "瑜愮叅", value: "lignite" } + ] +}) +console.log(useDictStores.dict); const { proxy } = getCurrentInstance() const dialogFormVisible = ref(false); -- Gitblit v1.9.3