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.
220 lines
4.5 KiB
220 lines
4.5 KiB
import { h } from 'vue' |
|
import { getSimpleMailAccountList } from '@/api/system/mail/account' |
|
import type { BasicColumn, FormSchema } from '@/components/Table' |
|
import { useRender } from '@/components/Table' |
|
import { DICT_TYPE, getDictOptions } from '@/utils/dict' |
|
import { ScrollContainer } from '@/components/Container' |
|
|
|
export const columns: BasicColumn[] = [ |
|
{ |
|
title: '模板编码', |
|
dataIndex: 'code', |
|
width: 100, |
|
}, |
|
{ |
|
title: '模板名称', |
|
dataIndex: 'name', |
|
width: 180, |
|
}, |
|
{ |
|
title: '模板标题', |
|
dataIndex: 'title', |
|
width: 100, |
|
}, |
|
{ |
|
title: '模板内容', |
|
dataIndex: 'content', |
|
width: 300, |
|
}, |
|
{ |
|
title: '邮箱账号', |
|
dataIndex: 'accountId', |
|
width: 120, |
|
}, |
|
{ |
|
title: '发送人名称', |
|
dataIndex: 'nickname', |
|
width: 100, |
|
}, |
|
{ |
|
title: '开启状态', |
|
dataIndex: 'status', |
|
width: 180, |
|
customRender: ({ text }) => { |
|
return useRender.renderDict(text, DICT_TYPE.COMMON_STATUS) |
|
}, |
|
}, |
|
{ |
|
title: '创建时间', |
|
dataIndex: 'createTime', |
|
width: 180, |
|
customRender: ({ text }) => { |
|
return useRender.renderDate(text) |
|
}, |
|
}, |
|
] |
|
|
|
export const searchFormSchema: FormSchema[] = [ |
|
{ |
|
label: '模板名称', |
|
field: 'name', |
|
component: 'Input', |
|
colProps: { span: 8 }, |
|
}, |
|
{ |
|
label: '模板编码', |
|
field: 'code', |
|
component: 'Input', |
|
colProps: { span: 8 }, |
|
}, |
|
{ |
|
label: '发件邮箱', |
|
field: 'accountId', |
|
component: 'ApiSelect', |
|
componentProps: { |
|
api: () => getSimpleMailAccountList(), |
|
fieldNames: { |
|
label: 'mail', |
|
key: 'id', |
|
value: 'id', |
|
}, |
|
}, |
|
colProps: { span: 8 }, |
|
}, |
|
{ |
|
label: '开启状态', |
|
field: 'status', |
|
component: 'Select', |
|
componentProps: { |
|
options: getDictOptions(DICT_TYPE.COMMON_STATUS), |
|
}, |
|
colProps: { span: 8 }, |
|
}, |
|
{ |
|
label: '创建时间', |
|
field: 'createTime', |
|
component: 'RangePicker', |
|
colProps: { span: 8 }, |
|
}, |
|
] |
|
|
|
export const formSchema: FormSchema[] = [ |
|
{ |
|
label: '编号', |
|
field: 'id', |
|
show: false, |
|
component: 'Input', |
|
}, |
|
{ |
|
label: '模板名称', |
|
field: 'name', |
|
required: true, |
|
component: 'Input', |
|
}, |
|
{ |
|
label: '模板编码', |
|
field: 'code', |
|
required: true, |
|
component: 'Input', |
|
helpMessage: '建议使用下划线/数字/字母命名', |
|
}, |
|
{ |
|
label: '发件邮箱', |
|
field: 'accountId', |
|
required: true, |
|
component: 'ApiSelect', |
|
componentProps: { |
|
api: () => getSimpleMailAccountList(), |
|
fieldNames: { |
|
label: 'mail', |
|
key: 'id', |
|
value: 'id', |
|
}, |
|
}, |
|
}, |
|
{ |
|
label: '发送人名称', |
|
field: 'nickname', |
|
required: true, |
|
component: 'Input', |
|
helpMessage: '发件人的名称, 如:系统发件人', |
|
}, |
|
{ |
|
label: '模板标题', |
|
field: 'title', |
|
required: true, |
|
component: 'Input', |
|
helpMessage: '邮件的标题', |
|
}, |
|
{ |
|
label: '模板内容', |
|
field: 'content', |
|
component: 'Editor', |
|
required: true, |
|
helpMessage: '{}括号中的内容作为模板参数', |
|
}, |
|
{ |
|
label: '开启状态', |
|
field: 'status', |
|
component: 'Select', |
|
defaultValue: 0, |
|
componentProps: { |
|
options: getDictOptions(DICT_TYPE.COMMON_STATUS), |
|
}, |
|
}, |
|
{ |
|
label: '备注', |
|
field: 'remark', |
|
component: 'InputTextArea', |
|
}, |
|
] |
|
|
|
// 发送邮件 |
|
// 这里加上前缀 防止和表单其他字段重名 |
|
const keyPrefix = 'key$-' |
|
export const baseSendSchemas: FormSchema[] = [ |
|
{ |
|
field: 'code', |
|
label: '编码', |
|
component: 'Input', |
|
show: () => false, |
|
}, |
|
{ |
|
field: 'content', |
|
component: 'Editor', |
|
label: '模板内容 ', |
|
required: false, |
|
defaultValue: '', |
|
render({ model }) { |
|
let content: string = model.content |
|
Object.keys(model).forEach((key) => { |
|
if (!key.startsWith(keyPrefix)) |
|
return |
|
|
|
const realKey = key.split(keyPrefix)[1] |
|
content = content.replace(`{${realKey}}`, model[key]) |
|
}) |
|
return h(ScrollContainer, { |
|
innerHTML: content, |
|
style: { border: '1px solid #e8e8e8', borderRadius: '6px', padding: '10px' }, |
|
}) |
|
}, |
|
}, |
|
{ |
|
field: 'mail', |
|
label: '收件邮箱 ', |
|
component: 'Input', |
|
componentProps: { |
|
placeholder: '输入收件邮箱', |
|
}, |
|
required: true, |
|
rules: [ |
|
{ |
|
required: true, |
|
pattern: /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/, |
|
trigger: 'blur', |
|
message: '邮箱格式不正确', |
|
}, |
|
], |
|
}, |
|
]
|
|
|