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/procureMent/index.vue |  308 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 308 insertions(+), 0 deletions(-)

diff --git a/src/views/procureMent/index.vue b/src/views/procureMent/index.vue
new file mode 100644
index 0000000..790146a
--- /dev/null
+++ b/src/views/procureMent/index.vue
@@ -0,0 +1,308 @@
+<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-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> 
+      <!-- 琛ㄦ牸缁勪欢 -->
+        <data-table
+          :loading="loading"
+          :table-data="tableData"
+          :columns="columns"
+          @selection-change="handleSelectionChange"
+          @edit="handleEdit"
+          @delete="handleDeleteSuccess"
+          :show-selection="true"
+          :border="true"
+          :maxHeight="440"
+        />
+      <pagination
+        v-if="total>0"
+        :page-num="pageNum"
+        :page-size="pageSize"
+        :total="total"
+        @pagination="handleQuery"
+        :layout="'total, prev, pager, next, jumper'"
+      />
+    </el-card>
+    <ProductionDialog
+        v-if="total>0"
+        v-model:dialogFormVisible="dialogFormVisible"
+        :form="form"
+        :title="title"
+        @submit="handleSubmit"
+        @success="handleSuccess"
+      />
+  </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 ProductionDialog from "./components/ProductionDialog.vue";
+const { proxy } = getCurrentInstance()
+
+const dialogFormVisible = ref(false);
+const form = ref({});
+const title = ref("");
+// 鐘舵�佸彉閲�
+const loading = ref(false);
+const total = ref(0);
+const pageNum = ref(1)
+const pageSize = ref(10);
+const selectedRows = ref([]);
+// 鏌ヨ鍙傛暟
+const queryParams = reactive({
+  searchText: "",
+  supplierName: "",
+  identifyNumber: "",
+  address: "",
+  
+});
+// 鏄惁缂栬緫
+const addOrEdit = ref("add");
+// 琛ㄦ牸鏁版嵁
+const tableData = ref([]);
+// 鏂规硶瀹氫箟
+const handleQuery = () => {
+  loading.value = true;
+  // 杩欓噷娣诲姞瀹為檯鐨勬煡璇㈤�昏緫
+  setTimeout(() => {
+    loading.value = false;
+  }, 500);
+};
+
+// supplier 渚涘簲鍟嗘暟鎹�
+const columns = ref([
+  { prop: "supplierName", label: "渚涘簲鍟嗗悕绉�", minWidth: 200 },
+  { prop: "category", label: "鐓ょ", minWidth: 120 },
+  { prop: "unit", label: "鍗曚綅", minWidth: 150 },
+  { prop: "purchaseAmount", label: "閲囪喘鏁伴噺", minWidth: 120 },
+  { prop: "priceBeforeTax", label: "鍗曚环(绋庡墠)", minWidth: 150 },
+  { prop: "totalBeforeTax", label: "鎬讳环(绋庡墠)", minWidth: 100 },
+  { prop: "calorificValue", label: "鐑��", minWidth: 150 },
+  { prop: "registrant", label: "鐧昏浜�", minWidth: 100 },
+  { prop: "registrationDate", label: "鐧昏鏃ユ湡", minWidth: 100 },
+]);
+
+// 閲嶇疆鏌ヨ
+const resetQuery = () => {
+  Object.keys(queryParams).forEach((key) => {
+    if (key !== "pageNum" && key !== "pageSize") {
+      queryParams[key] = "";
+    }
+  });
+  handleQuery();
+};
+// 鏂板
+const handleAdd = () => {
+  addOrEdit.value = "add";
+  handleAddEdit();
+};
+// 鏂板缂栬緫
+const handleAddEdit = () => {
+  addOrEdit.value == "add" ? (title.value = "鏂板") : (title.value = "缂栬緫");
+    title.value = title.value + "閲囪喘淇℃伅";
+    openDialog();
+};
+// 鎵撳紑寮圭獥
+const openDialog = () => {
+  if (addOrEdit.value === "edit") {
+    dialogFormVisible.value = true;
+    return;
+  }
+  form.value = {};
+  dialogFormVisible.value = true;
+};
+
+// 鎻愪氦琛ㄥ崟
+const handleSubmit = () => {
+  // 鎷垮埌鎻愪氦鏁版嵁
+  dialogFormVisible.value = false;
+  getList();
+};
+// 閫夋嫨琛�
+const handleSelectionChange = (selection) => {
+  selectedRows.value = selection;
+};
+// 琛ㄦ牸缂栬緫鏂规硶
+const handleEdit = (row) => {
+    form.value = JSON.parse(JSON.stringify(row));
+    addOrEdit.value = "edit";
+    handleAddEdit()
+};
+const handleDelete = () => {
+  if (selectedRows.value.length === 0) {
+    ElMessage.warning("璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁");
+    return;
+  }
+  ElMessageBox.confirm(
+    `纭鍒犻櫎閫変腑鐨� ${selectedRows.value.length} 鏉℃暟鎹悧锛焋,
+    "鎻愮ず",
+    {
+      confirmButtonText: "纭畾",
+      cancelButtonText: "鍙栨秷",
+      type: "warning"
+    }
+  )
+    .then(() => {
+      // 妯℃嫙鍒犻櫎鎿嶄綔
+      tableData.value = tableData.value.filter(
+        (item) => !selectedRows.value.includes(item)
+      );
+      total.value = tableData.value.length;
+      ElMessage.success("鍒犻櫎鎴愬姛");
+    })
+    .catch(() => {
+      ElMessage.info("宸插彇娑堝垹闄�");
+    });
+}
+const handleDeleteSuccess = (row) => {
+  ElMessage.success("鍒犻櫎鎴愬姛锛�" + row.supplierName);
+};
+// 瀵煎嚭
+const handleExport = (row) => {
+  proxy.download("system/post/export", {
+    ...queryParams.value
+  }, `post_${new Date().getTime()}.xlsx`)
+  ElMessage.success("瀵煎嚭鏁版嵁锛�" + row.supplierName);
+};
+// 鎴愬姛
+const handleSuccess = (val) => {
+  console.log(val);
+  tableData.value.push(val);
+  // getList();
+  total.value = tableData.value.length;
+  ElMessage.success("鎿嶄綔鎴愬姛");
+};
+const getList = () => {
+  loading.value = true;
+  setTimeout(() => {
+    tableData.value = [
+      {
+        supplierName: "涓浗鐭虫补鍖栧伐鑲′唤鏈夐檺鍏徃",
+        category: "鐓�",
+        unit: "鍚�",
+        purchaseAmount: "1000",
+        priceBeforeTax: "100",
+        totalBeforeTax: "100000",
+        calorificValue: "5000",
+        registrant: "寮犱笁",
+        registrationDate: "2025-01-01",
+      },
+      {
+        supplierName: "涓浗涓煶鍖�",
+        category: "绮惧搧鐓�",
+        unit: "鍗冨厠",
+        purchaseAmount: "1000",
+        priceBeforeTax: "100",
+        totalBeforeTax: "100000",
+        calorificValue: "5000",
+        registrant: "鏉庡洓",
+        registrationDate: "2025-01-01",
+      }
+    ]
+    total.value = tableData.value.length;
+    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%;
+  }
+}
+.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