Просмотр исходного кода

新增行短稽核消息管理页面

wuzd 4 лет назад
Родитель
Сommit
449fe5ee4d

+ 4 - 2
src/mixins/JeecgListMixin.js

@@ -75,7 +75,7 @@ export const JeecgListMixin = {
     }
   },
   methods:{
-    loadData(arg) {
+    loadData(arg,params) {
       if(!this.url.list){
         this.$message.error("请设置url.list属性!")
         return
@@ -84,7 +84,9 @@ export const JeecgListMixin = {
       if (arg === 1) {
         this.ipagination.current = 1;
       }
-      var params = this.getQueryParams();//查询条件
+      if(!params){
+        params = this.getQueryParams();//查询条件
+      }
       this.loading = true;
       getAction(this.url.list, params).then((res) => {
         if (res.success) {

+ 348 - 0
src/views/system/SysAnnouncement_checkList.vue

@@ -0,0 +1,348 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery_custom">
+        <a-row :gutter="24">
+
+          <a-col :span="6">
+            <a-form-item label="标题">
+              <a-input placeholder="请输入标题" v-model="queryParam.titile"></a-input>
+            </a-form-item>
+          </a-col>
+          <!--<a-col :span="6">
+            <a-form-item label="内容">
+              <a-input placeholder="请输入内容" v-model="queryParam.msgContent"></a-input>
+            </a-form-item>
+          </a-col>-->
+
+          <a-col :span="8">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery_custom" icon="search">查询</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+<!--      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>-->
+      <a-button type="primary" icon="download" @click="handleExportXls('行短稽核通告')">导出</a-button>
+<!--      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">-->
+<!--        <a-button type="primary" icon="import">导入</a-button>-->
+<!--      </a-upload>-->
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel">
+            <a-icon type="delete"/>
+            删除
+          </a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作
+          <a-icon type="down"/>
+        </a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a  v-if="record.sendStatus == 0" @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" v-if="record.sendStatus == 0"/>
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
+            <a-menu slot="overlay">
+              <a-menu-item v-if="record.sendStatus != 1">
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+              <a-menu-item v-if="record.sendStatus == 0">
+                <a-popconfirm title="确定发布吗?" @confirm="() => releaseData(record.id)">
+                  <a>发布</a>
+                </a-popconfirm>
+              </a-menu-item>
+              <a-menu-item v-if="record.sendStatus == 1">
+                <a-popconfirm title="确定撤销吗?" @confirm="() => reovkeData(record.id)">
+                  <a>撤销</a>
+                </a-popconfirm>
+              </a-menu-item>
+              <a-menu-item>
+                  <a @click="handleDetail(record)">查看</a>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table区域-end -->
+
+    <!-- 表单区域 -->
+    <sysAnnouncement_check-modal ref="modalForm" @ok="modalFormOk"></sysAnnouncement_check-modal>
+    <!-- 查看详情 -->
+    <j-modal class="detail-modal" title="查看详情" :visible.sync="detailModal.visible" :top="50" :width="600" switchFullscreen :footer="null">
+      <iframe v-if="detailModal.url" class="detail-iframe" :src="detailModal.url"/>
+    </j-modal>
+
+  </a-card>
+</template>
+
+<script>
+  import SysAnnouncement_checkModal from './modules/SysAnnouncement_checkModal'
+  import {doReleaseData, doReovkeData} from '@/api/api'
+  import {getAction} from '@/api/manage'
+  import {JeecgListMixin} from '@/mixins/JeecgListMixin'
+  import { ACCESS_TOKEN } from '@/store/mutation-types'
+
+  export default {
+    name: "SysAnnouncementList",
+    mixins: [JeecgListMixin],
+    components: {
+      SysAnnouncement_checkModal
+    },
+    data() {
+      return {
+        description: '系统通告表管理页面',
+        // 查询条件
+        queryParam: {
+          "sender":"北区稽核平台"
+        },
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key: 'rowIndex',
+            width: 60,
+            align: "center",
+            customRender: function (t, r, index) {
+              return parseInt(index) + 1;
+            }
+          },
+
+          {
+            title: '标题',
+            align: "center",
+            dataIndex: 'titile'
+          },
+          {
+            title: '消息类型',
+            align: "center",
+            dataIndex: 'msgCategory',
+            customRender: function (text) {
+              if (text == '1') {
+                return "通知公告";
+              } else if (text == "2") {
+                return "系统消息";
+              } else {
+                return text;
+              }
+            }
+          },
+          /*{
+            title: '开始时间',
+            align: "center",
+            dataIndex: 'startTime'
+          },
+          {
+            title: '结束时间',
+            align: "center",
+            dataIndex: 'endTime'
+          },*/
+          {
+            title: '发布人',
+            align: "center",
+            dataIndex: 'sender'
+          },
+          {
+            title: '优先级',
+            align: "center",
+            dataIndex: 'priority',
+            customRender: function (text) {
+              if (text == 'L') {
+                return "低";
+              } else if (text == "M") {
+                return "中";
+              } else if (text == "H") {
+                return "高";
+              } else {
+                return text;
+              }
+            }
+          },
+          {
+            title: '通告对象',
+            align: "center",
+            dataIndex: 'msgType',
+            customRender: function (text,row) {
+              if (text == 'USER') {
+                /*return "指定用户";*/
+                return row["userIds"]
+              } else if (text == "ALL") {
+                return "全体用户";
+              } else {
+                return text;
+              }
+            }
+          },
+          {
+            title: '发布状态',
+            align: "center",
+            dataIndex: 'sendStatus',
+            customRender: function (text) {
+              if (text == 0) {
+                return "未发布";
+              } else if (text == 1) {
+                return "已发布";
+              } else if (text == 2) {
+                return "已撤销";
+              } else {
+                return text;
+              }
+            }
+          },
+          {
+            title: '发布时间',
+            align: "center",
+            dataIndex: 'sendTime'
+          },
+          {
+            title: '撤销时间',
+            align: "center",
+            dataIndex: 'cancelTime'
+          },
+          /*{
+                title: '删除状态(0,正常,1已删除)',
+                align:"center",
+                dataIndex: 'delFlag'
+              },*/
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align: "center",
+            scopedSlots: {customRender: 'action'},
+          }
+        ],
+        detailModal: {visible: false, url: '',},
+        url: {
+          list: "/sys/annountCement/custom/list",
+          delete: "/sys/annountCement/delete",
+          deleteBatch: "/sys/annountCement/deleteBatch",
+          releaseDataUrl: "/sys/annountCement/doReleaseData",
+          reovkeDataUrl: "sys/annountCement/doReovkeData",
+          exportXlsUrl: "sys/annountCement/custom/exportXls",
+          importExcelUrl: "sys/annountCement/importExcel",
+        },
+      }
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      }
+    },
+    methods: {
+      //执行发布操作
+      releaseData: function (id) {
+        console.log(id);
+        var that = this;
+        doReleaseData({id: id}).then((res) => {
+          if (res.success) {
+            that.$message.success(res.message);
+            that.loadData(1);
+          } else {
+            that.$message.warning(res.message);
+          }
+        });
+      },
+      //执行撤销操作
+      reovkeData: function (id) {
+        var that = this;
+        doReovkeData({id: id}).then((res) => {
+          if (res.success) {
+            that.$message.success(res.message);
+            that.loadData(1);
+            this.syncHeadNotic(id)
+          } else {
+            that.$message.warning(res.message);
+          }
+        });
+      },
+      syncHeadNotic(anntId){
+        getAction("sys/annountCement/syncNotic",{anntId:anntId})
+      },
+      handleDetail:function(record){
+        const domain = window._CONFIG['domianURL']
+        const token = this.$ls.get(ACCESS_TOKEN)
+        this.detailModal.url = `${domain}/sys/annountCement/showAnnUser/${record.id}?token=${token}`
+        this.detailModal.visible = true
+      },
+      searchQuery_custom() {
+        var params = this.getQueryParams();
+        var search_title = params["titile"];
+        if(search_title && search_title!=""){
+          params["titile"] = "*" + search_title + "*";
+        }
+
+        this.loadData(1,params);
+        // 点击查询清空列表选中行
+        // https://gitee.com/jeecg/jeecg-boot/issues/I4KTU1
+        this.selectedRowKeys = [];
+        this.selectionRows = [];
+      },
+    }
+  }
+</script>
+<style scoped lang="less">
+  @import '~@assets/less/common.less';
+
+  /** 查看详情弹窗的样式 */
+  .detail-modal {
+    .detail-iframe {
+      border: 0;
+      width: 100%;
+      height: 88vh;
+      min-height: 600px;
+    }
+
+    &.fullscreen .detail-iframe {
+      height: 100%;
+    }
+  }
+
+  .detail-modal /deep/ .ant-modal {
+    top: 30px;
+
+    .ant-modal-body {
+      font-size: 0;
+      padding: 0;
+    }
+  }
+
+  .detail-modal.fullscreen /deep/ .ant-modal {
+    top: 0;
+  }
+
+</style>

+ 234 - 0
src/views/system/modules/SysAnnouncement_checkModal.vue

@@ -0,0 +1,234 @@
+<template>
+  <a-modal
+    :title="title"
+    :width="900"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    @ok="handleOk"
+    @cancel="handleCancel"
+    :okButtonProps="{ props: {disabled: disabled} }"
+    cancelText="关闭">
+
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :model="model" :rules="validatorRules">
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="msgCategory" label="消息类型">
+          <a-radio-group v-model="model.msgCategory" :disabled="disableSubmit">
+            <a-radio value="1">通知公告</a-radio>
+            <a-radio value="2">系统消息</a-radio>
+          </a-radio-group>
+        </a-form-model-item>
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="titile" label="标题">
+          <a-input placeholder="请输入标题" v-model="model.titile" :readOnly="disableSubmit"/>
+        </a-form-model-item>
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="msgAbstract" label="摘要">
+          <a-textarea placeholder="请输入摘要"  v-model="model.msgAbstract" />
+        </a-form-model-item>
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="endTime" label="截至日期" class="endTime">
+          <j-date style="width: 100%" :getCalendarContainer="node => node.parentNode" v-model="model.endTime" placeholder="请选择结束时间" showTime dateFormat="YYYY-MM-DD HH:mm:ss" />
+        </a-form-model-item>
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="msgType" label="接收用户">
+          <a-radio-group v-model="model.msgType" :disabled="disableSubmit" @change="chooseMsgType">
+            <a-radio value="USER">指定用户</a-radio>
+            <a-radio value="ALL">全体用户</a-radio>
+          </a-radio-group>
+        </a-form-model-item>
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="指定用户" v-if="userType">
+          <j-select-multi-user :returnKeys="returnKeys" placeholder="请选择指定用户" v-model="userIds" :trigger-change="true"></j-select-multi-user>
+        </a-form-model-item>
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="优先级" >
+          <a-radio-group v-model="model.priority" placeholder="请选择优先级" :disabled="disableSubmit">
+            <a-radio value="L">低</a-radio>
+            <a-radio value="M">中</a-radio>
+            <a-radio value="H">高</a-radio>
+          </a-radio-group>
+        </a-form-model-item>
+        <a-form-model-item :labelCol="labelColX1" :wrapperCol="wrapperColX1" label="内容" class="j-field-content">
+          <j-editor v-model="model.msgContent" />
+        </a-form-model-item>
+      </a-form-model>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+  import { getAction } from '@/api/manage'
+  import JDate from '@/components/jeecg/JDate'
+  import JEditor from '@/components/jeecg/JEditor'
+  import SelectUserListModal from "./SelectUserListModal";
+  import moment from 'moment'
+
+  export default {
+    components: { JEditor, JDate, SelectUserListModal},
+    name: "SysAnnouncement_checkModal",
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        disableSubmit:false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 4 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 18 },
+        },
+        labelColX1: {
+          xs: { span: 24 },
+          sm: { span: 4 },
+        },
+        wrapperColX1: {
+          xs: { span: 24 },
+          sm: { span: 18 },
+        },
+        confirmLoading: false,
+        validatorRules:{
+          titile: [{ required: true, message: '请输入标题!' }],
+          msgCategory: [{ required: true, message: '请选择消息类型!' }],
+          msgType:[{ required: true, message: '请选择通告对象类型!' }],
+          endTime:[{ required: true, message: '请选择结束时间!'} ,{validator: this.endTimeValidate}],
+          startTime:[{required: true, message: '请选择开始时间!'},{validator: this.startTimeValidate}],
+          msgAbstract: [{ required: true, message: '请输入摘要!' }],
+        },
+        url: {
+          queryByIds: "/sys/user/queryByIds",
+          add: "/sys/annountCement/add",
+          edit: "/sys/annountCement/edit",
+        },
+        userType:false,
+        userIds:[],
+        selectedUser:[],
+        disabled:false,
+        msgContent:"",
+        userList:[],
+        returnKeys:['id', 'id'] //用户选择返回字段
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        this.edit({});
+      },
+      edit (record) {
+        this.model = {}
+        this.disable = false;
+        this.visible = true;
+        this.getUser(record);
+      },
+      getUser(record){
+        //update-begin---author:wangshuai ---date:20211227  for:[JTC-191]系统通告参考vue3的来改,为单选按钮附默认值------------
+        record.msgCategory = record.msgCategory?record.msgCategory:"1"
+        record.msgType = record.msgType?record.msgType:"ALL"
+        record.priority = record.priority?record.priority:"H"
+        //update-begin---author:wangshuai ---date:20211227  for:[JTC-191]系统通告参考vue3的来改,为单选按钮附默认值------------
+        this.model = Object.assign({}, record);
+        // 指定用户
+        if(record&&record.msgType === "USER"){
+          this.userType =  true;
+          //update-begin---author:wangshuai ---date:20220104  for:[JTC-304]指定人员不支持分页勾选,换通用的用户组件------------
+          this.userIds = record.userIds.substr(0,record.userIds.length-1);
+          //update-end---author:wangshuai ---date:20220104  for:[JTC-304]指定人员不支持分页勾选,换通用的用户组件------------
+        }
+      },
+      close () {
+        this.$emit('close');
+        this.selectedUser = [];
+        this.visible = false;
+        this.$refs.form.resetFields();
+      },
+      handleOk () {
+        const that = this;
+        //当设置指定用户类型,但用户为空时,后台报错
+        if(this.userType &&!(this.userIds!=null && this.userIds.length >0)){
+            this.$message.warning('指定用户不能为空!')
+            return;
+          }
+        // 触发表单验证
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            if(this.userType){
+              //update-begin---author:wangshuai ---date:20220104  for:[JTC-304]指定人员不支持分页勾选,换通用的用户组件------------
+              this.model.userIds =  this.userIds+",";
+              //update-end---author:wangshuai ---date:20220104  for:[JTC-304]指定人员不支持分页勾选,换通用的用户组件------------
+            }
+            httpAction(httpurl,this.model,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+                that.resetUser();
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+
+          }else{
+            return false;
+          }
+        })
+      },
+      handleCancel () {
+        this.visible = false;
+        this.$emit('close');
+        this.$refs.form.resetFields();
+        this.resetUser();
+      },
+      resetUser (){
+        this.userType =  false;
+        this.userIds = [];
+        this.disabled = false;
+        // 不知道这个干嘛的
+        // this.$refs.UserListModal.edit(null,null);
+      },
+      chooseMsgType(e) {
+        if("USER" == e.target.value) {
+          this.userType = true;
+          this.userIds = '';
+        } else {
+          this.userType = false;
+          this.userIds = [];
+        }
+      },
+      startTimeValidate(rule,value,callback){
+        let endTime = this.model.endTime
+        if(!value || !endTime){
+          callback()
+        }else if(moment(value).isBefore(endTime)){
+          callback()
+        }else{
+          callback("开始时间需小于结束时间")
+        }
+      },
+      endTimeValidate(rule,value,callback){
+        let startTime = this.model.startTime;
+        if(!value || !startTime){
+          callback()
+        }else if(moment(startTime).isBefore(value)){
+          callback()
+        }else{
+          callback("结束时间需大于开始时间")
+        }
+      },
+    }
+  }
+</script>
+
+<style scoped>
+
+</style>