A modern vue admin. It is based on Vue3, vite and TypeScript. It's fast!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

166 lines
4.8 KiB

<template>
<div class="full-height page-container">
<SmartTable @register="registerTable" :size="getTableSize">
<template #table-operation="{ row }">
<SmartVxeTableAction :actions="getActions(row)" />
</template>
</SmartTable>
<SendTestModal @register="registerTestSendModal" />
</div>
</template>
<script lang="ts" setup>
import { useI18n } from '@/hooks/web/useI18n';
import { useSizeSetting } from '@/hooks/setting/UseSizeSetting';
import { replace } from 'lodash-es';
import { createConfirm, successMessage } from '@/utils/message/SystemNotice';
import {
ActionItem,
SmartTable,
SmartVxeTableAction,
useSmartTable,
} from '@/components/SmartTable';
import {
getTableColumns,
getFormSchemas,
getSearchFormSchemas,
} from './SmartSmsChannelManagerListView.config';
import {
listApi,
deleteApi,
getByIdApi,
batchSaveUpdateApi,
setDefaultApi,
} from './SmartSmsChannelManagerListView.api';
import SendTestModal from './components/SendTestModal.vue';
import { useModal } from '@/components/Modal';
const { t } = useI18n();
const { getTableSize } = useSizeSetting();
const [registerTestSendModal, { openModal }] = useModal();
const getActions = (row: Recordable): ActionItem[] => {
return [
{
label: t('common.button.edit'),
onClick: () => editByRowModal(row),
auth: 'smart:sms:update',
},
{
label: t('smart.sms.channel.button.setDefault'),
auth: 'smart:sms:update',
disabled: row.isDefault === true,
onClick: () => {
createConfirm({
iconType: 'warning',
content: t('smart.sms.channel.message.setDefault'),
onOk: async () => {
await setDefaultApi(row.id);
successMessage(t('smart.sms.channel.message.setDefaultSuccess'));
await query();
},
});
},
},
{
label: t('smart.sms.channel.button.sendTest'),
onClick: () => {
openModal(true, { channelId: row.id });
},
},
];
};
const [registerTable, { editByRowModal, query }] = useSmartTable({
id: 'smart-sms-smsChannel',
customConfig: { storage: true },
columns: getTableColumns(),
height: 'auto',
showOverflow: 'tooltip',
pagerConfig: true,
border: true,
useSearchForm: true,
sortConfig: {
remote: true,
},
columnConfig: { resizable: true },
searchFormConfig: {
schemas: getSearchFormSchemas(t),
searchWithSymbol: true,
colon: true,
layout: 'inline',
actionColOptions: {
span: undefined,
},
compact: true,
},
addEditConfig: {
formConfig: {
colon: true,
schemas: getFormSchemas(t),
baseColProps: { span: 24 },
labelCol: { span: 6 },
wrapperCol: { span: 17 },
},
},
proxyConfig: {
ajax: {
query: (params) => listApi(params.ajaxParameter),
save: ({ body: { insertRecords, updateRecords } }) => {
const saveDataList = [...insertRecords, ...updateRecords];
const formatDataList = saveDataList.map((item) => {
const result: Record<string, any> = {};
const channelProperties: Recordable = {};
const propertiesKeyPrefix = `channelProperties.${item.channelType}.`;
Object.keys(item).forEach((key) => {
if (!key.startsWith(propertiesKeyPrefix)) {
result[key] = item[key];
} else if (key.startsWith(propertiesKeyPrefix)) {
channelProperties[replace(key, propertiesKeyPrefix, '')] = item[key];
}
});
result.channelProperties = JSON.stringify(channelProperties);
return result;
});
return batchSaveUpdateApi(formatDataList);
},
delete: ({ body: { removeRecords } }) => deleteApi(removeRecords),
getById: async (params) => {
const result = await getByIdApi(params.id);
if (result.channelProperties) {
const channelProperties = JSON.parse(result.channelProperties);
const channelType = result.channelType;
const formatData: Recordable = {};
Object.keys(channelProperties).forEach((item) => {
formatData[`channelProperties.${channelType}.${item}`] = channelProperties[item];
});
console.log(formatData);
return {
...result,
...formatData,
};
}
return result;
},
},
},
toolbarConfig: {
zoom: true,
refresh: true,
column: { columnOrder: true },
buttons: [
{
code: 'ModalAdd',
},
{
code: 'delete',
},
],
},
});
</script>