From cd6eb9089e893cf7fa998543af1125dbef81a355 Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期五, 15 八月 2025 14:29:28 +0800 Subject: [PATCH] 电表采集页面添加 --- src/views/procurementManagement/procurementLedger/index.vue | 349 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 349 insertions(+), 0 deletions(-) diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue index 82f31df..2877efd 100644 --- a/src/views/procurementManagement/procurementLedger/index.vue +++ b/src/views/procurementManagement/procurementLedger/index.vue @@ -39,6 +39,7 @@ <div class="table_list"> <div style="display: flex;justify-content: flex-end;margin-bottom: 20px;"> <el-button type="primary" @click="openForm('add')">鏂板鍙拌处</el-button> + <el-button type="success" @click="openScanAddDialog">鎵爜鏂板</el-button> <el-button @click="handleOut">瀵煎嚭</el-button> <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button> </div> @@ -164,6 +165,7 @@ @click="showQRCode(scope.row)" >鐢熸垚浜岀淮鐮�</el-button > + </template> </el-table-column> </el-table> @@ -560,6 +562,206 @@ <el-button type="primary" @click="downloadQRCode">涓嬭浇浜岀淮鐮佸浘鐗�</el-button> </div> </div> + </el-dialog> + + <!-- 鎵爜鏂板瀵硅瘽妗� --> + <el-dialog + v-model="scanAddDialogVisible" + title="鎵爜鏂板閲囪喘鍙拌处" + width="70%" + @close="closeScanAddDialog" + > + <el-form + :model="scanAddForm" + label-width="140px" + label-position="top" + :rules="scanAddRules" + ref="scanAddFormRef" + > + <el-row :gutter="20"> + <el-col :span="24"> + <el-form-item label="鎵爜鍐呭锛�"> + <el-input + v-model="scanAddForm.scanContent" + type="textarea" + :rows="3" + placeholder="璇锋壂鎻忎簩缁寸爜鎴栨墜鍔ㄨ緭鍏ラ噰璐悎鍚屼俊鎭�" + @input="parseScanContent" + /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="閲囪喘鍚堝悓鍙凤細" prop="purchaseContractNumber"> + <el-input + v-model="scanAddForm.purchaseContractNumber" + placeholder="璇疯緭鍏�" + clearable + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="渚涘簲鍟嗗悕绉帮細" prop="supplierName"> + <el-input + v-model="scanAddForm.supplierName" + placeholder="璇疯緭鍏�" + clearable + /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="椤圭洰鍚嶇О锛�" prop="projectName"> + <el-input + v-model="scanAddForm.projectName" + placeholder="璇疯緭鍏�" + clearable + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍚堝悓閲戦(鍏�)锛�" prop="contractAmount"> + <el-input-number + v-model="scanAddForm.contractAmount" + :precision="2" + :step="0.1" + clearable + style="width: 100%" + placeholder="璇疯緭鍏�" + /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="浠樻鏂瑰紡锛�"> + <el-input + v-model="scanAddForm.paymentMethod" + placeholder="璇疯緭鍏�" + clearable + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="褰曞叆浜猴細"> + <el-input v-model="scanAddForm.recorderName" disabled /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="24"> + <el-form-item label="澶囨敞锛�"> + <el-input + v-model="scanAddForm.remark" + type="textarea" + :rows="2" + placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�" + clearable + /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <div class="dialog-footer"> + <el-button type="primary" @click="submitScanAdd">纭鏂板</el-button> + <el-button @click="closeScanAddDialog">鍙栨秷</el-button> + </div> + </template> + </el-dialog> + + <!-- 鎵爜鐧昏瀵硅瘽妗� --> + <el-dialog + v-model="scanDialogVisible" + title="鎵爜鐧昏" + width="60%" + @close="closeScanDialog" + > + <el-form + :model="scanForm" + label-width="120px" + label-position="left" + :rules="scanRules" + ref="scanFormRef" + > + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="閲囪喘鍚堝悓鍙凤細"> + <el-input v-model="scanForm.purchaseContractNumber" disabled /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="渚涘簲鍟嗗悕绉帮細"> + <el-input v-model="scanForm.supplierName" disabled /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="椤圭洰鍚嶇О锛�"> + <el-input v-model="scanForm.projectName" disabled /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鎵爜鏃堕棿锛�"> + <el-input v-model="scanForm.scanTime" disabled /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="12"> + <el-form-item label="鎵爜浜猴細"> + <el-input v-model="scanForm.scannerName" disabled /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鎵爜鐘舵�侊細"> + <el-tag :type="scanForm.scanStatus === '宸叉壂鐮�' ? 'success' : 'warning'"> + {{ scanForm.scanStatus }} + </el-tag> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="24"> + <el-form-item label="鎵爜澶囨敞锛�"> + <el-input + v-model="scanForm.scanRemark" + type="textarea" + :rows="3" + placeholder="璇疯緭鍏ユ壂鐮佸娉ㄤ俊鎭�" + /> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="24"> + <el-form-item label="鎵爜璁板綍锛�"> + <el-table :data="scanRecords" border style="width: 100%"> + <el-table-column label="搴忓彿" type="index" width="60" align="center" /> + <el-table-column label="鎵爜鏃堕棿" prop="scanTime" width="180" /> + <el-table-column label="鎵爜浜�" prop="scannerName" width="120" /> + <el-table-column label="鎵爜鐘舵��" prop="scanStatus" width="100"> + <template #default="scope"> + <el-tag :type="scope.row.scanStatus === '宸叉壂鐮�' ? 'success' : 'warning'"> + {{ scope.row.scanStatus }} + </el-tag> + </template> + </el-table-column> + <el-table-column label="澶囨敞" prop="scanRemark" /> + </el-table> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <div class="dialog-footer"> + <el-button type="primary" @click="submitScan">纭鎵爜</el-button> + <el-button @click="closeScanDialog">鍙栨秷</el-button> + </div> + </template> </el-dialog> </div> </template> @@ -1220,6 +1422,153 @@ proxy.$modal.msgSuccess("涓嬭浇鎴愬姛"); }; +// 鎵爜鏂板瀵硅瘽妗嗙浉鍏冲彉閲� +const scanAddDialogVisible = ref(false); +const scanAddForm = reactive({ + scanContent: "", + purchaseContractNumber: "", + supplierName: "", + projectName: "", + contractAmount: "", + paymentMethod: "", + recorderName: "", + scanRemark: "", +}); +const scanAddRules = { + purchaseContractNumber: [{ required: true, message: "璇疯緭鍏ラ噰璐悎鍚屽彿", trigger: "blur" }], + supplierName: [{ required: true, message: "璇疯緭鍏ヤ緵搴斿晢鍚嶇О", trigger: "blur" }], + projectName: [{ required: true, message: "璇疯緭鍏ラ」鐩悕绉�", trigger: "blur" }], +}; + +// 鎵爜鐧昏瀵硅瘽妗嗙浉鍏冲彉閲� +const scanDialogVisible = ref(false); +const scanForm = reactive({ + purchaseContractNumber: "", + supplierName: "", + projectName: "", + scanTime: "", + scannerName: "", + scanStatus: "鏈壂鐮�", + scanRemark: "", +}); +const scanRules = { + scanRemark: [{ required: true, message: "璇疯緭鍏ユ壂鐮佸娉�", trigger: "blur" }], +}; +const scanRecords = ref([]); + +// 鎵撳紑鎵爜鏂板瀵硅瘽妗� +const openScanAddDialog = () => { + scanAddForm.scanContent = ""; + scanAddForm.purchaseContractNumber = ""; + scanAddForm.supplierName = ""; + scanAddForm.projectName = ""; + scanAddForm.contractAmount = ""; + scanAddForm.paymentMethod = ""; + scanAddForm.recorderName = userStore.nickName; + scanAddForm.scanRemark = ""; + scanAddDialogVisible.value = true; +}; + +// 瑙f瀽鎵爜鍐呭锛堟ā鎷熻В鏋愪簩缁寸爜鏁版嵁锛� +const parseScanContent = (content) => { + if (!content) return; + + // 妯℃嫙瑙f瀽浜岀淮鐮佸唴瀹癸紝杩欓噷鍙互鏍规嵁瀹為檯闇�姹傝皟鏁磋В鏋愰�昏緫 + // 鍋囪鎵爜鍐呭鏍煎紡涓猴細鍚堝悓鍙穦渚涘簲鍟唡椤圭洰|閲戦|浠樻鏂瑰紡 + const parts = content.split('|'); + if (parts.length >= 3) { + scanAddForm.purchaseContractNumber = parts[0] || ""; + scanAddForm.supplierName = parts[1] || ""; + scanAddForm.projectName = parts[2] || ""; + scanAddForm.contractAmount = parts[3] || ""; + scanAddForm.paymentMethod = parts[4] || ""; + } +}; + +// 鍏抽棴鎵爜鏂板瀵硅瘽妗� +const closeScanAddDialog = () => { + scanAddDialogVisible.value = false; + proxy.resetForm("scanAddFormRef"); +}; + +// 鎻愪氦鎵爜鏂板 +const submitScanAdd = () => { + proxy.$refs["scanAddFormRef"].validate((valid) => { + if (valid) { + // 鏋勫缓鏂板鏁版嵁 + const newData = { + purchaseContractNumber: scanAddForm.purchaseContractNumber, + supplierName: scanAddForm.supplierName, + projectName: scanAddForm.projectName, + contractAmount: scanAddForm.contractAmount, + paymentMethod: scanAddForm.paymentMethod, + recorderName: scanAddForm.recorderName, + entryDate: getCurrentDate(), + remark: scanAddForm.scanRemark, + type: 2 + }; + + // 妯℃嫙鏂板鎴愬姛 + proxy.$modal.msgSuccess("鎵爜鏂板鎴愬姛锛�"); + closeScanAddDialog(); + + // 鍙互閫夋嫨鏄惁鍒锋柊鍒楄〃 + // getList(); + } + }); +}; + +// 鎵撳紑鎵爜鐧昏瀵硅瘽妗� +const openScanDialog = (row) => { + scanForm.purchaseContractNumber = row.purchaseContractNumber; + scanForm.supplierName = row.supplierName; + scanForm.projectName = row.projectName; + scanForm.scanTime = getCurrentDateTime(); + scanForm.scannerName = userStore.nickName; + scanForm.scanStatus = "鏈壂鐮�"; + scanForm.scanRemark = ""; + scanRecords.value = []; + scanDialogVisible.value = true; +}; + +// 鍏抽棴鎵爜鐧昏瀵硅瘽妗� +const closeScanDialog = () => { + scanDialogVisible.value = false; + proxy.resetForm("scanFormRef"); +}; + +// 鎻愪氦鎵爜鐧昏 +const submitScan = () => { + proxy.$refs["scanFormRef"].validate((valid) => { + if (valid) { + // 娣诲姞鎵爜璁板綍 + scanRecords.value.push({ + ...scanForm, + id: Date.now(), // 妯℃嫙ID + scanTime: getCurrentDateTime(), + }); + scanForm.scanStatus = "宸叉壂鐮�"; + scanForm.scanRemark = scanForm.scanRemark || "鏃�"; + proxy.$modal.msgSuccess("鎵爜鐧昏鎴愬姛锛�"); + closeScanDialog(); + } + }); +}; + +// 鑾峰彇褰撳墠鏃ユ湡鏃堕棿 +function getCurrentDateTime() { + const now = new Date(); + const year = now.getFullYear(); + const month = String(now.getMonth() + 1).padStart(2, "0"); + const day = String(now.getDate()).padStart(2, "0"); + const hours = String(now.getHours()).padStart(2, "0"); + const minutes = String(now.getMinutes()).padStart(2, "0"); + const seconds = String(now.getSeconds()).padStart(2, "0"); + return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; +} + + + onMounted(() => { getList(); }); -- Gitblit v1.9.3