From 69250232abffb8b578d9b94c20f4d560492efa02 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期日, 04 一月 2026 19:26:33 +0800
Subject: [PATCH] Merge branch 'dev_tide_gybjyhglxt' into dev_tide_gybjyhglxt_xindao

---
 src/views/alarmManagement/alarmConfig/alarmRule.vue |  355 +++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 202 insertions(+), 153 deletions(-)

diff --git a/src/views/alarmManagement/alarmConfig/alarmRule.vue b/src/views/alarmManagement/alarmConfig/alarmRule.vue
index ef90a36..b2e44be 100644
--- a/src/views/alarmManagement/alarmConfig/alarmRule.vue
+++ b/src/views/alarmManagement/alarmConfig/alarmRule.vue
@@ -1,173 +1,222 @@
 <template>
-  <div class="alarm-rule-config">
-    <el-card shadow="never" class="search-card">
-      <el-form :inline="true" :model="searchForm" class="demo-form-inline">
-        <el-form-item label="瑙勫垯鍚嶇О">
-          <el-input v-model="searchForm.ruleName" placeholder="璇疯緭鍏ヨ鍒欏悕绉�" />
-        </el-form-item>
-        <el-form-item label="璁惧绫诲瀷">
-          <el-select v-model="searchForm.equipmentType" placeholder="璇烽�夋嫨璁惧绫诲瀷">
-            <el-option label="宸ヨ壓璁惧" value="宸ヨ壓璁惧" />
-            <el-option label="妫�娴嬭澶�" value="妫�娴嬭澶�" />
-            <el-option label="鍏朵粬璁惧" value="鍏朵粬璁惧" />
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" icon="el-icon-search" @click="handleSearch">鎼滅储</el-button>
-          <el-button icon="el-icon-refresh" @click="handleReset">閲嶇疆</el-button>
-        </el-form-item>
-      </el-form>
-    </el-card>
-
-    <el-card shadow="never" class="table-card">
-      <template #header>
-        <div class="card-header">
-          <span>鎶ヨ瑙勫垯閰嶇疆</span>
-          <el-button type="primary" icon="el-icon-plus" @click="handleAdd">鏂板瑙勫垯</el-button>
-        </div>
-      </template>
-      <el-table :data="ruleList" style="width: 100%" :header-cell-style="{textAlign: 'center'}" :cell-style="{textAlign: 'center'}">
-        <el-table-column type="index" label="搴忓彿" width="80" />
-        <el-table-column prop="ruleName" label="瑙勫垯鍚嶇О" />
-        <el-table-column prop="equipmentType" label="璁惧绫诲瀷" />
-        <el-table-column prop="parameter" label="鐩戞帶鍙傛暟" />
-        <el-table-column prop="alarmLevel" label="鎶ヨ绾у埆" />
-        <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" width="180" show-overflow-tooltip/>
-        <el-table-column prop="status" label="鐘舵��" width="150">
-          <template #default="scope">
-            <el-switch v-model="scope.row.status" active-text="鍚敤" inactive-text="绂佺敤" />
-          </template>
-        </el-table-column>
-        <el-table-column label="鎿嶄綔" width="150" fixed="right">
-          <template #default="scope">
-            <el-button size="small" type="text" @click="handleEdit(scope.row)">缂栬緫</el-button>
-            <el-button size="small" type="text" @click="handleDelete(scope.row)">鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <div class="pagination">
-        <el-pagination
-          layout="total, sizes, prev, pager, next, jumper"
-          :total="ruleList.length"
-          :page-size="10"
-          :page-sizes="[10, 20, 30, 50]"
+  <div class="app-container">
+    <el-form :model="filters" :inline="true">
+      <el-form-item label="瑙勫垯鍚嶇О">
+        <el-input
+          v-model="filters.deviceName"
+          style="width: 240px"
+          placeholder="璇疯緭鍏ヨ鍒欏悕绉�"
+          clearable
+          @change="getTableData"
         />
