From 00100d130c240c191d87d3b6cfb2415f47b9c2d0 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 19 八月 2025 10:17:00 +0800
Subject: [PATCH] 中强恒兴数据修改

---
 src/views/collaborativeApproval/sealManagement/index.vue |  588 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 588 insertions(+), 0 deletions(-)

diff --git a/src/views/collaborativeApproval/sealManagement/index.vue b/src/views/collaborativeApproval/sealManagement/index.vue
new file mode 100644
index 0000000..a906f5e
--- /dev/null
+++ b/src/views/collaborativeApproval/sealManagement/index.vue
@@ -0,0 +1,588 @@
+<template>
+  <div class="app-container">
+    <el-card class="box-card">
+      <template #header>
+        <div class="card-header">
+          <span>鐢ㄥ嵃绠$悊涓庤绔犲埗搴﹀彂甯�</span>
+          <el-button type="primary" @click="showSealApplyDialog = true">
+            <el-icon><Plus /></el-icon>
+            鐢宠鐢ㄥ嵃
+          </el-button>
+        </div>
+      </template>
+
+      <el-tabs v-model="activeTab" type="border-card">
+        <!-- 鐢ㄥ嵃鐢宠绠$悊 -->
+        <el-tab-pane label="鐢ㄥ嵃鐢宠绠$悊" name="seal">
+          <div class="tab-content">
+            <el-row :gutter="20" class="mb-20">
+              <el-col :span="6">
+                <el-input v-model="sealSearchForm.keyword" placeholder="璇疯緭鍏ョ敵璇锋爣棰樻垨鐢宠浜�" clearable />
+              </el-col>
+              <el-col :span="4">
+                <el-select v-model="sealSearchForm.status" placeholder="瀹℃壒鐘舵��" clearable>
+                  <el-option label="寰呭鎵�" value="pending" />
+                  <el-option label="宸查�氳繃" value="approved" />
+                  <el-option label="宸叉嫆缁�" value="rejected" />
+                </el-select>
+              </el-col>
+              <el-col :span="4">
+                <el-button type="primary" @click="searchSealApplications">鎼滅储</el-button>
+                <el-button @click="resetSealSearch">閲嶇疆</el-button>
+              </el-col>
+            </el-row>
+
+            <el-table :data="sealApplications" style="width: 100%">
+              <el-table-column prop="id" label="鐢宠缂栧彿" width="120" />
+              <el-table-column prop="title" label="鐢宠鏍囬" min-width="200" />
+              <el-table-column prop="applicant" label="鐢宠浜�" width="120" />
+              <el-table-column prop="department" label="鎵�灞為儴闂�" width="150" />
+              <el-table-column prop="sealType" label="鐢ㄥ嵃绫诲瀷" width="120" />
+              <el-table-column prop="applyTime" label="鐢宠鏃堕棿" width="180" />
+              <el-table-column prop="status" label="鐘舵��" width="100">
+                <template #default="scope">
+                  <el-tag :type="getStatusType(scope.row.status)">
+                    {{ getStatusText(scope.row.status) }}
+                  </el-tag>
+                </template>
+              </el-table-column>
+              <el-table-column label="鎿嶄綔" width="200" fixed="right">
+                <template #default="scope">
+                  <el-button link @click="viewSealDetail(scope.row)">鏌ョ湅</el-button>
+                  <el-button 
+                    v-if="scope.row.status === 'pending'"
+										link
+                    type="primary" 
+                    @click="approveSeal(scope.row)"
+                  >
+                    瀹℃壒
+                  </el-button>
+                  <el-button 
+                    v-if="scope.row.status === 'pending'"
+										link
+                    type="danger" 
+                    @click="rejectSeal(scope.row)"
+                  >
+                    鎷掔粷
+                  </el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </el-tab-pane>
+
+        <!-- 瑙勭珷鍒跺害绠$悊 -->
+        <el-tab-pane label="瑙勭珷鍒跺害绠$悊" name="regulations">
+          <div class="tab-content">
+            <el-row :gutter="20" class="mb-20">
+              <el-col :span="6">
+                <el-input v-model="regulationSearchForm.keyword" placeholder="璇疯緭鍏ュ埗搴︽爣棰樻垨鍙戝竷浜�" clearable />
+              </el-col>
+              <el-col :span="4">
+                <el-select v-model="regulationSearchForm.category" placeholder="鍒跺害鍒嗙被" clearable>
+                  <el-option label="浜轰簨鍒跺害" value="hr" />
+                  <el-option label="璐㈠姟鍒跺害" value="finance" />
+                  <el-option label="瀹夊叏鍒跺害" value="safety" />
+                  <el-option label="鎶�鏈埗搴�" value="tech" />
+                </el-select>
+              </el-col>
+              <el-col :span="8">
+                <el-button type="primary" @click="searchRegulations">鎼滅储</el-button>
+                <el-button @click="resetRegulationSearch">閲嶇疆</el-button>
+                <el-button type="success" @click="showRegulationDialog = true">
+                  鍙戝竷鍒跺害
+                </el-button>
+              </el-col>
+            </el-row>
+
+            <el-table :data="regulations" style="width: 100%">
+              <el-table-column prop="id" label="鍒跺害缂栧彿" width="120" />
+              <el-table-column prop="title" label="鍒跺害鏍囬" min-width="200" />
+              <el-table-column prop="category" label="鍒嗙被" width="120">
+                <template #default="scope">
+                  <el-tag>{{ getCategoryText(scope.row.category) }}</el-tag>
+                </template>
+              </el-table-column>
+              <el-table-column prop="version" label="鐗堟湰" width="80" />
+              <el-table-column prop="publisher" label="鍙戝竷浜�" width="120" />
+              <el-table-column prop="publishTime" label="鍙戝竷鏃堕棿" width="180" />
+              <el-table-column prop="status" label="鐘舵��" width="100">
+                <template #default="scope">
+                  <el-tag :type="scope.row.status === 'active' ? 'success' : 'info'">
+                    {{ scope.row.status === 'active' ? '鐢熸晥涓�' : '宸插簾姝�' }}
+                  </el-tag>
+                </template>
+              </el-table-column>
+              <el-table-column prop="readCount" label="宸茶浜烘暟" width="100" />
+              <el-table-column label="鎿嶄綔" width="250" fixed="right">
+                <template #default="scope">
+                  <el-button link @click="viewRegulation(scope.row)">鏌ョ湅</el-button>
+                  <el-button link type="primary" @click="editRegulation(scope.row)">缂栬緫</el-button>
+                  <el-button link type="success" @click="viewVersionHistory(scope.row)">鐗堟湰鍘嗗彶</el-button>
+                  <el-button link type="warning" @click="viewReadStatus(scope.row)">闃呰鐘舵��</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </el-tab-pane>
+      </el-tabs>
+    </el-card>
+
+    <!-- 鐢ㄥ嵃鐢宠瀵硅瘽妗� -->
+    <el-dialog v-model="showSealApplyDialog" title="鐢宠鐢ㄥ嵃" width="600px">
+      <el-form :model="sealForm" :rules="sealRules" ref="sealFormRef" label-width="100px">
+        <el-form-item label="鐢宠鏍囬" prop="title">
+          <el-input v-model="sealForm.title" placeholder="璇疯緭鍏ョ敵璇锋爣棰�" />
+        </el-form-item>
+        <el-form-item label="鐢ㄥ嵃绫诲瀷" prop="sealType">
+          <el-select v-model="sealForm.sealType" placeholder="璇烽�夋嫨鐢ㄥ嵃绫诲瀷" style="width: 100%">
+            <el-option label="鍏珷" value="official" />
+            <el-option label="鍚堝悓涓撶敤绔�" value="contract" />
+            <el-option label="璐㈠姟涓撶敤绔�" value="finance" />
+            <el-option label="娉曚汉绔�" value="legal" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鐢宠鍘熷洜" prop="reason">
+          <el-input v-model="sealForm.reason" type="textarea" :rows="4" placeholder="璇疯缁嗚鏄庣敤鍗板師鍥�" />
+        </el-form-item>
+        <el-form-item label="绱ф�ョ▼搴�" prop="urgency">
+          <el-radio-group v-model="sealForm.urgency">
+            <el-radio label="normal">鏅��</el-radio>
+            <el-radio label="urgent">绱ф��</el-radio>
+            <el-radio label="very-urgent">鐗规��</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="showSealApplyDialog = false">鍙栨秷</el-button>
+          <el-button type="primary" @click="submitSealApplication">鎻愪氦鐢宠</el-button>
+        </span>
+      </template>
+    </el-dialog>
+
+    <!-- 瑙勭珷鍒跺害鍙戝竷瀵硅瘽妗� -->
+    <el-dialog v-model="showRegulationDialog" title="鍙戝竷瑙勭珷鍒跺害" width="800px">
+      <el-form :model="regulationForm" :rules="regulationRules" ref="regulationFormRef" label-width="100px">
+        <el-form-item label="鍒跺害鏍囬" prop="title">
+          <el-input v-model="regulationForm.title" placeholder="璇疯緭鍏ュ埗搴︽爣棰�" />
+        </el-form-item>
+        <el-form-item label="鍒跺害鍒嗙被" prop="category">
+          <el-select v-model="regulationForm.category" placeholder="璇烽�夋嫨鍒跺害鍒嗙被" style="width: 100%">
+            <el-option label="浜轰簨鍒跺害" value="hr" />
+            <el-option label="璐㈠姟鍒跺害" value="finance" />
+            <el-option label="瀹夊叏鍒跺害" value="safety" />
+            <el-option label="鎶�鏈埗搴�" value="tech" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鍒跺害鍐呭" prop="content">
+          <el-input v-model="regulationForm.content" type="textarea" :rows="10" placeholder="璇疯緭鍏ュ埗搴﹁缁嗗唴瀹�" />
+        </el-form-item>
+        <el-form-item label="鐢熸晥鏃堕棿" prop="effectiveTime">
+          <el-date-picker v-model="regulationForm.effectiveTime" type="datetime" placeholder="閫夋嫨鐢熸晥鏃堕棿" style="width: 100%" />
+        </el-form-item>
+        <el-form-item label="閫傜敤鑼冨洿" prop="scope">
+          <el-checkbox-group v-model="regulationForm.scope">
+            <el-checkbox label="all">鍏ㄤ綋鍛樺伐</el-checkbox>
+            <el-checkbox label="manager">绠$悊灞�</el-checkbox>
+            <el-checkbox label="hr">浜轰簨閮ㄩ棬</el-checkbox>
+            <el-checkbox label="finance">璐㈠姟閮ㄩ棬</el-checkbox>
+            <el-checkbox label="tech">鎶�鏈儴闂�</el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+        <el-form-item label="鏄惁闇�瑕佺‘璁�" prop="requireConfirm">
+          <el-switch v-model="regulationForm.requireConfirm" />
+          <span class="ml-10">寮�鍚悗鍛樺伐闇�瑕侀槄璇荤‘璁�</span>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="showRegulationDialog = false">鍙栨秷</el-button>
+          <el-button type="primary" @click="submitRegulation">鍙戝竷鍒跺害</el-button>
+        </span>
+      </template>
+    </el-dialog>
+
+    <!-- 鐢ㄥ嵃璇︽儏瀵硅瘽妗� -->
+    <el-dialog v-model="showSealDetailDialog" title="鐢ㄥ嵃鐢宠璇︽儏" width="700px">
+      <div v-if="currentSealDetail" class="mb10">
+        <el-descriptions :column="2" border>
+          <el-descriptions-item label="鐢宠缂栧彿">{{ currentSealDetail.id }}</el-descriptions-item>
+          <el-descriptions-item label="鐢宠鏍囬">{{ currentSealDetail.title }}</el-descriptions-item>
+          <el-descriptions-item label="鐢宠浜�">{{ currentSealDetail.applicant }}</el-descriptions-item>
+          <el-descriptions-item label="鎵�灞為儴闂�">{{ currentSealDetail.department }}</el-descriptions-item>
+          <el-descriptions-item label="鐢ㄥ嵃绫诲瀷">{{ currentSealDetail.sealType }}</el-descriptions-item>
+          <el-descriptions-item label="鐢宠鏃堕棿">{{ currentSealDetail.applyTime }}</el-descriptions-item>
+          <el-descriptions-item label="鐘舵��">
+            <el-tag :type="getStatusType(currentSealDetail.status)">
+              {{ getStatusText(currentSealDetail.status) }}
+            </el-tag>
+          </el-descriptions-item>
+          <el-descriptions-item label="鐢宠鍘熷洜" :span="2">{{ currentSealDetail.reason }}</el-descriptions-item>
+        </el-descriptions>
+      </div>
+    </el-dialog>
+
+    <!-- 瑙勭珷鍒跺害璇︽儏瀵硅瘽妗� -->
+    <el-dialog v-model="showRegulationDetailDialog" title="瑙勭珷鍒跺害璇︽儏" width="800px">
+      <div v-if="currentRegulationDetail">
+        <el-descriptions :column="2" border>
+          <el-descriptions-item label="鍒跺害缂栧彿">{{ currentRegulationDetail.id }}</el-descriptions-item>
+          <el-descriptions-item label="鍒跺害鏍囬">{{ currentRegulationDetail.title }}</el-descriptions-item>
+          <el-descriptions-item label="鍒嗙被">{{ getCategoryText(currentRegulationDetail.category) }}</el-descriptions-item>
+          <el-descriptions-item label="鐗堟湰">{{ currentRegulationDetail.version }}</el-descriptions-item>
+          <el-descriptions-item label="鍙戝竷浜�">{{ currentRegulationDetail.publisher }}</el-descriptions-item>
+          <el-descriptions-item label="鍙戝竷鏃堕棿">{{ currentRegulationDetail.publishTime }}</el-descriptions-item>
+        </el-descriptions>
+        <div class="mt-20">
+          <h4>鍒跺害鍐呭</h4>
+          <div class="regulation-content">{{ currentRegulationDetail.content }}</div>
+        </div>
+      </div>
+    </el-dialog>
+
+    <!-- 鐗堟湰鍘嗗彶瀵硅瘽妗� -->
+    <el-dialog v-model="showVersionHistoryDialog" title="鐗堟湰鍘嗗彶" width="800px">
+      <el-table :data="versionHistory" style="width: 100%;margin-bottom: 10px">
+        <el-table-column prop="version" label="鐗堟湰鍙�" width="100" />
+        <el-table-column prop="updateTime" label="鏇存柊鏃堕棿" width="180" />
+        <el-table-column prop="updater" label="鏇存柊浜�" width="120" />
+        <el-table-column prop="changeLog" label="鍙樻洿璇存槑" />
+      </el-table>
+    </el-dialog>
+
+    <!-- 闃呰鐘舵�佸璇濇 -->
+    <el-dialog v-model="showReadStatusDialog" title="闃呰鐘舵��" width="800px">
+      <el-table :data="readStatusList" style="width: 100%;margin-bottom: 10px">
+        <el-table-column prop="employee" label="鍛樺伐濮撳悕" width="120" />
+        <el-table-column prop="department" label="鎵�灞為儴闂�" width="150" />
+        <el-table-column prop="readTime" label="闃呰鏃堕棿" width="180" />
+        <el-table-column prop="confirmTime" label="纭鏃堕棿" width="180" />
+        <el-table-column prop="status" label="鐘舵��" width="100">
+          <template #default="scope">
+            <el-tag :type="scope.row.status === 'confirmed' ? 'success' : 'warning'">
+              {{ scope.row.status === 'confirmed' ? '宸茬‘璁�' : '鏈‘璁�' }}
+            </el-tag>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup>
+import { ref, reactive, onMounted } from 'vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+
+// 鍝嶅簲寮忔暟鎹�
+const activeTab = ref('seal')
+
+// 鐢ㄥ嵃鐢宠鐩稿叧
+const showSealApplyDialog = ref(false)
+const showSealDetailDialog = ref(false)
+const currentSealDetail = ref(null)
+const sealFormRef = ref()
+const sealForm = reactive({
+  title: '',
+  sealType: '',
+  reason: '',
+  urgency: 'normal'
+})
+
+const sealRules = {
+  title: [{ required: true, message: '璇疯緭鍏ョ敵璇锋爣棰�', trigger: 'blur' }],
+  sealType: [{ required: true, message: '璇烽�夋嫨鐢ㄥ嵃绫诲瀷', trigger: 'change' }],
+  reason: [{ required: true, message: '璇疯緭鍏ョ敵璇峰師鍥�', trigger: 'blur' }]
+}
+
+const sealSearchForm = reactive({
+  keyword: '',
+  status: ''
+})
+
+// 瑙勭珷鍒跺害鐩稿叧
+const showRegulationDialog = ref(false)
+const showRegulationDetailDialog = ref(false)
+const showVersionHistoryDialog = ref(false)
+const showReadStatusDialog = ref(false)
+const currentRegulationDetail = ref(null)
+const regulationFormRef = ref()
+const regulationForm = reactive({
+  title: '',
+  category: '',
+  content: '',
+  effectiveTime: '',
+  scope: [],
+  requireConfirm: true
+})
+
+const regulationRules = {
+  title: [{ required: true, message: '璇疯緭鍏ュ埗搴︽爣棰�', trigger: 'blur' }],
+  category: [{ required: true, message: '璇烽�夋嫨鍒跺害鍒嗙被', trigger: 'change' }],
+  content: [{ required: true, message: '璇疯緭鍏ュ埗搴﹀唴瀹�', trigger: 'blur' }],
+  effectiveTime: [{ required: true, message: '璇烽�夋嫨鐢熸晥鏃堕棿', trigger: 'change' }],
+  scope: [{ required: true, message: '璇烽�夋嫨閫傜敤鑼冨洿', trigger: 'change' }]
+}
+
+const regulationSearchForm = reactive({
+  keyword: '',
+  category: ''
+})
+
+// 鍋囨暟鎹�
+const sealApplications = ref([
+  {
+    id: 'SEAL001',
+    title: '鍚堝悓鐢ㄥ嵃鐢宠',
+    applicant: '闄堝織寮�',
+    department: '閿�鍞儴',
+    sealType: '鍚堝悓涓撶敤绔�',
+    applyTime: '2024-01-15 10:30:00',
+    status: 'pending',
+    reason: '瀹㈡埛鍚堝悓闇�瑕佺洊绔�'
+  },
+  {
+    id: 'SEAL002',
+    title: '璐㈠姟鎶ュ憡鐢ㄥ嵃',
+    applicant: '鐜嬪缓鍥�',
+    department: '璐㈠姟閮�',
+    sealType: '璐㈠姟涓撶敤绔�',
+    applyTime: '2024-01-14 14:20:00',
+    status: 'approved',
+    reason: '瀛e害璐㈠姟鎶ュ憡闇�瑕佺洊绔�'
+  },
+  {
+    id: 'SEAL003',
+    title: '鍏徃绔犵▼鐢ㄥ嵃',
+    applicant: '瀛欐槑鍗�',
+    department: '娉曞姟閮�',
+    sealType: '鍏珷',
+    applyTime: '2024-01-13 09:15:00',
+    status: 'rejected',
+    reason: '鍏徃绔犵▼淇敼闇�瑕佺洊绔�'
+  }
+])
+
+const regulations = ref([
+  {
+    id: 'REG001',
+    title: '鍛樺伐鑰冨嫟绠$悊鍒跺害',
+    category: 'hr',
+    version: 'v2.1',
+    publisher: '浜轰簨閮�',
+    publishTime: '2024-01-10 09:00:00',
+    status: 'active',
+    readCount: 45,
+    content: '涓鸿鑼冨憳宸ヨ�冨嫟绠$悊锛屾彁楂樺伐浣滄晥鐜囷紝鐗瑰埗瀹氭湰鍒跺害...'
+  },
+  {
+    id: 'REG002',
+    title: '璐㈠姟鎶ラ攢鍒跺害',
+    category: 'finance',
+    version: 'v1.5',
+    publisher: '璐㈠姟閮�',
+    publishTime: '2024-01-08 14:30:00',
+    status: 'active',
+    readCount: 38,
+    content: '涓鸿鑼冭储鍔℃姤閿�娴佺▼锛屽姞寮鸿储鍔$鐞嗭紝鐗瑰埗瀹氭湰鍒跺害...'
+  },
+  {
+    id: 'REG003',
+    title: '瀹夊叏鐢熶骇绠$悊鍒跺害',
+    category: 'safety',
+    version: 'v3.0',
+    publisher: '瀹夊叏閮�',
+    publishTime: '2024-01-05 16:00:00',
+    status: 'active',
+    readCount: 52,
+    content: '涓虹‘淇濆憳宸ヤ汉韬畨鍏紝棰勯槻瀹夊叏浜嬫晠鍙戠敓锛岀壒鍒跺畾鏈埗搴�...'
+  }
+])
+
+const versionHistory = ref([
+  { version: 'v2.1', updateTime: '2024-01-10 09:00:00', updater: '浜轰簨閮�', changeLog: '鏇存柊鑰冨嫟鏃堕棿瑙勫畾' },
+  { version: 'v2.0', updateTime: '2023-12-15 10:30:00', updater: '浜轰簨閮�', changeLog: '鏂板鍔犵彮绠$悊瑙勫畾' },
+  { version: 'v1.0', updateTime: '2023-11-01 14:00:00', updater: '浜轰簨閮�', changeLog: '棣栨鍙戝竷' }
+])
+
+const readStatusList = ref([
+  { employee: '闄堝織寮�', department: '閿�鍞儴', readTime: '2024-01-11 10:30:00', confirmTime: '2024-01-11 10:35:00', status: 'confirmed' },
+  { employee: '鍒橀泤濠�', department: '鎶�鏈儴', readTime: '2024-01-11 14:20:00', confirmTime: '', status: 'unconfirmed' },
+  { employee: '鐜嬪缓鍥�', department: '璐㈠姟閮�', readTime: '2024-01-12 09:15:00', confirmTime: '2024-01-12 09:20:00', status: 'confirmed' }
+])
+
+// 鏂规硶
+const getStatusType = (status) => {
+  const statusMap = {
+    pending: 'warning',
+    approved: 'success',
+    rejected: 'danger'
+  }
+  return statusMap[status] || 'info'
+}
+
+const getStatusText = (status) => {
+  const statusMap = {
+    pending: '寰呭鎵�',
+    approved: '宸查�氳繃',
+    rejected: '宸叉嫆缁�'
+  }
+  return statusMap[status] || '鏈煡'
+}
+
+const getCategoryText = (category) => {
+  const categoryMap = {
+    hr: '浜轰簨鍒跺害',
+    finance: '璐㈠姟鍒跺害',
+    safety: '瀹夊叏鍒跺害',
+    tech: '鎶�鏈埗搴�'
+  }
+  return categoryMap[category] || '鏈煡'
+}
+
+const searchSealApplications = () => {
+  ElMessage.success('鎼滅储瀹屾垚')
+}
+
+const resetSealSearch = () => {
+  sealSearchForm.keyword = ''
+  sealSearchForm.status = ''
+  searchSealApplications()
+}
+
+const searchRegulations = () => {
+  ElMessage.success('鎼滅储瀹屾垚')
+}
+
+const resetRegulationSearch = () => {
+  regulationSearchForm.keyword = ''
+  regulationSearchForm.category = ''
+  searchRegulations()
+}
+
+const submitSealApplication = async () => {
+  try {
+    await sealFormRef.value.validate()
+    ElMessage.success('鐢宠鎻愪氦鎴愬姛')
+    showSealApplyDialog.value = false
+    Object.assign(sealForm, {
+      title: '',
+      sealType: '',
+      reason: '',
+      urgency: 'normal'
+    })
+  } catch (error) {
+    ElMessage.error('璇峰畬鍠勭敵璇蜂俊鎭�')
+  }
+}
+
+const submitRegulation = async () => {
+  try {
+    await regulationFormRef.value.validate()
+    ElMessage.success('鍒跺害鍙戝竷鎴愬姛')
+    showRegulationDialog.value = false
+    Object.assign(regulationForm, {
+      title: '',
+      category: '',
+      content: '',
+      effectiveTime: '',
+      scope: [],
+      requireConfirm: true
+    })
+  } catch (error) {
+    ElMessage.error('璇峰畬鍠勫埗搴︿俊鎭�')
+  }
+}
+
+const viewSealDetail = (row) => {
+  currentSealDetail.value = row
+  showSealDetailDialog.value = true
+}
+
+const approveSeal = (row) => {
+  ElMessageBox.confirm('纭閫氳繃璇ョ敤鍗扮敵璇凤紵', '鎻愮ず', {
+    confirmButtonText: '纭畾',
+    cancelButtonText: '鍙栨秷',
+    type: 'warning'
+  }).then(() => {
+    row.status = 'approved'
+    ElMessage.success('瀹℃壒閫氳繃')
+  })
+}
+
+const rejectSeal = (row) => {
+  ElMessageBox.prompt('璇疯緭鍏ユ嫆缁濆師鍥�', '鎻愮ず', {
+    confirmButtonText: '纭畾',
+    cancelButtonText: '鍙栨秷',
+    inputPattern: /\S+/,
+    inputErrorMessage: '鎷掔粷鍘熷洜涓嶈兘涓虹┖'
+  }).then(({ value }) => {
+    row.status = 'rejected'
+    ElMessage.success('宸叉嫆缁濈敵璇�')
+  })
+}
+
+const viewRegulation = (row) => {
+  currentRegulationDetail.value = row
+  showRegulationDetailDialog.value = true
+}
+
+const editRegulation = (row) => {
+  ElMessage.info('缂栬緫鍔熻兘寮�鍙戜腑...')
+}
+
+const viewVersionHistory = (row) => {
+  showVersionHistoryDialog.value = true
+}
+
+const viewReadStatus = (row) => {
+  showReadStatusDialog.value = true
+}
+
+onMounted(() => {
+  // 鍒濆鍖�
+})
+</script>
+
+<style scoped>
+.app-container {
+  padding: 20px;
+}
+
+.card-header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.tab-content {
+  padding: 20px 0;
+}
+
+.mb-20 {
+  margin-bottom: 20px;
+}
+
+.mt-20 {
+  margin-top: 20px;
+}
+
+.ml-10 {
+  margin-left: 10px;
+}
+
+.regulation-content {
+  background-color: #f5f5f5;
+  padding: 15px;
+  border-radius: 4px;
+  line-height: 1.6;
+  white-space: pre-wrap;
+}
+
+.dialog-footer {
+  display: flex;
+  justify-content: flex-end;
+  gap: 10px;
+}
+</style>

--
Gitblit v1.9.3