From d7f9fc20b91f72f52cb76e699858458d995c6c76 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期四, 21 五月 2026 10:51:55 +0800
Subject: [PATCH] 公告通知页面复用

---
 src/views/officeProcessAutomation/NoticeAnnouncement/notice-manage/index.vue |  255 +-------------------------------------------------
 1 files changed, 7 insertions(+), 248 deletions(-)

diff --git a/src/views/officeProcessAutomation/NoticeAnnouncement/notice-manage/index.vue b/src/views/officeProcessAutomation/NoticeAnnouncement/notice-manage/index.vue
index 4599ced..3f65cb7 100644
--- a/src/views/officeProcessAutomation/NoticeAnnouncement/notice-manage/index.vue
+++ b/src/views/officeProcessAutomation/NoticeAnnouncement/notice-manage/index.vue
@@ -1,253 +1,12 @@
-<!--OA妯″潡锛歂oticeAnnouncement 閫氱煡鍏憡-->
+<!--
+  妯″潡涓枃鍚嶏細閫氱煡鍏憡
+  鐩綍鏍囪瘑锛歂oticeAnnouncement/notice-manage
+  澶嶇敤椤甸潰锛欯/views/collaborativeApproval/noticeManagement/index.vue锛堝崗鍚屽鎵�-閫氱煡鍏憡锛�
+-->
 <template>
-  <div class="app-container notice-announcement-page">
-    <div class="search_form mb20">
-      <div class="search_fields">
-        <span class="search_title">鍏抽敭璇嶏細</span>
-        <el-input
-          v-model="searchForm.keyword"
-          style="width: 200px"
-          placeholder="鏍囬 / 缂栧彿"
-          clearable
-          :prefix-icon="Search"
-          @keyup.enter="handleQuery"
-        />
-        <span class="search_title" style="margin-left: 12px">绫诲瀷锛�</span>
-        <el-select v-model="searchForm.noticeType" placeholder="鍏ㄩ儴" clearable style="width: 130px">
-          <el-option v-for="opt in NOTICE_TYPE_OPTIONS" :key="opt.value" :label="opt.label" :value="opt.value" />
-        </el-select>
-        <span class="search_title" style="margin-left: 12px">浼樺厛绾э細</span>
-        <el-select v-model="searchForm.priority" placeholder="鍏ㄩ儴" clearable style="width: 110px">
-          <el-option v-for="opt in PRIORITY_OPTIONS" :key="opt.value" :label="opt.label" :value="opt.value" />
-        </el-select>
-        <span class="search_title" style="margin-left: 12px">鐘舵�侊細</span>
-        <el-select v-model="searchForm.publishStatus" placeholder="鍏ㄩ儴" clearable style="width: 110px">
-          <el-option v-for="opt in PUBLISH_STATUS_OPTIONS" :key="opt.value" :label="opt.label" :value="opt.value" />
-        </el-select>
-        <span class="search_title" style="margin-left: 12px">鍙戝竷鏃ユ湡锛�</span>
-        <el-date-picker
-          v-model="searchForm.publishDateRange"
-          type="daterange"
-          range-separator="-"
-          start-placeholder="寮�濮�"
-          end-placeholder="缁撴潫"
-          format="YYYY-MM-DD"
-          value-format="YYYY-MM-DD"
-          style="width: 260px"
-          clearable
-        />
-        <el-button type="primary" :icon="Search" class="ml10" @click="handleQuery">鎼滅储</el-button>
-        <el-button :icon="RefreshRight" @click="resetSearch">閲嶇疆</el-button>
-      </div>
-      <div class="search_actions">
-        <el-button type="primary" :icon="Plus" @click="openFormDialog('add')">娣诲姞鍏憡</el-button>
-      </div>
-    </div>
-
-    <div class="table_list">
-      <PIMTable
-        rowKey="id"
-        :column="tableColumn"
-        :tableData="tableData"
-        :page="page"
-        :isSelection="false"
-        :tableLoading="tableLoading"
-        :total="page.total"
-        @pagination="pagination"
-      >
-        <template #noticeType="{ row }">
-          <span class="notice-type-tag" :style="{ color: noticeTypeColor(row.noticeType) }">
-            {{ noticeTypeLabel(row.noticeType) }}
-          </span>
-        </template>
-      </PIMTable>
-    </div>
-
-    <!-- 娣诲姞 / 淇敼 -->
-    <el-dialog
-      v-model="formDialog.visible"
-      :title="formDialog.title"
-      width="800px"
-      append-to-body
-      destroy-on-close
-      class="notice-form-dialog"
-      @closed="formRef?.resetFields?.()"
-    >
-      <el-form
-        ref="formRef"
-        :model="form"
-        :rules="formRules"
-        label-width="100px"
-        :disabled="formDialog.readonly"
-      >
-        <el-form-item label="鏍囬" prop="title">
-          <el-input v-model="form.title" placeholder="璇疯緭鍏ュ叕鍛婃爣棰�" maxlength="100" show-word-limit />
-        </el-form-item>
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="鍏憡绫诲瀷" prop="noticeType">
-              <el-select v-model="form.noticeType" placeholder="璇烽�夋嫨" style="width: 100%" @change="onNoticeTypeChange">
-                <el-option v-for="opt in NOTICE_TYPE_OPTIONS" :key="opt.value" :label="opt.label" :value="opt.value" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="浼樺厛绾�">
-              <el-select v-model="form.priority" placeholder="璇烽�夋嫨" style="width: 100%">
-                <el-option v-for="opt in PRIORITY_OPTIONS" :key="opt.value" :label="opt.label" :value="opt.value" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="鍙戝竷鏃ユ湡" prop="publishDate">
-              <el-date-picker
-                v-model="form.publishDate"
-                type="date"
-                placeholder="鍙戝竷鏃ユ湡"
-                format="YYYY-MM-DD"
-                value-format="YYYY-MM-DD"
-                style="width: 100%"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="杩囨湡鏃ユ湡">
-              <el-date-picker
-                v-model="form.expireDate"
-                type="date"
-                placeholder="鍙�夛紝鐣欑┖涓洪暱鏈熸湁鏁�"
-                format="YYYY-MM-DD"
-                value-format="YYYY-MM-DD"
-                style="width: 100%"
-                clearable
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-form-item label="闃呰鑼冨洿">
-          <el-radio-group v-model="form.readScope">
-            <el-radio v-for="opt in READ_SCOPE_OPTIONS" :key="opt.value" :value="opt.value">
-              {{ opt.label }}
-            </el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item v-if="form.readScope === 'department'" label="鍙閮ㄩ棬">
-          <el-select v-model="form.targetDeptIds" multiple placeholder="閫夋嫨閮ㄩ棬" style="width: 100%">
-            <el-option v-for="d in DEPT_OPTIONS" :key="d.value" :label="d.label" :value="d.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item v-if="form.noticeType === 'emergency'" label="蹇呰纭">
-          <el-switch v-model="form.requireReadConfirm" active-text="绱ф�ラ�氱煡闇�鍛樺伐纭宸茶" />
-        </el-form-item>
-        <el-form-item label="鍐呭" prop="contentHtml">
-          <Editor v-model="form.contentHtml" :min-height="280" placeholder="璇疯緭鍏ュ唴瀹�" />
-        </el-form-item>
-        <el-form-item label="鍙戝竷浜�">
-          <el-input v-model="form.publisherName" placeholder="濡傦細琛屾斂閮�" maxlength="50" />
-        </el-form-item>
-      </el-form>
-      <template v-if="!formDialog.readonly" #footer>
-        <el-button @click="formDialog.visible = false">鍙� 娑�</el-button>
-        <el-button @click="onSave(false)">瀛樿崏绋�</el-button>
-        <el-button type="primary" @click="onSave(true)">纭� 瀹�</el-button>
-      </template>
-    </el-dialog>
-
-    <!-- 璇︽儏 -->
-    <el-dialog v-model="detailDialog.visible" title="鍏憡璇︽儏" width="800px" append-to-body destroy-on-close>
-      <NoticeDetailPanel :row="detailRow" />
-      <template #footer>
-        <el-button @click="detailDialog.visible = false">鍏� 闂�</el-button>
-      </template>
-    </el-dialog>
-  </div>
+  <NoticeManagement />
 </template>
 
 <script setup>
