Bladeren bron

【系统公告】在新建系统公告的是,发布按钮如果在接口响应的时候,请给与限制

duy 2 dagen geleden
bovenliggende
commit
7e54c93ed2
2 gewijzigde bestanden met toevoegingen van 93 en 79 verwijderingen
  1. 1 1
      public/version.json
  2. 92 78
      src/views/system/announcement.vue

+ 1 - 1
public/version.json

@@ -1,3 +1,3 @@
 {
-  "value": "20251204181620"
+  "value": "20251205172351"
 }

+ 92 - 78
src/views/system/announcement.vue

@@ -5,13 +5,15 @@
         <div class="header">
           <div class="title">
             <div style="width: 140px">
-              <el-select v-model="searchForm.msgType" class="block" clearable filterable placeholder="请选择公告类型" size="small">
+              <el-select v-model="searchForm.msgType" class="block" clearable filterable placeholder="请选择公告类型"
+                size="small">
                 <el-option label="更新公告" value="1"></el-option>
                 <el-option label="普通公告" value="2"></el-option>
               </el-select>
             </div>
             <div style="width: 100px; margin-left: 12px; margin-right: 12px;">
-              <el-select v-model="searchForm.pushStatus" class="block" clearable filterable placeholder="发布状态" size="small">
+              <el-select v-model="searchForm.pushStatus" class="block" clearable filterable placeholder="发布状态"
+                size="small">
                 <el-option label="待发布" value="1"></el-option>
                 <el-option label="已发布" value="2"></el-option>
                 <el-option label="已取消" value="3"></el-option>
@@ -29,13 +31,14 @@
           </div>
         </div>
         <div class="content" v-loading="isLoading">
-          <el-table ref="tableRef" :data="tableData" border style="width: 100%;" height="100%" @selection-change="tableSelection">
+          <el-table ref="tableRef" :data="tableData" border style="width: 100%;" height="100%"
+            @selection-change="tableSelection">
             <el-table-column type="selection" width="50" align="center" fixed="left"></el-table-column>
             <el-table-column type="index" label="序号" width="50" align="center"></el-table-column>
             <el-table-column prop="msgType" label="公告类型" width="100" align="center">
               <template slot-scope="{row}">
-                <span v-if="row.msgType===1">更新公告</span>
-                <span v-if="row.msgType===2">普通公告</span>
+                <span v-if="row.msgType === 1">更新公告</span>
+                <span v-if="row.msgType === 2">普通公告</span>
               </template>
             </el-table-column>
             <el-table-column prop="pushSystem" label="推送系统" min-width="220"></el-table-column>
@@ -44,11 +47,11 @@
             <el-table-column prop="pushDateTime" label="发布时间" width="160" align="center"></el-table-column>
             <el-table-column prop="pushDateTime" label="时间配置" width="340">
               <template slot-scope="{row}">
-                <template v-if="row.msgType===1">
+                <template v-if="row.msgType === 1">
                   <span>剩余</span>
-                  <el-tag type="danger" size="mini" >{{row.msgWarnTime}}分钟</el-tag>
+                  <el-tag type="danger" size="mini">{{ row.msgWarnTime }}分钟</el-tag>
                   <span>进行提醒,</span>
-                  <el-tag type="danger" size="mini">{{row.msgCountDownTime}}分钟</el-tag>
+                  <el-tag type="danger" size="mini">{{ row.msgCountDownTime }}分钟</el-tag>
                   <span>开始进入倒计时</span>
                 </template>
                 <template v-else>
@@ -60,43 +63,37 @@
             <el-table-column prop="cancelDateTime" label="取消时间" width="160" align="center"></el-table-column>
             <el-table-column prop="pushStatus" label="发布状态" width="80" align="center">
               <template slot-scope="{row}">
-                <el-tag type="danger" effect="dark" size="mini" v-if="row.pushStatus===3">已取消</el-tag>
-                <el-tag type="success" effect="dark" size="mini" v-if="row.pushStatus===2">已发布</el-tag>
-                <el-tag type="info" effect="dark" size="mini" v-if="row.pushStatus===1">待发布</el-tag>
+                <el-tag type="danger" effect="dark" size="mini" v-if="row.pushStatus === 3">已取消</el-tag>
+                <el-tag type="success" effect="dark" size="mini" v-if="row.pushStatus === 2">已发布</el-tag>
+                <el-tag type="info" effect="dark" size="mini" v-if="row.pushStatus === 1">待发布</el-tag>
               </template>
             </el-table-column>
             <el-table-column prop="action" label="操作" width="180" align="center" fixed="right">
               <template slot-scope="{row}">
