From 2a3018105d22625b566752d9d841e12e2c80e1f3 Mon Sep 17 00:00:00 2001
From: 张诺 <zhang_12370@163.com>
Date: 星期四, 15 一月 2026 16:38:17 +0800
Subject: [PATCH] 计量器具台账 页面开发(100%)

---
 src/views/financialManagement/accounting/index.vue                             |    2 
 src/views/equipmentManagement/measurementEquipment/components/rowClickData.vue |  128 ++++++++++++++++++
 src/views/equipmentManagement/measurementEquipment/index.vue                   |  142 +++++++++++--------
 src/views/equipmentManagement/measurementEquipment/components/formDia.vue      |   96 +++++++++----
 src/views/equipmentManagement/measurementEquipment/components/dialogForm.vue   |    7 +
 src/api/equipmentManagement/measurementEquipment.js                            |   20 ++
 6 files changed, 304 insertions(+), 91 deletions(-)

diff --git a/src/api/equipmentManagement/measurementEquipment.js b/src/api/equipmentManagement/measurementEquipment.js
index a22c034..8bb8a7f 100644
--- a/src/api/equipmentManagement/measurementEquipment.js
+++ b/src/api/equipmentManagement/measurementEquipment.js
@@ -32,4 +32,24 @@
     method: "post",
     data: query,
   });
+}
+
+// 璁¢噺鍣ㄥ叿鍙拌处-鏂板
+// /measuringInstrumentLedger/add
+export function addMeasuringInstrumentLedger(data){
+    return request({
+        url:"/measuringInstrumentLedger/add",
+        method:"post",
+        data
+    })
+}
+
+// 璁¢噺鍣ㄥ叿鍙拌处-缂栬緫
+// /measuringInstrumentLedger/update
+export function updateMeasuringInstrumentLedger(data){
+    return request({
+        url:"/measuringInstrumentLedger/update",
+        method:"post",
+        data
+    })
 }
\ No newline at end of file
diff --git a/src/views/equipmentManagement/measurementEquipment/components/dialogForm.vue b/src/views/equipmentManagement/measurementEquipment/components/dialogForm.vue
new file mode 100644
index 0000000..c6aa70e
--- /dev/null
+++ b/src/views/equipmentManagement/measurementEquipment/components/dialogForm.vue
@@ -0,0 +1,7 @@
+<template>
+
+</template>
+
+<script setup>
+
+</script>
\ No newline at end of file
diff --git a/src/views/equipmentManagement/measurementEquipment/components/formDia.vue b/src/views/equipmentManagement/measurementEquipment/components/formDia.vue
index 7b6097b..b215df1 100644
--- a/src/views/equipmentManagement/measurementEquipment/components/formDia.vue
+++ b/src/views/equipmentManagement/measurementEquipment/components/formDia.vue
@@ -15,19 +15,10 @@
 				ref="formRef"
 			>
 				<el-row :gutter="30">
-					<el-col :span="12">
-						<el-form-item label="璁¢噺鍣ㄥ叿缂栧彿锛�" prop="code">
+					<el-col :span="24">
+						<el-form-item label="鍑哄巶缂栧彿锛�" prop="code">
 							<el-input
 								v-model="form.code"
-								placeholder="璇疯緭鍏�"
-								clearable
-							/>
-						</el-form-item>
-					</el-col>
-					<el-col :span="12">
-						<el-form-item label="璁¢噺鍣ㄥ叿鍚嶇О锛�" prop="name">
-							<el-input
-								v-model="form.name"
 								placeholder="璇疯緭鍏�"
 								clearable
 							/>
@@ -36,28 +27,70 @@
 				</el-row>
 				<el-row :gutter="30">
 					<el-col :span="12">
-						<el-form-item label="瑙勬牸鍨嬪彿锛�" prop="model">
+						<el-form-item label="瀹夎浣嶇疆锛�" prop="installationLocation">
 							<el-input
-								v-model="form.model"
+								v-model="form.installationLocation"
 								placeholder="璇疯緭鍏�"
 								clearable
 							/>
 						</el-form-item>
 					</el-col>
 					<el-col :span="12">
-						<el-form-item label="棰勮涓嬫妫�瀹氭棩鏈燂細" prop="nextDate">
-							<el-date-picker
-								style="width: 100%"
-								v-model="form.nextDate"
-								value-format="YYYY-MM-DD"
-								format="YYYY-MM-DD"
-								type="date"
-								placeholder="璇烽�夋嫨"
-								clearable
-							/>
+						<el-form-item label="妫�瀹氬崟浣嶏細" prop="unit">
+              <el-input
+                  v-model="form.unit"
+                  placeholder="璇疯緭鍏ユ瀹氬崟浣�"
+                  clearable
+              />
 						</el-form-item>
 					</el-col>
 				</el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <el-form-item label="璇佷功缂栧彿锛�" prop="model">
