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