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.

221 lines
4.5 KiB

import { getSimpleMailAccountList } from '@/api/system/mail/account'
import { BasicColumn, FormSchema, useRender } from '@/components/Table'
2 years ago
import { DICT_TYPE, getDictOptions } from '@/utils/dict'
import { ScrollContainer } from '@/components/Container'
import { h } from 'vue'
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: {
2 years ago
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: {
2 years ago
options: getDictOptions(DICT_TYPE.COMMON_STATUS)
}
},
{
label: '备注',
field: 'remark',
component: 'InputTextArea'
}
]
// 发送邮件
// 这里加上前缀 防止和表单其他字段重名
export 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: '4px', 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: '邮箱格式不正确'
}
]
}
]