index.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. <template>
  2. <div class="system-config-notice-container layout-pd">
  3. <el-card shadow="never">
  4. <el-tabs v-model="listType" @tab-change="queryList">
  5. <el-tab-pane name="0" label="通知"></el-tab-pane>
  6. <el-tab-pane name="1" label="公告"></el-tab-pane>
  7. </el-tabs>
  8. <el-form :model="state.queryParams" ref="ruleFormRef" :inline="true" @submit.native.prevent class="mt10">
  9. <el-form-item label="标题" prop="Title">
  10. <el-input v-model="state.queryParams.Title" placeholder="标题" clearable @keyup.enter="queryList" style="width: 250px" />
  11. </el-form-item>
  12. <el-form-item label="通知类型" prop="BulletinTypeId">
  13. <el-select v-model="state.queryParams.BulletinTypeId" placeholder="请选择通知类型">
  14. <el-option v-for="item in bulletinType" :value="item.id" :key="item.id" :label="item.status" />
  15. </el-select>
  16. </el-form-item>
  17. <el-form-item label="创建时间" prop="exTime">
  18. <el-date-picker
  19. v-model="state.queryParams.exTime"
  20. type="datetimerange"
  21. unlink-panels
  22. range-separator="至"
  23. start-placeholder="开始时间"
  24. end-placeholder="结束时间"
  25. :shortcuts="shortcuts"
  26. @change="timeStartChangeCr"
  27. value-format="YYYY-MM-DD[T]HH:mm:ss"
  28. />
  29. </el-form-item>
  30. <el-form-item>
  31. <el-button type="primary" @click="queryList" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
  32. <el-button @click="resetQuery(ruleFormRef)" v-waves class="default-button"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
  33. </el-form-item>
  34. </el-form>
  35. <div class="mb20">
  36. <el-button type="primary" @click="onNoticeAdd" v-waves v-auth="'auxiliary:notice:add'">
  37. <SvgIcon name="ele-Plus" class="mr5" />新增
  38. </el-button>
  39. <el-button type="primary" @click="onNoticeDelete" v-waves v-auth="'auxiliary:notice:delete'" :disabled="!multipleSelection.length">
  40. <SvgIcon name="ele-Delete" class="mr5" />删除
  41. </el-button>
  42. </div>
  43. <!-- 表格 -->
  44. <el-table :data="state.tableData" v-loading="state.loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange">
  45. <el-table-column type="selection" width="55" />
  46. <!-- 通知 -->
  47. <template v-if="listType === '0'">
  48. <el-table-column prop="commonTypeText" label="通知类型" show-overflow-tooltip></el-table-column>
  49. <el-table-column prop="commonTypeText" label="通知状态" show-overflow-tooltip></el-table-column>
  50. <el-table-column prop="commonTypeText" label="通知标题" show-overflow-tooltip></el-table-column>
  51. <el-table-column prop="commonTypeText" label="文档编码" show-overflow-tooltip></el-table-column>
  52. <el-table-column prop="commonTypeText" label="必须阅读" show-overflow-tooltip></el-table-column>
  53. <el-table-column prop="commonTypeText" label="已阅读数" show-overflow-tooltip></el-table-column>
  54. <el-table-column prop="commonTypeText" label="通知对象" show-overflow-tooltip></el-table-column>
  55. <el-table-column prop="commonTypeText" label="通知时间" show-overflow-tooltip width="170">
  56. <template #default="{ row }">
  57. <span>{{ formatDate(row.creationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
  58. </template>
  59. </el-table-column>
  60. <el-table-column prop="commonTypeText" label="失效时间" show-overflow-tooltip width="170">
  61. <template #default="{ row }">
  62. <span>{{ formatDate(row.creationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
  63. </template>
  64. </el-table-column>
  65. <el-table-column prop="commonTypeText" label="来源单位" show-overflow-tooltip></el-table-column>
  66. <el-table-column prop="commonTypeText" label="已阅读次数" show-overflow-tooltip></el-table-column>
  67. </template>
  68. <!-- 公告 -->
  69. <template v-if="listType === '1'">
  70. <el-table-column prop="commonTypeText" label="公告类型" show-overflow-tooltip></el-table-column>
  71. <el-table-column prop="commonTypeText" label="公告状态" show-overflow-tooltip></el-table-column>
  72. <el-table-column prop="commonTypeText" label="公告标题" show-overflow-tooltip></el-table-column>
  73. <el-table-column prop="commonTypeText" label="文档编码" show-overflow-tooltip></el-table-column>
  74. <el-table-column prop="commonTypeText" label="已阅次数" show-overflow-tooltip></el-table-column>
  75. <el-table-column prop="commonTypeText" label="公告范围" show-overflow-tooltip></el-table-column>
  76. <el-table-column prop="commonTypeText" label="通知时间" show-overflow-tooltip width="170">
  77. <template #default="{ row }">
  78. <span>{{ formatDate(row.creationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
  79. </template>
  80. </el-table-column>
  81. <el-table-column prop="commonTypeText" label="失效时间" show-overflow-tooltip width="170">
  82. <template #default="{ row }">
  83. <span>{{ formatDate(row.creationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
  84. </template>
  85. </el-table-column>
  86. <el-table-column prop="commonTypeText" label="来源单位" show-overflow-tooltip></el-table-column>
  87. </template>
  88. <el-table-column label="操作" width="120" fixed="right" align="center">
  89. <template #default="{ row }">
  90. <el-button link type="primary" @click="updateNotice(row)" v-auth="'auxiliary:notice:edit'" title="修改通知公告"> 修改 </el-button>
  91. </template>
  92. </el-table-column>
  93. <template #empty>
  94. <Empty />
  95. </template>
  96. </el-table>
  97. <!-- 分页 -->
  98. <pagination
  99. :total="state.total"
  100. v-model:page="state.queryParams.PageIndex"
  101. v-model:limit="state.queryParams.PageSize"
  102. @pagination="queryList"
  103. />
  104. </el-card>
  105. <!-- 常用意见新增 -->
  106. <notice-add ref="noticeAddRef" @updateList="queryList" />
  107. <!-- 常用意见编辑 -->
  108. <notice-edit ref="noticeEditRef" @updateList="queryList" />
  109. <!-- 流程审批 -->
  110. <process-audit ref="processAuditRef" @orderProcessSuccess="queryList" />
  111. </div>
  112. </template>
  113. <script lang="ts" setup name="auxiliaryNotice">
  114. import { reactive, ref, onMounted, defineAsyncComponent } from 'vue';
  115. import { ElMessage, ElMessageBox, FormInstance } from 'element-plus';
  116. import { shortcuts } from '/@/utils/constants';
  117. import { formatDate } from '/@/utils/formatTime';
  118. import { auth } from '/@/utils/authFunction';
  119. import { deleteCommon } from '/@/api/auxiliary/advice';
  120. import {bulletinList, circularList, bulletinBaseData, circularBaseData} from '/@/api/auxiliary/notice';
  121. // 引入组件
  122. const NoticeAdd = defineAsyncComponent(() => import('/@/views/auxiliary/notice/component/Notice-add.vue')); // 公告通知新增
  123. const NoticeEdit = defineAsyncComponent(() => import('/@/views/auxiliary/notice/component/Notice-edit.vue')); // 公告通知编辑
  124. const ProcessAudit = defineAsyncComponent(() => import('/@/components/ProcessAudit/index.vue')); // 流程审批
  125. // 定义变量内容
  126. const state = reactive<any>({
  127. loading: false, // 加载状态
  128. queryParams: {
  129. // 查询参数
  130. PageIndex: 1,
  131. PageSize: 10,
  132. Title: '',
  133. BulletinTimeStart: '', // 创建时间 开始
  134. BulletinTimeEnd: '', // 创建时间 结束
  135. exTime: [], // 办理期限
  136. BulletinTypeId: '', //通知类型
  137. },
  138. total: 0, // 总条数
  139. tableData: [], // 表格数据
  140. });
  141. const ruleFormRef = ref<RefType>(null); // 表单ref
  142. const bulletinType = ref<EmptyArrayType>([]); // 通知类型
  143. const listType = ref<string>('0'); // 列表类型
  144. const handleTimeChange = (val: string[], startKey: string, endKey: string) => {
  145. if (val) {
  146. state.queryParams[startKey] = val[0];
  147. state.queryParams[endKey] = val[1];
  148. } else {
  149. state.queryParams[startKey] = '';
  150. state.queryParams[endKey] = '';
  151. }
  152. };
  153. // 甄别时间
  154. const timeStartChangeCr = (val: string[]) => {
  155. handleTimeChange(val, 'BulletinTimeStart', 'BulletinTimeEnd');
  156. };
  157. const getBaseData = async () => {
  158. try {
  159. let res = null;
  160. switch (listType.value){
  161. case '0':
  162. res = await circularBaseData();
  163. bulletinType.value = res.result ?? [];
  164. break;
  165. case '1':
  166. res = await bulletinBaseData();
  167. bulletinType.value = res.result ?? [];
  168. break;
  169. }
  170. } catch (error) {
  171. console.log(error);
  172. }
  173. };
  174. // 获取参数列表
  175. const queryList = () => {
  176. getBaseData();
  177. state.loading = true;
  178. if (!auth('auxiliary:notice:query')) ElMessage.error('抱歉,您没有权限获取通知公告列表!');
  179. else {
  180. switch (listType.value) {
  181. case '0':
  182. circularList(state.queryParams)
  183. .then((res) => {
  184. state.loading = false;
  185. state.tableData = res.result.items ?? [];
  186. state.total = res.result.total ?? 0;
  187. })
  188. .finally(() => {
  189. state.loading = false;
  190. });
  191. break;
  192. case '1':
  193. bulletinList(state.queryParams)
  194. .then((res) => {
  195. state.loading = false;
  196. state.tableData = res.result.items ?? [];
  197. state.total = res.result.total ?? 0;
  198. })
  199. .finally(() => {
  200. state.loading = false;
  201. });
  202. break;
  203. }
  204. }
  205. };
  206. // 重置表单
  207. const resetQuery = (formEl: FormInstance | undefined) => {
  208. if (!formEl) return;
  209. formEl.resetFields();
  210. queryList();
  211. };
  212. // 通知公告新增
  213. const noticeAddRef = ref<RefType>(); // 通知公告新增
  214. const processAuditRef = ref<RefType>(); // 处理流程
  215. const onNoticeAdd = () => {
  216. const processType = listType.value === '0' ? '新增通知' : '新增公告';
  217. const annexName = listType.value === '0' ? '通知附件' : '公告附件';
  218. const params = {
  219. id: '',
  220. processType,
  221. orderDetail: {},
  222. extra: {
  223. dialogTitle: processType,
  224. inputPlaceholder: '办理意见',
  225. annexName,
  226. },
  227. };
  228. processAuditRef.value.openDialog(params);
  229. };
  230. // 修改通知公告
  231. const noticeEditRef = ref<RefType>(); // 修改通知公告
  232. const updateNotice = (row: any) => {
  233. noticeEditRef.value.openDialog(row);
  234. };
  235. // 表格多选
  236. const multipleTableRef = ref<RefType>();
  237. const multipleSelection = ref<any>([]);
  238. const handleSelectionChange = (val: any[]) => {
  239. multipleSelection.value = val;
  240. };
  241. // 删除通知公告
  242. const onNoticeDelete = () => {
  243. const contents = multipleSelection.value.map((item: any) => item.content).join('、');
  244. const ids = multipleSelection.value.map((item: any) => item.id);
  245. ElMessageBox.confirm(`您确定要删除:【${contents}】的通知公告,是否继续?`, '提示', {
  246. confirmButtonText: '确认',
  247. cancelButtonText: '取消',
  248. type: 'warning',
  249. draggable: true,
  250. cancelButtonClass: 'default-button',
  251. autofocus: false,
  252. })
  253. .then(() => {
  254. deleteCommon({ ids }).then(() => {
  255. ElMessage.success('操作成功');
  256. queryList();
  257. });
  258. })
  259. .catch(() => {});
  260. };
  261. // 页面加载时
  262. onMounted(() => {
  263. queryList();
  264. });
  265. </script>
  266. <style lang="scss" scoped>
  267. .system-config-notice-container {
  268. }
  269. </style>