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

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: '邮箱格式不正确',
},
],
},
]