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