li.shaoyi 8 months ago
parent
commit
4e974cfe3a

+ 4 - 1
src/constants/language.ts

@@ -5,7 +5,8 @@ export enum Language {
     Simplified = 'zh-CN',
     Traditional = 'zh-TW',
     English = 'en-US',
-    Thai = 'th'
+    Thai = 'th',
+    Vietnamese = 'vi'
 }
 
 /**
@@ -18,6 +19,7 @@ export function getClientLanguage() {
         { result: Language.Traditional, code: ['zh-TW'] },
         { result: Language.English, code: ['en', 'en-US'] },
         { result: Language.Thai, code: ['th', 'th-TH'] },
+        { result: Language.Vietnamese, code: ['vi', 'vi-VN'] },
     ]
     const lang = rules.find(rule => rule.code.includes(navigator.language))
     return lang ? lang.result : Language.English
@@ -33,5 +35,6 @@ export function getLanguageList() {
         { label: '繁体中文', value: Language.Traditional },
         { label: 'English', value: Language.English },
         { label: 'ภาษาไทย', value: Language.Thai },
+        { label: 'Tiếng Việt', value: Language.Vietnamese },
     ]
 }

+ 100 - 1
src/packages/pc/views/notice/manage/index.vue

@@ -1,6 +1,105 @@
+<!-- 通知公告-公告通知管理 -->
 <template>
-    <app-view></app-view>
+    <app-view>
+        <template #header>
+            <app-filter :option="filterOption" />
+        </template>
+        <app-table :data="dataList" :columns="tableColumns" :loading="loading">
+            <template #headerLeft>
+                <app-operation :data-list="getActionButtons(['notice_manage_add'])"
+                    @click="(code: string) => openComponent(code)" />
+            </template>
+            <!-- 操作 -->
+            <template #operate="{ row }">
+                <app-operation size="small"
+                    :data-list="getActionButtons(['notice_manage_details', 'notice_manage_delete', 'notice_manage_force'])"
+                    @click="(code: string) => openComponent(code, row)" circle />
+            </template>
+            <template #footer>
+                <app-pagination :total="total" v-model:page-size="pageSize" v-model:page-index="pageIndex"
+                    @change="onSearch" />
+            </template>
+        </app-table>
+        <component :is="componentMap.get(componentId)" v-bind="{ record, queryParams }" @closed="closeComponent"
+            v-if="componentId" />
+    </app-view>
 </template>
 
 <script lang="ts" setup>
+import { shallowRef } from 'vue'
+import { ElMessage } from 'element-plus'
+import { useDataFilter } from '@/hooks/datatable-v2'
+import { useRequest } from '@/hooks/request'
+import { useOperation } from '@/hooks/operation'
+import { query } from '@/services/api/notice'
+import AppTable from '@pc/components/base/table/index.vue'
+import AppPagination from '@pc/components/base/pagination/index.vue'
+import AppOperation from '@pc/components/base/operation/index.vue'
+import AppFilter from '@pc/components/base/table-filter-v2/index.vue'
+import { i18n } from '@/stores'
+
+const { global: { t } } = i18n
+
+const { componentMap, componentId, record, openComponent, closeComponent, getActionButtons } = useOperation<Notice.QueryRsp>({
+    onClose: () => onSearch()
+})
+
+const { dataList, total, pageSize, pageIndex, loading, run } = useRequest(query, {
+    params: {
+        pageNum: 1,
+        pageSize: 20
+    },
+    onError: (err) => {
+        ElMessage.error(err)
+    }
+})
+
+const tableColumns = shallowRef<Model.TableColumn[]>([
+    { field: 'title', label: '标题' },
+    { field: 'msgtype', label: '消息类型' },
+    { field: 'sendtype', label: '发布类型' },
+    { field: 'sentstatus', label: '推送状态' },
+    { field: 'scheduletime', label: '生效时间' },
+    { field: 'endtime', label: '结束时间' },
+    { field: 'recipient', label: '接收人' },
+    { field: 'operate', label: 'common.operate', fixed: 'right' }
+])
+
+const { queryParams, filterOption, getQueryParams, resetFilters } = useDataFilter<Notice.QueryReq>({
+    filters: [
+        {
+            field: 'title',
+            label: '标题'
+        },
+        {
+            field: 'msgtype',
+            label: '消息类型'
+        },
+        {
+            field: 'content',
+            label: '消息内容'
+        },
+        {
+            field: 'userid',
+            label: '接收交易商'
+        },
+        {
+            field: 'sendtype',
+            label: '发布类型'
+        },
+        {
+            field: 'isforcedisplay',
+            label: '是否强制弹出'
+        },
+    ],
+    buttons: [
+        { label: t('operation.search'), className: 'el-button--primary', onClick: () => onSearch() },
+        { label: t('operation.reset'), className: 'el-button--primary', validateEvent: false, onClick: () => resetFilters() }
+    ]
+})
+
+const onSearch = () => {
+    const qs = getQueryParams()
+    run(qs)
+}
 </script>

+ 16 - 0
src/services/api/notice/index.ts

@@ -0,0 +1,16 @@
+import httpClient from '@/services/http'
+import { CommonFetchOptions } from '@/services/http/types'
+
+/**
+ * 通知公告-->公告通知管理-->获取列表
+ */
+export function query(options: CommonFetchOptions<{ request: Notice.QueryReq; response: Notice.QueryRsp[]; }>) {
+    return httpClient.commonRequest('/notice/query', 'get', options)
+}
+
+/**
+ * 通知公告-->资讯管理-->获取列表
+ */
+export function informManquery(options: CommonFetchOptions<{ request: Notice.InformManqueryReq; response: Notice.InformManqueryRsp[]; }>) {
+    return httpClient.commonRequest('/notice/informManquery', 'get', options)
+}