-                <el-button size="mini" @click="handleEdit(row)" :disabled="row.pushStatus!==3">编辑</el-button>
-                <el-button size="mini" type="danger" @click="handleCancel(row)" :disabled="row.pushStatus!==1">取消发布</el-button>
+                <el-button size="mini" @click="handleEdit(row)" :disabled="row.pushStatus !== 3">编辑</el-button>
+                <el-button size="mini" type="danger" @click="handleCancel(row)"
+                  :disabled="row.pushStatus !== 1">取消发布</el-button>
               </template>
             </el-table-column>
           </el-table>
         </div>
         <div class="action">
-          <el-pagination
-            @size-change="handleSizeChange"
-            @current-change="handleCurrentChange"
-            :current-page="searchForm.current"
-            :page-sizes="[20, 30, 40, 50]"
-            :page-size="searchForm.size"
-            layout="total, prev, pager, next, sizes, jumper"
-            :total="searchForm.total"
-          >
+          <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
+            :current-page="searchForm.current" :page-sizes="[20, 30, 40, 50]" :page-size="searchForm.size"
+            layout="total, prev, pager, next, sizes, jumper" :total="searchForm.total">
           </el-pagination>
         </div>
       </div>
     </div>
 
     <!--待发布-->
-    <el-dialog
-      class="hc-system-announcement-dialog black-card" title="待发布的公告" :visible.sync="isReleasedShow"
-      append-to-body center destroy-on-close width="660px" @closed="releasedCancel"
-    >
-      <el-divider content-position="left" class="hc-system-announcement-black-divider top" v-if="releasedData.updateMsg.length > 0">更新公告</el-divider>
+    <el-dialog class="hc-system-announcement-dialog black-card" title="待发布的公告" :visible.sync="isReleasedShow"
+      append-to-body center destroy-on-close width="660px" @closed="releasedCancel">
+      <el-divider content-position="left" class="hc-system-announcement-black-divider top"
+        v-if="releasedData.updateMsg.length > 0">更新公告</el-divider>
       <div class="hc-system-announcement-black-card" v-for="(item, index) in releasedData.updateMsg" :key="index">
         <div class="icon-box">
-          <div class="name">{{index === 0?'前 端':'后 端'}}</div>
+          <div class="name">{{ index === 0 ? '前 端' : '后 端' }}</div>
           <div class="icon">
             <i class="iconfont iconicon_notice"></i>
           </div>
@@ -105,20 +102,21 @@
           <div class="top-box">
             <div class="left">
               <span class="name">待发布:</span>
-              <span class="num">{{item.awaitMsgTotal}}</span>
+              <span class="num">{{ item.awaitMsgTotal }}</span>
             </div>
             <div class="right">
               <span class="name">创建人:</span>
-              <span class="user">{{item.creatUserName}}</span>
+              <span class="user">{{ item.creatUserName }}</span>
             </div>
           </div>
           <div class="time-box">
             <span class="name">发布时间:</span>
-            <span class="time">{{item.pushDateTime}}</span>
+            <span class="time">{{ item.pushDateTime }}</span>
           </div>
         </div>
       </div>
-      <el-divider content-position="left" class="hc-system-announcement-black-divider" v-if="releasedData.systemMsg.length > 0">普通公告</el-divider>
+      <el-divider content-position="left" class="hc-system-announcement-black-divider"
+        v-if="releasedData.systemMsg.length > 0">普通公告</el-divider>
       <div class="hc-system-announcement-black-card" v-for="(item, index) in releasedData.systemMsg" :key="index">
         <div class="icon-box">
           <div class="name">公 告</div>
@@ -130,27 +128,26 @@
           <div class="top-box">
             <div class="left">
               <span class="name">待发布:</span>
