From 4b1304917b0b16b09dd50191fab59d96933c0cf3 Mon Sep 17 00:00:00 2001 From: 曹睿 <360930172@qq.com> Date: 星期二, 17 六月 2025 17:31:11 +0800 Subject: [PATCH] feat: 6月15日任务完90% --- src/views/basicData/supplierManage/index.vue | 459 ++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 279 insertions(+), 180 deletions(-) diff --git a/src/views/basicData/supplierManage/index.vue b/src/views/basicData/supplierManage/index.vue index 6270639..63a179c 100644 --- a/src/views/basicData/supplierManage/index.vue +++ b/src/views/basicData/supplierManage/index.vue @@ -4,95 +4,165 @@ <div> <span class="search_title">渚涘簲鍟嗘。妗堬細</span> <el-input - v-model="searchForm.supplierName" - style="width: 240px" - placeholder="杈撳叆渚涘簲鍟嗗悕绉版悳绱�" - @change="handleQuery" - clearable - :prefix-icon="Search" + v-model="searchForm.supplierName" + style="width: 240px" + placeholder="杈撳叆渚涘簲鍟嗗悕绉版悳绱�" + @change="handleQuery" + clearable + :prefix-icon="Search" /> - <el-button type="primary" @click="handleQuery" style="margin-left: 10px">鎼滅储</el-button> + <el-button type="primary" @click="handleQuery" style="margin-left: 10px" + >鎼滅储</el-button + > </div> <div> - <el-button type="primary" @click="openForm('add')">鏂板渚涘簲鍟�</el-button> + <el-button type="primary" @click="openForm('add')" + >鏂板渚涘簲鍟�</el-button + > <el-button @click="handleOut">瀵煎嚭</el-button> - <el-button type="info" plain icon="Upload" @click="handleImport">瀵煎叆</el-button> + <el-button type="info" plain icon="Upload" @click="handleImport" + >瀵煎叆</el-button + > <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button> </div> </div> <div class="table_list"> - <PIMTable :column="tableColumn" :tableData="tableData" :page="page" :isSelection="true" :handleSelectionChange="handleSelectionChange" - :tableLoading="tableLoading" @pagination="pagination" :total="total"></PIMTable> + <PIMTable + :column="tableColumn" + :tableData="tableData" + :page="page" + :isSelection="true" + :handleSelectionChange="handleSelectionChange" + :tableLoading="tableLoading" + @pagination="pagination" + :total="total" + ></PIMTable> </div> - <el-dialog v-model="dialogFormVisible" :title="operationType === 'add' ? '鏂板渚涘簲鍟嗕俊鎭�' : '缂栬緫渚涘簲鍟嗕俊鎭�'" width="70%" @close="closeDia"> - <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef"> + <el-dialog + v-model="dialogFormVisible" + :title="operationType === 'add' ? '鏂板渚涘簲鍟嗕俊鎭�' : '缂栬緫渚涘簲鍟嗕俊鎭�'" + width="70%" + @close="closeDia" + > + <el-form + :model="form" + label-width="140px" + label-position="top" + :rules="rules" + ref="formRef" + > <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="渚涘簲鍟嗗悕绉帮細" prop="supplierName"> - <el-input v-model="form.supplierName" placeholder="璇疯緭鍏�" clearable/> + <el-input + v-model="form.supplierName" + placeholder="璇疯緭鍏�" + clearable + /> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="绾崇◣浜鸿瘑鍒彿锛�" prop="taxpayerIdentificationNum"> - <el-input v-model="form.taxpayerIdentificationNum" placeholder="璇疯緭鍏�" clearable/> + <el-form-item + label="绾崇◣浜鸿瘑鍒彿锛�" + prop="taxpayerIdentificationNum" + > + <el-input + v-model="form.taxpayerIdentificationNum" + placeholder="璇疯緭鍏�" + clearable + /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="鍏徃鍦板潃锛�" prop="companyAddress"> - <el-input v-model="form.companyAddress" placeholder="璇疯緭鍏�" clearable/> + <el-input + v-model="form.companyAddress" + placeholder="璇疯緭鍏�" + clearable + /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="鍏徃鐢佃瘽锛�" prop="companyPhone"> - <el-input v-model="form.companyPhone" placeholder="璇疯緭鍏�" clearable/> + <el-input + v-model="form.companyPhone" + placeholder="璇疯緭鍏�" + clearable + /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="寮�鎴疯锛�" prop="bankAccountName"> - <el-input v-model="form.bankAccountName" placeholder="璇疯緭鍏�" clearable/> + <el-input + v-model="form.bankAccountName" + placeholder="璇疯緭鍏�" + clearable + /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="璐﹀彿锛�" prop="bankAccountNum"> - <el-input v-model="form.bankAccountNum" placeholder="璇疯緭鍏�" clearable/> + <el-input + v-model="form.bankAccountNum" + placeholder="璇疯緭鍏�" + clearable + /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="鑱旂郴浜猴細" prop="contactUserName"> - <el-input v-model="form.contactUserName" placeholder="璇疯緭鍏�" clearable/> + <el-input + v-model="form.contactUserName" + placeholder="璇疯緭鍏�" + clearable + /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="鑱旂郴鐢佃瘽锛�" prop="contactUserPhone"> - <el-input v-model="form.contactUserPhone" placeholder="璇疯緭鍏�" clearable/> + <el-input + v-model="form.contactUserPhone" + placeholder="璇疯緭鍏�" + clearable + /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="缁存姢浜猴細" prop="maintainUserId"> - <el-select v-model="form.maintainUserId" placeholder="璇烽�夋嫨" clearable disabled> - <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.userId"/> + <el-select + v-model="form.maintainUserId" + placeholder="璇烽�夋嫨" + clearable + disabled + > + <el-option + v-for="item in userList" + :key="item.nickName" + :label="item.nickName" + :value="item.userId" + /> </el-select> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="缁存姢鏃堕棿锛�" prop="maintainTime"> <el-date-picker - style="width: 100%" - v-model="form.maintainTime" - value-format="YYYY-MM-DD" - format="YYYY-MM-DD" - type="date" - placeholder="璇烽�夋嫨" - clearable - disabled + style="width: 100%" + v-model="form.maintainTime" + value-format="YYYY-MM-DD" + format="YYYY-MM-DD" + type="date" + placeholder="璇烽�夋嫨" + clearable + disabled /> </el-form-item> </el-col> @@ -107,14 +177,36 @@ </el-dialog> <!-- 渚涘簲鍟嗗鍏ュ璇濇 --> - <el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body> - <el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag> + <el-dialog + :title="upload.title" + v-model="upload.open" + width="400px" + append-to-body + > + <el-upload + ref="uploadRef" + :limit="1" + accept=".xlsx, .xls" + :headers="upload.headers" + :action="upload.url + '?updateSupport=' + upload.updateSupport" + :disabled="upload.isUploading" + :on-progress="handleFileUploadProgress" + :on-success="handleFileSuccess" + :auto-upload="false" + drag + > <el-icon class="el-icon--upload"><upload-filled /></el-icon> <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div> <template #tip> <div class="el-upload__tip text-center"> <span>浠呭厑璁稿鍏ls銆亁lsx鏍煎紡鏂囦欢銆�</span> - <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">涓嬭浇妯℃澘</el-link> + <el-link + type="primary" + :underline="false" + style="font-size: 12px; vertical-align: baseline" + @click="importTemplate" + >涓嬭浇妯℃澘</el-link + > </div> </template> </el-upload> @@ -129,104 +221,111 @@ </template> <script setup> -import { ref } from 'vue' -import {Search} from "@element-plus/icons-vue"; -import { delSupplier} from "@/api/basicData/supplierManageFile.js"; -import {ElMessageBox } from "element-plus"; -import {userListNoPage} from "@/api/system/user.js"; -import {addSupplier,getSupplier,listSupplier,updateSupplier} from "@/api/basicData/supplierManageFile.js"; -import useUserStore from "@/store/modules/user" -import {getToken} from "@/utils/auth.js"; -const { proxy } = getCurrentInstance() -const userStore = useUserStore() +import { ref } from "vue"; +import { Search } from "@element-plus/icons-vue"; +import { delSupplier } from "@/api/basicData/supplierManageFile.js"; +import { ElMessageBox } from "element-plus"; +import { userListNoPage } from "@/api/system/user.js"; +import { + addSupplier, + getSupplier, + listSupplier, + updateSupplier, +} from "@/api/basicData/supplierManageFile.js"; +import useUserStore from "@/store/modules/user"; +import { getToken } from "@/utils/auth.js"; +const { proxy } = getCurrentInstance(); +const userStore = useUserStore(); const tableColumn = ref([ { - label: '渚涘簲鍟嗗悕绉�', - prop: 'supplierName', + label: "渚涘簲鍟嗗悕绉�", + prop: "supplierName", width: 250, }, { - label: '鍏徃鍦板潃', - prop: 'companyAddress', + label: "鍏徃鍦板潃", + prop: "companyAddress", width: 220, }, { - label: '鑱旂郴鏂瑰紡', - prop: 'companyPhone' + label: "鑱旂郴鏂瑰紡", + prop: "companyPhone", }, { - label: '寮�鎴疯', - prop: 'bankAccountName' + label: "寮�鎴疯", + prop: "bankAccountName", }, { - label: '璐﹀彿', - prop: 'bankAccountNum' + label: "璐﹀彿", + prop: "bankAccountNum", }, { - label: '鑱旂郴浜�', - prop: 'contactUserName', + label: "鑱旂郴浜�", + prop: "contactUserName", }, { - label: '鑱旂郴鐢佃瘽', - prop: 'contactUserPhone', + label: "鑱旂郴鐢佃瘽", + prop: "contactUserPhone", }, { - label: '缁存姢浜�', - prop: 'maintainUserName', + label: "缁存姢浜�", + prop: "maintainUserName", }, { - label: '缁存姢鏃堕棿', - prop: 'maintainTime', + label: "缁存姢鏃堕棿", + prop: "maintainTime", }, { dataType: "action", label: "鎿嶄綔", - align: 'center', + align: "center", operation: [ { name: "缂栬緫", type: "text", clickFun: (row) => { - openForm('edit', row); + openForm("edit", row); }, }, ], }, -]) -const tableData = ref([]) -const selectedRows = ref([]) -const userList = ref([]) -const tableLoading = ref(false) +]); +const tableData = ref([]); +const selectedRows = ref([]); +const userList = ref([]); +const tableLoading = ref(false); const page = reactive({ current: 1, size: 10, -}) -const total = ref(0) +}); +const total = ref(0); // 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁 -const operationType = ref('') -const dialogFormVisible = ref(false) +const operationType = ref(""); +const dialogFormVisible = ref(false); const data = reactive({ searchForm: { - supplierName: '', + supplierName: "", }, form: { - supplierName: '', - taxpayerIdentificationNum: '', - companyAddress: '', - companyPhone: '', - bankAccountName:'', - bankAccountNum:'', - contactUserName: '', - contactUserPhone: '', - maintainUserId: '', - maintainTime: '', + supplierName: "", + taxpayerIdentificationNum: "", + companyAddress: "", + companyPhone: "", + bankAccountName: "", + bankAccountNum: "", + contactUserName: "", + contactUserPhone: "", + maintainUserId: "", + maintainTime: "", }, rules: { supplierName: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - taxpayerIdentificationNum: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], + taxpayerIdentificationNum: [ + { required: true, message: "璇疯緭鍏�", trigger: "blur" }, + ], companyAddress: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], companyPhone: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], bankAccountName: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], @@ -235,33 +334,33 @@ contactUserPhone: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }], maintainUserId: [{ required: false, message: "璇烽�夋嫨", trigger: "change" }], maintainTime: [{ required: false, message: "璇烽�夋嫨", trigger: "change" }], - } -}) -const { searchForm, form, rules } = toRefs(data) + }, +}); +const { searchForm, form, rules } = toRefs(data); // 鏌ヨ鍒楄〃 /** 鎼滅储鎸夐挳鎿嶄綔 */ const handleQuery = () => { - page.current = 1 - getList() -} + page.current = 1; + getList(); +}; const pagination = (obj) => { page.current = obj.page; page.size = obj.limit; - getList() -} + getList(); +}; /** 鎻愪氦涓婁紶鏂囦欢 */ function submitFileForm() { - proxy.$refs["uploadRef"].submit() + proxy.$refs["uploadRef"].submit(); } const getList = () => { - tableLoading.value = true - listSupplier({...searchForm.value, ...page}).then(res => { - tableLoading.value = false - tableData.value = res.data.records - total.value = res.data.total - }) -} + tableLoading.value = true; + listSupplier({ ...searchForm.value, ...page }).then((res) => { + tableLoading.value = false; + tableData.value = res.data.records; + total.value = res.data.total; + }); +}; const upload = reactive({ // 鏄惁鏄剧ず寮瑰嚭灞傦紙渚涘簲鍟嗗鍏ワ級 open: false, @@ -272,122 +371,122 @@ // 璁剧疆涓婁紶鐨勮姹傚ご閮� headers: { Authorization: "Bearer " + getToken() }, // 涓婁紶鐨勫湴鍧� - url: import.meta.env.VITE_APP_BASE_API + "/system/supplier/import" -}) + url: import.meta.env.VITE_APP_BASE_API + "/system/supplier/import", +}); /** 瀵煎叆鎸夐挳鎿嶄綔 */ function handleImport() { - upload.title = "渚涘簲鍟嗗鍏�" - upload.open = true + upload.title = "渚涘簲鍟嗗鍏�"; + upload.open = true; } // 琛ㄦ牸閫夋嫨鏁版嵁 const handleSelectionChange = (selection) => { - selectedRows.value = selection -} + selectedRows.value = selection; +}; // 鎵撳紑寮规 const openForm = (type, row) => { - operationType.value = type - form.value = {} - form.value.maintainUserId = userStore.id + operationType.value = type; + form.value = {}; + form.value.maintainUserId = userStore.id; form.value.maintainTime = getCurrentDate(); - userListNoPage().then(res => { - userList.value = res.data - }) - if (type === 'edit') { - getSupplier(row.id).then(res => { - form.value = {...res.data} - }) + userListNoPage().then((res) => { + userList.value = res.data; + }); + if (type === "edit") { + getSupplier(row.id).then((res) => { + form.value = { ...res.data }; + }); } - dialogFormVisible.value = true -} + dialogFormVisible.value = true; +}; // 鎻愪氦琛ㄥ崟 const submitForm = () => { - proxy.$refs["formRef"].validate(valid => { + proxy.$refs["formRef"].validate((valid) => { if (valid) { if (operationType.value === "edit") { - submitEdit() + submitEdit(); } else { - submitAdd() + submitAdd(); } } - }) -} + }); +}; // 鎻愪氦鏂板 const submitAdd = () => { - addSupplier(form.value).then(res => { - proxy.$modal.msgSuccess("鎻愪氦鎴愬姛") - closeDia() - getList() - }) -} + addSupplier(form.value).then((res) => { + proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); + closeDia(); + getList(); + }); +}; // 鎻愪氦淇敼 const submitEdit = () => { - updateSupplier(form.value).then(res => { - proxy.$modal.msgSuccess("鎻愪氦鎴愬姛") - closeDia() - getList() - }) -} + updateSupplier(form.value).then((res) => { + proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); + closeDia(); + getList(); + }); +}; // 鍏抽棴寮规 const closeDia = () => { - proxy.resetForm("formRef") - dialogFormVisible.value = false -} + proxy.resetForm("formRef"); + dialogFormVisible.value = false; +}; // 瀵煎嚭 const handleOut = () => { - ElMessageBox.confirm( - '閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�', - '瀵煎嚭', { - confirmButtonText: '纭', - cancelButtonText: '鍙栨秷', - type: 'warning', - } - ).then(() => { - proxy.download("/system/supplier/export", {}, '渚涘簲鍟嗘。妗�.xlsx') - }).catch(() => { - proxy.$modal.msg("宸插彇娑�") + ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", { + confirmButtonText: "纭", + cancelButtonText: "鍙栨秷", + type: "warning", }) -} + .then(() => { + proxy.download("/system/supplier/export", {}, "渚涘簲鍟嗘。妗�.xlsx"); + }) + .catch(() => { + proxy.$modal.msg("宸插彇娑�"); + }); +}; // 鍒犻櫎 const handleDelete = () => { - let ids = [] + let ids = []; if (selectedRows.value.length > 0) { - ids = selectedRows.value.map(item => item.id); + ids = selectedRows.value.map((item) => item.id); } else { - proxy.$modal.msgWarning('璇烽�夋嫨鏁版嵁') - return + proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁"); + return; } - ElMessageBox.confirm( - '閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�', - '鍒犻櫎鎻愮ず', { - confirmButtonText: '纭', - cancelButtonText: '鍙栨秷', - type: 'warning', - } - ).then(() => { - tableLoading.value = true - delSupplier(ids).then(res => { - proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛") - getList() - }).finally(() => { - tableLoading.value = false - }) - }).catch(() => { - proxy.$modal.msg("宸插彇娑�") + ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず", { + confirmButtonText: "纭", + cancelButtonText: "鍙栨秷", + type: "warning", }) -} + .then(() => { + tableLoading.value = true; + delSupplier(ids) + .then((res) => { + proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛"); + getList(); + }) + .finally(() => { + tableLoading.value = false; + }); + }) + .catch(() => { + proxy.$modal.msg("宸插彇娑�"); + }); +}; // 鑾峰彇褰撳墠鏃ユ湡骞舵牸寮忓寲涓� 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'); + const month = String(today.getMonth() + 1).padStart(2, "0"); // 鏈堜唤浠�0寮�濮� + const day = String(today.getDate()).padStart(2, "0"); return `${year}-${month}-${day}`; } -getList() +onMounted(() => { + getList(); +}); </script> -<style scoped lang="scss"> - -</style> +<style scoped lang="scss"></style> -- Gitblit v1.9.3