| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- <template>
- <div class="container">
- <Breadcrumb :items="['公告管理', '横幅公告管理']" />
- <a-card title="横幅公告管理">
- <a-space style="margin-bottom: 12px;">
- <a-input v-model="query.keyword" placeholder="按标识或内容搜索" allow-clear style="width: 280px" />
- <a-button type="primary" @click="search">搜索</a-button>
- <a-button @click="openCreate">新增公告</a-button>
- </a-space>
- <a-table
- :data="data"
- :loading="loading"
- :pagination="{
- showPageSize: true,
- showJumper: true,
- showTotal: true,
- pageSize: pagination.pagesize,
- current: pagination.current,
- total: pagination.total
- }"
- @page-change="onPageChange"
- @page-size-change="onPageSizeChange"
- >
- <template #columns>
- <a-table-column title="公告标识" data-index="key" :width="220" />
- <a-table-column title="内容" data-index="content" ellipsis tooltip />
- <a-table-column title="操作" :width="180">
- <template #cell="{ record }">
- <a-space>
- <a-button size="mini" @click="openEdit(record)">编辑</a-button>
- <a-button status="danger" size="mini" @click="remove(record)">删除</a-button>
- </a-space>
- </template>
- </a-table-column>
- </template>
- </a-table>
- </a-card>
- <a-modal v-model:visible="editorVisible" :title="form.mode === 'create' ? '新增横幅公告' : '编辑横幅公告'" @before-ok="submitEditor">
- <a-form :model="form" layout="vertical">
- <a-form-item label="公告标识(key)">
- <a-input v-model="form.key" :disabled="form.mode === 'edit'" allow-clear />
- </a-form-item>
- <a-form-item label="公告内容">
- <a-textarea v-model="form.content" :max-length="{ length: 1000 }" show-word-limit allow-clear />
- </a-form-item>
- </a-form>
- </a-modal>
- </div>
- </template>
- <script setup>
- import { reactive, ref, onMounted } from 'vue'
- import { Modal, Notification, Message } from '@arco-design/web-vue'
- import { getAdminNoticeList, saveAdminNotice, deleteAdminNotice } from '@/api/public'
- const loading = ref(false)
- const data = ref([])
- const query = reactive({ keyword: '' })
- const pagination = reactive({ total: 0, current: 1, pagesize: 20 })
- const editorVisible = ref(false)
- const form = reactive({
- mode: 'create',
- key: '',
- content: ''
- })
- const getList = async () => {
- try {
- loading.value = true
- const res = await getAdminNoticeList({
- keyword: query.keyword,
- pagesize: pagination.pagesize,
- current: pagination.current
- })
- if (!res || res.code !== 0) {
- return Notification.error({
- title: '获取横幅公告失败',
- content: res?.msg ?? '请稍后再试'
- })
- }
- data.value = Array.isArray(res.data) ? res.data : []
- pagination.total = res.pagination?.total || 0
- } catch (error) {
- Notification.error({
- title: '获取横幅公告失败',
- content: error.message || '请稍后再试'
- })
- } finally {
- loading.value = false
- }
- }
- const search = () => {
- pagination.current = 1
- getList()
- }
- const openCreate = () => {
- form.mode = 'create'
- form.key = ''
- form.content = ''
- editorVisible.value = true
- }
- const openEdit = (record) => {
- form.mode = 'edit'
- form.key = record.key
- form.content = record.content
- editorVisible.value = true
- }
- const submitEditor = async () => {
- if (!form.key || !form.content) {
- Message.error('请填写完整公告信息')
- return false
- }
- const res = await saveAdminNotice({
- key: form.key,
- content: form.content
- })
- if (!res || res.code !== 0) {
- Notification.error({
- title: '保存横幅公告失败',
- content: res?.msg ?? '请稍后再试'
- })
- return false
- }
- Message.success('保存成功')
- getList()
- return true
- }
- const remove = (record) => {
- Modal.confirm({
- title: '删除横幅公告',
- content: `确定删除公告标识「${record.key}」吗?`,
- onOk: async () => {
- const res = await deleteAdminNotice({ key: record.key })
- if (!res || res.code !== 0) {
- return Notification.error({
- title: '删除横幅公告失败',
- content: res?.msg ?? '请稍后再试'
- })
- }
- Message.success('删除成功')
- getList()
- }
- })
- }
- const onPageChange = (page) => {
- pagination.current = page
- getList()
- }
- const onPageSizeChange = (size) => {
- pagination.pagesize = size
- pagination.current = 1
- getList()
- }
- onMounted(() => {
- getList()
- })
- </script>
- <style scoped>
- .container {
- padding: 0 20px 20px 20px;
- }
- </style>
|