From 67c560c0cad4224c41b36b2ec755bf3d5aa7e68f Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 06 二月 2026 10:51:51 +0800
Subject: [PATCH] Merge branch 'dev_New' into dev_湖南鹏创电子

---
 src/views/inventoryManagement/vehicleManagement/index.vue |  581 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 581 insertions(+), 0 deletions(-)

diff --git a/src/views/inventoryManagement/vehicleManagement/index.vue b/src/views/inventoryManagement/vehicleManagement/index.vue
new file mode 100644
index 0000000..1e383c6
--- /dev/null
+++ b/src/views/inventoryManagement/vehicleManagement/index.vue
@@ -0,0 +1,581 @@
+<template>
+  <div class="app-container">
+    <!-- 鏌ヨ鏉′欢 -->
+    <div class="search_form">
+      <div>
+        <span class="search_title">杞︾墝鍙风爜锛�</span>
+        <el-input
+          v-model="searchForm.plateNumber"
+          style="width: 180px"
+          placeholder="璇疯緭鍏ヨ溅鐗屽彿鐮�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+
+        <span class="search_title ml10">杞﹁締绫诲瀷锛�</span>
+        <el-select
+          v-model="searchForm.vehicleType"
+          style="width: 160px"
+          placeholder="璇烽�夋嫨杞﹁締绫诲瀷"
+          clearable
+        >
+          <el-option
+            v-for="item in vehicleTypeOptions"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+
+        <span class="search_title ml10">鎵�灞為儴闂細</span>
+        <el-select
+          v-model="searchForm.department"
+          style="width: 160px"
+          placeholder="璇烽�夋嫨鎵�灞為儴闂�"
+          clearable
+        >
+          <el-option
+            v-for="item in departmentOptions"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+
+        <span class="search_title ml10">鐘舵�侊細</span>
+        <el-select
+          v-model="searchForm.status"
+          style="width: 140px"
+          placeholder="璇烽�夋嫨鐘舵��"
+          clearable
+        >
+          <el-option
+            v-for="item in statusOptions"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          />
+        </el-select>
+
+        <span class="search_title ml10">褰掓。鐘舵�侊細</span>
+        <el-select
+          v-model="searchForm.archived"
+          style="width: 140px"
+          placeholder="璇烽�夋嫨褰掓。鐘舵��"
+          clearable
+        >
+          <el-option label="鏈綊妗�" value="false" />
+          <el-option label="宸插綊妗�" value="true" />
+        </el-select>
+
+        <el-button type="primary" @click="handleQuery" style="margin-left: 10px">
+          鎼滅储
+        </el-button>
+        <el-button @click="resetSearch">閲嶇疆</el-button>
+      </div>
+      <div>
+        <el-button type="primary" icon="Plus" @click="openAdd">鏂板杞﹁締</el-button>
+      </div>
+    </div>
+
+    <!-- 琛ㄦ牸 -->
+    <div class="table_list">
+      <el-table
+        :data="tableData"
+        border
+        style="width: 100%"
+        height="calc(100vh - 18.5em)"
+        :header-cell-style="{ background: '#F0F1F5', color: '#333333' }"
+      >
+        <el-table-column type="index" label="搴忓彿" width="60" align="center" />
+        <el-table-column
+          prop="vehicleCode"
+          label="杞﹁締缂栧彿"
+          width="140"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="plateNumber"
+          label="杞︾墝鍙风爜"
+          width="120"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="vehicleType"
+          label="杞﹁締绫诲瀷"
+          width="120"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="department"
+          label="鎵�灞為儴闂�"
+          width="140"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="purchaseDate"
+          label="璐疆鏃ユ湡"
+          width="120"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="licenseNumber"
+          label="琛岄┒璇佺紪鍙�"
+          width="160"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="licenseIssueDate"
+          label="鍙戣瘉鏃ユ湡"
+          width="120"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          prop="licenseExpireDate"
+          label="鍒版湡鏃ユ湡"
+          width="120"
+          show-overflow-tooltip
+        />
+        <el-table-column label="鐘舵��" width="100" align="center">
+          <template #default="scope">
+            <el-tag :type="statusTagType(scope.row.status)">
+              {{ scope.row.status }}
+            </el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column label="褰掓。鐘舵��" width="100" align="center">
+          <template #default="scope">
+            <el-tag :type="scope.row.archived ? 'info' : 'success'">
+              {{ scope.row.archived ? '宸插綊妗�' : '鏈綊妗�' }}
+            </el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column label="鎿嶄綔" fixed="right" width="220" align="center">
+          <template #default="scope">
+            <el-button
+              type="primary"
+              link
+              size="small"
+              @click="openEdit(scope.row)"
+            >
+              缂栬緫
+            </el-button>
+            <el-button
+              type="warning"
+              link
+              size="small"
+              :disabled="scope.row.archived"
+              @click="archiveRow(scope.row)"
+            >
+              褰掓。
+            </el-button>
+            <el-button
+              type="danger"
+              link
+              size="small"
+              @click="removeRow(scope.row)"
+            >
+              鍒犻櫎
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+
+    <!-- 鏂板/缂栬緫寮圭獥 -->
+    <el-dialog
+      v-model="dialogVisible"
+      :title="dialogTitle"
+      width="600px"
+      destroy-on-close
+    >
+      <el-form
+        ref="formRef"
+        :model="form"
+        :rules="rules"
+        label-width="100px"
+        label-position="right"
+      >
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="杞﹁締缂栧彿锛�" prop="vehicleCode">
+              <el-input v-model="form.vehicleCode" placeholder="璇疯緭鍏ヨ溅杈嗙紪鍙�" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="杞︾墝鍙风爜锛�" prop="plateNumber">
+              <el-input v-model="form.plateNumber" placeholder="璇疯緭鍏ヨ溅鐗屽彿鐮�" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="杞﹁締绫诲瀷锛�" prop="vehicleType">
+              <el-select
+                v-model="form.vehicleType"
+                placeholder="璇烽�夋嫨杞﹁締绫诲瀷"
+                clearable
+              >
+                <el-option
+                  v-for="item in vehicleTypeOptions"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鎵�灞為儴闂細" prop="department">
+              <el-select
+                v-model="form.department"
+                placeholder="璇烽�夋嫨鎵�灞為儴闂�"
+                clearable
+              >
+                <el-option
+                  v-for="item in departmentOptions"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="璐疆鏃ユ湡锛�" prop="purchaseDate">
+              <el-date-picker
+                v-model="form.purchaseDate"
+                type="date"
+                value-format="YYYY-MM-DD"
+                format="YYYY-MM-DD"
+                placeholder="璇烽�夋嫨璐疆鏃ユ湡"
+                style="width: 100%"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鐘舵�侊細" prop="status">
+              <el-select v-model="form.status" placeholder="璇烽�夋嫨鐘舵��">
+                <el-option
+                  v-for="item in statusOptions"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="琛岄┒璇佺紪鍙凤細" prop="licenseNumber">
+              <el-input
+                v-model="form.licenseNumber"
+                placeholder="璇疯緭鍏ヨ椹惰瘉缂栧彿"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鍙戣瘉鏃ユ湡锛�" prop="licenseIssueDate">
+              <el-date-picker
+                v-model="form.licenseIssueDate"
+                type="date"
+                value-format="YYYY-MM-DD"
+                format="YYYY-MM-DD"
+                placeholder="璇烽�夋嫨鍙戣瘉鏃ユ湡"
+                style="width: 100%"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="12">
+            <el-form-item label="鍒版湡鏃ユ湡锛�" prop="licenseExpireDate">
+              <el-date-picker
+                v-model="form.licenseExpireDate"
+                type="date"
+                value-format="YYYY-MM-DD"
+                format="YYYY-MM-DD"
+                placeholder="璇烽�夋嫨鍒版湡鏃ユ湡"
+                style="width: 100%"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="handleCancel">鍙� 娑�</el-button>
+          <el-button type="primary" @click="handleSubmit">淇� 瀛�</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup>
+import { ref, reactive } from "vue";
+import { ElMessage, ElMessageBox } from "element-plus";
+
+// 妯℃嫙杞﹁締鍩虹鏁版嵁
+const allVehicles = ref([
+  {
+    id: 1,
+    vehicleCode: "CL-202401",
+    plateNumber: "绮12345",
+    vehicleType: "鍘㈠紡璐ц溅",
+    department: "鐗╂祦涓�閮�",
+    purchaseDate: "2022-03-15",
+    licenseNumber: "4401-2022-0001",
+    licenseIssueDate: "2022-03-10",
+    licenseExpireDate: "2026-03-10",
+    status: "鍦ㄧ敤",
+    archived: false,
+  },
+  {
+    id: 2,
+    vehicleCode: "CL-202402",
+    plateNumber: "绮67890",
+    vehicleType: "鍐疯棌杞�",
+    department: "鐗╂祦浜岄儴",
+    purchaseDate: "2021-08-01",
+    licenseNumber: "4401-2021-0123",
+    licenseIssueDate: "2021-07-28",
+    licenseExpireDate: "2025-07-28",
+    status: "缁翠慨",
+    archived: false,
+  },
+  {
+    id: 3,
+    vehicleCode: "CL-202403",
+    plateNumber: "绮11223",
+    vehicleType: "鐗靛紩杞�",
+    department: "椤圭洰杩愯緭閮�",
+    purchaseDate: "2020-05-20",
+    licenseNumber: "4401-2020-0456",
+    licenseIssueDate: "2020-05-18",
+    licenseExpireDate: "2024-05-18",
+    status: "闂茬疆",
+    archived: false,
+  },
+  {
+    id: 4,
+    vehicleCode: "CL-202404",
+    plateNumber: "绮33445",
+    vehicleType: "鍘㈠紡璐ц溅",
+    department: "璧勪骇绠$悊閮�",
+    purchaseDate: "2019-11-11",
+    licenseNumber: "4401-2019-0789",
+    licenseIssueDate: "2019-11-08",
+    licenseExpireDate: "2023-11-08",
+    status: "鍦ㄧ敤",
+    archived: true,
+  },
+]);
+
+// 涓嬫媺鏋氫妇
+const vehicleTypeOptions = [
+  { label: "鍘㈠紡璐ц溅", value: "鍘㈠紡璐ц溅" },
+  { label: "鍐疯棌杞�", value: "鍐疯棌杞�" },
+  { label: "鐗靛紩杞�", value: "鐗靛紩杞�" },
+  { label: "鍏朵粬", value: "鍏朵粬" },
+];
+
+const departmentOptions = [
+  { label: "鐗╂祦涓�閮�", value: "鐗╂祦涓�閮�" },
+  { label: "鐗╂祦浜岄儴", value: "鐗╂祦浜岄儴" },
+  { label: "椤圭洰杩愯緭閮�", value: "椤圭洰杩愯緭閮�" },
+  { label: "璧勪骇绠$悊閮�", value: "璧勪骇绠$悊閮�" },
+];
+
+const statusOptions = [
+  { label: "鍦ㄧ敤", value: "鍦ㄧ敤" },
+  { label: "闂茬疆", value: "闂茬疆" },
+  { label: "缁翠慨", value: "缁翠慨" },
+];
+
+// 鏌ヨ琛ㄥ崟
+const searchForm = reactive({
+  plateNumber: "",
+  vehicleType: "",
+  department: "",
+  status: "",
+  archived: "",
+});
+
+// 琛ㄦ牸鏁版嵁
+const tableData = ref([...allVehicles.value]);
+
+// 寮圭獥 & 琛ㄥ崟
+const dialogVisible = ref(false);
+const dialogTitle = ref("鏂板杞﹁締");
+const isEdit = ref(false);
+const formRef = ref(null);
+const form = reactive({
+  id: null,
+  vehicleCode: "",
+  plateNumber: "",
+  vehicleType: "",
+  department: "",
+  purchaseDate: "",
+  licenseNumber: "",
+  licenseIssueDate: "",
+  licenseExpireDate: "",
+  status: "鍦ㄧ敤",
+  archived: false,
+});
+
+const rules = {
+  vehicleCode: [{ required: true, message: "璇疯緭鍏ヨ溅杈嗙紪鍙�", trigger: "blur" }],
+  plateNumber: [{ required: true, message: "璇疯緭鍏ヨ溅鐗屽彿鐮�", trigger: "blur" }],
+  vehicleType: [{ required: true, message: "璇烽�夋嫨杞﹁締绫诲瀷", trigger: "change" }],
+  department: [{ required: true, message: "璇烽�夋嫨鎵�灞為儴闂�", trigger: "change" }],
+  purchaseDate: [{ required: true, message: "璇烽�夋嫨璐疆鏃ユ湡", trigger: "change" }],
+  status: [{ required: true, message: "璇烽�夋嫨鐘舵��", trigger: "change" }],
+  licenseNumber: [{ required: true, message: "璇疯緭鍏ヨ椹惰瘉缂栧彿", trigger: "blur" }],
+  licenseIssueDate: [{ required: true, message: "璇烽�夋嫨鍙戣瘉鏃ユ湡", trigger: "change" }],
+};
+
+// 鏌ヨ
+const handleQuery = () => {
+  tableData.value = allVehicles.value.filter((item) => {
+    if (
+      searchForm.plateNumber &&
+      !item.plateNumber.includes(searchForm.plateNumber.trim())
+    ) {
+      return false;
+    }
+    if (searchForm.vehicleType && item.vehicleType !== searchForm.vehicleType) {
+      return false;
+    }
+    if (searchForm.department && item.department !== searchForm.department) {
+      return false;
+    }
+    if (searchForm.status && item.status !== searchForm.status) {
+      return false;
+    }
+    if (searchForm.archived !== "") {
+      const targetArchived = searchForm.archived === "true";
+      if (item.archived !== targetArchived) return false;
+    }
+    return true;
+  });
+};
+
+const resetSearch = () => {
+  searchForm.plateNumber = "";
+  searchForm.vehicleType = "";
+  searchForm.department = "";
+  searchForm.status = "";
+  searchForm.archived = "";
+  handleQuery();
+};
+
+// 鏂板
+const openAdd = () => {
+  dialogTitle.value = "鏂板杞﹁締";
+  isEdit.value = false;
+  Object.assign(form, {
+    id: null,
+    vehicleCode: "",
+    plateNumber: "",
+    vehicleType: "",
+    department: "",
+    purchaseDate: "",
+    licenseInfo: "",
+    status: "鍦ㄧ敤",
+    archived: false,
+  });
+  dialogVisible.value = true;
+};
+
+// 缂栬緫
+const openEdit = (row) => {
+  dialogTitle.value = "缂栬緫杞﹁締";
+  isEdit.value = true;
+  Object.assign(form, row);
+  dialogVisible.value = true;
+};
+
+// 淇濆瓨
+const handleSubmit = () => {
+  if (!formRef.value) return;
+  formRef.value.validate((valid) => {
+    if (!valid) return;
+    if (isEdit.value) {
+      const index = allVehicles.value.findIndex((v) => v.id === form.id);
+      if (index !== -1) {
+        allVehicles.value[index] = { ...form };
+      }
+      ElMessage.success("杞﹁締淇℃伅宸叉洿鏂�");
+    } else {
+      const newId = allVehicles.value.length
+        ? Math.max(...allVehicles.value.map((v) => v.id)) + 1
+        : 1;
+      allVehicles.value.push({ ...form, id: newId });
+      ElMessage.success("杞﹁締淇℃伅宸叉柊澧�");
+    }
+    dialogVisible.value = false;
+    handleQuery();
+  });
+};
+
+const handleCancel = () => {
+  dialogVisible.value = false;
+};
+
+// 褰掓。
+const archiveRow = (row) => {
+  if (row.archived) return;
+  ElMessageBox.confirm(
+    "鏄惁纭灏嗚杞﹁締褰掓。锛熷綊妗e悗浠呬繚鐣欐煡璇紝涓嶅啀鍙備笌杩愯緭浠诲姟鍒嗛厤銆�",
+    "褰掓。鎻愮ず",
+    {
+      confirmButtonText: "纭",
+      cancelButtonText: "鍙栨秷",
+      type: "warning",
+    }
+  )
+    .then(() => {
+      row.archived = true;
+      if (row.status === "鍦ㄧ敤") {
+        row.status = "闂茬疆";
+      }
+      ElMessage.success("杞﹁締宸插綊妗�");
+      handleQuery();
+    })
+    .catch(() => {});
+};
+
+// 鍒犻櫎
+const removeRow = (row) => {
+  ElMessageBox.confirm("鏄惁纭鍒犻櫎璇ヨ溅杈嗗熀纭�淇℃伅锛�", "鍒犻櫎鎻愮ず", {
+    confirmButtonText: "纭",
+    cancelButtonText: "鍙栨秷",
+    type: "warning",
+  })
+    .then(() => {
+      allVehicles.value = allVehicles.value.filter((v) => v.id !== row.id);
+      handleQuery();
+      ElMessage.success("鍒犻櫎鎴愬姛");
+    })
+    .catch(() => {});
+};
+
+// 鐘舵�佹牱寮�
+const statusTagType = (status) => {
+  if (status === "鍦ㄧ敤") return "success";
+  if (status === "闂茬疆") return "info";
+  if (status === "缁翠慨") return "warning";
+  return "default";
+};
+</script>
+
+<style scoped lang="scss">
+.dialog-footer {
+  text-align: right;
+}
+</style>
+

--
Gitblit v1.9.3