-import { Plus, RefreshRight } from "@element-plus/icons-vue";
-import { ElMessage } from "element-plus";
-import { onMounted } from "vue";
-import Editor from "@/components/Editor/index.vue";
-import { noticeTypeColor } from "./noticeAnnouncementUtils.js";
-import NoticeDetailPanel from "./components/NoticeDetailPanel.vue";
-import { useNoticeAnnouncement } from "./useNoticeAnnouncement.js";
-
-const {
-  Search,
-  NOTICE_TYPE_OPTIONS,
-  PRIORITY_OPTIONS,
-  PUBLISH_STATUS_OPTIONS,
-  READ_SCOPE_OPTIONS,
-  DEPT_OPTIONS,
-  noticeTypeLabel,
-  searchForm,
-  tableLoading,
-  page,
-  tableData,
-  tableColumn,
-  formDialog,
-  form,
-  formRef,
-  formRules,
-  detailDialog,
-  detailRow,
-  handleQuery,
-  resetSearch,
-  pagination,
-  openFormDialog,
-  saveForm,
-} = useNoticeAnnouncement();
-
-function onNoticeTypeChange(type) {
-  if (type === "emergency") {
-    form.priority = "urgent";
-    form.requireReadConfirm = true;
-  }
-}
-
-function onSave(publish) {
-  const ret = saveForm(publish);
-  if (ret?.message) {
-    ElMessage.warning(ret.message);
-    return;
-  }
-  if (ret?.ok) {
-    ElMessage.success(publish ? "鍏憡宸插彂甯�" : "宸蹭繚瀛樿崏绋�");
-  }
-}
-
-onMounted(() => {
-  handleQuery();
-});
+import NoticeManagement from "@/views/collaborativeApproval/noticeManagement/index.vue";
 </script>
-
-<style scoped>
-.notice-announcement-page .search_form {
-  display: flex;
-  flex-wrap: wrap;
-  justify-content: space-between;
-  align-items: flex-start;
-  gap: 12px;
-}
-.search_fields {
-  display: flex;
-  flex-wrap: wrap;
-  align-items: center;
-  gap: 4px;
-}
-.search_actions {
-  flex-shrink: 0;
-}
-.notice-type-tag {
-  font-weight: 600;
-  font-size: 13px;
-}
-.ml10 {
-  margin-left: 10px;
-}
-.mb20 {
-  margin-bottom: 20px;
-}
-</style>

--
Gitblit v1.9.3