+ 4 - 0
src/stores/modules/language.ts

@@ -32,4 +32,8 @@ axios('./locales/extras/en-US.json').then((res) => {
 
 axios('./locales/extras/th-TH.json').then((res) => {
     i18n.global.mergeLocaleMessage(Language.Thai, res.data)
+})
+
+axios('./locales/extras/vi-VN.json').then((res) => {
+    i18n.global.mergeLocaleMessage(Language.Vietnamese, res.data)
 })

+ 52 - 0
src/types/model/notice.d.ts

@@ -0,0 +1,52 @@
+declare namespace Notice {
+    /** 通知公告-->资讯管理-->获取列表 请求 */
+    interface QueryReq {
+        content?: string; // 消息内容
+        isforcedisplay?: number; // 是否强制弹出
+        msgtype?: number; // 消息类型
+        pageNum: number;
+        pageSize: number;
+        publisher?: string;
+        sendtype?: number; // 发布类型
+        title?: string; // 标题
+        userid?: number; // 接收交易商
+    }
+
+    /** 通知公告-->资讯管理-->获取列表 响应 */
+    interface QueryRsp {
+        autoid: number;
+        endtime: string; // 结束时间
+        msgtype: number;// 消息类型
+        recipient: string; // 接收人
+        scheduletime: string; // 生效时间
+        sendtype: number;// 发布类型
+        sentstatus: number;// 推送状态
+        title: string; // 标题
+    }
+
+    /** 通知公告-->资讯管理-->获取列表 请求 */
+    interface InformManqueryReq {
+        columnid?: number; // 类型
+        isshow?: number; // 是否展示
+        pageNum: number;
+        pageSize: number;
+        status?: number; // 状态
+        title?: string; // 标题
+        userid?: number;
+    }
+
+    /** 通知公告-->公告通知管理-->获取列表 响应 */
+    interface InformManqueryRsp {
+        author: string; // 作者
+        columnname: string; // 资讯类型
+        creaedate: string; // 创建时间
+        creatoruser: string; // 创建人
+        id: number;
+        isshow: number; // 是否展示
+        istop: number; // 是否置顶
+        publishdate: string; // 发布日期
+        srcname: string; // 来源
+        status: number; // 状态
+        title: string; // 标题
+    }
+}