+              <el-input
+                  v-model="form.model"
+                  placeholder="璇疯緭鍏�"
+                  clearable
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鏈�鏂伴壌瀹氭棩鏈燂細" prop="mostDate">
+              <el-date-picker
+                  style="width: 100%"
+                  v-model="form.mostDate"
+                  value-format="YYYY-MM-DD"
+                  format="YYYY-MM-DD"
+                  type="date"
+                  placeholder="璇烽�夋嫨"
+                  clearable
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <el-form-item label="鏈夋晥鏃ユ湡(澶�)锛�" prop="valid">
+              <el-input
+                  v-model="form.valid"
+                  placeholder="璇疯緭鍏ユ湁鏁堟湡澶╂暟"
+                  clearable
+              >
+              <template #append>鏃�</template>
+              </el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="妫�瀹氬懆鏈燂細" prop="cycle">
+              <el-input
+                  v-model="form.cycle"
+                  placeholder="璇疯緭鍏ユ瀹氬懆鏈�"
+                  clearable
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
 				<el-row :gutter="30">
 					<el-col :span="12">
 						<el-form-item label="褰曞叆浜猴細" prop="userId">
@@ -84,6 +117,7 @@
 								style="width: 100%"
 								v-model="form.recordDate"
 								value-format="YYYY-MM-DD"
+                disabled
 								format="YYYY-MM-DD"
 								type="date"
 								placeholder="璇烽�夋嫨"
@@ -126,7 +160,7 @@
 import {userListNoPageByTenantId} from "@/api/system/user.js";
 import {afterSalesServiceAdd, afterSalesServiceUpdate} from "@/api/customerService/index.js";
 import {getToken} from "@/utils/auth.js";
-import {measuringInstrumentAdd, measuringInstrumentUpdate} from "@/api/equipmentManagement/measurementEquipment.js";
+import {addMeasuringInstrumentLedger, updateMeasuringInstrumentLedger} from "@/api/equipmentManagement/measurementEquipment.js";
 import { getCurrentDate } from "@/utils/index.js";
 const { proxy } = getCurrentInstance()
 const emit = defineEmits(['close'])
@@ -137,8 +171,10 @@
 const data = reactive({
 	form: {
 		code: "",
-		name: "",
+    installationLocation: "",
+    mostDate:"",
 		model: "",
+    cycle:"",
 		validDate: "",
 		nextDate: "",
 		userId: "",
@@ -147,12 +183,16 @@
 	},
 	rules: {
 		code: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
-		name: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
 		model: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
 		validDate: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
 		nextDate: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
 		userId: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
 		recordDate: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
+    installationLocation: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+    mostDate: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
+    cycle: [{required: true, message: "璇烽�夋嫨", trigger: "blur"}],
+    valid: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+    unit: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
 	}
 })
 const { form, rules } = toRefs(data);
