From 193af68d72a71268054f7d07395c2ea11210ecc1 Mon Sep 17 00:00:00 2001
From: 张诺 <zhang_12370@163.com>
Date: 星期五, 30 五月 2025 09:40:28 +0800
Subject: [PATCH] 提交基础信息 三个模块 提交采购管理

---
 src/views/basicInformation/index.vue |  528 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 528 insertions(+), 0 deletions(-)

diff --git a/src/views/basicInformation/index.vue b/src/views/basicInformation/index.vue
new file mode 100644
index 0000000..62ceb31
--- /dev/null
+++ b/src/views/basicInformation/index.vue
@@ -0,0 +1,528 @@
+<template>
+  <div class="app-container">
+      <el-form :inline="true" :model="queryParams" class="search-form">
+        <el-form-item label="鎼滅储">
+          <el-input
+            v-model="queryParams.searchText"
+            placeholder="璇疯緭鍏ュ叧閿瘝"
+            clearable
+            :style="{ width: '100%' }"
+          />
+        </el-form-item>
+        <el-form-item label="渚涘簲鍟嗗悕绉�">
+          <el-input
+            v-model="queryParams.supplierName"
+            placeholder="璇疯緭鍏�"
+            clearable
+            :style="{ width: '100%' }"
+          />
+        </el-form-item>
+        <el-form-item label="缁熶竴浜鸿瘑鍒彿">
+          <el-input
+            v-model="queryParams.identifyNumber"
+            placeholder="璇疯緭鍏�"
+            clearable
+            :style="{ width: '100%' }"
+          />
+        </el-form-item>
+        <el-form-item label="缁忚惀鍦板潃">
+          <el-input
+            v-model="queryParams.address"
+            placeholder="璇疯緭鍏�"
+            clearable
+            :style="{ width: '100%' }"
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="handleQuery">鏌ヨ</el-button>
+          <el-button @click="resetQuery">閲嶇疆</el-button>
+        </el-form-item>
+      </el-form>
+    <el-card>
+      <!-- 鏍囩椤� -->
+      <el-tabs
+        v-model="activeTab"
+        class="info-tabs"
+        @tab-click="handleTabClick"
+      >
+        <el-tab-pane
+          v-for="tab in tabs"
+          :key="tab.name"
+          :label="tab.label"
+          :name="tab.name"
+        />
+      </el-tabs>
+
+      <!-- 鎿嶄綔鎸夐挳鍖� -->
+      <el-row :gutter="24" class="table-toolbar">
+        <el-button type="primary" :icon="Plus" @click="handleAdd"
+          >鏂板缓</el-button
+        >
+        <el-button type="danger" :icon="Delete" @click="handleDelete">鍒犻櫎</el-button>
+        <el-button type="info" :icon="Download" @click="handleExport">瀵煎嚭</el-button>
+      </el-row> 
+      <!-- 琛ㄦ牸缁勪欢 -->
+      <div>
+        <data-table
+          :loading="loading"
+          :table-data="tableData"
+          :columns="columns"
+          @selection-change="handleSelectionChange"
+          @edit="handleEdit"
+          @delete="handleDeleteSuccess"
+          :show-selection="true"
+          :border="true"
+          :maxHeight="440"
+        />
+      </div>
+      <pagination
+        v-if="total>0"
+        :page-num="pageNum"
+        :page-size="pageSize"
+        :total="total"
+        @pagination="handleQuery"
+        :layout="'total, prev, pager, next, jumper'"
+      />
+      <Supplier
+        v-if="tabName === 'supplier'"
+        v-model:supplierDialogFormVisible="dialogFormVisible"
+        :form="form"
+        :title="title"
+        @submit="handleSubmit"
+        @beforeClose="handleBeforeClose"
+        @update:dialogFormVisible="handleDialogFormVisible"
+        :addOrEdit="addOrEdit"
+      />
+      <Customer
+        v-if="tabName === 'customer'"
+        v-model:customerDialogFormVisible="dialogFormVisible"
+        :form="form"
+        :title="title"
+        @submit="handleSubmit"
+        @beforeClose="handleBeforeClose"
+      />
+      <Coal
+        v-if="tabName === 'coal'"
+        v-model:coalDialogFormVisible="dialogFormVisible"
+        :form="form"
+        :title="title"
+        @submit="handleSubmit"
+      />
+    </el-card>
+  </div>
+</template>
+
+<script setup>
+import { ref, reactive, onMounted } 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";
+import Customer from "./mould/customer.vue";
+import Coal from "./mould/coal.vue";
+const { proxy } = getCurrentInstance()
+// 寮圭獥
+const customerDialogFormVisible = ref(false);
+const coalDialogFormVisible = ref(false);
+const supplierDialogFormVisible = ref(false);
+const dialogFormVisible = ref(false);
+const form = ref({});
+const title = ref("");
+const copyForm = ref({});
+// 褰撳墠鏍囩
+const tabName = ref("supplier");
+// 鐘舵�佸彉閲�
+const loading = ref(false);
+const total = ref(200);
+const pageNum = ref(1);
+const pageSize = ref(10);
+const activeTab = ref("supplier");
+const selectedRows = ref([]);
+// 鏌ヨ鍙傛暟
+const queryParams = reactive({
+  searchText: "",
+  supplierName: "",
+  identifyNumber: "",
+  address: "",
+});
+onMounted(() => {
+  handleTabClick({ props: { name: "supplier" } });
+});
+const columns = ref();
+// 鏍囩椤垫暟鎹�
+const tabs = reactive([
+  { name: "supplier", label: "渚涘簲鍟嗕俊鎭�" },
+  { name: "customer", label: "瀹㈡埛淇℃伅" },
+  { name: "coal", label: "鐓ょ淇℃伅" },
+]);
+// 鏄惁缂栬緫
+const addOrEdit = ref("add");
+// 琛ㄦ牸鏁版嵁
+const tableData = ref([]);
+// 鏂规硶瀹氫箟
+const handleQuery = () => {
+  loading.value = true;
+  setTimeout(() => {
+    loading.value = false;
+  }, 500);
+};
+// supplier 渚涘簲鍟嗘暟鎹�
+const supplierColumns = reactive([
+  { prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minWidth: 200 },
+  { prop: "identifyNumber", label: "缁熶竴浜鸿瘑鍒彿", minWidth: 120 },
+  { prop: "address", label: "缁忚惀鍦板潃", minWidth: 150 },
+  { prop: "bank", label: "寮�鎴疯", minWidth: 120 },
+  { prop: "bankAccount", label: "閾惰璐﹀彿", minWidth: 150 },
+  { prop: "contacts", label: "鑱旂郴浜�", minWidth: 100 },
+  { prop: "contactAddress", label: "鑱旂郴鍦板潃", minWidth: 150 },
+  { prop: "maintainer", label: "缁存姢浜�", minWidth: 100 },
+  { prop: "maintainDate", label: "缁存姢鏃ユ湡", minWidth: 100 },
+]);
+// customer 瀹㈡埛鏁版嵁
+const customerColumns = reactive([
+  { prop: "customerName", label: "瀹㈡埛鍚嶇О", minWidth: 200 },
+  { prop: "identifyNumber", label: "缁熶竴浜鸿瘑鍒彿", minWidth: 120 },
+  { prop: "address", label: "缁忚惀鍦板潃", minWidth: 150 },
+  { prop: "bank", label: "寮�鎴疯", minWidth: 120 },
+  { prop: "bankAccount", label: "閾惰璐﹀彿", minWidth: 150 },
+  { prop: "contacts", label: "鑱旂郴浜�", minWidth: 100 },
+  { prop: "contactAddress", label: "鑱旂郴鍦板潃", minWidth: 150 },
+  { prop: "maintainer", label: "缁存姢浜�", minWidth: 100 },
+  { prop: "maintainDate", label: "缁存姢鏃ユ湡", minWidth: 100 },
+]);
+// coal 鐓ょ鏁版嵁
+const coalColumns = reactive([
+  { prop: "coalName", label: "鐓ょ鍚嶇О", minWidth: 200 },
+  { prop: "maintainer", label: "缁存姢浜�", minWidth: 120 },
+  { prop: "maintenanceDate", label: "缁存姢鏃ユ湡", minWidth: 150 },
+]);
+// 鏍囩椤电偣鍑�
+const handleTabClick = (tab) => {
+  form.value = {};
+  getList();
+  addOrEdit.value = "add";
+  loading.value = true;
+  tabName.value = tab.props.name;
+  tableData.value = [];
+  getList();
+  switch (tabName.value) {
+    case "supplier":
+      columns.value = supplierColumns;
+      dialogFormVisible.value = supplierDialogFormVisible.value;
+      break;
+    case "customer":
+      columns.value = customerColumns;
+      dialogFormVisible.value = customerDialogFormVisible.value;
+      break;
+    case "coal":
+      columns.value = coalColumns;
+      dialogFormVisible.value = coalDialogFormVisible.value;
+      break;
+  }
+  setTimeout(() => {
+    loading.value = false;
+  }, 500);
+};
+// 閲嶇疆鏌ヨ
+const resetQuery = () => {
+  Object.keys(queryParams).forEach((key) => {
+    if (key !== "pageNum" && key !== "pageSize") {
+      queryParams[key] = "";
+    }
+  });
+  handleQuery();
+};
+// 鏂板
+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();
+  }
+};
+// 鎵撳紑寮圭獥
+const openDialog = () => {
+  if (addOrEdit.value === "edit") {
+    copyForm.value = JSON.parse(JSON.stringify(form.value));
+    dialogFormVisible.value = true;
+    return;
+  }
+  form.value = {};
+  dialogFormVisible.value = true;
+};
+// 鎻愪氦琛ㄥ崟
+const handleSubmit = (val) => {
+  // 鎷垮埌鎻愪氦鏁版嵁
+  dialogFormVisible.value = false;
+  getList();
+};
+const handleDialogFormVisible = (value) => {
+  dialogFormVisible.value = value;
+};
+// 閫夋嫨琛�
+const handleSelectionChange = (selection) => {
+  selectedRows.value = selection;
+};
+// 缂栬緫
+const handleEdit = (row) => {
+    form.value = JSON.parse(JSON.stringify(row));
+    addOrEdit.value = "edit";
+    handleAddEdit(tabName.value);
+};
+// 鎵归噺鍒犻櫎
+const handleDelete = () => {
+  if (selectedRows.value.length === 0) {
+    ElMessage.warning("璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁");
+    return;
+  }
+  ElMessageBox.confirm("纭畾鍒犻櫎閫変腑鐨勬暟鎹悧锛�", "鎻愮ず", {
+    confirmButtonText: "纭畾",
+    cancelButtonText: "鍙栨秷",
+    type: "warning",
+  })
+    .then(() => {
+      ElMessage.success("鍒犻櫎鎴愬姛锛屽叡鍒犻櫎" + selectedRows.value.length + "鏉℃暟鎹�");
+      selectedRows.value.forEach((row) => {
+        tableData.value = tableData.value.filter(
+          (item) => item !== row
+        );
+      });
+      total.value = tableData.value.length;
+      // 娓呯┖閫変腑琛�
+      selectedRows.value = [];
+  }).catch(() => {
+    ElMessage.info("宸插彇娑堝垹闄ゆ搷浣�");
+  });
+}
+// 琛ㄦ牸鍒犻櫎
+const handleDeleteSuccess = (row) => {
+  ElMessage.success("鍒犻櫎鎴愬姛锛�" + row.supplierName);
+};
+// 鍏抽棴寮圭獥
+const handleBeforeClose = () => {
+  dialogFormVisible.value = false;
+  form.value = {};
+};
+const handleExport = (row) => {
+  proxy.download("system/post/export", {
+    ...queryParams.value
+  }, `post_${new Date().getTime()}.xlsx`)
+  ElMessage.success("瀵煎嚭鏁版嵁锛�" + row.supplierName);
+};
+const getList = () => {
+  loading.value = true;
+  setTimeout(() => {
+    // 鏆傛椂寮曞叆娴嬭瘯鏁版嵁
+    tableData.value = [
+      {
+        supplierName: "涓浗鍐堕噾绉戝伐鑲′唤鏈夐檺鍏徃",
+        identifyNumber: "123412123123123111",
+        address: "灞辫タ鐪�",
+        bank: "浜ら�氶摱琛�",
+        bankAccount: "901234567890123456",
+        contacts: "鏉庨洩鑺�",
+        contactAddress: "XX鐪乆X甯俋X鍖篨X璺�",
+        maintainer: "鏉庨洩鑺�",
+        maintainDate: "2022-09-26",
+        contactsPhone: "19345678901",
+      },
+      {
+        supplierName: "涓浗鍐堕噾绉戝伐鑲′唤鏈夐檺鍏徃",
+        identifyNumber: "123412123123123111",
+        address: "灞辫タ鐪�",
+        bank: "浜ら�氶摱琛�",
+        bankAccount: "901234567890123456",
+        contacts: "鏉庨洩鑺�",
+        contactAddress: "XX鐪乆X甯俋X鍖篨X璺�",
+        maintainer: "鏉庨洩鑺�",
+        maintainDate: "2022-09-26",
+        contactsPhone: "19345678901",
+      },
+      {
+        supplierName: "涓浗鍐堕噾绉戝伐鑲′唤鏈夐檺鍏徃",
+        identifyNumber: "123412123123123111",
+        address: "灞辫タ鐪�",
+        bank: "浜ら�氶摱琛�",
+        bankAccount: "901234567890123456",
+        contacts: "鏉庨洩鑺�",
+        contactAddress: "XX鐪乆X甯俋X鍖篨X璺�",
+        maintainer: "鏉庨洩鑺�",
+        maintainDate: "2022-09-26",
+        contactsPhone: "19345678901",
+      },
+      {
+        supplierName: "浜ら�氶摱琛岃偂浠芥湁闄愬叕鍙�",
+        identifyNumber: "042-26881314",
+        address: "姹熻タ鐪�",
+        bank: "骞冲畨閾惰",
+        bankAccount: "123456789012345678",
+        contacts: "鍛ㄧ櫧鐜�",
+        contactAddress: "XX鐪乆X甯俋X鍖篨X璺�",
+        maintainer: "鍛ㄧ櫧鐜�",
+        maintainDate: "2022-08-29",
+      },
+      {
+        supplierName: "涓浗鍐堕噾绉戝伐鑲′唤鏈夐檺鍏徃",
+        identifyNumber: "019-65851198",
+        address: "灞辫タ鐪�",
+        bank: "浜ら�氶摱琛�",
+        bankAccount: "901234567890123456",
+        contacts: "鏉庨洩鑺�",
+        contactAddress: "XX鐪乆X甯俋X鍖篨X璺�",
+        maintainer: "鏉庨洩鑺�",
+        maintainDate: "2022-09-26",
+      },
+      {
+        supplierName: "浜ら�氶摱琛岃偂浠芥湁闄愬叕鍙�",
+        identifyNumber: "042-26881314",
+        address: "姹熻タ鐪�",
+        bank: "骞冲畨閾惰",
+        bankAccount: "123456789012345678",
+        contacts: "鍛ㄧ櫧鐜�",
+        contactAddress: "XX鐪乆X甯俋X鍖篨X璺�",
+        maintainer: "鍛ㄧ櫧鐜�",
+        maintainDate: "2022-08-29",
+      },
+      {
+        supplierName: "涓浗鍐堕噾绉戝伐鑲′唤鏈夐檺鍏徃",
+        identifyNumber: "019-65851198",
+        address: "灞辫タ鐪�",
+        bank: "浜ら�氶摱琛�",
+        bankAccount: "901234567890123456",
+        contacts: "鏉庨洩鑺�",
+        contactAddress: "XX鐪乆X甯俋X鍖篨X璺�",
+        maintainer: "鏉庨洩鑺�",
+        maintainDate: "2022-09-26",
+      },
+      {
+        supplierName: "浜ら�氶摱琛岃偂浠芥湁闄愬叕鍙�",
+        identifyNumber: "042-26881314",
+        address: "姹熻タ鐪�",
+        bank: "骞冲畨閾惰",
+        bankAccount: "123456789012345678",
+        contacts: "鍛ㄧ櫧鐜�",
+        contactAddress: "XX鐪乆X甯俋X鍖篨X璺�",
+        maintainer: "鍛ㄧ櫧鐜�",
+        maintainDate: "2022-08-29",
+      },
+      {
+        supplierName: "涓浗鍐堕噾绉戝伐鑲′唤鏈夐檺鍏徃",
+        identifyNumber: "019-65851198",
+        address: "灞辫タ鐪�",
+        bank: "浜ら�氶摱琛�",
+        bankAccount: "901234567890123456",
+        contacts: "鏉庨洩鑺�",
+        contactAddress: "XX鐪乆X甯俋X鍖篨X璺�",
+        maintainer: "鏉庨洩鑺�",
+        maintainDate: "2022-09-26",
+      },
+      {
+        supplierName: "浜ら�氶摱琛岃偂浠芥湁闄愬叕鍙�",
+        identifyNumber: "042-26881314",
+        address: "姹熻タ鐪�",
+        bank: "骞冲畨閾惰",
+        bankAccount: "123456789012345678",
+        contacts: "鍛ㄧ櫧鐜�",
+        contactAddress: "XX鐪乆X甯俋X鍖篨X璺�",
+        maintainer: "鍛ㄧ櫧鐜�",
+        maintainDate: "2022-08-29",
+      },
+      {
+        supplierName: "涓浗鍐堕噾绉戝伐鑲′唤鏈夐檺鍏徃",
+        identifyNumber: "019-65851198",
+        address: "灞辫タ鐪�",
+        bank: "浜ら�氶摱琛�",
+        bankAccount: "901234567890123456",
+        contacts: "鏉庨洩鑺�",
+        contactAddress: "XX鐪乆X甯俋X鍖篨X璺�",
+        maintainer: "鏉庨洩鑺�",
+        maintainDate: "2022-09-26",
+      },
+      {
+        supplierName: "浜ら�氶摱琛岃偂浠芥湁闄愬叕鍙�",
+        identifyNumber: "042-26881314",
+        address: "姹熻タ鐪�",
+        bank: "骞冲畨閾惰",
+        bankAccount: "123456789012345678",
+        contacts: "鍛ㄧ櫧鐜�",
+        contactAddress: "XX鐪乆X甯俋X鍖篨X璺�",
+        maintainer: "鍛ㄧ櫧鐜�",
+        maintainDate: "2022-08-29",
+      },
+    ];
+    total.value = tableData.value.length;
+    loading.value = false;
+  }, 500);
+};
+getList();
+</script>
+
+<style scoped>
+.app-container{
+  box-sizing: border-box;
+}
+.search-form {
+  background-color: #fff;
+  padding: 20px 20px 0 20px;
+  margin-bottom: 20px;
+  border-radius: 4px;
+  box-shadow: var(--el-box-shadow-light);
+}
+.search-form :deep(.el-form-item) {
+  margin-bottom: 16px;
+  width: 100%;
+}
+
+/* 鍝嶅簲寮忓竷灞� */
+@media screen and (min-width: 768px) {
+  .search-form :deep(.el-form-item) {
+    width: 50%;
+  }
+}
+@media screen and (min-width: 1200px) {
+  .search-form :deep(.el-form-item) {
+    width: 18%;
+  }
+}
+.info-tabs {
+  margin-bottom: 20px;
+}
+.table-toolbar {
+  margin-bottom: 20px;
+  display: flex;
+  flex-wrap: wrap;
+  gap: 10px;
+}
+
+/* 鍝嶅簲寮忚〃鏍� */
+@media screen and (max-width: 768px) {
+  .table-toolbar {
+    flex-direction: column;
+  }
+  .table-toolbar .el-button {
+    width: 100%;
+  }
+}
+/* 琛ㄦ牸宸ュ叿鏍� */
+.table-toolbar, .table-toolbar > * {
+  margin: 0 0 0 0 !important;
+}
+.table-toolbar{
+  margin-bottom: 20px !important;
+}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3