-              <span class="num">{{item.awaitMsgTotal}}</span>
+              <span class="num">{{ item.awaitMsgTotal }}</span>
             </div>
             <div class="right">
               <span class="name">创建人:</span>
-              <span class="user">{{item.creatUserName}}</span>
+              <span class="user">{{ item.creatUserName }}</span>
             </div>
           </div>
           <div class="time-box">
             <span class="name">发布时间:</span>
-            <span class="time">{{item.pushDateTime}}</span>
+            <span class="time">{{ item.pushDateTime }}</span>
           </div>
         </div>
       </div>
     </el-dialog>
 
     <!--发布普通公告-->
-    <el-dialog
-      class="hc-system-announcement-dialog w-700px" title="发布普通公告" :visible.sync="isGeneralShow"
-      width="700px" append-to-body center destroy-on-close @closed="generalCancel"
-    >
-      <el-form :model="generalFormModel" :rules="generalFormRules" ref="generalFormRef" class="hc-system-announcement-form" label-width="auto">
+    <el-dialog class="hc-system-announcement-dialog w-700px" title="发布普通公告" :visible.sync="isGeneralShow" width="700px"
+      append-to-body center destroy-on-close @closed="generalCancel">
+      <el-form :model="generalFormModel" :rules="generalFormRules" ref="generalFormRef"
+        class="hc-system-announcement-form" label-width="auto">
         <el-form-item label="公告内容:" prop="msgContent">
           <el-input type="textarea" v-model="generalFormModel.msgContent" rows="3"></el-input>
         </el-form-item>
@@ -158,7 +155,9 @@
           <el-input type="textarea" v-model="generalFormModel.pushRemark"></el-input>
         </el-form-item>
         <el-form-item label="发布配置:" prop="pushDateTime">
-          <el-date-picker v-model="generalFormModel.pushDateTime" type="datetime" placeholder="选择日期时间" :picker-options="pickerOptions" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
+          <el-date-picker v-model="generalFormModel.pushDateTime" type="datetime" placeholder="选择日期时间"
+            :picker-options="pickerOptions" format="yyyy-MM-dd HH:mm:ss"
+            value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
         </el-form-item>
         <el-form-item label="停留时间:" prop="msgShowTime">
           <el-select v-model="generalFormModel.msgShowTime" clearable filterable style="width: 190px;">
@@ -167,22 +166,22 @@
         </el-form-item>
         <el-form-item label="涉及系统:" prop="pushSystem">
           <el-checkbox-group v-model="generalFormModel.pushSystem">
-            <el-checkbox v-for="item in systemClinet" :label="item.clientId">{{item.name || item.clientId}}</el-checkbox>
+            <el-checkbox v-for="item in systemClinet" :label="item.clientId">{{ item.name ||
+              item.clientId }}</el-checkbox>
           </el-checkbox-group>
         </el-form-item>
       </el-form>
       <div slot="footer">
         <el-button @click="generalCancel">取消</el-button>
-        <el-button type="primary" @click="generalFormSubmit">发布</el-button>
+        <el-button type="primary" :loading="releasedLoading" @click="generalFormSubmit">发布</el-button>
       </div>
     </el-dialog>
 
     <!--发布系统公告-->
-    <el-dialog
-      class="hc-system-announcement-dialog h-full w-700px" title="发布系统公告" :visible.sync="isSystemUpdateShow"
-      width="700px" append-to-body center destroy-on-close @closed="systemUpdateCancel"
-    >
-      <el-form :model="updateFormModel" :rules="updateFormRules" ref="updateFormRef" class="hc-system-announcement-form" label-width="auto">
+    <el-dialog class="hc-system-announcement-dialog h-full w-700px" title="发布系统公告" :visible.sync="isSystemUpdateShow"
+      width="700px" append-to-body center destroy-on-close @closed="systemUpdateCancel">
+      <el-form :model="updateFormModel" :rules="updateFormRules" ref="updateFormRef" class="hc-system-announcement-form"
+        label-width="auto">
         <el-form-item label="公告内容:" prop="msgContent">
           <el-input type="textarea" v-model="updateFormModel.msgContent" rows="3"></el-input>
         </el-form-item>
@@ -202,32 +201,37 @@
           </el-radio-group>
         </el-form-item>
         <el-form-item label="发布配置:" prop="pushDateTime">