+      </el-form-item>
+      <el-form-item label="璁惧绫诲瀷">
+        <el-input
+            v-model="filters.deviceModel"
+            style="width: 240px"
+            placeholder="璇疯緭鍏ヨ澶囩被鍨�"
+            clearable
+            @change="getTableData"
+        />
+      </el-form-item>
+      <el-form-item label="鐩戞帶鍙傛暟">
+        <el-input
+            v-model="filters.supplierName"
+            style="width: 240px"
+            placeholder="璇疯緭鍏ョ洃鎺у弬鏁�"
+            clearable
+            @change="getTableData"
+        />
+      </el-form-item>
+    </el-form>
+    <div class="table_list">
+      <div class="actions">
+        <div></div>
+        <div>
+          <el-button type="primary" @click="add" icon="Plus"> 鏂板 </el-button>
+          <el-button
+            type="danger"
+            icon="Delete"
+            :disabled="multipleList.length <= 0"
+            @click="deleteRow(multipleList.map((item) => item.id))"
+          >
+            鎵归噺鍒犻櫎
+          </el-button>
+        </div>
       </div>
-    </el-card>
+      <PIMTable
+        rowKey="id"
+        isSelection
+        :column="columns"
+        :tableData="dataList"
+        :page="{
+          current: pagination.currentPage,
+          size: pagination.pageSize,
+          total: pagination.total,
+        }"
+        @selection-change="handleSelectionChange"
+        @pagination="changePage"
+      >
+      </PIMTable>
+    </div>
+    <Modal ref="modalRef" @success="getTableData"></Modal>
+    <el-dialog v-model="qrDialogVisible" title="浜岀淮鐮�" width="300px">
+      <div style="text-align:center;">
+        <img :src="qrCodeUrl" alt="浜岀淮鐮�" style="width:200px;height:200px;" />
+        <div style="margin:10px 0;">
+          <el-button type="primary" @click="downloadQRCode">涓嬭浇浜岀淮鐮佸浘鐗�</el-button>
+        </div>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
-<script>
-export default {
-  name: 'AlarmRule',
-  data() {
-    return {
-      searchForm: {
-        ruleName: '',
-        equipmentType: ''
-      },
-      ruleList: [
-        {
-          id: 1,
-          ruleName: '娓╁害杩囬珮鎶ヨ',
-          equipmentType: '宸ヨ壓璁惧',
-          parameter: '娓╁害',
-          alarmLevel: '涓ラ噸',
-          createTime: '2025-12-01 10:30:00',
-          status: true
-        },
-        {
-          id: 2,
-          ruleName: '鍘嬪姏寮傚父鎶ヨ',
-          equipmentType: '宸ヨ壓璁惧',
-          parameter: '鍘嬪姏',
-          alarmLevel: '涓瓑',
-          createTime: '2025-12-02 14:20:00',
-          status: true
-        },
-        {
-          id: 3,
-          ruleName: '娴侀噺杩囦綆鎶ヨ',
-          equipmentType: '妫�娴嬭澶�',
-          parameter: '娴侀噺',
-          alarmLevel: '杞诲井',
-          createTime: '2025-12-03 09:15:00',
-          status: false
-        },
-        {
-          id: 4,
-          ruleName: '鐢靛帇涓嶇ǔ瀹氭姤璀�',
-          equipmentType: '鍏朵粬璁惧',
-          parameter: '鐢靛帇',
-          alarmLevel: '涓瓑',
-          createTime: '2025-12-04 16:45:00',
-          status: true
-        },
-        {
-          id: 5,
-          ruleName: '娑蹭綅寮傚父鎶ヨ',
-          equipmentType: '宸ヨ壓璁惧',
-          parameter: '娑蹭綅',
-          alarmLevel: '涓ラ噸',
-          createTime: '2025-12-05 11:20:00',
-          status: true
-        }
-      ]
-    }
+<script setup>
+import { usePaginationApi } from "../../../hooks/usePaginationApi.jsx";
+import { getLedgerPage, delLedger } from "../../..//api/equipmentManagement/ledger.js";
+import { onMounted, getCurrentInstance } from "vue";
+import Modal from "./Modal.vue";
+import { ElMessageBox, ElMessage } from "element-plus";
+import dayjs from "dayjs";
+import { ref } from "vue";
+
+defineOptions({
+  name: "璁惧鍙拌处",
+});
+
+// 琛ㄦ牸澶氶�夋閫変腑椤�
+const multipleList = ref([]);
+const { proxy } = getCurrentInstance();
+const modalRef = ref();
+const qrDialogVisible = ref(false);
+const qrCodeUrl = ref("");
+const qrRowData = ref(null);
+
+const {
+  filters,
+  columns,
+  dataList,
+  pagination,
+  getTableData,
+  resetFilters,
+  onCurrentChange,
+} = usePaginationApi(
+  getLedgerPage,
+  {
+    deviceName: undefined,
+    deviceModel: undefined,
+    supplierName: undefined,
+    unit: undefined,
+    entryDateStart: undefined,
+    entryDateEnd: undefined,
   },
-  methods: {
-    handleSearch() {
-      console.log('鎼滅储', this.searchForm)
+  [
+    {
+      label: "瑙勫垯鍚嶇О",
+      align: "center",
+      prop: "deviceName",
     },
-    handleReset() {
-      this.searchForm = {
-        ruleName: '',
-        equipmentType: ''
-      }
+    {
+      label: "璁惧绫诲瀷",
+      align: "center",
+      prop: "deviceModel",
     },
-    handleAdd() {
-      console.log('鏂板瑙勫垯')
+    {
+      label: "鐩戞帶鍙傛暟",
+      align: "center",
+      prop: "supplierName",
     },
-    handleEdit(row) {
-      console.log('缂栬緫瑙勫垯', row)
+    {
+      label: "鎶ヨ绾у埆",
+      align: "center",
+      prop: "unit",
     },
-    handleDelete(row) {
-      console.log('鍒犻櫎瑙勫垯', row)
+    {
+      label: "鍒涘缓鏃堕棿",
+      align: "center",
+      prop: "createTime",
+    },
+    {
+      label: "鏄惁鍚敤",
+      align: "center",
+      prop: "status",
+    },
+		{
+			dataType: "action",
+			label: "鎿嶄綔",
+			align: "center",
+			fixed: 'right',
+			width: 150,
+			operation: [
+				{
+					name: "缂栬緫",
+					type: "text",
+					clickFun: (row) => {
+						edit(row.id)
+					},
+				},
+			],
+		},
+  ]
+);
+
+// 澶氶�夊悗鍋氫粈涔�
+const handleSelectionChange = (selectionList) => {
+  multipleList.value = selectionList;
+};
+
+const add = () => {
+  modalRef.value.openModal();
+};
+const edit = (id) => {
+  modalRef.value.loadForm(id);
+};
+const changePage = ({ page, limit }) => {
+  pagination.currentPage = page;
+	pagination.pageSize = limit;
+  onCurrentChange(page);
+};
+const deleteRow = (id) => {
+  ElMessageBox.confirm("姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ枃浠�, 鏄惁缁х画?", "鎻愮ず", {
+    confirmButtonText: "纭畾",
+    cancelButtonText: "鍙栨秷",
+    type: "warning",
+  }).then(async () => {
+    const { code } = await delLedger(id);
+    if (code == 200) {
+      ElMessage({
+        type: "success",
+        message: "鍒犻櫎鎴愬姛",
+      });
+      getTableData();
     }
+  });
+};
+
+const changeDaterange = (value) => {
+  if (value) {
+    filters.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
+    filters.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
+  } else {
+    filters.entryDateStart = undefined;
+    filters.entryDateEnd = undefined;
   }
-}
+  getTableData();
+};
+
+
+onMounted(() => {
+  getTableData();
+});
 </script>
 
-<style scoped>
-.alarm-rule-config {
-  padding: 16px;
-  background-color: #f0f2f5;
-  min-height: 100vh;
+<style lang="scss" scoped>
+.table_list {
+  margin-top: unset;
 }
-
-.search-card {
-  margin-bottom: 16px;
-  border-radius: 8px;
-  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
-}
-
-.table-card {
-  border-radius: 8px;
-  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
-}
-
-.card-header {
+.actions {
   display: flex;
   justify-content: space-between;
-  align-items: center;
-  padding: 0 20px;
+  margin-bottom: 10px;
 }
-
-.pagination {
-  margin-top: 16px;
-  display: flex;
-  justify-content: flex-end;
-  padding-right: 20px;
-}
-
 </style>

--
Gitblit v1.9.3