<template>
<div :class="prefixCls">
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" preIcon="ant-design:plus-outlined" @click="onAdd">新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="showBatchBtn">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="onDeleteBatch">
<Icon icon="ant-design:delete-outlined"></Icon>
<span>删除</span>
</a-menu-item>
</a-menu>
</template>
<a-button>
<span>批量操作</span>
<Icon icon="mdi:chevron-down"></Icon>
</a-button>
</a-dropdown>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)" />
</template>
</BasicTable>
<TemplateModal @register="registerModal" @success="reload" />
<TemplateTestModal @register="registerTestModal" />
</div>
</template>
<script lang="ts" setup name="message-template">
import { unref, computed, toRaw } from 'vue';
import { ActionItem, BasicTable, TableAction } from '/@/components/Table';
import { useModal } from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage';
import TemplateModal from './TemplateModal.vue';
import TemplateTestModal from './TemplateTestModal.vue';
import { Api, saveOrUpdate, list, deleteBatch } from './template.api';
import { columns, searchFormSchema } from './template.data';
import { useMessage } from '/@/hooks/web/useMessage';
const { createMessage } = useMessage();
// 列表页面公共参数、方法
const { prefixCls, onExportXls, onImportXls, tableContext } = useListPage({
designScope: 'message-template',
tableProps: {
title: '消息中心模板列表数据',
api: list,
columns: columns,
formConfig: {
schemas: searchFormSchema,
},
},
exportConfig: {
url: Api.exportXls,
name: '消息中心模板列表',
},
importConfig: {
url: Api.importXls,
success: () => reload(),
},
});
// 注册 ListTable
const [registerTable, { reload, setLoading }, { rowSelection, selectedRowKeys, selectedRows }] = tableContext;
const [registerModal, { openModal }] = useModal();
const [registerTestModal, testModal] = useModal();
const showBatchBtn = computed(() => selectedRowKeys.value.length > 0);
function onAdd() {
openModal(true, {
title: '新增消息模板',
isUpdate: false,
showFooter: true,
record: {},
});
}
function onEdit(record) {
if (record.useStatus === '1') {
createMessage.warning('此模板已被应用,禁止编辑!');
return;
}
openModal(true, {
title: '修改消息模板',
isUpdate: true,
record: record,
showFooter: true,
});
}
function onDelete(record) {
if (record) {
//update-begin-author:taoyan date:2022-7-14 for: VUEN-1652【bug】应用状态下不允许删除
if(record.useStatus == '1'){
createMessage.warning('该模板已被应用禁止删除!');
return;
}
//update-end-author:taoyan date:2022-7-14 for: VUEN-1652【bug】应用状态下不允许删除
doDeleteDepart([record.id], false);
}
}
/**
* 根据 ids 批量删除
* @param idListRef array
* @param confirm 是否显示确认提示框
*/
async function doDeleteDepart(idListRef, confirm = true) {
const idList = unref(idListRef);
if (idList.length > 0) {
try {
setLoading(true);
await deleteBatch({ ids: idList.join(',') }, confirm);
await reload();
} finally {
setLoading(false);
}
}
}
async function onDeleteBatch() {
try {
//update-begin-author:taoyan date:2022-7-14 for: VUEN-1652【bug】应用状态下不允许删除
let arr = toRaw(selectedRows.value);
let temp = arr.filter(item=>item.useStatus=='1')
if(temp.length>0){
createMessage.warning('选中的模板已被应用禁止删除!');
return;
}
//update-end-author:taoyan date:2022-7-14 for: VUEN-1652【bug】应用状态下不允许删除
await doDeleteDepart(selectedRowKeys);
selectedRowKeys.value = [];
} finally {
}
}
// 发送消息测试
function onSendTest(record) {
testModal.openModal(true, { record });
}
/**
* 操作栏
*/
function getTableAction(record): ActionItem[] {
//update-begin---author:wangshuai ---date:20221123 for:[VUEN-2807]消息模板加一个查看功能------------
return [{ label: '查看', onClick: handleDetail.bind(null, record)}, { label: '编辑', onClick: onEdit.bind(null, record) }];
//update-end---author:wangshuai ---date:20221123 for:[VUEN-2807]消息模板加一个查看功能------------
}
/**
* 下拉操作栏
*/
function getDropDownAction(record): ActionItem[] {
return [
{ label: '应用', onClick: handleUse.bind(null, record) },
{ label: '停用', onClick: handleNotUse.bind(null, record) },
{ label: '发送测试', onClick: onSendTest.bind(null, record) },
{
label: '删除',
color: 'error',
popConfirm: {
title: '确认要删除吗?',
confirm: onDelete.bind(null, record),
},
},
];
}
/**
* 应用
*/
async function handleUse(record) {
let param = { id: record.id, useStatus: '1' };
await saveOrUpdate(param, true);
await reload();
}
/**
* 停用
*/
async function handleNotUse(record) {
let param = { id: record.id, useStatus: '0' };
await saveOrUpdate(param, true);
await reload();
}
/**
* 查看
* @param record
*/
function handleDetail(record) {
openModal(true,{
title: "消息模板详情",
isUpdate: true,
showFooter: false,
record:record
})
}
</script>
<style lang="less">
@import 'index';
</style>