-          <el-date-picker v-model="updateFormModel.pushDateTime" type="datetime" placeholder="选择日期时间" :picker-options="pickerOptions" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
+          <el-date-picker v-model="updateFormModel.pushDateTime" type="datetime" placeholder="选择日期时间"
+            :picker-options="pickerOptions" format="yyyy-MM-dd HH:mm:ss"
+            value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
         </el-form-item>
         <el-form-item label="时间配置:" prop="msgWarnTime">
           <span>剩余</span>
           <span style="margin-left: 5px">
-            <el-select v-model="updateFormModel.msgWarnTime" clearable filterable size="small" style="width: 90px;" placeholder="分钟">
-                <el-option v-for="i in 60" :label="`${i}分钟`" :value="i"></el-option>
-              </el-select>
+            <el-select v-model="updateFormModel.msgWarnTime" clearable filterable size="small" style="width: 90px;"
+              placeholder="分钟">
+              <el-option v-for="i in 60" :label="`${i}分钟`" :value="i"></el-option>
+            </el-select>
           </span>
           <span style="margin-left: 5px">进行提醒,</span>
           <span style="margin-left: 5px">
-            <el-select v-model="updateFormModel.msgCountDownTime" clearable filterable size="small" style="width: 90px;" placeholder="时间">
-                <el-option v-for="i in 60" :label="`${i}分钟`" :value="i"></el-option>
-              </el-select>
+            <el-select v-model="updateFormModel.msgCountDownTime" clearable filterable size="small" style="width: 90px;"
+              placeholder="时间">
+              <el-option v-for="i in 60" :label="`${i}分钟`" :value="i"></el-option>
+            </el-select>
           </span>
           <span style="margin-left: 5px">开始进入倒计时</span>
         </el-form-item>
         <el-form-item label="涉及系统:" prop="pushSystem">
           <el-checkbox-group v-model="updateFormModel.pushSystem">
-            <el-checkbox v-for="item in systemClinet" :label="item.clientId">{{item.name || item.clientId}}</el-checkbox>
+            <el-checkbox v-for="item in systemClinet" :label="item.clientId">{{ item.name ||
+              item.clientId }}</el-checkbox>
           </el-checkbox-group>
         </el-form-item>
       </el-form>
       <div slot="footer">
         <el-button @click="systemUpdateCancel">取消</el-button>
-        <el-button type="primary" @click="updateFormSubmit">发布</el-button>
+        <el-button type="primary" :loading="releasedLoading" @click="updateFormSubmit">发布</el-button>
       </div>
     </el-dialog>
   </div>
@@ -235,17 +239,18 @@
 
 <script>
 import '@/styles/announcement.scss'
