houzhongjian
2024-08-08 820397e43a0b64d35c6d31d2a55475061438593b
提交 | 用户 | 时间
820397 1 <template>
H 2   <ContentWrap>
3     <!-- 搜索工作栏 -->
4     <el-form
5       class="-mb-15px"
6       :model="queryParams"
7       ref="queryFormRef"
8       :inline="true"
9       label-width="68px"
10     >
11       <el-form-item label="公告标题" prop="title">
12         <el-input
13           v-model="queryParams.title"
14           placeholder="请输入公告标题"
15           clearable
16           @keyup.enter="handleQuery"
17           class="!w-240px"
18         />
19       </el-form-item>
20       <el-form-item label="公告状态" prop="status">
21         <el-select
22           v-model="queryParams.status"
23           placeholder="请选择公告状态"
24           clearable
25           class="!w-240px"
26         >
27           <el-option
28             v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
29             :key="dict.value"
30             :label="dict.label"
31             :value="dict.value"
32           />
33         </el-select>
34       </el-form-item>
35       <el-form-item>
36         <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
37         <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
38         <el-button
39           type="primary"
40           plain
41           @click="openForm('create')"
42           v-hasPermi="['system:notice:create']"
43         >
44           <Icon icon="ep:plus" class="mr-5px" /> 新增
45         </el-button>
46       </el-form-item>
47     </el-form>
48   </ContentWrap>
49
50   <!-- 列表 -->
51   <ContentWrap>
52     <el-table v-loading="loading" :data="list">
53       <el-table-column label="公告编号" align="center" prop="id" />
54       <el-table-column label="公告标题" align="center" prop="title" />
55       <el-table-column label="公告类型" align="center" prop="type">
56         <template #default="scope">
57           <dict-tag :type="DICT_TYPE.SYSTEM_NOTICE_TYPE" :value="scope.row.type" />
58         </template>
59       </el-table-column>
60       <el-table-column label="状态" align="center" prop="status">
61         <template #default="scope">
62           <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
63         </template>
64       </el-table-column>
65       <el-table-column
66         label="创建时间"
67         align="center"
68         prop="createTime"
69         width="180"
70         :formatter="dateFormatter"
71       />
72       <el-table-column label="操作" align="center">
73         <template #default="scope">
74           <el-button
75             link
76             type="primary"
77             @click="openForm('update', scope.row.id)"
78             v-hasPermi="['system:notice:update']"
79           >
80             编辑
81           </el-button>
82           <el-button
83             link
84             type="danger"
85             @click="handleDelete(scope.row.id)"
86             v-hasPermi="['system:notice:delete']"
87           >
88             删除
89           </el-button>
90           <el-button link @click="handlePush(scope.row.id)" v-hasPermi="['system:notice:update']">
91             推送
92           </el-button>
93         </template>
94       </el-table-column>
95     </el-table>
96     <!-- 分页 -->
97     <Pagination
98       :total="total"
99       v-model:page="queryParams.pageNo"
100       v-model:limit="queryParams.pageSize"
101       @pagination="getList"
102     />
103   </ContentWrap>
104
105   <!-- 表单弹窗:添加/修改 -->
106   <NoticeForm ref="formRef" @success="getList" />
107 </template>
108 <script lang="ts" setup>
109 import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
110 import { dateFormatter } from '@/utils/formatTime'
111 import * as NoticeApi from '@/api/system/notice'
112 import NoticeForm from './NoticeForm.vue'
113
114 defineOptions({ name: 'SystemNotice' })
115
116 const message = useMessage() // 消息弹窗
117 const { t } = useI18n() // 国际化
118
119 const loading = ref(true) // 列表的加载中
120 const total = ref(0) // 列表的总页数
121 const list = ref([]) // 列表的数据
122 const queryParams = reactive({
123   pageNo: 1,
124   pageSize: 10,
125   title: '',
126   type: undefined,
127   status: undefined
128 })
129 const queryFormRef = ref() // 搜索的表单
130
131 /** 查询公告列表 */
132 const getList = async () => {
133   loading.value = true
134   try {
135     const data = await NoticeApi.getNoticePage(queryParams)
136     list.value = data.list
137     total.value = data.total
138   } finally {
139     loading.value = false
140   }
141 }
142
143 /** 搜索按钮操作 */
144 const handleQuery = () => {
145   queryParams.pageNo = 1
146   getList()
147 }
148
149 /** 重置按钮操作 */
150 const resetQuery = () => {
151   queryFormRef.value.resetFields()
152   handleQuery()
153 }
154
155 /** 添加/修改操作 */
156 const formRef = ref()
157 const openForm = (type: string, id?: number) => {
158   formRef.value.open(type, id)
159 }
160
161 /** 删除按钮操作 */
162 const handleDelete = async (id: number) => {
163   try {
164     // 删除的二次确认
165     await message.delConfirm()
166     // 发起删除
167     await NoticeApi.deleteNotice(id)
168     message.success(t('common.delSuccess'))
169     // 刷新列表
170     await getList()
171   } catch {}
172 }
173
174 /** 推送按钮操作 */
175 const handlePush = async (id: number) => {
176   try {
177     // 推送的二次确认
178     await message.confirm('是否推送所选中通知?')
179     // 发起推送
180     await NoticeApi.pushNotice(id)
181     message.success(t('推送成功'))
182   } catch {}
183 }
184
185 /** 初始化 **/
186 onMounted(() => {
187   getList()
188 })
189 </script>