@@ -217,13 +257,13 @@
 	proxy.$refs["formRef"].validate(valid => {
 		if (valid) {
 			if (operationType.value === "add") {
-				measuringInstrumentAdd(form.value).then(response => {
+        addMeasuringInstrumentLedger(form.value).then(response => {
 					proxy.$modal.msgSuccess("鏂板鎴愬姛")
           form.value.tempFileIds = []
 					closeDia()
 				})
 			} else {
-				measuringInstrumentUpdate(form.value).then(response => {
+        updateMeasuringInstrumentLedger(form.value).then(response => {
 					proxy.$modal.msgSuccess("淇敼鎴愬姛")
           form.value.tempFileIds = []
 					closeDia()
diff --git a/src/views/equipmentManagement/measurementEquipment/components/rowClickData.vue b/src/views/equipmentManagement/measurementEquipment/components/rowClickData.vue
new file mode 100644
index 0000000..6604587
--- /dev/null
+++ b/src/views/equipmentManagement/measurementEquipment/components/rowClickData.vue
@@ -0,0 +1,128 @@
+<template>
+  <div>
+    <el-dialog
+        v-model="dialogFormVisible"
+        title="妫�瀹氭牎鍑嗚褰�"
+        width="50%"
+        @close="closeDia"
+    >
+      <PIMTable
+          rowKey="id"
+          :column="tableColumn"
+          :tableData="tableData"
+          :tableLoading="tableLoading"
+          @selection-change="handleSelectionChange"
+          height="500"
+          :isPagination="false"
+      >
+      </PIMTable>
+      <pagination
+          style="margin: 10px 0"
+          v-show="total > 0"
+          @pagination="paginationSearch"
+          :total="total"
+          :page="page.current"
+          :limit="page.size"
+      />
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="closeDia">鍙栨秷</el-button>
+        </div>
+      </template>
+    </el-dialog>
+    <filePreview ref="filePreviewRef" />
+  </div>
+</template>
+
+<script setup>
+import {ref} from "vue";
+import filePreview from '@/components/filePreview/index.vue'
+import {ledgerRecordListPage} from "@/api/equipmentManagement/calibration.js";
+import Pagination from "@/components/PIMTable/Pagination.vue";
+const emit = defineEmits(['close'])
+
+const dialogFormVisible = ref(false);
+const currentId = ref('')
+const selectedRows = ref([]);
+const filePreviewRef = ref()
+const tableColumn = ref([
+  {
+    label: "妫�瀹氭棩鏈�",
+    prop: "recordDate",
+    width: 130,
+  },
+  {
+    label: "璁¢噺鍣ㄥ叿缂栧彿",
+    prop: "code",
+    width: 150,
+  },
+  {
+    label: "璁¢噺鍣ㄥ叿鍚嶇О",
+    prop: "name",
+    width: 200,
+  },
+  {
+    label: "瑙勬牸鍨嬪彿",
+    prop: "model",
+    width:200
+  },
+  {
+    label: "鏈夋晥鏈�",
+    prop: "valid",
+    width: 100,
+  },
+  {
+    label: "褰曞叆浜�",
+    prop: "userName",
+  },
+  {
+    label: "褰曞叆鏃ユ湡",
+    prop: "entryDate",
+    width: 130,
+  },
+]);
+const page = reactive({
+  current: 1,
+  size: 100,
+});
+const total = ref(0);
+const tableData = ref([]);
+const tableLoading = ref(false);
+
+// 鎵撳紑寮规
+const openDialog = (row,type) => {
+  dialogFormVisible.value = true;
+  currentId.value = row.id;
+  getList()
+}
+const paginationSearch = (obj) => {
+  page.current = obj.page;
+  page.size = obj.limit;
+  getList();
+};
+const getList = () => {
+  let query = {
+    measuringInstrumentLedgerId:currentId.value,
+    current : page.current,
+    size : page.size
+  }
+  ledgerRecordListPage(query).then(res => {
+    tableData.value = res?.data?.records || [];
+    total.value = res?.data?.total;
+  })
+}
+// 琛ㄦ牸閫夋嫨鏁版嵁
+const handleSelectionChange = (selection) => {
+  selectedRows.value = selection;
+};
+
+// 鍏抽棴寮规
+const closeDia = () => {
+  dialogFormVisible.value = false;
+  emit('close')
+};
+
+defineExpose({
+  openDialog,
+});
+</script>
diff --git a/src/views/equipmentManagement/measurementEquipment/index.vue b/src/views/equipmentManagement/measurementEquipment/index.vue
index 363a85a..129f23b 100644
--- a/src/views/equipmentManagement/measurementEquipment/index.vue
+++ b/src/views/equipmentManagement/measurementEquipment/index.vue
@@ -40,11 +40,13 @@
 				@selection-change="handleSelectionChange"
 				:tableLoading="tableLoading"
 				@pagination="pagination"
+        :dbRowClick="dbRowClick"
 			></PIMTable>
 		</div>
 		<form-dia ref="formDia" @close="handleQuery"></form-dia>
 		<calibration-dia ref="calibrationDia" @close="handleQuery"></calibration-dia>
     <files-dia ref="filesDia"></files-dia>
+    <rowClickDataForm ref="rowClickData"></rowClickDataForm>
 	</div>
 </template>
 
@@ -55,10 +57,11 @@
 import useUserStore from "@/store/modules/user.js";
 import CalibrationDia from "@/views/equipmentManagement/measurementEquipment/components/calibrationDia.vue";
 import {
-	measuringInstrumentDelete,
-	measuringInstrumentListPage
+  measuringInstrumentDelete,
+  measuringInstrumentListPage,
 } from "@/api/equipmentManagement/measurementEquipment.js";
 import FilesDia from "./filesDia.vue";
+import rowClickDataForm from "./components/rowClickData.vue"
 const { proxy } = getCurrentInstance();
 const userStore = useUserStore()
 
@@ -73,67 +76,80 @@
 
 const tableColumn = ref([
 	{
-		label: "鐘舵��",
-		prop: "status",
-		dataType: "tag",
-		formatData: (params) => {
-			if (params == 1) {
-				return "鏈夋晥";
-			} else if (params == 2) {
-				return "閫炬湡";
-			} else {
-				return null;
-			}
-		},
-		formatType: (params) => {
-			if (params == 1) {
-				return "success";
-			} else if (params == 2) {
-				return "danger";
-			} else {
-				return null;
-			}
-		},
+		label: "鍑哄巶缂栧彿",
+		prop: "code",
+    minWidth:150,
+    align:"center"
 	},
 	{
-		label: "鏈�杩戜竴娆℃瀹氭棩鏈�",
+		label: "閮ㄩ棬",
+		prop: "deptName",
+		width: 130,
+    align:"center"
+	},
+	{
+		label: "瀹夎浣嶇疆",
+		prop: "installationLocation",
+		width: 150,
+    align:"center"
+	},
+	{
+		label: "妫�瀹氬崟浣�",
+		prop: "unit",
+		width: 200,
+    align:"center"
+	},
+	{
+		label: "璇佷功缂栧彿",
+		prop: "model",
+		width:200,
+    align:"center"
+	},
+	{
+		label: "鏈�鏂伴壌瀹氭棩鏈�",
 		prop: "mostDate",
 		width: 130,
-	},
-	{
-		label: "璁¢噺鍣ㄥ叿缂栧彿",
-		prop: "code",
-		width: 150,
-	},
-	{
-		label: "璁¢噺鍣ㄥ叿鍚嶇О",
-		prop: "name",
-		width: 200,
-	},
-	{
-		label: "瑙勬牸鍨嬪彿",
-		prop: "model",
-		width:200
-	},
-	{
-		label: "鏈夋晥鏈�",
-		prop: "valid",
-		width: 130,
-	},
-	{
-		label: "棰勮涓嬫妫�瀹氭棩鏈�",
-		prop: "nextDate",
-		width: 130,
+    align:"center"
 	},
 	{
 		label: "褰曞叆浜�",
 		prop: "userName",
+		width: 130,
+    align:"center"
 	},
 	{
 		label: "褰曞叆鏃ユ湡",
 		prop: "recordDate",
-		width: 130,
+    align:"center",
+    minWidth: 130
 	},
+	{
+		label: "鏈夋晥鏃ユ湡",
+		prop: "valid",
+		width: 130,
+    align:"center"
+	},
+  {
+    label: "妫�瀹氬懆鏈�(澶�)",
+    prop: "cycle",
+    width: 130,
+    align:"center"
+  },
+  {
+    label: "鐘舵��",
+    prop: "status",
+    width: 130,
+    align: "center",
+    formatData: (params) => {
+      if (params === 1) {
+        return "鏈夋晥";
+      } else if (params === 2) {
+        return "閫炬湡";
+      } else {
+        return null;
+      }
+    }
+  },
 	{
 		dataType: "action",
 		label: "鎿嶄綔",
@@ -141,25 +157,26 @@
 		width: '130',
 		fixed: 'right',
 		operation: [
+      {
+      	name: "闄勪欢",
+      	type: "text",
+      	clickFun: (row) => {
+          openFilesFormDia(row);
+      	},
+      },
 			{
-				name: "妫�瀹氭牎鍑�",
+				name: "鏌ョ湅",
 				type: "text",
 				clickFun: (row) => {
 					openCalibrationDia("verifying", row);
 				},
 			},
-			// {
-			// 	name: "闄勪欢",
-			// 	type: "text",
-			// 	clickFun: (row) => {
-      //     openFilesFormDia(row);
-			// 	},
-			// },
 		],
 	},
 ]);
 const tableData = ref([]);
 const tableLoading = ref(false);
+const rowClickData = ref([])
 const filesDia = ref()
 const page = reactive({
 	current: 1,
@@ -170,12 +187,13 @@
 
 // 鎵撳紑闄勪欢寮规
 const openFilesFormDia = (row) => {
-  console.log(row)
-  nextTick(() => {
-    filesDia.value?.openDialog( row,'璁¢噺鍣ㄥ叿鍙拌处')
-  })
+    filesDia.value?.openDialog(row,'璁¢噺鍣ㄥ叿鍙拌处')
 };
 
+const dbRowClick = (row)=>{
+  rowClickData.value?.openDialog(row)
+}
+
 // 琛ㄦ牸閫夋嫨鏁版嵁
 const handleSelectionChange = (selection) => {
 	selectedRows.value = selection;
diff --git a/src/views/financialManagement/accounting/index.vue b/src/views/financialManagement/accounting/index.vue
index f8e4a9f..91588fd 100644
--- a/src/views/financialManagement/accounting/index.vue
+++ b/src/views/financialManagement/accounting/index.vue
@@ -141,7 +141,7 @@
 import { ref, computed, onMounted, reactive } from 'vue';
 import 'element-plus/dist/index.css';
 import Echarts from "@/components/Echarts/echarts.vue";
-import { getLedgerPage, getAssetInfo } from "@/api/equipmentManagement/ledger";
+import { getLedgerPage } from "@/api/equipmentManagement/ledger";
 import dayjs from "dayjs";
 
 // 绛涢�夋潯浠�

--
Gitblit v1.9.3