-import {getList, getAwaitMsg, getClinetAll, add, update, cancelPush, remove} from "@/api/system/announcement";
+import { getList, getAwaitMsg, getClinetAll, add, update, cancelPush, remove } from "@/api/system/announcement";
 export default {
   data() {
     return {
       //搜索
-      searchForm: {current: 1, size: 20, total: 0},
+      searchForm: { current: 1, size: 20, total: 0 },
       //公告列表
       isLoading: false,
       tableData: [],
       tableMultiple: [],
       //待发布
+      releasedLoading: false, // 发布按钮loading状态
       isReleasedShow: false,
       releasedNum: 0,
       releasedData: {
@@ -276,7 +281,7 @@ export default {
       updateFormModel: {
         updateServerType: [],
         pushSystem: [],
-        msgContent:'【系统维护公告】为提升系统安全性及运行效率,系统将于今日((需填写更新时间))进行更新升级,请您提前保存好工作数据。维护期间系统将暂停访问,给您带来不便,敬请谅解!如有疑问,请联系系统工作人员处理。'
+        msgContent: '【系统维护公告】为提升系统安全性及运行效率,系统将于今日((需填写更新时间))进行更新升级,请您提前保存好工作数据。维护期间系统将暂停访问,给您带来不便,敬请谅解!如有疑问,请联系系统工作人员处理。'
       },
       updateFormRules: {
         msgContent: [
@@ -291,7 +296,7 @@ export default {
         pushDateTime: [{
           required: true, trigger: 'blur',
           validator: (rule, value, callback) => {
-            const {msgCountDownTime} = this.updateFormModel
+            const { msgCountDownTime } = this.updateFormModel
             if (!value) {
               callback(new Error('请选择剩余进行提醒时间'));
             } else if (!msgCountDownTime) {
@@ -351,8 +356,8 @@ export default {
     //获取待发布公告
     async getAwaitMsgApi() {
       let _this = this
-      getAwaitMsg().then(({data}) => {
-        const {msgTotal, systemMsg, updateMsg} = data.data || {}
+      getAwaitMsg().then(({ data }) => {
+        const { msgTotal, systemMsg, updateMsg } = data.data || {}
         _this.releasedData = {
           systemMsg: systemMsg,
           updateMsg: updateMsg
@@ -375,11 +380,11 @@ export default {
     async getTableData() {
       this.isLoading = true
       const res = await getList(this.searchForm)
-      const {code, data, msg} = res.data || {}
-      const {records, total} = data || {}
+      const { code, data, msg } = res.data || {}
+      const { records, total } = data || {}
       this.tableData = records
       this.searchForm.total = total
-      if (code!==200) {
+      if (code !== 200) {
         this.$message.error(msg);
       }
       this.isLoading = false
@@ -405,7 +410,7 @@ export default {
     //表格删除
     async handleDelete() {
       const arr = this.tableMultiple
-      if (arr.length<=0) {
+      if (arr.length <= 0) {
         this.$message.warning('请先勾选数据');
         return
       }
@@ -418,7 +423,7 @@ export default {
         return
       }
       const ids = arr.flat().map(item => item.id).join(',');
-      remove(ids).then(({data}) => {
+      remove(ids).then(({ data }) => {
         this.$message.success(data.msg || '操作成功');
         this.tableMultiple = []
         this.searchClick()
@@ -427,7 +432,7 @@ export default {
     },
     //取消发布
     handleCancel(row) {
-      cancelPush(row.id).then(({data}) => {
+      cancelPush(row.id).then(({ data }) => {
         this.$message.success(data.msg || '操作成功');
         this.searchClick()
         this.getAwaitMsgApi()
@@ -449,7 +454,7 @@ export default {
     //获取应用列表
     async getClinetAllApi() {
       const res = await getClinetAll()
-      const {data} = res.data || []
+      const { data } = res.data || []
       this.systemClinet = data
     },
     async generalFormSubmit() {
@@ -458,21 +463,26 @@ export default {
       let form = JSON.parse(JSON.stringify(this.generalFormModel))
       form.pushSystem = form.pushSystem.join(',')
       form.msgType = 2
+      this.releasedLoading = true
       if (form.id) {
-        update(form).then(({data}) => {
+        const { data } = await update(form)
+        if (data.code === 200) {
           this.$message.success(data.msg || '操作成功');
           this.generalCancel()
           this.searchClick()
           this.getAwaitMsgApi()
-        })
+        }
+
       } else {
-        add(form).then(({data}) => {
+        const { data } = await add(form)
+        if (data.code === 200) {
           this.$message.success(data.msg || '操作成功');
           this.generalCancel()
           this.searchClick()
           this.getAwaitMsgApi()
-        })
+        }
       }
+      this.releasedLoading = false
     },
     //普通公告关闭
     generalCancel() {
@@ -494,21 +504,25 @@ export default {
       form.pushSystem = form.pushSystem.join(',')
       form.updateServerType = form.updateServerType.join(',')
       form.msgType = 1
+      this.releasedLoading = true
       if (form.id) {
-        update(form).then(({data}) => {
+        const { data } = await update(form)
+        if (data.code === 200) {
           this.$message.success(data.msg || '操作成功');
           this.systemUpdateCancel()
           this.searchClick()
           this.getAwaitMsgApi()
-        })
+        }
       } else {
-        add(form).then(({data}) => {
+        const { data } = await add(form)
+        if (data.code === 200) {
           this.$message.success(data.msg || '操作成功');
           this.systemUpdateCancel()
           this.searchClick()
           this.getAwaitMsgApi()
-        })
+        }
       }
+      this.releasedLoading = false
     },
     //系统更新公告关闭
     systemUpdateCancel() {