From d29ad31fb1c91e9162d44362fc09b9e2eb96744f Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期五, 29 八月 2025 11:58:06 +0800
Subject: [PATCH] 关键煤种锁仓

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

diff --git a/src/views/coalLockManagement/index.vue b/src/views/coalLockManagement/index.vue
new file mode 100644
index 0000000..ee9fff6
--- /dev/null
+++ b/src/views/coalLockManagement/index.vue
@@ -0,0 +1,725 @@
+<template>
+  <div class="app-container">
+    <el-card class="box-card">
+      <!-- 鎼滅储鍖哄煙 -->
+      <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+        <el-form-item label="鐓ょ鍚嶇О" prop="coalName">
+          <el-input
+            v-model="queryParams.coalName"
+            placeholder="璇疯緭鍏ョ叅绉嶅悕绉�"
+            clearable
+            size="small"
+            @keyup.enter="handleQuery"
+          />
+        </el-form-item>
+        <el-form-item label="閿佷粨鐘舵��" prop="lockStatus">
+          <el-select v-model="queryParams.lockStatus" placeholder="璇烽�夋嫨閿佷粨鐘舵��" clearable size="small">
+            <el-option label="宸查攣瀹�" value="locked" />
+            <el-option label="閮ㄥ垎閿佸畾" value="partial" />
+            <el-option label="鏈攣瀹�" value="unlocked" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="渚涘簲鍟�" prop="supplierName">
+          <el-input
+            v-model="queryParams.supplierName"
+            placeholder="璇疯緭鍏ヤ緵搴斿晢鍚嶇О"
+            clearable
+            size="small"
+            @keyup.enter="handleQuery"
+          />
+        </el-form-item>
+        <el-form-item label="閿佷粨鏃ユ湡" prop="lockDateRange">
+          <el-date-picker
+            v-model="queryParams.lockDateRange"
+            type="daterange"
+            range-separator="鑷�"
+            start-placeholder="寮�濮嬫棩鏈�"
+            end-placeholder="缁撴潫鏃ユ湡"
+            size="small"
+            format="YYYY-MM-DD"
+            value-format="YYYY-MM-DD"
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" icon="Search" size="small" @click="handleQuery">鎼滅储</el-button>
+          <el-button icon="Refresh" size="small" @click="resetQuery">閲嶇疆</el-button>
+        </el-form-item>
+      </el-form>
+
+      <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button
+            type="primary"
+            plain
+            icon="Plus"
+            size="small"
+            @click="handleAdd"
+            v-hasPermi="['coalLock:add']"
+          >鏂板閿佷粨</el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button
+            type="success"
+            plain
+            icon="Edit"
+            size="small"
+            :disabled="single"
+            @click="handleUpdate"
+            v-hasPermi="['coalLock:edit']"
+          >淇敼閿佷粨</el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button
+            type="danger"
+            plain
+            icon="Delete"
+            size="small"
+            :disabled="multiple"
+            @click="handleDelete"
+            v-hasPermi="['coalLock:remove']"
+          >鍒犻櫎閿佷粨</el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button
+            type="warning"
+            plain
+            icon="Unlock"
+            size="small"
+            :disabled="single"
+            @click="handleUnlock"
+            v-hasPermi="['coalLock:unlock']"
+          >瑙i櫎閿佷粨</el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button
+            type="info"
+            plain
+            icon="View"
+            size="small"
+            :disabled="single"
+            @click="handleView"
+            v-hasPermi="['coalLock:query']"
+          >鏌ョ湅璇︽儏</el-button>
+        </el-col>
+        <!-- <el-col :span="1.5">
+          <el-button
+            type="primary"
+            plain
+            icon="Download"
+            size="small"
+            @click="handleExport"
+            v-hasPermi="['coalLock:export']"
+          >瀵煎嚭</el-button>
+        </el-col> -->
+        <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+      </el-row>
+
+      <!-- 鏁版嵁琛ㄦ牸 -->
+      <el-table v-loading="loading" :data="lockList" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column label="閿佷粨缂栧彿" align="center" prop="lockCode" width="180" />
+        <el-table-column label="鐓ょ鍚嶇О" align="center" prop="coalName" min-width="120" />
+        <el-table-column label="渚涘簲鍟�" align="center" prop="supplierName" min-width="120" />
+        <el-table-column label="鎬诲簱瀛橀噺(鍚�)" align="center" prop="totalInventory" width="120" />
+        <el-table-column label="閿佷粨鏁伴噺(鍚�)" align="center" prop="lockQuantity" width="120" />
+        <el-table-column label="鍙敤鏁伴噺(鍚�)" align="center" prop="availableQuantity" width="120" />
+        <el-table-column label="閿佷粨鐘舵��" align="center" prop="lockStatus" width="100">
+          <template #default="scope">
+            <el-tag :type="getLockStatusType(scope.row.lockStatus)">
+              {{ getLockStatusText(scope.row.lockStatus) }}
+            </el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column label="閿佷粨鍘熷洜" align="center" prop="lockReason" min-width="150" show-overflow-tooltip />
+        <el-table-column label="閿佷粨浜�" align="center" prop="lockUser" width="100" />
+        <el-table-column label="閿佷粨鏃堕棿" align="center" prop="lockTime" width="180" />
+        <el-table-column label="棰勮瑙i攣鏃堕棿" align="center" prop="expectedUnlockTime" width="180" />
+        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width" width="200">
+          <template #default="scope">
+            <el-button
+              size="small"
+              type="text"
+              icon="Edit"
+              @click="handleUpdate(scope.row)"
+              v-hasPermi="['coalLock:edit']"
+            >淇敼</el-button>
+            <el-button
+              size="small"
+              type="text"
+              icon="Unlock"
+              @click="handleUnlock(scope.row)"
+              v-hasPermi="['coalLock:unlock']"
+            >瑙i攣</el-button>
+            <el-button
+              size="small"
+              type="text"
+              icon="Delete"
+              @click="handleDelete(scope.row)"
+              v-hasPermi="['coalLock:remove']"
+            >鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <!-- 鍒嗛〉缁勪欢 -->
+      <pagination
+        v-show="total > 0"
+        :total="total"
+        v-model:page="queryParams.pageNum"
+        v-model:limit="queryParams.pageSize"
+        @pagination="getList"
+      />
+    </el-card>
+
+    <!-- 娣诲姞鎴栦慨鏀归攣浠撳璇濇 -->
+    <el-dialog :title="title" v-model="open" width="800px" append-to-body>
+      <el-form ref="lockFormRef" :model="form" :rules="rules" label-width="120px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="鐓ょ鍚嶇О" prop="coalName">
+              <el-select
+                v-model="form.coalId"
+                placeholder="璇烽�夋嫨鐓ょ"
+                filterable
+                clearable
+                @change="handleCoalChange"
+                style="width: 100%"
+              >
+                <el-option
+                  v-for="coal in coalOptions"
+                  :key="coal.value"
+                  :label="coal.label"
+                  :value="coal.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="渚涘簲鍟�" prop="supplierId">
+              <el-select
+                v-model="form.supplierId"
+                placeholder="璇烽�夋嫨渚涘簲鍟�"
+                filterable
+                clearable
+                style="width: 100%"
+              >
+                <el-option
+                  v-for="supplier in supplierOptions"
+                  :key="supplier.value"
+                  :label="supplier.label"
+                  :value="supplier.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="鎬诲簱瀛橀噺(鍚�)" prop="totalInventory">
+              <el-input v-model="form.totalInventory" placeholder="璇疯緭鍏ユ�诲簱瀛橀噺" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="閿佷粨鏁伴噺(鍚�)" prop="lockQuantity">
+              <el-input
+                v-model="form.lockQuantity"
+                placeholder="璇疯緭鍏ラ攣浠撴暟閲�"
+                type="number"
+                :max="form.totalInventory"
+                @input="handleLockQuantityChange"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="鍙敤鏁伴噺(鍚�)" prop="availableQuantity">
+              <el-input v-model="form.availableQuantity" placeholder="鍙敤鏁伴噺" disabled />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="閿佷粨鐘舵��" prop="lockStatus">
+              <el-select v-model="form.lockStatus" placeholder="璇烽�夋嫨閿佷粨鐘舵��" style="width: 100%">
+                <el-option label="宸查攣瀹�" value="locked" />
+                <el-option label="閮ㄥ垎閿佸畾" value="partial" />
+                <el-option label="鏈攣瀹�" value="unlocked" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="閿佷粨鏃堕棿" prop="lockTime">
+              <el-date-picker
+                v-model="form.lockTime"
+                type="datetime"
+                placeholder="閫夋嫨閿佷粨鏃堕棿"
+                style="width: 100%"
+                format="YYYY-MM-DD HH:mm:ss"
+                value-format="YYYY-MM-DD HH:mm:ss"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="棰勮瑙i攣鏃堕棿" prop="expectedUnlockTime">
+              <el-date-picker
+                v-model="form.expectedUnlockTime"
+                type="datetime"
+                placeholder="閫夋嫨棰勮瑙i攣鏃堕棿"
+                style="width: 100%"
+                format="YYYY-MM-DD HH:mm:ss"
+                value-format="YYYY-MM-DD HH:mm:ss"
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="閿佷粨鍘熷洜" prop="lockReason">
+              <el-input
+                v-model="form.lockReason"
+                type="textarea"
+                placeholder="璇疯緭鍏ラ攣浠撳師鍥�"
+                :rows="3"
+                maxlength="500"
+                show-word-limit
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="澶囨敞" prop="remarks">
+              <el-input
+                v-model="form.remarks"
+                type="textarea"
+                placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�"
+                :rows="2"
+                maxlength="200"
+                show-word-limit
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+          <el-button @click="cancel">鍙� 娑�</el-button>
+        </div>
+      </template>
+    </el-dialog>
+
+    <!-- 鏌ョ湅璇︽儏瀵硅瘽妗� -->
+    <el-dialog title="閿佷粨璇︽儏" v-model="viewOpen" width="800px" append-to-body>
+      <el-descriptions :column="2" border>
+        <el-descriptions-item label="閿佷粨缂栧彿">{{ form.lockCode }}</el-descriptions-item>
+        <el-descriptions-item label="鐓ょ鍚嶇О">{{ form.coalName }}</el-descriptions-item>
+        <el-descriptions-item label="渚涘簲鍟�">{{ form.supplierName }}</el-descriptions-item>
+        <el-descriptions-item label="鎬诲簱瀛橀噺">{{ form.totalInventory }}鍚�</el-descriptions-item>
+        <el-descriptions-item label="閿佷粨鏁伴噺">{{ form.lockQuantity }}鍚�</el-descriptions-item>
+        <el-descriptions-item label="鍙敤鏁伴噺">{{ form.availableQuantity }}鍚�</el-descriptions-item>
+        <el-descriptions-item label="閿佷粨鐘舵��">
+          <el-tag :type="getLockStatusType(form.lockStatus)">
+            {{ getLockStatusText(form.lockStatus) }}
+          </el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="閿佷粨浜�">{{ form.lockUser }}</el-descriptions-item>
+        <el-descriptions-item label="閿佷粨鏃堕棿">{{ form.lockTime }}</el-descriptions-item>
+        <el-descriptions-item label="棰勮瑙i攣鏃堕棿">{{ form.expectedUnlockTime }}</el-descriptions-item>
+        <el-descriptions-item label="閿佷粨鍘熷洜" :span="2">{{ form.lockReason }}</el-descriptions-item>
+        <el-descriptions-item label="澶囨敞" :span="2">{{ form.remarks }}</el-descriptions-item>
+      </el-descriptions>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="viewOpen = false">鍏� 闂�</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup>
+import { ref, reactive, computed, onMounted } from 'vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { Search, Plus, Edit, Delete, Unlock, View, Download, Refresh } from '@element-plus/icons-vue'
+
+// 鍝嶅簲寮忔暟鎹�
+const loading = ref(false)
+const showSearch = ref(true)
+const open = ref(false)
+const viewOpen = ref(false)
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const lockList = ref([])
+const coalOptions = ref([])
+const supplierOptions = ref([])
+
+// 鏌ヨ鍙傛暟
+const queryParams = reactive({
+  pageNum: 1,
+  pageSize: 10,
+  coalName: '',
+  lockStatus: '',
+  supplierName: '',
+  lockDateRange: []
+})
+
+// 琛ㄥ崟鏁版嵁
+const form = reactive({
+  id: undefined,
+  lockCode: '',
+  coalId: '',
+  coalName: '',
+  supplierId: '',
+  supplierName: '',
+  totalInventory: 0,
+  lockQuantity: 0,
+  availableQuantity: 0,
+  lockStatus: 'locked',
+  lockReason: '',
+  lockUser: '',
+  lockTime: '',
+  expectedUnlockTime: '',
+  remarks: ''
+})
+
+// 琛ㄥ崟楠岃瘉瑙勫垯
+const rules = reactive({
+  coalId: [
+    { required: true, message: '璇烽�夋嫨鐓ょ', trigger: 'change' }
+  ],
+  supplierId: [
+    { required: true, message: '璇烽�夋嫨渚涘簲鍟�', trigger: 'change' }
+  ],
+  lockQuantity: [
+    { required: true, message: '璇疯緭鍏ラ攣浠撴暟閲�', trigger: 'blur' },
+    { type: 'number', min: 0, message: '閿佷粨鏁伴噺涓嶈兘灏忎簬0', trigger: 'blur' }
+  ],
+  lockStatus: [
+    { required: true, message: '璇烽�夋嫨閿佷粨鐘舵��', trigger: 'change' }
+  ],
+  lockReason: [
+    { required: true, message: '璇疯緭鍏ラ攣浠撳師鍥�', trigger: 'blur' }
+  ],
+  lockTime: [
+    { required: true, message: '璇烽�夋嫨閿佷粨鏃堕棿', trigger: 'change' }
+  ]
+})
+
+// 璁$畻灞炴��
+const title = computed(() => {
+  return form.id ? '淇敼閿佷粨' : '鏂板閿佷粨'
+})
+
+// 琛ㄥ崟寮曠敤
+const lockFormRef = ref()
+const queryForm = ref()
+
+// 鍒濆鍖栨暟鎹�
+onMounted(() => {
+  getList()
+  initOptions()
+})
+
+// 鍒濆鍖栭�夐」鏁版嵁
+const initOptions = () => {
+  // 妯℃嫙鐓ょ鏁版嵁
+  coalOptions.value = [
+    { value: '1', label: '鏃犵儫鐓�' },
+    { value: '2', label: '鐑熺叅' },
+    { value: '3', label: '瑜愮叅' },
+    { value: '4', label: '鐒︾叅' },
+    { value: '5', label: '姘旂叅' }
+  ]
+  
+  // 妯℃嫙渚涘簲鍟嗘暟鎹�
+  supplierOptions.value = [
+    { value: '1', label: '灞辫タ鐓ょ偔闆嗗洟' },
+    { value: '2', label: '鍐呰挋鍙ょ叅鐐叕鍙�' },
+    { value: '3', label: '闄曡タ鐓ょ偔宸ヤ笟' },
+    { value: '4', label: '娌冲崡鐓ょ偔闆嗗洟' },
+    { value: '5', label: '娌冲寳鐓ょ偔鍏徃' }
+  ]
+  
+  // 妯℃嫙閿佷粨鍒楄〃鏁版嵁
+  lockList.value = [
+    {
+      id: '1',
+      lockCode: 'LK20241201001',
+      coalId: '1',
+      coalName: '鏃犵儫鐓�',
+      supplierId: '1',
+      supplierName: '灞辫タ鐓ょ偔闆嗗洟',
+      totalInventory: 1000,
+      lockQuantity: 300,
+      availableQuantity: 700,
+      lockStatus: 'partial',
+      lockReason: '鐢熶骇璁″垝棰勭暀',
+      lockUser: '寮犱笁',
+      lockTime: '2024-12-01 09:00:00',
+      expectedUnlockTime: '2024-12-31 18:00:00'
+    },
+    {
+      id: '2',
+      lockCode: 'LK20241201002',
+      coalId: '2',
+      coalName: '鐑熺叅',
+      supplierId: '2',
+      supplierName: '鍐呰挋鍙ょ叅鐐叕鍙�',
+      totalInventory: 800,
+      lockQuantity: 800,
+      availableQuantity: 0,
+      lockStatus: 'locked',
+      lockReason: '璐ㄩ噺妫�娴嬩腑',
+      lockUser: '鏉庡洓',
+      lockTime: '2024-12-01 10:00:00',
+      expectedUnlockTime: '2024-12-15 18:00:00'
+    },
+    {
+      id: '3',
+      lockCode: 'LK20241201003',
+      coalId: '4',
+      coalName: '鐒︾叅',
+      supplierId: '3',
+      supplierName: '闄曡タ鐓ょ偔宸ヤ笟',
+      totalInventory: 1200,
+      lockQuantity: 0,
+      availableQuantity: 1200,
+      lockStatus: 'unlocked',
+      lockReason: '',
+      lockUser: '',
+      lockTime: '',
+      expectedUnlockTime: ''
+    }
+  ]
+  total.value = lockList.value.length
+}
+
+// 鑾峰彇閿佷粨鐘舵�佺被鍨�
+const getLockStatusType = (status) => {
+  const statusMap = {
+    'locked': 'danger',
+    'partial': 'warning',
+    'unlocked': 'success'
+  }
+  return statusMap[status] || 'info'
+}
+
+// 鑾峰彇閿佷粨鐘舵�佹枃鏈�
+const getLockStatusText = (status) => {
+  const statusMap = {
+    'locked': '宸查攣瀹�',
+    'partial': '閮ㄥ垎閿佸畾',
+    'unlocked': '鏈攣瀹�'
+  }
+  return statusMap[status] || '鏈煡'
+}
+
+// 鐓ょ閫夋嫨鍙樺寲澶勭悊
+const handleCoalChange = (coalId) => {
+  const selectedCoal = coalOptions.value.find(item => item.value === coalId)
+  if (selectedCoal) {
+    form.coalName = selectedCoal.label
+    // 妯℃嫙璁剧疆搴撳瓨鏁版嵁
+    form.totalInventory = Math.floor(Math.random() * 1000) + 500
+    form.availableQuantity = form.totalInventory - form.lockQuantity
+  }
+}
+
+// 閿佷粨鏁伴噺鍙樺寲澶勭悊
+const handleLockQuantityChange = () => {
+  if (form.lockQuantity > form.totalInventory) {
+    form.lockQuantity = form.totalInventory
+  }
+  form.availableQuantity = form.totalInventory - form.lockQuantity
+  
+  // 鏇存柊閿佷粨鐘舵��
+  if (form.lockQuantity === 0) {
+    form.lockStatus = 'unlocked'
+  } else if (form.lockQuantity === form.totalInventory) {
+    form.lockStatus = 'locked'
+  } else {
+    form.lockStatus = 'partial'
+  }
+}
+
+// 鏌ヨ鍒楄〃
+const getList = () => {
+  loading.value = true
+  // 妯℃嫙API璋冪敤寤惰繜
+  setTimeout(() => {
+    loading.value = false
+  }, 500)
+}
+
+// 鎼滅储
+const handleQuery = () => {
+  queryParams.pageNum = 1
+  getList()
+}
+
+// 閲嶇疆鎼滅储
+const resetQuery = () => {
+  queryParams.coalName = ''
+  queryParams.lockStatus = ''
+  queryParams.supplierName = ''
+  queryParams.lockDateRange = []
+  handleQuery()
+}
+
+// 閫夋嫨鍙樺寲澶勭悊
+const handleSelectionChange = (selection) => {
+  single.value = selection.length !== 1
+  multiple.value = !selection.length
+}
+
+// 鏂板閿佷粨
+const handleAdd = () => {
+  reset()
+  open.value = true
+}
+
+// 淇敼閿佷粨
+const handleUpdate = (row) => {
+  reset()
+  const id = row.id || row
+  const lockData = lockList.value.find(item => item.id === id)
+  if (lockData) {
+    Object.assign(form, lockData)
+  }
+  open.value = true
+}
+
+// 鏌ョ湅璇︽儏
+const handleView = (row) => {
+  reset()
+  const id = row.id || row
+  const lockData = lockList.value.find(item => item.id === id)
+  if (lockData) {
+    Object.assign(form, lockData)
+  }
+  viewOpen.value = true
+}
+
+// 鍒犻櫎閿佷粨
+const handleDelete = (row) => {
+  const ids = row.id || row
+  ElMessageBox.confirm('纭鍒犻櫎閫変腑鐨勯攣浠撹褰曞悧锛�', '璀﹀憡', {
+    confirmButtonText: '纭畾',
+    cancelButtonText: '鍙栨秷',
+    type: 'warning'
+  }).then(() => {
+    ElMessage.success('鍒犻櫎鎴愬姛')
+    getList()
+  })
+}
+
+// 瑙i櫎閿佷粨
+const handleUnlock = (row) => {
+  const id = row.id || row
+  ElMessageBox.confirm('纭瑙i櫎璇ョ叅绉嶇殑閿佷粨鍚楋紵', '璀﹀憡', {
+    confirmButtonText: '纭畾',
+    cancelButtonText: '鍙栨秷',
+    type: 'warning'
+  }).then(() => {
+    const lockData = lockList.value.find(item => item.id === id)
+    if (lockData) {
+      lockData.lockQuantity = 0
+      lockData.availableQuantity = lockData.totalInventory
+      lockData.lockStatus = 'unlocked'
+      lockData.lockReason = ''
+      lockData.lockUser = ''
+      lockData.lockTime = ''
+      lockData.expectedUnlockTime = ''
+    }
+    ElMessage.success('瑙i攣鎴愬姛')
+    getList()
+  })
+}
+
+// 瀵煎嚭
+const handleExport = () => {
+  ElMessage.success('瀵煎嚭鍔熻兘寮�鍙戜腑...')
+}
+
+// 鎻愪氦琛ㄥ崟
+const submitForm = () => {
+  lockFormRef.value.validate((valid) => {
+    if (valid) {
+      if (form.id) {
+        // 淇敼
+        const index = lockList.value.findIndex(item => item.id === form.id)
+        if (index !== -1) {
+          Object.assign(lockList.value[index], form)
+        }
+        ElMessage.success('淇敼鎴愬姛')
+      } else {
+        // 鏂板
+        const newLock = {
+          ...form,
+          id: Date.now().toString(),
+          lockCode: `LK${new Date().toISOString().slice(0, 10).replace(/-/g, '')}${String(lockList.value.length + 1).padStart(3, '0')}`,
+          lockUser: '褰撳墠鐢ㄦ埛'
+        }
+        lockList.value.unshift(newLock)
+        total.value = lockList.value.length
+        ElMessage.success('鏂板鎴愬姛')
+      }
+      open.value = false
+      getList()
+    }
+  })
+}
+
+// 鍙栨秷
+const cancel = () => {
+  open.value = false
+  reset()
+}
+
+// 閲嶇疆琛ㄥ崟
+const reset = () => {
+  Object.assign(form, {
+    id: undefined,
+    lockCode: '',
+    coalId: '',
+    coalName: '',
+    supplierId: '',
+    supplierName: '',
+    totalInventory: 0,
+    lockQuantity: 0,
+    availableQuantity: 0,
+    lockStatus: 'locked',
+    lockReason: '',
+    lockUser: '',
+    lockTime: '',
+    expectedUnlockTime: '',
+    remarks: ''
+  })
+}
+</script>
+
+<style scoped>
+.app-container {
+  padding: 20px;
+}
+
+.box-card {
+  margin-bottom: 20px;
+}
+
+.mb8 {
+  margin-bottom: 8px;
+}
+
+.dialog-footer {
+  text-align: right;
+}
+
+.el-descriptions {
+  margin: 20px 0;
+}
+</style>

--
Gitblit v1.9.3