初始化

This commit is contained in:
2025-07-01 21:08:51 +08:00
commit 57aa9e21ed
1649 changed files with 242230 additions and 0 deletions

View File

@@ -0,0 +1,33 @@
<template>
<Dialog v-model="dialogVisible" :max-height="500" :scroll="true" title="详情">
<Descriptions :data="detailData" :schema="allSchemas.detailSchema">
<!-- 展示 HTML 内容 -->
<template #templateContent="{ row }">
<div v-dompurify-html="row.templateContent"></div>
</template>
</Descriptions>
</Dialog>
</template>
<script lang="ts" setup>
import * as MailLogApi from '@/api/system/mail/log'
import { allSchemas } from './log.data'
defineOptions({ name: 'SystemMailLogDetail' })
const dialogVisible = ref(false) // 弹窗的是否展示
const detailLoading = ref(false) // 表单的加载中
const detailData = ref() // 详情数据
/** 打开弹窗 */
const open = async (id: number) => {
dialogVisible.value = true
// 设置数据
detailLoading.value = true
try {
detailData.value = await MailLogApi.getMailLog(id)
} finally {
detailLoading.value = false
}
}
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
</script>

View File

@@ -0,0 +1,63 @@
<template>
<doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />
<!-- 搜索工作栏 -->
<ContentWrap>
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
</ContentWrap>
<!-- 列表 -->
<ContentWrap>
<Table
:columns="allSchemas.tableColumns"
:data="tableObject.tableList"
:loading="tableObject.loading"
:pagination="{
total: tableObject.total
}"
v-model:pageSize="tableObject.pageSize"
v-model:currentPage="tableObject.currentPage"
>
<template #action="{ row }">
<el-button
link
type="primary"
@click="openDetail(row.id)"
v-hasPermi="['system:mail-log:query']"
>
详情
</el-button>
</template>
</Table>
</ContentWrap>
<!-- 表单弹窗详情 -->
<mail-log-detail ref="detailRef" />
</template>
<script lang="ts" setup>
import { allSchemas } from './log.data'
import * as MailLogApi from '@/api/system/mail/log'
import MailLogDetail from './MailLogDetail.vue'
defineOptions({ name: 'SystemMailLog' })
// tableObject表格的属性对象可获得分页大小、条数等属性
// tableMethods表格的操作对象可进行获得分页、删除记录等操作
// 详细可见https://doc.iocoder.cn/vue3/crud-schema/
const { tableObject, tableMethods } = useTable({
getListApi: MailLogApi.getMailLogPage // 分页接口
})
// 获得表格的各种操作
const { getList, setSearchParams } = tableMethods
/** 详情操作 */
const detailRef = ref()
const openDetail = (id: number) => {
detailRef.value.open(id)
}
/** 初始化 **/
onMounted(() => {
getList()
})
</script>

View File

@@ -0,0 +1,167 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter } from '@/utils/formatTime'
import * as MailAccountApi from '@/api/system/mail/account'
// 邮箱账号的列表
const accountList = await MailAccountApi.getSimpleMailAccountList()
// CrudSchemahttps://doc.iocoder.cn/vue3/crud-schema/
const crudSchemas = reactive<CrudSchema[]>([
{
label: '编号',
field: 'id'
},
{
label: '发送时间',
field: 'sendTime',
formatter: dateFormatter,
search: {
show: true,
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')],
style: {
width: '240px'
}
}
},
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
}
},
{
label: '接收邮箱',
field: 'toMail'
},
{
label: '用户编号',
field: 'userId',
isSearch: true,
isTable: false,
search: {
componentProps: {
style: {
width: '240px'
}
}
}
},
{
label: '用户类型',
field: 'userType',
dictType: DICT_TYPE.USER_TYPE,
dictClass: 'number',
isSearch: true,
isTable: false,
search: {
componentProps: {
style: {
width: '240px'
}
}
}
},
{
label: '邮件标题',
field: 'templateTitle'
},
{
label: '邮件内容',
field: 'templateContent',
isTable: false
},
{
label: '邮箱参数',
field: 'templateParams',
isTable: false
},
{
label: '发送状态',
field: 'sendStatus',
dictType: DICT_TYPE.SYSTEM_MAIL_SEND_STATUS,
dictClass: 'string',
isSearch: true,
search: {
componentProps: {
style: {
width: '240px'
}
}
}
},
{
label: '邮箱账号',
field: 'accountId',
isTable: false,
search: {
show: true,
component: 'Select',
api: () => accountList,
componentProps: {
optionsAlias: {
labelField: 'mail',
valueField: 'id'
},
style: {
width: '240px'
}
}
}
},
{
label: '发送邮箱地址',
field: 'fromMail',
table: {
label: '邮箱账号'
}
},
{
label: '模板编号',
field: 'templateId',
isSearch: true,
search: {
componentProps: {
style: {
width: '240px'
}
}
}
},
{
label: '模板编码',
field: 'templateCode',
isTable: false
},
{
label: '模版发送人名称',
field: 'templateNickname',
isTable: false
},
{
label: '发送返回的消息编号',
field: 'sendMessageId',
isTable: false
},
{
label: '发送异常',
field: 'sendException',
isTable: false
},
{
label: '创建时间',
field: 'createTime',
isTable: false,
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
}
},
{
label: '操作',
field: 'action',
isDetail: false
}
])
export const { allSchemas } = useCrudSchemas(crudSchemas)