Commit 70b9e0d4 by Sweet Zhang

按类型封装api

parent b09264c7
VITE_API_BASE_URL='http://139.224.145.34:9002/email/api' VITE_API_BASE_URL='/email/api'
\ No newline at end of file \ No newline at end of file
interface resPage {
page: number
pageSize: number
total: number
hasNextPage: boolean
pageTotal: number
}
interface itfRes {
code: number
msg: string | undefined
data: T
reason?: string
page?: resPage
}
import * as axios from 'axios'
declare module 'axios'
{interface AxiosResponse extends itfRes}
import request from '@/utils/request' import request from '@/utils/request'
import type { EditContactImport } from '@/types/index' import type {
EditContactImport,
// 新增联系人 SendEmail,
/** Contact,
* EmailProvider,
* @param data {"companyName":"","name":"","email":"","type":"","appellation":"","other":"","ccEmailList":[]} Sender,
* @returns Variable,
*/ VariableTemplate,
export const addContact = (data: { } from '@/types/index'
companyName?: string import type { ApiResponse } from '@/utils/request'
name?: string
email?: string // 联系人管理
type?: string export const contactApi = {
appellation?: string // 新增联系人
other?: string addContact: (data: Contact): Promise<ApiResponse> => {
ccEmailList?: string[]
}) => {
return request.post('/emailContact/add', data) return request.post('/emailContact/add', data)
} },
// 获取联系人详情
// 编辑联系人 getContactDetail: (id: string): Promise<ApiResponse> => {
/** return request.get('/emailContact/detail', { params: { contactBizId: id } })
* },
* @param data {"contactBizId":1,"companyName":"","name":"","email":"","type":"","appellation":"","other":"","ccEmailList":[]} // 更新联系人
* @returns updateContact: (data: Contact): Promise<ApiResponse> => {
*/
export const editContact = (data: {
contactBizId?: string
companyName?: string
name?: string
email?: string
type?: string
appellation?: string
other?: string
ccEmailList?: string[]
}) => {
return request.put('/emailContact/edit', data) return request.put('/emailContact/edit', data)
} },
// 删除联系人
// 删除联系人 delete deleteContact: (id: string): Promise<ApiResponse> => {
/**
*
* @param id 联系人id
* @returns
*/
export const deleteContact = (id: number) => {
return request.delete('/emailContact/del?contactBizId=' + id) return request.delete('/emailContact/del?contactBizId=' + id)
},
// 获取联系人列表
getContactList: (data: Contact): Promise<ApiResponse> => {
return request.post('/emailContact/page', data)
},
} }
// 获取联系人详情 //
/** /**邮件服务商列表 */
* export const emailProviderApi = {
* @param id 联系人id getEmailProviderList: (data: EmailProvider): Promise<ApiResponse> => {
* @returns return request.post('/emailProviderConfig/page', data)
*/ },
export const getContactDetail = (id: number) => {
return request.get('/emailContact/detail', { params: { contactBizId: id } })
}
// 获取联系人列表 post
/**
*
* @param params {
"companyName": "", //公司名称(保险公司等)
"name": "", //联系人姓名
"email": "", //联系人邮箱
"pageNo": 1,
"pageSize": 1,
"sortField": "",
"sortOrder": ""
}
* @returns
*/
export const getContactList = (params: {
companyName?: string
name?: string
email?: string
pageNo?: number
pageSize?: number
sortField?: string
sortOrder?: string
}) => {
return request.post('/emailContact/page', params)
} }
/**服务商列表 */ /**发件人管理*/
/** export const senderApi = {
* // 新增发送人配置
* @param params { addEmailSenderConfig: (data: Sender): Promise<ApiResponse> => {
"providerName": "", //邮箱服务商名称
"pageNo": 1,
"pageSize": 1,
"sortField": "",
"sortOrder": ""
}
* @returns
*/
export const getEmailProviderList = (params: {
providerName?: string
pageNo?: number
pageSize?: number
sortField?: string
sortOrder?: string
}) => {
return request.post('/emailProviderConfig/page', params)
}
// 新增发送人配置
/**
*
* @param data {"emailSenderConfigBizId":1,"emailSenderConfigName":"","emailSenderConfigEmail":"","emailSenderConfigType":"","emailSenderConfigAppellation":"","emailSenderConfigOther":"","emailSenderConfigCcEmailList":[]}
* @returns
*/
export const addEmailSenderConfig = (data: {
email?: string
password?: string
providerBizId?: string
displayName?: string
active?: number
}) => {
return request.post('/emailSenderConfig/add', data) return request.post('/emailSenderConfig/add', data)
} },
// 删除发送人配置
// 编辑发送人配置 deleteEmailSenderConfig: (id: string): Promise<ApiResponse> => {
/**
*
* @param data {"emailSenderConfigBizId":1,"emailSenderConfigName":"","emailSenderConfigEmail":"","emailSenderConfigType":"","emailSenderConfigAppellation":"","emailSenderConfigOther":"","emailSenderConfigCcEmailList":[]}
* @returns
*/
export const editEmailSenderConfig = (data: {
senderBizId?: string
email?: string
password?: string
providerBizId?: string
displayName?: string
active?: number
}) => {
return request.put('/emailSenderConfig/edit', data)
}
// 删除发送人配置
/**
*
* @param id 发送配置id
* @returns
*/
export const deleteEmailSenderConfig = (id: string) => {
return request.delete('/emailSenderConfig/del?senderBizId=' + id) return request.delete('/emailSenderConfig/del?senderBizId=' + id)
} },
// 编辑发送人配置
// 获取发送人配置详情 editEmailSenderConfig: (data: Sender): Promise<ApiResponse> => {
/** return request.put('/emailSenderConfig/edit', data)
* },
* @param id 发送配置id // 获取发送人配置详情
* @returns getEmailSenderConfigDetail: (id: string): Promise<ApiResponse> => {
*/
export const getEmailSenderConfigDetail = (id: string) => {
return request.get('/emailSenderConfig/detail', { params: { senderBizId: id } }) return request.get('/emailSenderConfig/detail', { params: { senderBizId: id } })
} },
// 获取发送配置列表
// 获取发送配置列表 getEmailSenderConfigList: (params: Sender): Promise<ApiResponse> => {
/**
*
* @param params {
"emailSenderConfigName": "", //发送配置名称
"emailSenderConfigEmail": "", //发送配置邮箱
"pageNo": 1,
"pageSize": 1,
"sortField": "",
"sortOrder": ""
}
* @returns
*/
export const getEmailSenderConfigList = (params: {
emailSenderConfigName?: string
emailSenderConfigEmail?: string
pageNo?: number
pageSize?: number
sortField?: string
sortOrder?: string
}) => {
return request.post('/emailSenderConfig/page', params) return request.post('/emailSenderConfig/page', params)
},
} }
// 分页查询变量 /**变量管理 */
// 接口地址:/emailVariable/page export const variableApi = {
// 请求参数:{"variableNameCn":"","variableNameEn":"","pageNo":1,"pageSize":1,"sortField":"","sortOrder":""} // 分页查询变量
/** getEmailVariableList: (params: Variable): Promise<ApiResponse> => {
*
* @param params {
"variableNameCn": "", //变量名称(中文)
"variableNameEn": "", //变量名称(英文)
"pageNo": 1,
"pageSize": 1,
"sortField": "",
"sortOrder": ""
}
* @returns
*/
export const getEmailVariableList = (params: {
variableNameCn?: string
variableNameEn?: string
pageNo?: number
pageSize?: number
sortField?: string
sortOrder?: string
}) => {
return request.post('/emailVariable/page', params) return request.post('/emailVariable/page', params)
} },
// 新增变量
// 新增变量 addEmailVariable: (data: Variable): Promise<ApiResponse> => {
// 接口地址:/emailVariable/add
/**
*
* @param data {"variableNameCn": "", //变量字段名称中文名
"variableNameEn": "", //变量字段名称英文名
"description": "" //变量描述
}
* @returns
*/
export const addEmailVariable = (data: {
variableNameCn?: string
variableNameEn?: string
description?: string
}) => {
return request.post('/emailVariable/add', data) return request.post('/emailVariable/add', data)
} },
// 编辑变量
// 编辑变量 editEmailVariable: (data: Variable): Promise<ApiResponse> => {
// 接口地址:/emailVariable/edit
/**
*
* @param data {"id": 1, //变量表主键ID
"variableBizId": "", //变量唯一业务ID
"variableNameCn": "", //变量字段名称中文名
"variableNameEn": "", //变量字段名称英文名
"description": "" //变量描述
}
* @returns
*/
export const editEmailVariable = (data: {
id?: number
variableBizId?: string
variableNameCn?: string
variableNameEn?: string
description?: string
}) => {
return request.put('/emailVariable/edit', data) return request.put('/emailVariable/edit', data)
} },
// 删除变量
// 删除变量 deleteEmailVariable: (id: string): Promise<ApiResponse> => {
// 接口地址:/emailVariable/del?variableBizId=
// 请求参数:
/**
*
* @param id 变量id
* @returns
*/
export const deleteEmailVariable = (id: string) => {
return request.delete('/emailVariable/del?variableBizId=' + id) return request.delete('/emailVariable/del?variableBizId=' + id)
},
} }
/** 变量分组管理 */
/** export const variableGroupApi = {
* 新增变量分组 // 新增变量分组
* @param data {"variableGroupBizId": "", //变量分组唯一业务ID addEmailVariableGroup: (data: VariableTemplate): Promise<ApiResponse> => {
"variableGroupName": "", //变量分组名称
"description": "" //变量分组描述
}
* @returns
*/
export const addEmailVariableGroup = (data: {
variableBizIdList?: string[]
groupName?: string
description?: string
}) => {
return request.post('/emailVariableGroup/add', data) return request.post('/emailVariableGroup/add', data)
} },
// 编辑变量分组
/** editEmailVariableGroup: (data: VariableTemplate): Promise<ApiResponse> => {
* 编辑变量分组
* @param data {"variableGroupBizId": "", //变量分组唯一业务ID
"variableGroupName": "", //变量分组名称
"description": "" //变量分组描述
}
* @returns
*/
export const editEmailVariableGroup = (data: {
variableGroupBizId?: string
groupName?: string
description?: string
variableBizIdList?: string[]
}) => {
return request.put('/emailVariableGroup/edit', data) return request.put('/emailVariableGroup/edit', data)
} },
// 删除变量分组
/** deleteEmailVariableGroup: (id: string): Promise<ApiResponse> => {
* 删除变量分组
* @param id 变量分组id
* @returns
*/
export const deleteEmailVariableGroup = (id: string) => {
return request.delete('/emailVariableGroup/del?variableGroupBizId=' + id) return request.delete('/emailVariableGroup/del?variableGroupBizId=' + id)
} },
// 获取变量分组详情
/** getEmailVariableGroupDetail: (id: string): Promise<ApiResponse> => {
* 列表查询变量分组
* @param params {
"variableGroupName": "", //变量分组名称
"pageNo": 1,
"pageSize": 1,
"sortField": "",
"sortOrder": ""
}
* @returns
*/
export const getEmailVariableGroupList = (params: {
groupName?: string
pageNo?: number
pageSize?: number
sortField?: string
sortOrder?: string
}) => {
return request.post('/emailVariableGroup/page', params)
}
/**
* 获取变量分组详情
* @param id 变量分组id
* @returns
*/
export const getEmailVariableGroupDetail = (id: string) => {
return request.get('/emailVariableGroup/detail?variableGroupBizId=' + id) return request.get('/emailVariableGroup/detail?variableGroupBizId=' + id)
},
// 获取变量分组列表
getEmailVariableGroupList: (params: VariableTemplate): Promise<ApiResponse> => {
return request.post('/emailVariableGroup/page', params)
},
} }
/** /**
* 选择联系人时,调用接口,获取sessionId * 导入联系人管理
*/
/**
*
* @returns
*/
export const getEmailContactSessionId = (params) => {
return request.post('/emailContactImport/select/add', params)
}
/**
* 编辑-邮件联系人导入信息
*/
/**
*
* @param data {"sessionId": "", //会话ID
"apiEmailContactDtoList": [
{
"email": "", //邮箱
"name": "" //姓名
}
] //联系人列表
}
* @returns
*/ */
export const editEmailContactImport = (data: EditContactImport) => { export const importContactApi = {
// 新增导入联系人
addEmailContactImport: (data: EditContactImport): Promise<ApiResponse> => {
return request.post('/emailContactImport/add', data)
},
// 导入时,获取sessionId
getEmailContactSessionId: (data: EditContactImport): Promise<ApiResponse> => {
return request.post('/emailContactImport/select/add', data)
},
// 编辑导入数据
editEmailContactImport: (data: EditContactImport): Promise<ApiResponse> => {
return request.put('/emailContactImport/edit', data) return request.put('/emailContactImport/edit', data)
},
// 导入联系人列表查询
getEmailContactImportList: (params: EditContactImport): Promise<ApiResponse> => {
return request.post('/emailContactImport/page', params)
},
} }
/**
* 邮件联系人导入列表查询
*/
/** /**
* * 发送邮件
* @param params {
"sessionId": "", //会话ID
"pageNo": 1,
"pageSize": 1,
"sortField": "",
"sortOrder": ""
}
* @returns
*/ */
export const getEmailContactImportList = (params: EditContactImport) => { export const sendEmailApi = {
return request.post('/emailContactImport/page', params) // 发送邮件
sendEmail: (data: SendEmail): Promise<ApiResponse> => {
return request.post('/email/send', data)
},
// 测试发送邮件
testSendEmail: (data: SendEmail): Promise<ApiResponse> => {
return request.post('/email/test/send', data)
},
} }
declare module '*.vue' {
import type { DefineComponent } from 'vue'
const component: DefineComponent<object, object, unknown>
export default component
}
// 分页类型
export interface Pagination<T> {
records?: T[]
total?: number
pageSize?: number
sortField?: string
sortOrder?: string
pageNo?: number
}
// 联系人类型 // 联系人类型
export interface Contact { export interface Contact extends Pagination<Contact> {
contactBizId?: string contactBizId?: string
name?: string name?: string
type?: string type?: string
...@@ -11,17 +21,19 @@ export interface Contact { ...@@ -11,17 +21,19 @@ export interface Contact {
} }
// 发件人类型 // 发件人类型
export interface Sender { export interface Sender extends Pagination<Sender> {
senderBizId?: string senderBizId?: string
email?: string email?: string
password?: string password?: string
displayName?: string displayName?: string
providerBizId?: string providerBizId?: string
active?: number active?: number
emailSenderConfigName?: string
emailSenderConfigEmail?: string
} }
// 变量类型 // 变量类型
export interface Variable { export interface Variable extends Pagination<Variable> {
id?: string id?: string
variableBizId?: string variableBizId?: string
variableNameCn?: string variableNameCn?: string
...@@ -30,7 +42,7 @@ export interface Variable { ...@@ -30,7 +42,7 @@ export interface Variable {
} }
// 变量模板类型 // 变量模板类型
export interface VariableTemplate { export interface VariableTemplate extends Pagination<VariableTemplate> {
variableGroupBizId?: string variableGroupBizId?: string
groupName?: string groupName?: string
description?: string description?: string
...@@ -39,7 +51,7 @@ export interface VariableTemplate { ...@@ -39,7 +51,7 @@ export interface VariableTemplate {
} }
// 邮件类型 // 邮件类型
export interface Email { export interface Email extends Pagination<Email> {
id?: string id?: string
sender?: string sender?: string
to?: string[] to?: string[]
...@@ -52,7 +64,7 @@ export interface Email { ...@@ -52,7 +64,7 @@ export interface Email {
} }
// 邮件表单类型 // 邮件表单类型
export interface EmailForm { export interface EmailForm extends Pagination<EmailForm> {
to: string to: string
cc: string cc: string
subject: string subject: string
...@@ -84,12 +96,27 @@ export interface ContactSessionId { ...@@ -84,12 +96,27 @@ export interface ContactSessionId {
} }
// 编辑-邮件联系人导入信息 // 编辑-邮件联系人导入信息
export interface EditContactImport { export interface EditContactImport extends Pagination<EditContactImport> {
receiveEmail?: string receiveEmail?: string
sessionId?: string sessionId?: string
source?: string source?: string
pageNo?: number }
pageSize?: number // 发送邮件
sortField?: string export interface SendEmail {
sortOrder?: string senderBizId?: string
recipientEmailList?: string[]
ccEmailList?: string[]
bccEmailList?: string[]
subject?: string
body?: string
}
//邮件服务商类型
export interface EmailProvider extends Pagination<EmailProvider> {
providerBizId?: string
providerName?: string
smtpHost?: string
smtpPort?: string
sslEnabled?: number
active?: number
description?: string
} }
import axios, { AxiosError } from 'axios' import axios, { type AxiosError, type AxiosResponse, type InternalAxiosRequestConfig } from 'axios'
// 定义统一的响应类型
export interface ApiResponse<T = object> {
code: number
message?: string
data: T
success: boolean
msg?: string
}
// 创建axios实例 // 创建axios实例
const request = axios.create({ const request = axios.create({
...@@ -14,7 +23,7 @@ const request = axios.create({ ...@@ -14,7 +23,7 @@ const request = axios.create({
// 请求拦截器 - 添加Authorization头 // 请求拦截器 - 添加Authorization头
request.interceptors.request.use( request.interceptors.request.use(
(config) => { (config: InternalAxiosRequestConfig) => {
// 从本地存储获取token // 从本地存储获取token
const token = localStorage.getItem('authToken') const token = localStorage.getItem('authToken')
...@@ -33,7 +42,7 @@ request.interceptors.request.use( ...@@ -33,7 +42,7 @@ request.interceptors.request.use(
// 响应拦截器 - 处理常见错误 // 响应拦截器 - 处理常见错误
request.interceptors.response.use( request.interceptors.response.use(
(response) => { (response: AxiosResponse) => {
// 直接返回响应数据 // 直接返回响应数据
return response.data return response.data
}, },
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500" class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
> >
<option v-for="sender in senders" :key="sender.senderBizId" :value="sender"> <option v-for="sender in senders" :key="sender.senderBizId" :value="sender">
{{ sender.email }} {{ sender.email }} - {{ sender.displayName }}
</option> </option>
</select> </select>
</div> </div>
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
type="text" type="text"
class="flex-1 px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500" class="flex-1 px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
placeholder="输入收件人邮箱,多个邮箱用逗号分隔" placeholder="输入收件人邮箱,多个邮箱用逗号分隔"
:disabled="!!selectedVariableTemplate"
/> />
<!-- 当选择模版有值时,不显示选择联系人按钮 --> <!-- 当选择模版有值时,不显示选择联系人按钮 -->
<button <button
...@@ -69,6 +70,7 @@ ...@@ -69,6 +70,7 @@
type="text" type="text"
class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500" class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
placeholder="输入抄送人邮箱,多个邮箱用逗号分隔" placeholder="输入抄送人邮箱,多个邮箱用逗号分隔"
:disabled="!!selectedVariableTemplate"
/> />
</div> </div>
...@@ -261,12 +263,7 @@ import type { ...@@ -261,12 +263,7 @@ import type {
ImportRecord, ImportRecord,
} from '../types' } from '../types'
// 引入api接口,获取联系人列表、发件人列表、变量模版列表 // 引入api接口,获取联系人列表、发件人列表、变量模版列表
import { import { senderApi, variableGroupApi, contactApi, getContactList } from '../api/api'
getContactList,
getEmailSenderConfigList,
getEmailVariableGroupList,
getEmailVariableGroupDetail,
} from '../api/api'
// 引入弹窗组件 // 引入弹窗组件
import CommonModal from '@/components/CommonModal.vue' import CommonModal from '@/components/CommonModal.vue'
// 弹窗提示信息对象 // 弹窗提示信息对象
...@@ -301,26 +298,32 @@ const handleCancel = (triggerKey: string) => { ...@@ -301,26 +298,32 @@ const handleCancel = (triggerKey: string) => {
} }
// 初始化数据 // 初始化数据
const getSenders = () => { const getSenders = () => {
getEmailSenderConfigList({ senderApi
.getEmailSenderConfigList({
pageNo: 1, pageNo: 1,
pageSize: 100, pageSize: 100,
}).then((res) => { })
.then((res) => {
senders.value = res.data?.records || [] senders.value = res.data?.records || []
}) })
} }
const getContacts = () => { const getContacts = () => {
getContactList({ contactApi
.getContactList({
pageNo: 1, pageNo: 1,
pageSize: 100, pageSize: 100,
}).then((res) => { })
.then((res) => {
contacts.value = res.data?.records || [] contacts.value = res.data?.records || []
}) })
} }
const getGroups = () => { const getGroups = () => {
getEmailVariableGroupList({ variableGroupApi
.getEmailVariableGroupList({
pageNo: 1, pageNo: 1,
pageSize: 100, pageSize: 100,
}).then((res) => { })
.then((res) => {
groups.value = res.data?.records || [] groups.value = res.data?.records || []
}) })
} }
...@@ -388,7 +391,9 @@ const removeAttachment = (index: number) => { ...@@ -388,7 +391,9 @@ const removeAttachment = (index: number) => {
const applyVariableTemplate = () => { const applyVariableTemplate = () => {
if (!selectedVariableTemplate.value) return if (!selectedVariableTemplate.value) return
if (selectedVariableTemplate.value.variableGroupBizId) { if (selectedVariableTemplate.value.variableGroupBizId) {
getEmailVariableGroupDetail(selectedVariableTemplate.value.variableGroupBizId).then((res) => { variableGroupApi
.getEmailVariableGroupDetail(selectedVariableTemplate.value.variableGroupBizId)
.then((res) => {
variables.value = res.data?.emailVariableDtoList || [] variables.value = res.data?.emailVariableDtoList || []
}) })
} }
......
...@@ -319,14 +319,7 @@ ...@@ -319,14 +319,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed, onMounted } from 'vue' import { ref, computed, onMounted } from 'vue'
// 引入我们创建的api拦截器 // 引入我们创建的api拦截器
import { import { contactApi } from '@/api/api'
addContact,
editContact,
deleteContact,
getContactDetail,
getContactList,
getEmailSenderConfigList,
} from '@/api/api'
import type { Contact } from '@/types/index' import type { Contact } from '@/types/index'
// 引入弹窗组件 // 引入弹窗组件
import CommonModal from '@/components/CommonModal.vue' import CommonModal from '@/components/CommonModal.vue'
...@@ -355,7 +348,7 @@ const handleConfirm = (triggerKey: string) => { ...@@ -355,7 +348,7 @@ const handleConfirm = (triggerKey: string) => {
modalVisible.value = false modalVisible.value = false
console.log('用户确认操作', triggerKey) console.log('用户确认操作', triggerKey)
if (triggerKey === 'deleteContactModal' && form.value.contactBizId) { if (triggerKey === 'deleteContactModal' && form.value.contactBizId) {
deleteContact(form.value.contactBizId as string).then((res) => { contactApi.deleteContact(form.value.contactBizId as string).then((res) => {
if (res.code === 200) { if (res.code === 200) {
fetchContacts() fetchContacts()
openModal({ openModal({
...@@ -476,7 +469,7 @@ const totalPages = computed(() => { ...@@ -476,7 +469,7 @@ const totalPages = computed(() => {
const fetchContacts = async () => { const fetchContacts = async () => {
try { try {
isLoading.value = true isLoading.value = true
const data = await getContactList({ const data = await contactApi.getContactList({
pageNo: currentPage.value, pageNo: currentPage.value,
pageSize: pageSize.value, pageSize: pageSize.value,
sortField: sortBy.value, sortField: sortBy.value,
...@@ -614,7 +607,7 @@ const saveContact = async () => { ...@@ -614,7 +607,7 @@ const saveContact = async () => {
if (isEditing.value && form.value.contactBizId) { if (isEditing.value && form.value.contactBizId) {
// 更新现有联系人 // 更新现有联系人
editContact({ ...contactData }).then((res) => { contactApi.updateContact({ ...contactData }).then((res) => {
if (res.code === 200) { if (res.code === 200) {
openModal({ openModal({
title: '更新联系人成功', title: '更新联系人成功',
...@@ -631,7 +624,7 @@ const saveContact = async () => { ...@@ -631,7 +624,7 @@ const saveContact = async () => {
}) })
} else { } else {
// 添加新联系人 // 添加新联系人
await addContact(contactData).then((res) => { await contactApi.addContact(contactData).then((res) => {
if (res.code === 200) { if (res.code === 200) {
openModal({ openModal({
title: '添加联系人成功', title: '添加联系人成功',
......
...@@ -102,8 +102,8 @@ ...@@ -102,8 +102,8 @@
<td class="px-6 py-4 whitespace-nowrap">{{ sender.email }}</td> <td class="px-6 py-4 whitespace-nowrap">{{ sender.email }}</td>
<td class="px-6 py-4 whitespace-nowrap"> <td class="px-6 py-4 whitespace-nowrap">
{{ {{
providers.find((provider) => provider.providerBizId === sender.providerBizId) providers.find((i) => i.providerBizId === sender.providerBizId)?.providerName ||
?.providerName || '未知' '未知'
}} }}
</td> </td>
<td class="px-6 py-4 whitespace-nowrap">{{ sender.displayName }}</td> <td class="px-6 py-4 whitespace-nowrap">{{ sender.displayName }}</td>
...@@ -149,13 +149,7 @@ ...@@ -149,13 +149,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, defineProps, defineEmits, onMounted } from 'vue' import { ref, defineProps, defineEmits, onMounted } from 'vue'
import { import { emailProviderApi, senderApi, getEmailSenderConfigList } from '@/api/api'
getEmailSenderConfigList,
getEmailProviderList,
deleteEmailSenderConfig,
addEmailSenderConfig,
editEmailSenderConfig,
} from '@/api/api'
import type { Sender } from '@/types/index' import type { Sender } from '@/types/index'
// 引入弹窗组件 // 引入弹窗组件
import CommonModal from '@/components/CommonModal.vue' import CommonModal from '@/components/CommonModal.vue'
...@@ -184,7 +178,7 @@ const handleConfirm = (triggerKey: string) => { ...@@ -184,7 +178,7 @@ const handleConfirm = (triggerKey: string) => {
modalVisible.value = false modalVisible.value = false
console.log('用户确认操作', triggerKey) console.log('用户确认操作', triggerKey)
if (triggerKey === 'deleteModal') { if (triggerKey === 'deleteModal') {
deleteEmailSenderConfig(editingSenderId.value).then((res) => { senderApi.deleteEmailSenderConfig(editingSenderId.value).then((res) => {
if (res.code === 200) { if (res.code === 200) {
openModal({ openModal({
title: '删除确认', title: '删除确认',
...@@ -235,20 +229,22 @@ const resetForm = () => { ...@@ -235,20 +229,22 @@ const resetForm = () => {
} }
} }
const getProviders = () => { const getProviders = () => {
getEmailProviderList({ emailProviderApi
.getEmailProviderList({
providerName: '', providerName: '',
pageNo: 1, })
pageSize: 100, .then((res) => {
}).then((res) => {
providers.value = res.data?.records || [] providers.value = res.data?.records || []
}) })
} }
const getSenders = () => { const getSenders = () => {
getEmailSenderConfigList({ senderApi
.getEmailSenderConfigList({
emailSenderConfigName: '', emailSenderConfigName: '',
pageNo: 1, pageNo: 1,
pageSize: 100, pageSize: 100,
}).then((res) => { })
.then((res) => {
senders.value = res.data?.records || [] senders.value = res.data?.records || []
}) })
} }
...@@ -264,10 +260,12 @@ const saveSender = () => { ...@@ -264,10 +260,12 @@ const saveSender = () => {
if (editingSenderId.value) { if (editingSenderId.value) {
// 更新现有发件人 // 更新现有发件人
editEmailSenderConfig({ senderApi
.editEmailSenderConfig({
senderBizId: editingSenderId.value, senderBizId: editingSenderId.value,
...formData.value, ...formData.value,
}).then((res) => { })
.then((res) => {
if (res.code === 200) { if (res.code === 200) {
getSenders() getSenders()
openModal({ openModal({
...@@ -290,7 +288,7 @@ const saveSender = () => { ...@@ -290,7 +288,7 @@ const saveSender = () => {
displayName: formData.value.displayName || '', displayName: formData.value.displayName || '',
active: formData.value.active ?? 1, active: formData.value.active ?? 1,
} }
addEmailSenderConfig(newSender).then((res) => { senderApi.addEmailSenderConfig(newSender).then((res) => {
// 补充异常处理 // 补充异常处理
if (res.code === 200) { if (res.code === 200) {
getSenders() getSenders()
......
...@@ -290,17 +290,7 @@ ...@@ -290,17 +290,7 @@
import { ref, defineProps, defineEmits, onMounted } from 'vue' import { ref, defineProps, defineEmits, onMounted } from 'vue'
import type { Variable, VariableTemplate } from '../types' import type { Variable, VariableTemplate } from '../types'
import { import { variableApi, variableGroupApi } from '@/api/api'
getEmailVariableList,
addEmailVariable,
editEmailVariable,
deleteEmailVariable,
addEmailVariableGroup,
editEmailVariableGroup,
deleteEmailVariableGroup,
getEmailVariableGroupList,
getEmailVariableGroupDetail,
} from '@/api/api'
// 引入弹窗组件 // 引入弹窗组件
import CommonModal from '@/components/CommonModal.vue' import CommonModal from '@/components/CommonModal.vue'
...@@ -386,12 +376,14 @@ const saveVariable = () => { ...@@ -386,12 +376,14 @@ const saveVariable = () => {
if (editingVariableId.value) { if (editingVariableId.value) {
// 更新接口 // 更新接口
editEmailVariable({ variableApi
.editEmailVariable({
variableBizId: variableForm.value.variableBizId || '', variableBizId: variableForm.value.variableBizId || '',
variableNameCn: variableForm.value.variableNameCn, variableNameCn: variableForm.value.variableNameCn,
variableNameEn: variableForm.value.variableNameEn, variableNameEn: variableForm.value.variableNameEn,
description: variableForm.value.description, description: variableForm.value.description,
}).then(() => { })
.then(() => {
// 更新本地变量列表 // 更新本地变量列表
fetchVariables() fetchVariables()
openModal({ openModal({
...@@ -401,7 +393,8 @@ const saveVariable = () => { ...@@ -401,7 +393,8 @@ const saveVariable = () => {
}) })
} else { } else {
// 创建接口 // 创建接口
addEmailVariable({ variableApi
.addEmailVariable({
variableNameCn: variableForm.value.variableNameCn, variableNameCn: variableForm.value.variableNameCn,
variableNameEn: variableForm.value.variableNameEn, variableNameEn: variableForm.value.variableNameEn,
description: variableForm.value.description, description: variableForm.value.description,
...@@ -441,7 +434,8 @@ const editVariable = (variable: Variable) => { ...@@ -441,7 +434,8 @@ const editVariable = (variable: Variable) => {
const deleteVariable = (id: string, type?: string) => { const deleteVariable = (id: string, type?: string) => {
editingVariableId.value = id editingVariableId.value = id
if (id && type === 'confirmDelete') { if (id && type === 'confirmDelete') {
deleteEmailVariable(id) variableApi
.deleteEmailVariable(id)
.then(() => { .then(() => {
// 刷新变量列表 // 刷新变量列表
fetchVariables() fetchVariables()
...@@ -483,7 +477,8 @@ const fetchVariables = () => { ...@@ -483,7 +477,8 @@ const fetchVariables = () => {
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
} }
getEmailVariableList(params) variableApi
.getEmailVariableList(params)
.then((res) => { .then((res) => {
variables.value = res.data.records || [] variables.value = res.data.records || []
}) })
...@@ -508,7 +503,8 @@ const fetchVariableTemplates = () => { ...@@ -508,7 +503,8 @@ const fetchVariableTemplates = () => {
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
} }
getEmailVariableGroupList(params) variableGroupApi
.getEmailVariableGroupList(params)
.then((res) => { .then((res) => {
variableTemplates.value = res.data.records || [] variableTemplates.value = res.data.records || []
}) })
...@@ -581,7 +577,8 @@ const saveVariableTemplate = () => { ...@@ -581,7 +577,8 @@ const saveVariableTemplate = () => {
if (editingTemplateId.value) { if (editingTemplateId.value) {
console.log('更新变量模版', templateForm.value) console.log('更新变量模版', templateForm.value)
// 更新现有模板 // 更新现有模板
editEmailVariableGroup({ variableGroupApi
.editEmailVariableGroup({
variableGroupBizId: editingTemplateId.value, variableGroupBizId: editingTemplateId.value,
groupName: templateForm.value.groupName || '', groupName: templateForm.value.groupName || '',
description: templateForm.value.description || '', description: templateForm.value.description || '',
...@@ -607,7 +604,8 @@ const saveVariableTemplate = () => { ...@@ -607,7 +604,8 @@ const saveVariableTemplate = () => {
}) })
} else { } else {
// 调用变量组保存接口 // 调用变量组保存接口
addEmailVariableGroup({ variableGroupApi
.addEmailVariableGroup({
groupName: templateForm.value.groupName || '', groupName: templateForm.value.groupName || '',
description: templateForm.value.description || '', description: templateForm.value.description || '',
variableBizIdList: templateForm.value.variableBizIdList || [], variableBizIdList: templateForm.value.variableBizIdList || [],
...@@ -638,7 +636,8 @@ const saveVariableTemplate = () => { ...@@ -638,7 +636,8 @@ const saveVariableTemplate = () => {
const deleteVariableTemplate = (id: string, type?: string) => { const deleteVariableTemplate = (id: string, type?: string) => {
editingTemplateId.value = id editingTemplateId.value = id
if (type === 'confirmDelete') { if (type === 'confirmDelete') {
deleteEmailVariableGroup(editingTemplateId.value) variableGroupApi
.deleteEmailVariableGroup(editingTemplateId.value)
.then(() => { .then(() => {
// 刷新变量模版列表 // 刷新变量模版列表
fetchVariableTemplates() fetchVariableTemplates()
......
{ {
"files": [],
"references": [
{
"path": "./tsconfig.node.json"
},
{
"path": "./tsconfig.app.json"
},
{
"path": "./tsconfig.vitest.json"
}
],
"compilerOptions": { "compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true, "skipLibCheck": true,
"strict": false "moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "preserve",
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"composite": true,
"declaration": true,
"declarationMap": true,
"baseUrl": "/yd-email",
"paths": {
"@/*": ["src/*"],
"@/components/*": ["src/components/*"],
"@/views/*": ["src/views/*"],
"@/utils/*": ["src/utils/*"],
"@/api/*": ["src/api/*"],
"@/types/*": ["src/types/*"],
"@/stores/*": ["src/stores/*"],
"@/assets/*": ["src/assets/*"]
} }
},
"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "src/**/*.d.ts", "src/shims-vue.d.ts"],
"exclude": ["node_modules", "dist"]
} }
...@@ -3,7 +3,7 @@ import { defineConfig } from 'vite' ...@@ -3,7 +3,7 @@ import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue' import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx' import vueJsx from '@vitejs/plugin-vue-jsx'
import vueDevTools from 'vite-plugin-vue-devtools' import vueDevTools from 'vite-plugin-vue-devtools'
/**设置server转发 */ import { resolve } from 'path'
export default defineConfig({ export default defineConfig({
// 关键配置:设置基础路径为子目录 yd-email // 关键配置:设置基础路径为子目录 yd-email
...@@ -12,6 +12,7 @@ export default defineConfig({ ...@@ -12,6 +12,7 @@ export default defineConfig({
resolve: { resolve: {
alias: { alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)), '@': fileURLToPath(new URL('./src', import.meta.url)),
'@/components': resolve(__dirname, 'src/components'),
}, },
}, },
// 添加CSS配置 // 添加CSS配置
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment