1. 统一化代码

2. 增加 DocAlert 关联文档
This commit is contained in:
YunaiV 2023-04-05 20:13:35 +08:00
parent bb88e3d77c
commit 4404554cfc
111 changed files with 640 additions and 567 deletions

2
.env
View File

@ -13,3 +13,5 @@ VITE_APP_TENANT_ENABLE=true
# 验证码的开关 # 验证码的开关
VITE_APP_CAPTCHA_ENABLE=true VITE_APP_CAPTCHA_ENABLE=true
# 验证码的开关
VITE_APP_CAPTCHA_ENABLE=true

View File

@ -12,16 +12,16 @@ export type LeaveVO = {
} }
// 创建请假申请 // 创建请假申请
export const createLeaveApi = async (data: LeaveVO) => { export const createLeave = async (data: LeaveVO) => {
return await request.post({ url: '/bpm/oa/leave/create', data: data }) return await request.post({ url: '/bpm/oa/leave/create', data: data })
} }
// 获得请假申请 // 获得请假申请
export const getLeaveApi = async (id: number) => { export const getLeave = async (id: number) => {
return await request.get({ url: '/bpm/oa/leave/get?id=' + id }) return await request.get({ url: '/bpm/oa/leave/get?id=' + id })
} }
// 获得请假申请分页 // 获得请假申请分页
export const getLeavePageApi = async (params) => { export const getLeavePage = async (params) => {
return await request.get({ url: '/bpm/oa/leave/page', params }) return await request.get({ url: '/bpm/oa/leave/page', params })
} }

View File

@ -20,15 +20,15 @@ export type ProcessInstanceVO = {
endTime: string endTime: string
} }
export const getMyProcessInstancePageApi = async (params) => { export const getMyProcessInstancePage = async (params) => {
return await request.get({ url: '/bpm/process-instance/my-page', params }) return await request.get({ url: '/bpm/process-instance/my-page', params })
} }
export const createProcessInstanceApi = async (data) => { export const createProcessInstance = async (data) => {
return await request.post({ url: '/bpm/process-instance/create', data: data }) return await request.post({ url: '/bpm/process-instance/create', data: data })
} }
export const cancelProcessInstanceApi = async (id: number, reason: string) => { export const cancelProcessInstance = async (id: number, reason: string) => {
const data = { const data = {
id: id, id: id,
reason: reason reason: reason
@ -36,6 +36,6 @@ export const cancelProcessInstanceApi = async (id: number, reason: string) => {
return await request.delete({ url: '/bpm/process-instance/cancel', data: data }) return await request.delete({ url: '/bpm/process-instance/cancel', data: data })
} }
export const getProcessInstanceApi = async (id: number) => { export const getProcessInstance = async (id: number) => {
return await request.get({ url: '/bpm/process-instance/get?id=' + id }) return await request.get({ url: '/bpm/process-instance/get?id=' + id })
} }

View File

@ -43,6 +43,6 @@ export const deleteConfig = (id: number) => {
} }
// 导出参数 // 导出参数
export const exportConfigApi = (params) => { export const exportConfig = (params) => {
return request.download({ url: '/infra/config/export', params }) return request.download({ url: '/infra/config/export', params })
} }

View File

@ -1,16 +1,16 @@
import request from '@/config/axios' import request from '@/config/axios'
// 导出Html // 导出Html
export const exportHtmlApi = () => { export const exportHtml = () => {
return request.download({ url: '/infra/db-doc/export-html' }) return request.download({ url: '/infra/db-doc/export-html' })
} }
// 导出Word // 导出Word
export const exportWordApi = () => { export const exportWord = () => {
return request.download({ url: '/infra/db-doc/export-word' }) return request.download({ url: '/infra/db-doc/export-word' })
} }
// 导出Markdown // 导出Markdown
export const exportMarkdownApi = () => { export const exportMarkdown = () => {
return request.download({ url: '/infra/db-doc/export-markdown' }) return request.download({ url: '/infra/db-doc/export-markdown' })
} }

View File

@ -53,7 +53,7 @@ export const updateJobStatus = (id: number, status: number) => {
} }
// 定时任务立即执行一次 // 定时任务立即执行一次
export const runJobApi = (id: number) => { export const runJob = (id: number) => {
return request.put({ url: '/infra/job/trigger?id=' + id }) return request.put({ url: '/infra/job/trigger?id=' + id })
} }

View File

@ -3,17 +3,19 @@ import request from '@/config/axios'
/** /**
* redis * redis
*/ */
export const getCacheApi = () => { export const getCache = () => {
return request.get({ url: '/infra/redis/get-monitor-info' }) return request.get({ url: '/infra/redis/get-monitor-info' })
} }
// 获取模块 // 获取模块
export const getKeyDefineListApi = () => { export const getKeyDefineList = () => {
return request.get({ url: '/infra/redis/get-key-define-list' }) return request.get({ url: '/infra/redis/get-key-define-list' })
} }
/** /**
* redis key列表 * redis key列表
*/ */
export const getKeyListApi = (keyTemplate: string) => { export const getKeyList = (keyTemplate: string) => {
return request.get({ return request.get({
url: '/infra/redis/get-key-list', url: '/infra/redis/get-key-list',
params: { params: {
@ -21,17 +23,18 @@ export const getKeyListApi = (keyTemplate: string) => {
} }
}) })
} }
// 获取缓存内容 // 获取缓存内容
export const getKeyValueApi = (key: string) => { export const getKeyValue = (key: string) => {
return request.get({ url: '/infra/redis/get-key-value?key=' + key }) return request.get({ url: '/infra/redis/get-key-value?key=' + key })
} }
// 根据键名删除缓存 // 根据键名删除缓存
export const deleteKeyApi = (key: string) => { export const deleteKey = (key: string) => {
return request.delete({ url: '/infra/redis/delete-key?key=' + key }) return request.delete({ url: '/infra/redis/delete-key?key=' + key })
} }
export const deleteKeysApi = (keyTemplate: string) => { export const deleteKeys = (keyTemplate: string) => {
return request.delete({ return request.delete({
url: '/infra/redis/delete-keys?', url: '/infra/redis/delete-keys?',
params: { params: {

View File

@ -17,7 +17,7 @@ export interface SmsLoginVO {
} }
// 登录 // 登录
export const loginApi = (data: UserLoginVO) => { export const login = (data: UserLoginVO) => {
return request.post({ url: '/system/auth/login', data }) return request.post({ url: '/system/auth/login', data })
} }
@ -27,47 +27,47 @@ export const refreshToken = () => {
} }
// 使用租户名,获得租户编号 // 使用租户名,获得租户编号
export const getTenantIdByNameApi = (name: string) => { export const getTenantIdByName = (name: string) => {
return request.get({ url: '/system/tenant/get-id-by-name?name=' + name }) return request.get({ url: '/system/tenant/get-id-by-name?name=' + name })
} }
// 登出 // 登出
export const loginOutApi = () => { export const loginOut = () => {
return request.post({ url: '/system/auth/logout' }) return request.post({ url: '/system/auth/logout' })
} }
// 获取用户权限信息 // 获取用户权限信息
export const getInfoApi = () => { export const getInfo = () => {
return request.get({ url: '/system/auth/get-permission-info' }) return request.get({ url: '/system/auth/get-permission-info' })
} }
// 路由 // 路由
export const getAsyncRoutesApi = () => { export const getAsyncRoutes = () => {
return request.get({ url: '/system/auth/list-menus' }) return request.get({ url: '/system/auth/list-menus' })
} }
//获取登录验证码 //获取登录验证码
export const sendSmsCodeApi = (data: SmsCodeVO) => { export const sendSmsCode = (data: SmsCodeVO) => {
return request.post({ url: '/system/auth/send-sms-code', data }) return request.post({ url: '/system/auth/send-sms-code', data })
} }
// 短信验证码登录 // 短信验证码登录
export const smsLoginApi = (data: SmsLoginVO) => { export const smsLogin = (data: SmsLoginVO) => {
return request.post({ url: '/system/auth/sms-login', data }) return request.post({ url: '/system/auth/sms-login', data })
} }
// 社交授权的跳转 // 社交授权的跳转
export const socialAuthRedirectApi = (type: number, redirectUri: string) => { export const socialAuthRedirect = (type: number, redirectUri: string) => {
return request.get({ return request.get({
url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri
}) })
} }
// 获取验证图片以及 token // 获取验证图片以及 token
export const getCodeApi = (data) => { export const getCode = (data) => {
return request.postOriginal({ url: 'system/captcha/get', data }) return request.postOriginal({ url: 'system/captcha/get', data })
} }
// 滑动或者点选验证 // 滑动或者点选验证
export const reqCheckApi = (data) => { export const reqCheck = (data) => {
return request.postOriginal({ url: 'system/captcha/check', data }) return request.postOriginal({ url: 'system/captcha/check', data })
} }

View File

@ -38,41 +38,41 @@ export interface AppUpdateStatusReqVO {
} }
// 查询列表支付应用 // 查询列表支付应用
export const getAppPageApi = (params: AppPageReqVO) => { export const getAppPage = (params: AppPageReqVO) => {
return request.get({ url: '/pay/app/page', params }) return request.get({ url: '/pay/app/page', params })
} }
// 查询详情支付应用 // 查询详情支付应用
export const getAppApi = (id: number) => { export const getApp = (id: number) => {
return request.get({ url: '/pay/app/get?id=' + id }) return request.get({ url: '/pay/app/get?id=' + id })
} }
// 新增支付应用 // 新增支付应用
export const createAppApi = (data: AppVO) => { export const createApp = (data: AppVO) => {
return request.post({ url: '/pay/app/create', data }) return request.post({ url: '/pay/app/create', data })
} }
// 修改支付应用 // 修改支付应用
export const updateAppApi = (data: AppVO) => { export const updateApp = (data: AppVO) => {
return request.put({ url: '/pay/app/update', data }) return request.put({ url: '/pay/app/update', data })
} }
// 支付应用信息状态修改 // 支付应用信息状态修改
export const changeAppStatusApi = (data: AppUpdateStatusReqVO) => { export const changeAppStatus = (data: AppUpdateStatusReqVO) => {
return request.put({ url: '/pay/app/update-status', data: data }) return request.put({ url: '/pay/app/update-status', data: data })
} }
// 删除支付应用 // 删除支付应用
export const deleteAppApi = (id: number) => { export const deleteApp = (id: number) => {
return request.delete({ url: '/pay/app/delete?id=' + id }) return request.delete({ url: '/pay/app/delete?id=' + id })
} }
// 导出支付应用 // 导出支付应用
export const exportAppApi = (params: AppExportReqVO) => { export const exportApp = (params: AppExportReqVO) => {
return request.download({ url: '/pay/app/export-excel', params }) return request.download({ url: '/pay/app/export-excel', params })
} }
// 根据商ID称搜索应用列表 // 根据商ID称搜索应用列表
export const getAppListByMerchantIdApi = (merchantId: number) => { export const getAppListByMerchantId = (merchantId: number) => {
return request.get({ url: '/pay/app/list-merchant-id', params: { merchantId: merchantId } }) return request.get({ url: '/pay/app/list-merchant-id', params: { merchantId: merchantId } })
} }

View File

@ -12,35 +12,13 @@ export interface ChannelVO {
createTime: Date createTime: Date
} }
export interface ChannelPageReqVO extends PageParam {
code?: string
status?: number
remark?: string
feeRate?: number
merchantId?: number
appId?: number
config?: string
createTime?: Date[]
}
export interface ChannelExportReqVO {
code?: string
status?: number
remark?: string
feeRate?: number
merchantId?: number
appId?: number
config?: string
createTime?: Date[]
}
// 查询列表支付渠道 // 查询列表支付渠道
export const getChannelPageApi = (params: ChannelPageReqVO) => { export const getChannelPage = (params: PageParam) => {
return request.get({ url: '/pay/channel/page', params }) return request.get({ url: '/pay/channel/page', params })
} }
// 查询详情支付渠道 // 查询详情支付渠道
export const getChannelApi = (merchantId: number, appId: string, code: string) => { export const getChannel = (merchantId: number, appId: string, code: string) => {
const params = { const params = {
merchantId: merchantId, merchantId: merchantId,
appId: appId, appId: appId,
@ -50,21 +28,21 @@ export const getChannelApi = (merchantId: number, appId: string, code: string) =
} }
// 新增支付渠道 // 新增支付渠道
export const createChannelApi = (data: ChannelVO) => { export const createChannel = (data: ChannelVO) => {
return request.post({ url: '/pay/channel/create', data }) return request.post({ url: '/pay/channel/create', data })
} }
// 修改支付渠道 // 修改支付渠道
export const updateChannelApi = (data: ChannelVO) => { export const updateChannel = (data: ChannelVO) => {
return request.put({ url: '/pay/channel/update', data }) return request.put({ url: '/pay/channel/update', data })
} }
// 删除支付渠道 // 删除支付渠道
export const deleteChannelApi = (id: number) => { export const deleteChannel = (id: number) => {
return request.delete({ url: '/pay/channel/delete?id=' + id }) return request.delete({ url: '/pay/channel/delete?id=' + id })
} }
// 导出支付渠道 // 导出支付渠道
export const exportChannelApi = (params: ChannelExportReqVO) => { export const exportChannel = (params) => {
return request.download({ url: '/pay/channel/export-excel', params }) return request.download({ url: '/pay/channel/export-excel', params })
} }

View File

@ -79,31 +79,31 @@ export interface OrderExportReqVO {
} }
// 查询列表支付订单 // 查询列表支付订单
export const getOrderPageApi = async (params: OrderPageReqVO) => { export const getOrderPage = async (params: OrderPageReqVO) => {
return await request.get({ url: '/pay/order/page', params }) return await request.get({ url: '/pay/order/page', params })
} }
// 查询详情支付订单 // 查询详情支付订单
export const getOrderApi = async (id: number) => { export const getOrder = async (id: number) => {
return await request.get({ url: '/pay/order/get?id=' + id }) return await request.get({ url: '/pay/order/get?id=' + id })
} }
// 新增支付订单 // 新增支付订单
export const createOrderApi = async (data: OrderVO) => { export const createOrder = async (data: OrderVO) => {
return await request.post({ url: '/pay/order/create', data }) return await request.post({ url: '/pay/order/create', data })
} }
// 修改支付订单 // 修改支付订单
export const updateOrderApi = async (data: OrderVO) => { export const updateOrder = async (data: OrderVO) => {
return await request.put({ url: '/pay/order/update', data }) return await request.put({ url: '/pay/order/update', data })
} }
// 删除支付订单 // 删除支付订单
export const deleteOrderApi = async (id: number) => { export const deleteOrder = async (id: number) => {
return await request.delete({ url: '/pay/order/delete?id=' + id }) return await request.delete({ url: '/pay/order/delete?id=' + id })
} }
// 导出支付订单 // 导出支付订单
export const exportOrderApi = async (params: OrderExportReqVO) => { export const exportOrder = async (params: OrderExportReqVO) => {
return await request.download({ url: '/pay/order/export-excel', params }) return await request.download({ url: '/pay/order/export-excel', params })
} }

View File

@ -86,31 +86,31 @@ export interface PayRefundExportReqVO {
} }
// 查询列表退款订单 // 查询列表退款订单
export const getRefundPageApi = (params: RefundPageReqVO) => { export const getRefundPage = (params: RefundPageReqVO) => {
return request.get({ url: '/pay/refund/page', params }) return request.get({ url: '/pay/refund/page', params })
} }
// 查询详情退款订单 // 查询详情退款订单
export const getRefundApi = (id: number) => { export const getRefund = (id: number) => {
return request.get({ url: '/pay/refund/get?id=' + id }) return request.get({ url: '/pay/refund/get?id=' + id })
} }
// 新增退款订单 // 新增退款订单
export const createRefundApi = (data: RefundVO) => { export const createRefund = (data: RefundVO) => {
return request.post({ url: '/pay/refund/create', data }) return request.post({ url: '/pay/refund/create', data })
} }
// 修改退款订单 // 修改退款订单
export const updateRefundApi = (data: RefundVO) => { export const updateRefund = (data: RefundVO) => {
return request.put({ url: '/pay/refund/update', data }) return request.put({ url: '/pay/refund/update', data })
} }
// 删除退款订单 // 删除退款订单
export const deleteRefundApi = (id: number) => { export const deleteRefund = (id: number) => {
return request.delete({ url: '/pay/refund/delete?id=' + id }) return request.delete({ url: '/pay/refund/delete?id=' + id })
} }
// 导出退款订单 // 导出退款订单
export const exportRefundApi = (params: PayRefundExportReqVO) => { export const exportRefund = (params: PayRefundExportReqVO) => {
return request.download({ url: '/pay/refund/export-excel', params }) return request.download({ url: '/pay/refund/export-excel', params })
} }

View File

@ -12,37 +12,32 @@ export interface DeptVO {
createTime: Date createTime: Date
} }
export interface DeptPageReqVO {
name?: string
status?: number
}
// 查询部门(精简)列表 // 查询部门(精简)列表
export const getSimpleDeptList = async (): Promise<DeptVO[]> => { export const getSimpleDeptList = async (): Promise<DeptVO[]> => {
return await request.get({ url: '/system/dept/list-all-simple' }) return await request.get({ url: '/system/dept/list-all-simple' })
} }
// 查询部门列表 // 查询部门列表
export const getDeptPageApi = async (params: DeptPageReqVO) => { export const getDeptPage = async (params: PageParam) => {
return await request.get({ url: '/system/dept/list', params }) return await request.get({ url: '/system/dept/list', params })
} }
// 查询部门详情 // 查询部门详情
export const getDeptApi = async (id: number) => { export const getDept = async (id: number) => {
return await request.get({ url: '/system/dept/get?id=' + id }) return await request.get({ url: '/system/dept/get?id=' + id })
} }
// 新增部门 // 新增部门
export const createDeptApi = async (data: DeptVO) => { export const createDept = async (data: DeptVO) => {
return await request.post({ url: '/system/dept/create', data: data }) return await request.post({ url: '/system/dept/create', data: data })
} }
// 修改部门 // 修改部门
export const updateDeptApi = async (params: DeptVO) => { export const updateDept = async (params: DeptVO) => {
return await request.put({ url: '/system/dept/update', data: params }) return await request.put({ url: '/system/dept/update', data: params })
} }
// 删除部门 // 删除部门
export const deleteDeptApi = async (id: number) => { export const deleteDept = async (id: number) => {
return await request.delete({ url: '/system/dept/delete?id=' + id }) return await request.delete({ url: '/system/dept/delete?id=' + id })
} }

View File

@ -10,39 +10,31 @@ export interface ErrorCodeVO {
createTime: Date createTime: Date
} }
export interface ErrorCodePageReqVO extends PageParam {
type?: number
applicationName?: string
code?: number
message?: string
createTime?: Date[]
}
// 查询错误码列表 // 查询错误码列表
export const getErrorCodePageApi = (params: ErrorCodePageReqVO) => { export const getErrorCodePage = (params: PageParam) => {
return request.get({ url: '/system/error-code/page', params }) return request.get({ url: '/system/error-code/page', params })
} }
// 查询错误码详情 // 查询错误码详情
export const getErrorCodeApi = (id: number) => { export const getErrorCode = (id: number) => {
return request.get({ url: '/system/error-code/get?id=' + id }) return request.get({ url: '/system/error-code/get?id=' + id })
} }
// 新增错误码 // 新增错误码
export const createErrorCodeApi = (data: ErrorCodeVO) => { export const createErrorCode = (data: ErrorCodeVO) => {
return request.post({ url: '/system/error-code/create', data }) return request.post({ url: '/system/error-code/create', data })
} }
// 修改错误码 // 修改错误码
export const updateErrorCodeApi = (data: ErrorCodeVO) => { export const updateErrorCode = (data: ErrorCodeVO) => {
return request.put({ url: '/system/error-code/update', data }) return request.put({ url: '/system/error-code/update', data })
} }
// 删除错误码 // 删除错误码
export const deleteErrorCodeApi = (id: number) => { export const deleteErrorCode = (id: number) => {
return request.delete({ url: '/system/error-code/delete?id=' + id }) return request.delete({ url: '/system/error-code/delete?id=' + id })
} }
// 导出错误码 // 导出错误码
export const excelErrorCodeApi = (params: ErrorCodePageReqVO) => { export const excelErrorCode = (params) => {
return request.download({ url: '/system/error-code/export-excel', params }) return request.download({ url: '/system/error-code/export-excel', params })
} }

View File

@ -29,7 +29,7 @@ export const getMenuList = (params) => {
} }
// 获取菜单详情 // 获取菜单详情
export const getMenuApi = (id: number) => { export const getMenu = (id: number) => {
return request.get({ url: '/system/menu/get?id=' + id }) return request.get({ url: '/system/menu/get?id=' + id })
} }

View File

@ -38,11 +38,11 @@ export const updateAllNotifyMessageRead = async () => {
} }
// 获取当前用户的最新站内信列表 // 获取当前用户的最新站内信列表
export const getUnreadNotifyMessageListApi = async () => { export const getUnreadNotifyMessageList = async () => {
return await request.get({ url: '/system/notify-message/get-unread-list' }) return await request.get({ url: '/system/notify-message/get-unread-list' })
} }
// 获得当前用户的未读站内信数量 // 获得当前用户的未读站内信数量
export const getUnreadNotifyMessageCountApi = async () => { export const getUnreadNotifyMessageCount = async () => {
return await request.get({ url: '/system/notify-message/get-unread-count' }) return await request.get({ url: '/system/notify-message/get-unread-count' })
} }

View File

@ -51,17 +51,17 @@ export interface UserProfileUpdateReqVO {
} }
// 查询用户个人信息 // 查询用户个人信息
export const getUserProfileApi = () => { export const getUserProfile = () => {
return request.get({ url: '/system/user/profile/get' }) return request.get({ url: '/system/user/profile/get' })
} }
// 修改用户个人信息 // 修改用户个人信息
export const updateUserProfileApi = (data: UserProfileUpdateReqVO) => { export const updateUserProfile = (data: UserProfileUpdateReqVO) => {
return request.put({ url: '/system/user/profile/update', data }) return request.put({ url: '/system/user/profile/update', data })
} }
// 用户密码重置 // 用户密码重置
export const updateUserPwdApi = (oldPassword: string, newPassword: string) => { export const updateUserPassword = (oldPassword: string, newPassword: string) => {
return request.put({ return request.put({
url: '/system/user/profile/update-password', url: '/system/user/profile/update-password',
data: { data: {
@ -72,6 +72,6 @@ export const updateUserPwdApi = (oldPassword: string, newPassword: string) => {
} }
// 用户头像上传 // 用户头像上传
export const uploadAvatarApi = (data) => { export const uploadAvatar = (data) => {
return request.upload({ url: '/system/user/profile/update-avatar', data: data }) return request.upload({ url: '/system/user/profile/update-avatar', data: data })
} }

View File

@ -48,6 +48,7 @@ export default defineComponent({
? dictData.value?.cssClass ? dictData.value?.cssClass
: '' : ''
} }
disableTransitions={true}
> >
{dictData.value?.label} {dictData.value?.label}
</ElTag> </ElTag>

View File

@ -0,0 +1,32 @@
<template>
<el-alert v-if="getEnable()" type="success" show-icon>
<template #title>
<div @click="goToUrl">{{ '' + title + '文档地址' + url }}</div>
</template>
</el-alert>
</template>
<script setup lang="tsx" name="DocAlert">
import { propTypes } from '@/utils/propTypes'
const props = defineProps({
title: propTypes.string,
url: propTypes.string
})
/** 跳转 URL 链接 */
const goToUrl = () => {
window.open(props.url)
}
/** 是否开启 */
const getEnable = () => {
return import.meta.env.VITE_APP_TENANT_ENABLE === 'true'
}
</script>
<style scoped>
.el-alert--success.is-light {
border: 1px solid green;
margin-bottom: 10px;
cursor: pointer;
}
</style>

View File

@ -64,7 +64,7 @@
* */ * */
import { resetSize } from './../utils/util' import { resetSize } from './../utils/util'
import { aesEncrypt } from './../utils/ase' import { aesEncrypt } from './../utils/ase'
import { getCodeApi, reqCheckApi } from '@/api/login' import { getCode, reqCheck } from '@/api/login'
import { onMounted, reactive, ref, nextTick, toRefs, getCurrentInstance } from 'vue' import { onMounted, reactive, ref, nextTick, toRefs, getCurrentInstance } from 'vue'
const props = defineProps({ const props = defineProps({
@ -170,7 +170,7 @@ const canvasClick = (e) => {
: JSON.stringify(checkPosArr), : JSON.stringify(checkPosArr),
token: backToken.value token: backToken.value
} }
reqCheckApi(data).then((res) => { reqCheck(data).then((res) => {
if (res.repCode == '0000') { if (res.repCode == '0000') {
barAreaColor.value = '#4cae4c' barAreaColor.value = '#4cae4c'
barAreaBorderColor.value = '#5cb85c' barAreaBorderColor.value = '#5cb85c'
@ -227,7 +227,7 @@ const getPictrue = async () => {
let data = { let data = {
captchaType: captchaType.value captchaType: captchaType.value
} }
const res = await getCodeApi(data) const res = await getCode(data)
if (res.repCode == '0000') { if (res.repCode == '0000') {
pointBackImgBase.value = res.repData.originalImageBase64 pointBackImgBase.value = res.repData.originalImageBase64
backToken.value = res.repData.token backToken.value = res.repData.token

View File

@ -78,7 +78,7 @@
* */ * */
import { aesEncrypt } from './../utils/ase' import { aesEncrypt } from './../utils/ase'
import { resetSize } from './../utils/util' import { resetSize } from './../utils/util'
import { getCodeApi, reqCheckApi } from '@/api/login' import { getCode, reqCheck } from '@/api/login'
const props = defineProps({ const props = defineProps({
captchaType: { captchaType: {
@ -286,7 +286,7 @@ const end = () => {
: JSON.stringify({ x: moveLeftDistance, y: 5.0 }), : JSON.stringify({ x: moveLeftDistance, y: 5.0 }),
token: backToken.value token: backToken.value
} }
reqCheckApi(data).then((res) => { reqCheck(data).then((res) => {
if (res.repCode == '0000') { if (res.repCode == '0000') {
moveBlockBackgroundColor.value = '#5cb85c' moveBlockBackgroundColor.value = '#5cb85c'
leftBarBorderColor.value = '#5cb85c' leftBarBorderColor.value = '#5cb85c'
@ -363,7 +363,7 @@ const getPictrue = async () => {
let data = { let data = {
captchaType: captchaType.value captchaType: captchaType.value
} }
const res = await getCodeApi(data) const res = await getCode(data)
if (res.repCode == '0000') { if (res.repCode == '0000') {
backImgBase.value = res.repData.originalImageBase64 backImgBase.value = res.repData.originalImageBase64
blockBackImgBase.value = res.repData.jigsawImageBase64 blockBackImgBase.value = res.repData.jigsawImageBase64

View File

@ -9,14 +9,14 @@ const list = ref<any[]>([]) // 消息列表
// //
const getList = async () => { const getList = async () => {
list.value = await NotifyMessageApi.getUnreadNotifyMessageListApi() list.value = await NotifyMessageApi.getUnreadNotifyMessageList()
// unreadCount 0 // unreadCount 0
unreadCount.value = 0 unreadCount.value = 0
} }
// //
const getUnreadCount = async () => { const getUnreadCount = async () => {
NotifyMessageApi.getUnreadNotifyMessageCountApi().then((data) => { NotifyMessageApi.getUnreadNotifyMessageCount().then((data) => {
unreadCount.value = data unreadCount.value = data
}) })
} }

View File

@ -297,8 +297,7 @@ export default {
typeCreate: '字典类型新增', typeCreate: '字典类型新增',
typeUpdate: '字典类型编辑', typeUpdate: '字典类型编辑',
dataCreate: '字典数据新增', dataCreate: '字典数据新增',
dataUpdate: '字典数据编辑', dataUpdate: '字典数据编辑'
fileUpload: '上传文件'
}, },
dialog: { dialog: {
dialog: '弹窗', dialog: '弹窗',

View File

@ -115,7 +115,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
children: [ children: [
{ {
path: 'type/data/:dictType', path: 'type/data/:dictType',
component: () => import('@/views/system/dict/data.vue'), component: () => import('@/views/system/dict/data/index.vue'),
name: 'data', name: 'data',
meta: { meta: {
title: '字典数据', title: '字典数据',
@ -123,7 +123,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
hidden: true, hidden: true,
canTo: true, canTo: true,
icon: '', icon: '',
activeMenu: 'system/dict/data' activeMenu: '/system/dict'
} }
} }
] ]

View File

@ -3,7 +3,7 @@ import { store } from '../index'
import { cloneDeep } from 'lodash-es' import { cloneDeep } from 'lodash-es'
import remainingRouter from '@/router/modules/remaining' import remainingRouter from '@/router/modules/remaining'
import { generateRoute, flatMultiLevelRoutes } from '@/utils/routerHelper' import { generateRoute, flatMultiLevelRoutes } from '@/utils/routerHelper'
import { getAsyncRoutesApi } from '@/api/login' import { getAsyncRoutes } from '@/api/login'
import { CACHE_KEY, useCache } from '@/hooks/web/useCache' import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
const { wsCache } = useCache() const { wsCache } = useCache()
@ -38,7 +38,7 @@ export const usePermissionStore = defineStore('permission', {
if (wsCache.get(CACHE_KEY.ROLE_ROUTERS)) { if (wsCache.get(CACHE_KEY.ROLE_ROUTERS)) {
res = wsCache.get(CACHE_KEY.ROLE_ROUTERS) as AppCustomRouteRecordRaw[] res = wsCache.get(CACHE_KEY.ROLE_ROUTERS) as AppCustomRouteRecordRaw[]
} else { } else {
res = await getAsyncRoutesApi() res = await getAsyncRoutes()
wsCache.set(CACHE_KEY.ROLE_ROUTERS, res) wsCache.set(CACHE_KEY.ROLE_ROUTERS, res)
} }
const routerMap: AppRouteRecordRaw[] = generateRoute(res as AppCustomRouteRecordRaw[]) const routerMap: AppRouteRecordRaw[] = generateRoute(res as AppCustomRouteRecordRaw[])

View File

@ -2,7 +2,7 @@ import { store } from '../index'
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
import { getAccessToken, removeToken } from '@/utils/auth' import { getAccessToken, removeToken } from '@/utils/auth'
import { CACHE_KEY, useCache } from '@/hooks/web/useCache' import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
import { getInfoApi, loginOutApi } from '@/api/login' import { getInfo, loginOut } from '@/api/login'
const { wsCache } = useCache() const { wsCache } = useCache()
@ -51,7 +51,7 @@ export const useUserStore = defineStore('admin-user', {
} }
let userInfo = wsCache.get(CACHE_KEY.USER) let userInfo = wsCache.get(CACHE_KEY.USER)
if (!userInfo) { if (!userInfo) {
userInfo = await getInfoApi() userInfo = await getInfo()
} }
this.permissions = userInfo.permissions this.permissions = userInfo.permissions
this.roles = userInfo.roles this.roles = userInfo.roles
@ -60,7 +60,7 @@ export const useUserStore = defineStore('admin-user', {
wsCache.set(CACHE_KEY.USER, userInfo) wsCache.set(CACHE_KEY.USER, userInfo)
}, },
async loginOut() { async loginOut() {
await loginOutApi() await loginOut()
removeToken() removeToken()
wsCache.clear() wsCache.clear()
this.resetState() this.resetState()

View File

@ -21,8 +21,10 @@ declare module '@vue/runtime-core' {
Descriptions: typeof import('./../components/Descriptions/src/Descriptions.vue')['default'] Descriptions: typeof import('./../components/Descriptions/src/Descriptions.vue')['default']
Dialog: typeof import('./../components/Dialog/src/Dialog.vue')['default'] Dialog: typeof import('./../components/Dialog/src/Dialog.vue')['default']
DictTag: typeof import('./../components/DictTag/src/DictTag.vue')['default'] DictTag: typeof import('./../components/DictTag/src/DictTag.vue')['default']
DocAlert: typeof import('./../components/DocAlert/index.vue')['default']
Echart: typeof import('./../components/Echart/src/Echart.vue')['default'] Echart: typeof import('./../components/Echart/src/Echart.vue')['default']
Editor: typeof import('./../components/Editor/src/Editor.vue')['default'] Editor: typeof import('./../components/Editor/src/Editor.vue')['default']
ElAlert: typeof import('element-plus/es')['ElAlert']
ElAutoResizer: typeof import('element-plus/es')['ElAutoResizer'] ElAutoResizer: typeof import('element-plus/es')['ElAutoResizer']
ElAvatar: typeof import('element-plus/es')['ElAvatar'] ElAvatar: typeof import('element-plus/es')['ElAvatar']
ElBadge: typeof import('element-plus/es')['ElBadge'] ElBadge: typeof import('element-plus/es')['ElBadge']

View File

@ -195,7 +195,7 @@ const getCode = async () => {
//ID //ID
const getTenantId = async () => { const getTenantId = async () => {
if (loginData.tenantEnable === 'true') { if (loginData.tenantEnable === 'true') {
const res = await LoginApi.getTenantIdByNameApi(loginData.loginForm.tenantName) const res = await LoginApi.getTenantIdByName(loginData.loginForm.tenantName)
authUtil.setTenantId(res) authUtil.setTenantId(res)
} }
} }
@ -222,7 +222,7 @@ const handleLogin = async (params) => {
return return
} }
loginData.loginForm.captchaVerification = params.captchaVerification loginData.loginForm.captchaVerification = params.captchaVerification
const res = await LoginApi.loginApi(loginData.loginForm) const res = await LoginApi.login(loginData.loginForm)
if (!res) { if (!res) {
return return
} }
@ -259,7 +259,7 @@ const doSocialLogin = async (type: number) => {
loginLoading.value = true loginLoading.value = true
if (loginData.tenantEnable === 'true') { if (loginData.tenantEnable === 'true') {
await message.prompt('请输入租户名称', t('common.reminder')).then(async ({ value }) => { await message.prompt('请输入租户名称', t('common.reminder')).then(async ({ value }) => {
const res = await LoginApi.getTenantIdByNameApi(value) const res = await LoginApi.getTenantIdByName(value)
authUtil.setTenantId(res) authUtil.setTenantId(res)
}) })
} }
@ -267,7 +267,7 @@ const doSocialLogin = async (type: number) => {
const redirectUri = const redirectUri =
location.origin + '/social-login?type=' + type + '&redirect=' + (redirect.value || '/') location.origin + '/social-login?type=' + type + '&redirect=' + (redirect.value || '/')
// //
const res = await LoginApi.socialAuthRedirectApi(type, encodeURIComponent(redirectUri)) const res = await LoginApi.socialAuthRedirect(type, encodeURIComponent(redirectUri))
window.location.href = res window.location.href = res
} }
} }

View File

@ -98,7 +98,7 @@ import { useIcon } from '@/hooks/web/useIcon'
import { setTenantId, setToken } from '@/utils/auth' import { setTenantId, setToken } from '@/utils/auth'
import { usePermissionStore } from '@/store/modules/permission' import { usePermissionStore } from '@/store/modules/permission'
import { getTenantIdByNameApi, sendSmsCodeApi, smsLoginApi } from '@/api/login' import { getTenantIdByName, sendSmsCode, smsLogin } from '@/api/login'
import LoginFormTitle from './LoginFormTitle.vue' import LoginFormTitle from './LoginFormTitle.vue'
import { useLoginState, LoginStateEnum, useFormValid } from './useLogin' import { useLoginState, LoginStateEnum, useFormValid } from './useLogin'
@ -149,7 +149,7 @@ const redirect = ref<string>('')
const getSmsCode = async () => { const getSmsCode = async () => {
await getTenantId() await getTenantId()
smsVO.smsCode.mobile = loginData.loginForm.mobileNumber smsVO.smsCode.mobile = loginData.loginForm.mobileNumber
await sendSmsCodeApi(smsVO.smsCode).then(async () => { await sendSmsCode(smsVO.smsCode).then(async () => {
message.success(t('login.SmsSendMsg')) message.success(t('login.SmsSendMsg'))
// //
mobileCodeTimer.value = 60 mobileCodeTimer.value = 60
@ -173,7 +173,7 @@ watch(
// ID // ID
const getTenantId = async () => { const getTenantId = async () => {
if (loginData.tenantEnable === 'true') { if (loginData.tenantEnable === 'true') {
const res = await getTenantIdByNameApi(loginData.loginForm.tenantName) const res = await getTenantIdByName(loginData.loginForm.tenantName)
setTenantId(res) setTenantId(res)
} }
} }
@ -185,7 +185,7 @@ const signIn = async () => {
loginLoading.value = true loginLoading.value = true
smsVO.loginSms.mobile = loginData.loginForm.mobileNumber smsVO.loginSms.mobile = loginData.loginForm.mobileNumber
smsVO.loginSms.code = loginData.loginForm.code smsVO.loginSms.code = loginData.loginForm.code
await smsLoginApi(smsVO.loginSms) await smsLogin(smsVO.loginSms)
.then(async (res) => { .then(async (res) => {
setToken(res?.token) setToken(res?.token)
if (!redirect.value) { if (!redirect.value) {

View File

@ -17,8 +17,8 @@ import { ElMessage } from 'element-plus'
import { FormSchema } from '@/types/form' import { FormSchema } from '@/types/form'
import type { FormExpose } from '@/components/Form' import type { FormExpose } from '@/components/Form'
import { import {
getUserProfileApi, getUserProfile,
updateUserProfileApi, updateUserProfile,
UserProfileUpdateReqVO UserProfileUpdateReqVO
} from '@/api/system/user/profile' } from '@/api/system/user/profile'
@ -73,14 +73,14 @@ const submit = () => {
elForm.validate(async (valid) => { elForm.validate(async (valid) => {
if (valid) { if (valid) {
const data = unref(formRef)?.formModel as UserProfileUpdateReqVO const data = unref(formRef)?.formModel as UserProfileUpdateReqVO
await updateUserProfileApi(data) await updateUserProfile(data)
ElMessage.success(t('common.updateSuccess')) ElMessage.success(t('common.updateSuccess'))
await init() await init()
} }
}) })
} }
const init = async () => { const init = async () => {
const res = await getUserProfileApi() const res = await getUserProfile()
unref(formRef)?.setValues(res) unref(formRef)?.setValues(res)
} }
onMounted(async () => { onMounted(async () => {

View File

@ -43,12 +43,12 @@
import { formatDate } from '@/utils/formatTime' import { formatDate } from '@/utils/formatTime'
import UserAvatar from './UserAvatar.vue' import UserAvatar from './UserAvatar.vue'
import { getUserProfileApi, ProfileVO } from '@/api/system/user/profile' import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
const { t } = useI18n() const { t } = useI18n()
const userInfo = ref<ProfileVO>() const userInfo = ref<ProfileVO>()
const getUserInfo = async () => { const getUserInfo = async () => {
const users = await getUserProfileApi() const users = await getUserProfile()
userInfo.value = users userInfo.value = users
} }
onMounted(async () => { onMounted(async () => {

View File

@ -19,7 +19,7 @@
import type { FormRules, FormInstance } from 'element-plus' import type { FormRules, FormInstance } from 'element-plus'
import { InputPassword } from '@/components/InputPassword' import { InputPassword } from '@/components/InputPassword'
import { updateUserPwdApi } from '@/api/system/user/profile' import { updateUserPassword } from '@/api/system/user/profile'
const { t } = useI18n() const { t } = useI18n()
const message = useMessage() const message = useMessage()
@ -56,7 +56,7 @@ const submit = (formEl: FormInstance | undefined) => {
if (!formEl) return if (!formEl) return
formEl.validate(async (valid) => { formEl.validate(async (valid) => {
if (valid) { if (valid) {
await updateUserPwdApi(password.oldPassword, password.newPassword) await updateUserPassword(password.oldPassword, password.newPassword)
message.success(t('common.updateSuccess')) message.success(t('common.updateSuccess'))
} }
}) })

View File

@ -12,7 +12,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { propTypes } from '@/utils/propTypes' import { propTypes } from '@/utils/propTypes'
import { uploadAvatarApi } from '@/api/system/user/profile' import { uploadAvatar } from '@/api/system/user/profile'
const props = defineProps({ const props = defineProps({
img: propTypes.string.def('') img: propTypes.string.def('')
}) })
@ -22,7 +22,7 @@ const avatar = computed(() => {
const cropperRef = ref() const cropperRef = ref()
const handelUpload = async ({ data }) => { const handelUpload = async ({ data }) => {
await uploadAvatarApi({ avatarFile: data }) await uploadAvatar({ avatarFile: data })
cropperRef.value.close() cropperRef.value.close()
} }
</script> </script>

View File

@ -23,7 +23,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { SystemUserSocialTypeEnum } from '@/utils/constants' import { SystemUserSocialTypeEnum } from '@/utils/constants'
import { getUserProfileApi, ProfileVO } from '@/api/system/user/profile' import { getUserProfile, ProfileVO } from '@/api/system/user/profile'
import { socialAuthRedirect, socialUnbind } from '@/api/system/user/socialUser' import { socialAuthRedirect, socialUnbind } from '@/api/system/user/socialUser'
const message = useMessage() const message = useMessage()
@ -31,7 +31,7 @@ const socialUsers = ref<any[]>([])
const userInfo = ref<ProfileVO>() const userInfo = ref<ProfileVO>()
const initSocial = async () => { const initSocial = async () => {
const res = await getUserProfileApi() const res = await getUserProfile()
userInfo.value = res userInfo.value = res
for (const i in SystemUserSocialTypeEnum) { for (const i in SystemUserSocialTypeEnum) {
const socialUser = { ...SystemUserSocialTypeEnum[i] } const socialUser = { ...SystemUserSocialTypeEnum[i] }

View File

@ -1,5 +1,5 @@
<template> <template>
<content-wrap> <ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form
class="-mb-15px" class="-mb-15px"
@ -25,10 +25,10 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" /> <el-table-column label="编号" align="center" prop="id" />
<el-table-column label="表单名" align="center" prop="name" /> <el-table-column label="表单名" align="center" prop="name" />
@ -75,7 +75,7 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 表单详情的弹窗 --> <!-- 表单详情的弹窗 -->
<Dialog title="表单详情" v-model="detailVisible" width="800"> <Dialog title="表单详情" v-model="detailVisible" width="800">

View File

@ -44,7 +44,7 @@ const submitForm = async () => {
data.startTime = Date.parse(new Date(data.startTime).toString()).toString() data.startTime = Date.parse(new Date(data.startTime).toString()).toString()
data.endTime = Date.parse(new Date(data.endTime).toString()).toString() data.endTime = Date.parse(new Date(data.endTime).toString()).toString()
// //
await LeaveApi.createLeaveApi(data) await LeaveApi.createLeave(data)
message.success(t('common.createSuccess')) message.success(t('common.createSuccess'))
// //
push('/bpm/oa/leave') push('/bpm/oa/leave')

View File

@ -35,7 +35,7 @@ onMounted(() => {
return return
} }
// //
LeaveApi.getLeaveApi(id.value).then((data) => { LeaveApi.getLeave(id.value).then((data) => {
formData.value = data formData.value = data
}) })
}) })

View File

@ -37,7 +37,7 @@ const { push } = useRouter() // 路由
const [registerTable, { reload }] = useXTable({ const [registerTable, { reload }] = useXTable({
allSchemas: allSchemas, allSchemas: allSchemas,
getListApi: LeaveApi.getLeavePageApi getListApi: LeaveApi.getLeavePage
}) })
// //
@ -55,7 +55,7 @@ const cancelLeave = (row) => {
inputPattern: /^[\s\S]*.*\S[\s\S]*$/, // inputPattern: /^[\s\S]*.*\S[\s\S]*$/, //
inputErrorMessage: '取消原因不能为空' inputErrorMessage: '取消原因不能为空'
}).then(async ({ value }) => { }).then(async ({ value }) => {
await ProcessInstanceApi.cancelProcessInstanceApi(row.id, value) await ProcessInstanceApi.cancelProcessInstance(row.id, value)
message.success('取消成功') message.success('取消成功')
reload() reload()
}) })

View File

@ -111,7 +111,7 @@ const submitForm = async (formData) => {
// //
fApi.value.btn.loading(true) fApi.value.btn.loading(true)
try { try {
await ProcessInstanceApi.createProcessInstanceApi({ await ProcessInstanceApi.createProcessInstance({
processDefinitionId: selectProcessInstance.value.id, processDefinitionId: selectProcessInstance.value.id,
variables: formData variables: formData
}) })

View File

@ -189,7 +189,7 @@ const getDetail = () => {
const getProcessInstance = async () => { const getProcessInstance = async () => {
try { try {
processInstanceLoading.value = true processInstanceLoading.value = true
const data = await ProcessInstanceApi.getProcessInstanceApi(id) const data = await ProcessInstanceApi.getProcessInstance(id)
if (!data) { if (!data) {
message.error('查询不到流程信息!') message.error('查询不到流程信息!')
return return

View File

@ -57,7 +57,7 @@ const { t } = useI18n() // 国际化
// ========== ========== // ========== ==========
const [registerTable, { reload }] = useXTable({ const [registerTable, { reload }] = useXTable({
allSchemas: allSchemas, allSchemas: allSchemas,
getListApi: ProcessInstanceApi.getMyProcessInstancePageApi getListApi: ProcessInstanceApi.getMyProcessInstancePage
}) })
/** 发起流程操作 **/ /** 发起流程操作 **/
@ -85,7 +85,7 @@ const handleCancel = (row) => {
inputPattern: /^[\s\S]*.*\S[\s\S]*$/, // inputPattern: /^[\s\S]*.*\S[\s\S]*$/, //
inputErrorMessage: '取消原因不能为空' inputErrorMessage: '取消原因不能为空'
}).then(async ({ value }) => { }).then(async ({ value }) => {
await ProcessInstanceApi.cancelProcessInstanceApi(row.id, value) await ProcessInstanceApi.cancelProcessInstance(row.id, value)
message.success('取消成功') message.success('取消成功')
reload() reload()
}) })

View File

@ -1,5 +1,7 @@
<template> <template>
<content-wrap> <doc-alert title="系统日志" url="https://doc.iocoder.cn/system-log/" />
<ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form
class="-mb-15px" class="-mb-15px"
@ -25,10 +27,10 @@
class="!w-240px" class="!w-240px"
> >
<el-option <el-option
v-for="dict in getDictOptions(DICT_TYPE.USER_TYPE)" v-for="dict in getIntDictOptions(DICT_TYPE.USER_TYPE)"
:key="parseInt(dict.value)" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="parseInt(dict.value)" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -84,10 +86,10 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column label="日志编号" align="center" prop="id" /> <el-table-column label="日志编号" align="center" prop="id" />
<el-table-column label="用户编号" align="center" prop="userId" /> <el-table-column label="用户编号" align="center" prop="userId" />
@ -105,15 +107,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="执行时长" align="center" prop="duration" width="180"> <el-table-column label="执行时长" align="center" prop="duration" width="180">
<template #default="scope"> <template #default="scope"> {{ scope.row.duration }} ms </template>
<span>{{ scope.row.duration }} ms</span>
</template>
</el-table-column> </el-table-column>
<el-table-column label="操作结果" align="center" prop="status"> <el-table-column label="操作结果" align="center" prop="status">
<template #default="scope"> <template #default="scope">
<span>{{ {{ scope.row.resultCode === 0 ? '成功' : '失败(' + scope.row.resultMsg + ')' }}
scope.row.resultCode === 0 ? '成功' : '失败(' + scope.row.resultMsg + ')'
}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center"> <el-table-column label="操作" align="center">
@ -136,19 +134,17 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 表单弹窗详情 --> <!-- 表单弹窗详情 -->
<ApiAccessLogDetail ref="detailRef" /> <ApiAccessLogDetail ref="detailRef" />
</template> </template>
<script setup lang="ts" name="ApiAccessLog"> <script setup lang="ts" name="ApiAccessLog">
import { DICT_TYPE, getDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import download from '@/utils/download' import download from '@/utils/download'
import { formatDate } from '@/utils/formatTime' import { formatDate } from '@/utils/formatTime'
import * as ApiAccessLogApi from '@/api/infra/apiAccessLog' import * as ApiAccessLogApi from '@/api/infra/apiAccessLog'
import ApiAccessLogDetail from './ApiAccessLogDetail.vue' import ApiAccessLogDetail from './ApiAccessLogDetail.vue'
const message = useMessage() // const message = useMessage() //
const loading = ref(true) // const loading = ref(true) //

View File

@ -1,4 +1,6 @@
<template> <template>
<doc-alert title="系统日志" url="https://doc.iocoder.cn/system-log/" />
<ContentWrap> <ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form

View File

@ -1,5 +1,5 @@
<template> <template>
<content-wrap v-loading="formLoading"> <ContentWrap v-loading="formLoading">
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane label="基本信息" name="basicInfo"> <el-tab-pane label="基本信息" name="basicInfo">
<basic-info-form ref="basicInfoRef" :table="formData.table" /> <basic-info-form ref="basicInfoRef" :table="formData.table" />
@ -17,7 +17,7 @@
<el-button @click="close">返回</el-button> <el-button @click="close">返回</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { useTagsViewStore } from '@/store/modules/tagsView' import { useTagsViewStore } from '@/store/modules/tagsView'

View File

@ -1,6 +1,9 @@
<template> <template>
<doc-alert title="代码生成" url="https://doc.iocoder.cn/new-feature/" />
<doc-alert title="单元测试" url="https://doc.iocoder.cn/unit-test/" />
<!-- 搜索 --> <!-- 搜索 -->
<content-wrap> <ContentWrap>
<el-form <el-form
class="-mb-15px" class="-mb-15px"
:model="queryParams" :model="queryParams"
@ -45,10 +48,10 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column label="数据源" align="center"> <el-table-column label="数据源" align="center">
<template #default="scope"> <template #default="scope">
@ -132,7 +135,7 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 弹窗导入表 --> <!-- 弹窗导入表 -->
<ImportTable ref="importRef" success="getList" /> <ImportTable ref="importRef" success="getList" />

View File

@ -70,7 +70,7 @@ const formRules = reactive({
const formRef = ref() // Ref const formRef = ref() // Ref
/** 打开弹窗 */ /** 打开弹窗 */
const openModal = async (type: string, id?: number) => { const open = async (type: string, id?: number) => {
dialogVisible.value = true dialogVisible.value = true
dialogTitle.value = t('action.' + type) dialogTitle.value = t('action.' + type)
formType.value = type formType.value = type
@ -85,7 +85,7 @@ const openModal = async (type: string, id?: number) => {
} }
} }
} }
defineExpose({ openModal }) // openModal defineExpose({ open }) // open
/** 提交表单 */ /** 提交表单 */
const emit = defineEmits(['success']) // success const emit = defineEmits(['success']) // success

View File

@ -1,6 +1,8 @@
<template> <template>
<doc-alert title="配置中心" url="https://doc.iocoder.cn/config-center/" />
<!-- 搜索 --> <!-- 搜索 -->
<content-wrap> <ContentWrap>
<el-form <el-form
class="-mb-15px" class="-mb-15px"
:model="queryParams" :model="queryParams"
@ -34,10 +36,10 @@
class="!w-240px" class="!w-240px"
> >
<el-option <el-option
v-for="dict in getDictOptions(DICT_TYPE.INFRA_CONFIG_TYPE)" v-for="dict in getIntDictOptions(DICT_TYPE.INFRA_CONFIG_TYPE)"
:key="parseInt(dict.value)" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="parseInt(dict.value)" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -58,7 +60,7 @@
<el-button <el-button
type="primary" type="primary"
plain plain
@click="openModal('create')" @click="openForm('create')"
v-hasPermi="['infra:config:create']" v-hasPermi="['infra:config:create']"
> >
<Icon icon="ep:plus" class="mr-5px" /> 新增 <Icon icon="ep:plus" class="mr-5px" /> 新增
@ -74,10 +76,10 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column label="参数主键" align="center" prop="id" /> <el-table-column label="参数主键" align="center" prop="id" />
<el-table-column label="参数分类" align="center" prop="category" /> <el-table-column label="参数分类" align="center" prop="category" />
@ -107,7 +109,7 @@
<el-button <el-button
link link
type="primary" type="primary"
@click="openModal('update', scope.row.id)" @click="openForm('update', scope.row.id)"
v-hasPermi="['infra:config:update']" v-hasPermi="['infra:config:update']"
> >
编辑 编辑
@ -130,17 +132,17 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<config-form ref="modalRef" @success="getList" /> <ConfigForm ref="formRef" @success="getList" />
</template> </template>
<script setup lang="ts" name="Config"> <script setup lang="ts" name="Config">
import { DICT_TYPE, getDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download' import download from '@/utils/download'
import * as ConfigApi from '@/api/infra/config' import * as ConfigApi from '@/api/infra/config'
import ConfigForm from './form.vue' import ConfigForm from './ConfigForm.vue'
const message = useMessage() // const message = useMessage() //
const { t } = useI18n() // const { t } = useI18n() //
@ -183,9 +185,9 @@ const resetQuery = () => {
} }
/** 添加/修改操作 */ /** 添加/修改操作 */
const modalRef = ref() const formRef = ref()
const openModal = (type: string, id?: number) => { const openForm = (type: string, id?: number) => {
modalRef.value.openModal(type, id) formRef.value.open(type, id)
} }
/** 删除按钮操作 */ /** 删除按钮操作 */
@ -208,7 +210,7 @@ const handleExport = async () => {
await message.exportConfirm() await message.exportConfirm()
// //
exportLoading.value = true exportLoading.value = true
const data = await ConfigApi.exportConfigApi(queryParams) const data = await ConfigApi.exportConfig(queryParams)
download.excel(data, '参数配置.xls') download.excel(data, '参数配置.xls')
} catch { } catch {
} finally { } finally {

View File

@ -52,7 +52,7 @@ const formRules = reactive({
const formRef = ref() // Ref const formRef = ref() // Ref
/** 打开弹窗 */ /** 打开弹窗 */
const openModal = async (type: string, id?: number) => { const open = async (type: string, id?: number) => {
dialogVisible.value = true dialogVisible.value = true
dialogTitle.value = t('action.' + type) dialogTitle.value = t('action.' + type)
formType.value = type formType.value = type
@ -67,7 +67,7 @@ const openModal = async (type: string, id?: number) => {
} }
} }
} }
defineExpose({ openModal }) // openModal defineExpose({ open }) // open
/** 提交表单 */ /** 提交表单 */
const emit = defineEmits(['success']) // success const emit = defineEmits(['success']) // success

View File

@ -1,23 +1,23 @@
<template> <template>
<content-wrap> <ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form class="-mb-15px" :inline="true"> <el-form class="-mb-15px" :inline="true">
<el-form-item> <el-form-item>
<el-button <el-button
type="primary" type="primary"
plain plain
@click="openModal('create')" @click="openForm('create')"
v-hasPermi="['infra:data-source-config:create']" v-hasPermi="['infra:data-source-config:create']"
> >
<Icon icon="ep:plus" class="mr-5px" /> 新增 <Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list" align="center"> <el-table v-loading="loading" :data="list">
<el-table-column label="主键编号" align="center" prop="id" /> <el-table-column label="主键编号" align="center" prop="id" />
<el-table-column label="数据源名称" align="center" prop="name" /> <el-table-column label="数据源名称" align="center" prop="name" />
<el-table-column label="数据源连接" align="center" prop="url" :show-overflow-tooltip="true" /> <el-table-column label="数据源连接" align="center" prop="url" :show-overflow-tooltip="true" />
@ -34,7 +34,7 @@
<el-button <el-button
link link
type="primary" type="primary"
@click="openModal('update', scope.row.id)" @click="openForm('update', scope.row.id)"
v-hasPermi="['infra:data-source-config:update']" v-hasPermi="['infra:data-source-config:update']"
:disabled="scope.row.id === 0" :disabled="scope.row.id === 0"
> >
@ -52,15 +52,15 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</content-wrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<data-source-config-form ref="modalRef" @success="getList" /> <DataSourceConfigForm ref="formRef" @success="getList" />
</template> </template>
<script setup lang="ts" name="DataSourceConfig"> <script setup lang="ts" name="DataSourceConfig">
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import * as DataSourceConfigApi from '@/api/infra/dataSourceConfig' import * as DataSourceConfigApi from '@/api/infra/dataSourceConfig'
import DataSourceConfigForm from './form.vue' import DataSourceConfigForm from './DataSourceConfigForm.vue'
const message = useMessage() // const message = useMessage() //
const { t } = useI18n() // const { t } = useI18n() //
@ -78,9 +78,9 @@ const getList = async () => {
} }
/** 添加/修改操作 */ /** 添加/修改操作 */
const modalRef = ref() const formRef = ref()
const openModal = (type: string, id?: number) => { const openForm = (type: string, id?: number) => {
modalRef.value.openModal(type, id) formRef.value.open(type, id)
} }
/** 删除按钮操作 */ /** 删除按钮操作 */

View File

@ -1,4 +1,6 @@
<template> <template>
<doc-alert title="数据库文档" url="https://doc.iocoder.cn/db-doc/" />
<ContentWrap title="数据库文档"> <ContentWrap title="数据库文档">
<!-- 操作工具栏 --> <!-- 操作工具栏 -->
<div class="mb-10px"> <div class="mb-10px">
@ -34,7 +36,7 @@ const src = ref('')
const loding = ref(true) const loding = ref(true)
/** 页面加载 */ /** 页面加载 */
const init = async () => { const init = async () => {
const res = await DbDocApi.exportHtmlApi() const res = await DbDocApi.exportHtml()
let blob = new Blob([res], { type: 'text/html' }) let blob = new Blob([res], { type: 'text/html' })
let blobUrl = window.URL.createObjectURL(blob) let blobUrl = window.URL.createObjectURL(blob)
src.value = blobUrl src.value = blobUrl
@ -43,15 +45,15 @@ const init = async () => {
/** 处理导出 */ /** 处理导出 */
const handleExport = async (type: string) => { const handleExport = async (type: string) => {
if (type === 'HTML') { if (type === 'HTML') {
const res = await DbDocApi.exportHtmlApi() const res = await DbDocApi.exportHtml()
download.html(res, '数据库文档.html') download.html(res, '数据库文档.html')
} }
if (type === 'Word') { if (type === 'Word') {
const res = await DbDocApi.exportWordApi() const res = await DbDocApi.exportWord()
download.word(res, '数据库文档.doc') download.word(res, '数据库文档.doc')
} }
if (type === 'Markdown') { if (type === 'Markdown') {
const res = await DbDocApi.exportMarkdownApi() const res = await DbDocApi.exportMarkdown()
download.markdown(res, '数据库文档.md') download.markdown(res, '数据库文档.md')
} }
} }

View File

@ -1,4 +1,7 @@
<template> <template>
<doc-alert title="数据库 MyBatis" url="https://doc.iocoder.cn/mybatis/" />
<doc-alert title="多数据源(读写分离)" url="https://doc.iocoder.cn/dynamic-datasource/" />
<ContentWrap> <ContentWrap>
<IFrame :src="src" /> <IFrame :src="src" />
</ContentWrap> </ContentWrap>

View File

@ -1,5 +1,5 @@
<template> <template>
<Dialog :title="dialogTitle" v-model="dialogVisible"> <Dialog title="上传文件" v-model="dialogVisible">
<el-upload <el-upload
ref="uploadRef" ref="uploadRef"
:limit="1" :limit="1"
@ -28,11 +28,9 @@
</template> </template>
</Dialog> </Dialog>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { Dialog } from '@/components/Dialog' import { Dialog } from '@/components/Dialog'
import { getAccessToken } from '@/utils/auth' import { getAccessToken } from '@/utils/auth'
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
@ -45,11 +43,10 @@ const data = ref({ path: '' })
const uploadRef = ref() const uploadRef = ref()
/** 打开弹窗 */ /** 打开弹窗 */
const openModal = async () => { const open = async () => {
dialogVisible.value = true dialogVisible.value = true
dialogTitle.value = t('action.fileUpload')
} }
defineExpose({ openModal }) // openModal defineExpose({ open }) // open
/** 提交表单 */ /** 提交表单 */
const emit = defineEmits(['success']) // success const emit = defineEmits(['success']) // success

View File

@ -1,6 +1,8 @@
<template> <template>
<doc-alert title="上传下载" url="https://doc.iocoder.cn/file/"/>
<!-- 搜索 --> <!-- 搜索 -->
<content-wrap> <ContentWrap>
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true"> <el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true">
<el-form-item label="文件路径" prop="path"> <el-form-item label="文件路径" prop="path">
<el-input <el-input
@ -31,16 +33,16 @@
<el-form-item> <el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button type="primary" @click="openModal"> <el-button type="primary" @click="openForm">
<Icon icon="ep:upload" class="mr-5px" /> 上传文件 <Icon icon="ep:upload" class="mr-5px" /> 上传文件
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list" align="center"> <el-table v-loading="loading" :data="list">
<el-table-column label="文件名" align="center" prop="name" :show-overflow-tooltip="true" /> <el-table-column label="文件名" align="center" prop="name" :show-overflow-tooltip="true" />
<el-table-column label="文件路径" align="center" prop="path" :show-overflow-tooltip="true" /> <el-table-column label="文件路径" align="center" prop="path" :show-overflow-tooltip="true" />
<el-table-column label="URL" align="center" prop="url" :show-overflow-tooltip="true" /> <el-table-column label="URL" align="center" prop="url" :show-overflow-tooltip="true" />
@ -79,16 +81,16 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<file-upload-form ref="modalRef" @success="getList" /> <FileForm ref="formRef" @success="getList" />
</template> </template>
<script setup lang="ts" name="Config"> <script setup lang="ts" name="Config">
import { fileSizeFormatter } from '@/utils' import { fileSizeFormatter } from '@/utils'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import * as FileApi from '@/api/infra/file' import * as FileApi from '@/api/infra/file'
import FileUploadForm from './form.vue' import FileUploadForm from './FileForm.vue'
const message = useMessage() // const message = useMessage() //
const { t } = useI18n() // const { t } = useI18n() //
@ -129,9 +131,9 @@ const resetQuery = () => {
} }
/** 添加/修改操作 */ /** 添加/修改操作 */
const modalRef = ref() const formRef = ref()
const openModal = () => { const openForm = () => {
modalRef.value.openModal() formRef.value.open()
} }
/** 删除按钮操作 */ /** 删除按钮操作 */

View File

@ -101,7 +101,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { DICT_TYPE, getDictOptions } from '@/utils/dict' import { DICT_TYPE, getDictOptions } from '@/utils/dict'
import * as FileConfigApi from '@/api/infra/fileConfig' import * as FileConfigApi from '@/api/infra/fileConfig'
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
@ -136,7 +135,7 @@ const formRules = reactive({
const formRef = ref() // Ref const formRef = ref() // Ref
/** 打开弹窗 */ /** 打开弹窗 */
const openModal = async (type: string, id?: number) => { const open = async (type: string, id?: number) => {
dialogVisible.value = true dialogVisible.value = true
dialogTitle.value = t('action.' + type) dialogTitle.value = t('action.' + type)
formType.value = type formType.value = type
@ -151,7 +150,7 @@ const openModal = async (type: string, id?: number) => {
} }
} }
} }
defineExpose({ openModal }) // openModal defineExpose({ open }) // open
/** 提交表单 */ /** 提交表单 */
const emit = defineEmits(['success']) // success const emit = defineEmits(['success']) // success

View File

@ -1,6 +1,8 @@
<template> <template>
<doc-alert title="上传下载" url="https://doc.iocoder.cn/file/" />
<!-- 搜索 --> <!-- 搜索 -->
<content-wrap> <ContentWrap>
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true"> <el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true">
<el-form-item label="配置名" prop="name"> <el-form-item label="配置名" prop="name">
<el-input <el-input
@ -13,10 +15,10 @@
<el-form-item label="存储器" prop="storage"> <el-form-item label="存储器" prop="storage">
<el-select v-model="queryParams.storage" placeholder="请选择存储器" clearable> <el-select v-model="queryParams.storage" placeholder="请选择存储器" clearable>
<el-option <el-option
v-for="dict in getDictOptions(DICT_TYPE.INFRA_FILE_STORAGE)" v-for="dict in getIntDictOptions(DICT_TYPE.INFRA_FILE_STORAGE)"
:key="parseInt(dict.value)" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="parseInt(dict.value)" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -36,18 +38,18 @@
<el-button <el-button
type="primary" type="primary"
plain plain
@click="openModal('create')" @click="openForm('create')"
v-hasPermi="['infra:file-config:create']" v-hasPermi="['infra:file-config:create']"
> >
<Icon icon="ep:plus" class="mr-5px" /> 新增 <Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list" align="center"> <el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" /> <el-table-column label="编号" align="center" prop="id" />
<el-table-column label="配置名" align="center" prop="name" /> <el-table-column label="配置名" align="center" prop="name" />
<el-table-column label="存储器" align="center" prop="storage"> <el-table-column label="存储器" align="center" prop="storage">
@ -73,7 +75,7 @@
<el-button <el-button
link link
type="primary" type="primary"
@click="openModal('update', scope.row.id)" @click="openForm('update', scope.row.id)"
v-hasPermi="['infra:file-config:update']" v-hasPermi="['infra:file-config:update']"
> >
编辑 编辑
@ -106,15 +108,15 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<file-config-form ref="modalRef" @success="getList" /> <FileConfigForm ref="formRef" @success="getList" />
</template> </template>
<script setup lang="ts" name="Config"> <script setup lang="ts" name="Config">
import * as FileConfigApi from '@/api/infra/fileConfig' import * as FileConfigApi from '@/api/infra/fileConfig'
import FileConfigForm from './form.vue' import FileConfigForm from './FileConfigForm.vue'
import { DICT_TYPE, getDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
const message = useMessage() // const message = useMessage() //
const { t } = useI18n() // const { t } = useI18n() //
@ -156,9 +158,9 @@ const resetQuery = () => {
} }
/** 添加/修改操作 */ /** 添加/修改操作 */
const modalRef = ref() const formRef = ref()
const openModal = (type: string, id?: number) => { const openForm = (type: string, id?: number) => {
modalRef.value.openModal(type, id) formRef.value.open(type, id)
} }
/** 删除按钮操作 */ /** 删除按钮操作 */

View File

@ -1,5 +1,9 @@
<template> <template>
<content-wrap> <doc-alert title="定时任务" url="https://doc.iocoder.cn/job/" />
<doc-alert title="异步任务" url="https://doc.iocoder.cn/async-task/" />
<doc-alert title="消息队列" url="https://doc.iocoder.cn/message-queue/" />
<ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form
class="-mb-15px" class="-mb-15px"
@ -66,10 +70,10 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column label="任务编号" align="center" prop="id" /> <el-table-column label="任务编号" align="center" prop="id" />
<el-table-column label="任务名称" align="center" prop="name" /> <el-table-column label="任务名称" align="center" prop="name" />
@ -136,7 +140,7 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<JobForm ref="formRef" @success="getList" /> <JobForm ref="formRef" @success="getList" />
@ -271,7 +275,7 @@ const handleRun = async (row: JobApi.JobVO) => {
// //
await message.confirm('确认要立即执行一次' + row.name + '?', t('common.reminder')) await message.confirm('确认要立即执行一次' + row.name + '?', t('common.reminder'))
// //
await JobApi.runJobApi(row.id) await JobApi.runJob(row.id)
message.success('执行成功') message.success('执行成功')
// //
await getList() await getList()
@ -286,7 +290,7 @@ const openDetail = (id: number) => {
/** 跳转执行日志 */ /** 跳转执行日志 */
const handleJobLog = (id: number) => { const handleJobLog = (id: number) => {
if (id) { if (id > 0) {
push('/job/job-log?id=' + id) push('/job/job-log?id=' + id)
} else { } else {
push('/job/job-log') push('/job/job-log')

View File

@ -1,5 +1,9 @@
<template> <template>
<content-wrap> <doc-alert title="定时任务" url="https://doc.iocoder.cn/job/" />
<doc-alert title="异步任务" url="https://doc.iocoder.cn/async-task/" />
<doc-alert title="消息队列" url="https://doc.iocoder.cn/message-queue/" />
<ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form
class="-mb-15px" class="-mb-15px"
@ -67,10 +71,10 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column label="日志编号" align="center" prop="id" /> <el-table-column label="日志编号" align="center" prop="id" />
<el-table-column label="任务编号" align="center" prop="jobId" /> <el-table-column label="任务编号" align="center" prop="jobId" />
@ -112,7 +116,7 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 表单弹窗查看 --> <!-- 表单弹窗查看 -->
<JobLogDetail ref="detailRef" /> <JobLogDetail ref="detailRef" />

View File

@ -1,4 +1,7 @@
<template> <template>
<doc-alert title="Redis 缓存" url="https://doc.iocoder.cn/redis-cache/" />
<doc-alert title="本地缓存" url="https://doc.iocoder.cn/local-cache/" />
<el-scrollbar height="calc(100vh - 88px - 40px - 50px)"> <el-scrollbar height="calc(100vh - 88px - 40px - 50px)">
<el-row> <el-row>
<el-col :span="24" class="card-box" shadow="hover"> <el-col :span="24" class="card-box" shadow="hover">
@ -130,18 +133,18 @@ import { DICT_TYPE } from '@/utils/dict'
import * as RedisApi from '@/api/infra/redis' import * as RedisApi from '@/api/infra/redis'
import { RedisKeyInfo, RedisMonitorInfoVO } from '@/api/infra/redis/types' import { RedisKeyInfo, RedisMonitorInfoVO } from '@/api/infra/redis/types'
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
const cache = ref<RedisMonitorInfoVO>() const cache = ref<RedisMonitorInfoVO>()
const keyListLoad = ref(true) const keyListLoad = ref(true)
const keyList = ref<RedisKeyInfo[]>([]) const keyList = ref<RedisKeyInfo[]>([])
// //
const readRedisInfo = async () => { const readRedisInfo = async () => {
const data = await RedisApi.getCacheApi() const data = await RedisApi.getCache()
cache.value = data cache.value = data
loadEchartOptions(data.commandStats) loadEchartOptions(data.commandStats)
const redisKeysInfo = await RedisApi.getKeyDefineListApi() const redisKeysInfo = await RedisApi.getKeyDefineList()
keyList.value = redisKeysInfo keyList.value = redisKeysInfo
keyListLoad.value = false // keyListLoad.value = false //
} }
@ -250,19 +253,19 @@ const cacheForm = ref<{
}) })
const openKeyTemplate = async (row: RedisKeyInfo) => { const openKeyTemplate = async (row: RedisKeyInfo) => {
keyTemplate.value = row.keyTemplate keyTemplate.value = row.keyTemplate
cacheKeys.value = await RedisApi.getKeyListApi(row.keyTemplate) cacheKeys.value = await RedisApi.getKeyList(row.keyTemplate)
dialogVisible.value = true dialogVisible.value = true
} }
const handleDeleteKey = async (row) => { const handleDeleteKey = async (row) => {
RedisApi.deleteKeyApi(row) RedisApi.deleteKey(row)
message.success(t('common.delSuccess')) message.success(t('common.delSuccess'))
} }
const handleDeleteKeys = async (row) => { const handleDeleteKeys = async (row) => {
RedisApi.deleteKeysApi(row) RedisApi.deleteKeys(row)
message.success(t('common.delSuccess')) message.success(t('common.delSuccess'))
} }
const handleKeyValue = async (row) => { const handleKeyValue = async (row) => {
const res = await RedisApi.getKeyValueApi(row) const res = await RedisApi.getKeyValue(row)
cacheForm.value = res cacheForm.value = res
} }
onBeforeMount(() => { onBeforeMount(() => {

View File

@ -1,4 +1,5 @@
<template> <template>
<doc-alert title="服务监控" url="https://doc.iocoder.cn/server-monitor/" />
<ContentWrap> <ContentWrap>
<IFrame :src="src" /> <IFrame :src="src" />
</ContentWrap> </ContentWrap>

View File

@ -1,4 +1,5 @@
<template> <template>
<doc-alert title="服务监控" url="https://doc.iocoder.cn/server-monitor/" />
<ContentWrap> <ContentWrap>
<IFrame :src="src" /> <IFrame :src="src" />
</ContentWrap> </ContentWrap>

View File

@ -1,4 +1,6 @@
<template> <template>
<doc-alert title="接口文档" url="https://doc.iocoder.cn/api-doc/" />
<ContentWrap> <ContentWrap>
<IFrame :src="src" /> <IFrame :src="src" />
</ContentWrap> </ContentWrap>

View File

@ -15,10 +15,8 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<div class="dialog-footer">
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button> <el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button> <el-button @click="dialogVisible = false"> </el-button>
</div>
</template> </template>
</Dialog> </Dialog>
</template> </template>

View File

@ -1,6 +1,8 @@
<template> <template>
<doc-alert title="公众号接入" url="https://doc.iocoder.cn/mp/account/" />
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<content-wrap> <ContentWrap>
<el-form <el-form
class="-mb-15px" class="-mb-15px"
:model="queryParams" :model="queryParams"
@ -25,10 +27,10 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column label="名称" align="center" prop="name" /> <el-table-column label="名称" align="center" prop="name" />
<el-table-column label="微信号" align="center" prop="account" width="180" /> <el-table-column label="微信号" align="center" prop="account" width="180" />
@ -86,15 +88,14 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 分页组件 --> <!-- 分页 -->
<pagination <Pagination
v-show="total > 0"
:total="total" :total="total"
v-model:page="queryParams.pageNo" v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 对话框(添加 / 修改) --> <!-- 对话框(添加 / 修改) -->
<AccountForm ref="formRef" @success="getList" /> <AccountForm ref="formRef" @success="getList" />
@ -102,7 +103,6 @@
<script setup lang="ts" name="MpAccount"> <script setup lang="ts" name="MpAccount">
import * as AccountApi from '@/api/mp/account' import * as AccountApi from '@/api/mp/account'
import AccountForm from './AccountForm.vue' import AccountForm from './AccountForm.vue'
const message = useMessage() // const message = useMessage() //
const { t } = useI18n() // const { t } = useI18n() //

View File

@ -1,6 +1,8 @@
<template> <template>
<doc-alert title="公众号图文" url="https://doc.iocoder.cn/mp/article/" />
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<content-wrap> <ContentWrap>
<el-form <el-form
class="-mb-15px" class="-mb-15px"
:model="queryParams" :model="queryParams"
@ -23,10 +25,10 @@
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<div class="waterfall" v-loading="loading"> <div class="waterfall" v-loading="loading">
<div <div
class="waterfall-item" class="waterfall-item"
@ -54,7 +56,7 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
</template> </template>
<script setup lang="ts" name="freePublish"> <script setup lang="ts" name="freePublish">

View File

@ -1,6 +1,6 @@
<template> <template>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<content-wrap> <ContentWrap>
<el-form class="-mb-15px" ref="queryForm" :inline="true" label-width="68px"> <el-form class="-mb-15px" ref="queryForm" :inline="true" label-width="68px">
<el-form-item label="公众号" prop="accountId"> <el-form-item label="公众号" prop="accountId">
<el-select v-model="accountId" @change="getSummary" class="!w-240px"> <el-select v-model="accountId" @change="getSummary" class="!w-240px">
@ -24,10 +24,10 @@
/> />
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 图表 --> <!-- 图表 -->
<content-wrap> <ContentWrap>
<el-row> <el-row>
<el-col :span="12" class="card-box"> <el-col :span="12" class="card-box">
<el-card> <el-card>
@ -70,7 +70,7 @@
</el-card> </el-card>
</el-col> </el-col>
</el-row> </el-row>
</content-wrap> </ContentWrap>
</template> </template>
<script setup lang="ts" name="MpStatistics"> <script setup lang="ts" name="MpStatistics">

View File

@ -1,4 +1,6 @@
<template> <template>
<doc-alert title="公众号标签" url="https://doc.iocoder.cn/mp/tag/" />
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<ContentWrap> <ContentWrap>
<el-form <el-form

View File

@ -86,9 +86,9 @@ const message = useMessage() // 消息弹窗
// //
const [registerTable, { reload, deleteData, exportList }] = useXTable({ const [registerTable, { reload, deleteData, exportList }] = useXTable({
allSchemas: allSchemas, allSchemas: allSchemas,
getListApi: AppApi.getAppPageApi, getListApi: AppApi.getAppPage,
deleteApi: AppApi.deleteAppApi, deleteApi: AppApi.deleteApp,
exportListApi: AppApi.exportAppApi exportListApi: AppApi.exportApp
}) })
// ========== CRUD ========== // ========== CRUD ==========
@ -115,14 +115,14 @@ const handleCreate = () => {
const handleUpdate = async (rowId: number) => { const handleUpdate = async (rowId: number) => {
setDialogTile('update') setDialogTile('update')
// //
const res = await AppApi.getAppApi(rowId) const res = await AppApi.getApp(rowId)
unref(formRef)?.setValues(res) unref(formRef)?.setValues(res)
} }
// //
const handleDetail = async (rowId: number) => { const handleDetail = async (rowId: number) => {
setDialogTile('detail') setDialogTile('detail')
const res = await AppApi.getAppApi(rowId) const res = await AppApi.getApp(rowId)
detailData.value = res detailData.value = res
} }
@ -137,10 +137,10 @@ const submitForm = async () => {
try { try {
const data = unref(formRef)?.formModel as AppApi.AppVO const data = unref(formRef)?.formModel as AppApi.AppVO
if (actionType.value === 'create') { if (actionType.value === 'create') {
await AppApi.createAppApi(data) await AppApi.createApp(data)
message.success(t('common.createSuccess')) message.success(t('common.createSuccess'))
} else { } else {
await AppApi.updateAppApi(data) await AppApi.updateApp(data)
message.success(t('common.updateSuccess')) message.success(t('common.updateSuccess'))
} }
dialogVisible.value = false dialogVisible.value = false

View File

@ -1,5 +1,5 @@
<template> <template>
<content-wrap> <ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form
class="-mb-15px" class="-mb-15px"
@ -77,10 +77,10 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column label="商户编号" align="center" prop="id" /> <el-table-column label="商户编号" align="center" prop="id" />
<el-table-column label="商户号" align="center" prop="no" /> <el-table-column label="商户号" align="center" prop="no" />
@ -132,7 +132,7 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<MerchantForm ref="formRef" @success="getList" /> <MerchantForm ref="formRef" @success="getList" />

View File

@ -49,8 +49,8 @@ const { t } = useI18n() // 国际化
// //
const [registerTable, { exportList }] = useXTable({ const [registerTable, { exportList }] = useXTable({
allSchemas: allSchemas, allSchemas: allSchemas,
getListApi: OrderApi.getOrderPageApi, getListApi: OrderApi.getOrderPage,
exportListApi: OrderApi.exportOrderApi exportListApi: OrderApi.exportOrder
}) })
// ========== CRUD ========== // ========== CRUD ==========
const actionLoading = ref(false) // const actionLoading = ref(false) //
@ -73,7 +73,7 @@ const handleCreate = () => {
// //
const handleDetail = async (rowId: number) => { const handleDetail = async (rowId: number) => {
setDialogTile('detail') setDialogTile('detail')
const res = await OrderApi.getOrderApi(rowId) const res = await OrderApi.getOrder(rowId)
detailData.value = res detailData.value = res
} }
</script> </script>

View File

@ -42,8 +42,8 @@ const { t } = useI18n() // 国际化
// //
const [registerTable, { exportList }] = useXTable({ const [registerTable, { exportList }] = useXTable({
allSchemas: allSchemas, allSchemas: allSchemas,
getListApi: RefundApi.getRefundPageApi, getListApi: RefundApi.getRefundPage,
exportListApi: RefundApi.exportRefundApi exportListApi: RefundApi.exportRefund
}) })
// ========== CRUD ========== // ========== CRUD ==========
@ -53,7 +53,7 @@ const detailData = ref() // 详情 Ref
// //
const handleDetail = async (rowId: number) => { const handleDetail = async (rowId: number) => {
// //
detailData.value = RefundApi.getRefundApi(rowId) detailData.value = RefundApi.getRefund(rowId)
dialogVisible.value = true dialogVisible.value = true
} }
</script> </script>

View File

@ -36,11 +36,11 @@ const formRules = reactive({
const formRef = ref() // Ref const formRef = ref() // Ref
/** 打开弹窗 */ /** 打开弹窗 */
const openModal = async () => { const open = async () => {
dialogVisible.value = true dialogVisible.value = true
resetForm() resetForm()
} }
defineExpose({ openModal }) // openModal defineExpose({ open }) // open
/** 提交表单 */ /** 提交表单 */
const submitForm = async () => { const submitForm = async () => {

View File

@ -1,13 +1,15 @@
<template> <template>
<doc-alert title="地区 & IP" url="https://doc.iocoder.cn/area-and-ip/" />
<!-- 操作栏 --> <!-- 操作栏 -->
<content-wrap> <ContentWrap>
<el-button type="primary" plain @click="openModal()"> <el-button type="primary" plain @click="openForm()">
<Icon icon="ep:plus" class="mr-5px" /> IP 查询 <Icon icon="ep:plus" class="mr-5px" /> IP 查询
</el-button> </el-button>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<div style="width: 100%; height: 700px"> <div style="width: 100%; height: 700px">
<!-- AutoResizer 自动调节大小 --> <!-- AutoResizer 自动调节大小 -->
<el-auto-resizer> <el-auto-resizer>
@ -23,14 +25,14 @@
</template> </template>
</el-auto-resizer> </el-auto-resizer>
</div> </div>
</content-wrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<area-form ref="modalRef" /> <AreaForm ref="formRef" />
</template> </template>
<script setup lang="tsx" name="Area"> <script setup lang="tsx" name="Area">
import type { Column } from 'element-plus' import type { Column } from 'element-plus'
import AreaForm from './form.vue' import AreaForm from './AreaForm.vue'
import * as AreaApi from '@/api/system/area' import * as AreaApi from '@/api/system/area'
// column // column
@ -59,9 +61,9 @@ const getList = async () => {
} }
/** 添加/修改操作 */ /** 添加/修改操作 */
const modalRef = ref() const formRef = ref()
const openModal = () => { const openForm = () => {
modalRef.value.openModal() formRef.value.open()
} }
/** 初始化 **/ /** 初始化 **/

View File

@ -11,7 +11,7 @@
<el-tree-select <el-tree-select
v-model="formData.parentId" v-model="formData.parentId"
:data="deptTree" :data="deptTree"
:props="{ value: 'id', label: 'name', children: 'children' }" :props="defaultProps"
value-key="deptId" value-key="deptId"
placeholder="请选择上级部门" placeholder="请选择上级部门"
check-strictly check-strictly
@ -25,12 +25,7 @@
<el-input-number v-model="formData.sort" controls-position="right" :min="0" /> <el-input-number v-model="formData.sort" controls-position="right" :min="0" />
</el-form-item> </el-form-item>
<el-form-item label="负责人" prop="leaderUserId"> <el-form-item label="负责人" prop="leaderUserId">
<el-select <el-select v-model="formData.leaderUserId" placeholder="请输入负责人" clearable>
v-model="formData.leaderUserId"
placeholder="请输入负责人"
clearable
style="width: 100%"
>
<el-option <el-option
v-for="item in userList" v-for="item in userList"
:key="item.id" :key="item.id"
@ -64,7 +59,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { handleTree } from '@/utils/tree' import { handleTree, defaultProps } from '@/utils/tree'
import * as DeptApi from '@/api/system/dept' import * as DeptApi from '@/api/system/dept'
import * as UserApi from '@/api/system/user' import * as UserApi from '@/api/system/user'
import { CommonStatusEnum } from '@/utils/constants' import { CommonStatusEnum } from '@/utils/constants'
@ -93,7 +88,8 @@ const formRules = reactive({
email: [{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }], email: [{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }],
phone: [ phone: [
{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: '请输入正确的手机号码', trigger: 'blur' } { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: '请输入正确的手机号码', trigger: 'blur' }
] ],
status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
}) })
const formRef = ref() // Ref const formRef = ref() // Ref
const deptTree = ref() // const deptTree = ref() //
@ -109,7 +105,7 @@ const open = async (type: string, id?: number) => {
if (id) { if (id) {
formLoading.value = true formLoading.value = true
try { try {
formData.value = await DeptApi.getDeptApi(id) formData.value = await DeptApi.getDept(id)
} finally { } finally {
formLoading.value = false formLoading.value = false
} }
@ -133,10 +129,10 @@ const submitForm = async () => {
try { try {
const data = formData.value as unknown as DeptApi.DeptVO const data = formData.value as unknown as DeptApi.DeptVO
if (formType.value === 'create') { if (formType.value === 'create') {
await DeptApi.createDeptApi(data) await DeptApi.createDept(data)
message.success(t('common.createSuccess')) message.success(t('common.createSuccess'))
} else { } else {
await DeptApi.updateDeptApi(data) await DeptApi.updateDept(data)
message.success(t('common.updateSuccess')) message.success(t('common.updateSuccess'))
} }
dialogVisible.value = false dialogVisible.value = false

View File

@ -51,7 +51,13 @@
<!-- 列表 --> <!-- 列表 -->
<ContentWrap> <ContentWrap>
<el-table v-loading="loading" :data="list" row-key="id" default-expand-all v-if="refreshTable"> <el-table
v-loading="loading"
:data="list"
row-key="id"
:default-expand-all="isExpandAll"
v-if="refreshTable"
>
<el-table-column prop="name" label="部门名称" width="260" /> <el-table-column prop="name" label="部门名称" width="260" />
<el-table-column prop="leader" label="负责人" width="120"> <el-table-column prop="leader" label="负责人" width="120">
<template #default="scope"> <template #default="scope">
@ -125,7 +131,7 @@ const userList = ref<UserApi.UserVO[]>([]) // 用户列表
const getList = async () => { const getList = async () => {
loading.value = true loading.value = true
try { try {
const data = await DeptApi.getDeptPageApi(queryParams) const data = await DeptApi.getDeptPage(queryParams)
list.value = handleTree(data) list.value = handleTree(data)
} finally { } finally {
loading.value = false loading.value = false
@ -136,7 +142,6 @@ const getList = async () => {
const toggleExpandAll = () => { const toggleExpandAll = () => {
refreshTable.value = false refreshTable.value = false
isExpandAll.value = !isExpandAll.value isExpandAll.value = !isExpandAll.value
console.log(isExpandAll.value)
nextTick(() => { nextTick(() => {
refreshTable.value = true refreshTable.value = true
}) })
@ -166,7 +171,7 @@ const handleDelete = async (id: number) => {
// //
await message.delConfirm() await message.delConfirm()
// //
await DeptApi.deleteDeptApi(id) await DeptApi.deleteDept(id)
message.success(t('common.delSuccess')) message.success(t('common.delSuccess'))
// //
await getList() await getList()

View File

@ -20,14 +20,14 @@
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-radio-group v-model="formData.status"> <el-radio-group v-model="formData.status">
<el-radio <el-radio
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)" v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="parseInt(dict.value)" :key="dict.value"
:label="parseInt(dict.value)" :label="dict.value"
>{{ dict.label }}</el-radio
> >
{{ dict.label }}
</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" type="textarea" placeholder="请输入内容" /> <el-input v-model="formData.remark" type="textarea" placeholder="请输入内容" />
</el-form-item> </el-form-item>
@ -39,10 +39,9 @@
</Dialog> </Dialog>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { DICT_TYPE, getDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import * as DictTypeApi from '@/api/system/dict/dict.type' import * as DictTypeApi from '@/api/system/dict/dict.type'
import { CommonStatusEnum } from '@/utils/constants' import { CommonStatusEnum } from '@/utils/constants'
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
@ -64,7 +63,7 @@ const formRules = reactive({
const formRef = ref() // Ref const formRef = ref() // Ref
/** 打开弹窗 */ /** 打开弹窗 */
const openModal = async (type: string, id?: number) => { const open = async (type: string, id?: number) => {
dialogVisible.value = true dialogVisible.value = true
dialogTitle.value = t('action.' + type) dialogTitle.value = t('action.' + type)
formType.value = type formType.value = type
@ -79,7 +78,7 @@ const openModal = async (type: string, id?: number) => {
} }
} }
} }
defineExpose({ openModal }) // openModal defineExpose({ open }) // open
/** 提交表单 */ /** 提交表单 */
const emit = defineEmits(['success']) // success const emit = defineEmits(['success']) // success

View File

@ -26,11 +26,12 @@
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-radio-group v-model="formData.status"> <el-radio-group v-model="formData.status">
<el-radio <el-radio
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)" v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="parseInt(dict.value)" :key="dict.value"
:label="parseInt(dict.value)" :label="dict.value"
>{{ dict.label }}</el-radio
> >
{{ dict.label }}
</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="颜色类型" prop="colorType"> <el-form-item label="颜色类型" prop="colorType">
@ -57,7 +58,7 @@
</Dialog> </Dialog>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { DICT_TYPE, getDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import * as DictDataApi from '@/api/system/dict/dict.data' import * as DictDataApi from '@/api/system/dict/dict.data'
import { CommonStatusEnum } from '@/utils/constants' import { CommonStatusEnum } from '@/utils/constants'
const { t } = useI18n() // const { t } = useI18n() //
@ -114,7 +115,7 @@ const colorTypeOptions = readonly([
]) ])
/** 打开弹窗 */ /** 打开弹窗 */
const openModal = async (type: string, id?: number) => { const open = async (type: string, id?: number) => {
dialogVisible.value = true dialogVisible.value = true
dialogTitle.value = t('action.' + type) dialogTitle.value = t('action.' + type)
formType.value = type formType.value = type
@ -129,7 +130,7 @@ const openModal = async (type: string, id?: number) => {
} }
} }
} }
defineExpose({ openModal }) // openModal defineExpose({ open }) // open
/** 提交表单 */ /** 提交表单 */
const emit = defineEmits(['success']) // success const emit = defineEmits(['success']) // success

View File

@ -1,5 +1,5 @@
<template> <template>
<content-wrap> <ContentWrap>
<el-form <el-form
class="-mb-15px" class="-mb-15px"
:model="queryParams" :model="queryParams"
@ -9,7 +9,12 @@
> >
<el-form-item label="字典名称" prop="dictType"> <el-form-item label="字典名称" prop="dictType">
<el-select v-model="queryParams.dictType" class="!w-240px"> <el-select v-model="queryParams.dictType" class="!w-240px">
<el-option v-for="item in dicts" :key="item.type" :label="item.name" :value="item.type" /> <el-option
v-for="item in dictTypeList"
:key="item.type"
:label="item.name"
:value="item.type"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="字典标签" prop="label"> <el-form-item label="字典标签" prop="label">
@ -24,7 +29,7 @@
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="数据状态" clearable class="!w-240px"> <el-select v-model="queryParams.status" placeholder="数据状态" clearable class="!w-240px">
<el-option <el-option
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)" v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
@ -34,7 +39,12 @@
<el-form-item> <el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button type="primary" @click="openModal('create')" v-hasPermi="['system:dict:create']"> <el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['system:dict:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增 <Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button> </el-button>
<el-button <el-button
@ -48,10 +58,10 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column label="字典编码" align="center" prop="id" /> <el-table-column label="字典编码" align="center" prop="id" />
<el-table-column label="字典标签" align="center" prop="label" /> <el-table-column label="字典标签" align="center" prop="label" />
@ -77,7 +87,7 @@
<el-button <el-button
link link
type="primary" type="primary"
@click="openModal('update', scope.row.id)" @click="openForm('update', scope.row.id)"
v-hasPermi="['system:dict:update']" v-hasPermi="['system:dict:update']"
> >
修改 修改
@ -100,18 +110,18 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<data-form ref="modalRef" @success="getList" /> <DictDataForm ref="formRef" @success="getList" />
</template> </template>
<script setup lang="ts" name="Data"> <script setup lang="ts" name="DictData">
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import * as DictDataApi from '@/api/system/dict/dict.data' import * as DictDataApi from '@/api/system/dict/dict.data'
import * as DictTypeApi from '@/api/system/dict/dict.type' import * as DictTypeApi from '@/api/system/dict/dict.type'
import { getDictOptions, DICT_TYPE } from '@/utils/dict' import DictDataForm from './DictDataForm.vue'
import download from '@/utils/download'
import { dateFormatter } from '@/utils/formatTime'
import DataForm from './data.form.vue'
const message = useMessage() // const message = useMessage() //
const { t } = useI18n() // const { t } = useI18n() //
const route = useRoute() // const route = useRoute() //
@ -128,7 +138,7 @@ const queryParams = reactive({
}) })
const queryFormRef = ref() // const queryFormRef = ref() //
const exportLoading = ref(false) // const exportLoading = ref(false) //
const dicts = ref<DictTypeApi.DictTypeVO[]>() // const dictTypeList = ref<DictTypeApi.DictTypeVO[]>() //
/** 查询列表 */ /** 查询列表 */
const getList = async () => { const getList = async () => {
@ -155,9 +165,9 @@ const resetQuery = () => {
} }
/** 添加/修改操作 */ /** 添加/修改操作 */
const modalRef = ref() const formRef = ref()
const openModal = (type: string, id?: number) => { const openForm = (type: string, id?: number) => {
modalRef.value.openModal(type, id) formRef.value.open(type, id)
} }
/** 删除按钮操作 */ /** 删除按钮操作 */
@ -188,15 +198,10 @@ const handleExport = async () => {
} }
} }
/** 查询字典(精简)列表 */
const getDictList = async () => {
dicts.value = await DictTypeApi.getSimpleDictTypeList()
}
/** 初始化 **/ /** 初始化 **/
onMounted(() => { onMounted(async () => {
getList() await getList()
// ) // )
getDictList() dictTypeList.value = await DictTypeApi.getSimpleDictTypeList()
}) })
</script> </script>

View File

@ -1,6 +1,6 @@
<template> <template>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<content-wrap> <ContentWrap>
<el-form <el-form
class="-mb-15px" class="-mb-15px"
:model="queryParams" :model="queryParams"
@ -27,10 +27,15 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="字典状态" clearable class="!w-240px"> <el-select
v-model="queryParams.status"
placeholder="请选择字典状态"
clearable
class="!w-240px"
>
<el-option <el-option
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)" v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="parseInt(dict.value)" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
/> />
@ -53,7 +58,7 @@
<el-button <el-button
type="primary" type="primary"
plain plain
@click="openModal('create')" @click="openForm('create')"
v-hasPermi="['system:dict:create']" v-hasPermi="['system:dict:create']"
> >
<Icon icon="ep:plus" class="mr-5px" /> 新增 <Icon icon="ep:plus" class="mr-5px" /> 新增
@ -69,10 +74,10 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column label="字典编号" align="center" prop="id" /> <el-table-column label="字典编号" align="center" prop="id" />
<el-table-column label="字典名称" align="center" prop="name" show-overflow-tooltip /> <el-table-column label="字典名称" align="center" prop="name" show-overflow-tooltip />
@ -95,7 +100,7 @@
<el-button <el-button
link link
type="primary" type="primary"
@click="openModal('update', scope.row.id)" @click="openForm('update', scope.row.id)"
v-hasPermi="['system:dict:update']" v-hasPermi="['system:dict:update']"
> >
修改 修改
@ -121,17 +126,17 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<dict-type-form ref="modalRef" @success="getList" /> <DictTypeForm ref="formRef" @success="getList" />
</template> </template>
<script setup lang="ts" name="Dict"> <script setup lang="ts" name="DictType">
import { getDictOptions, DICT_TYPE } from '@/utils/dict' import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import * as DictTypeApi from '@/api/system/dict/dict.type' import * as DictTypeApi from '@/api/system/dict/dict.type'
import DictTypeForm from './form.vue' import DictTypeForm from './DictTypeForm.vue'
import download from '@/utils/download' import download from '@/utils/download'
const message = useMessage() // const message = useMessage() //
const { t } = useI18n() // const { t } = useI18n() //
@ -175,9 +180,9 @@ const resetQuery = () => {
} }
/** 添加/修改操作 */ /** 添加/修改操作 */
const modalRef = ref() const formRef = ref()
const openModal = (type: string, id?: number) => { const openForm = (type: string, id?: number) => {
modalRef.value.openModal(type, id) formRef.value.open(type, id)
} }
/** 删除按钮操作 */ /** 删除按钮操作 */

View File

@ -53,7 +53,7 @@ const formRules = reactive({
const formRef = ref() // Ref const formRef = ref() // Ref
/** 打开弹窗 */ /** 打开弹窗 */
const openModal = async (type: string, id?: number) => { const open = async (type: string, id?: number) => {
dialogVisible.value = true dialogVisible.value = true
dialogTitle.value = t('action.' + type) dialogTitle.value = t('action.' + type)
formType.value = type formType.value = type
@ -62,13 +62,13 @@ const openModal = async (type: string, id?: number) => {
if (id) { if (id) {
formLoading.value = true formLoading.value = true
try { try {
formData.value = await ErrorCodeApi.getErrorCodeApi(id) formData.value = await ErrorCodeApi.getErrorCode(id)
} finally { } finally {
formLoading.value = false formLoading.value = false
} }
} }
} }
defineExpose({ openModal }) // openModal defineExpose({ open }) // open
/** 提交表单 */ /** 提交表单 */
const emit = defineEmits(['success']) // success const emit = defineEmits(['success']) // success
@ -82,10 +82,10 @@ const submitForm = async () => {
try { try {
const data = formData.value as ErrorCodeApi.ErrorCodeVO const data = formData.value as ErrorCodeApi.ErrorCodeVO
if (formType.value === 'create') { if (formType.value === 'create') {
await ErrorCodeApi.createErrorCodeApi(data) await ErrorCodeApi.createErrorCode(data)
message.success(t('common.createSuccess')) message.success(t('common.createSuccess'))
} else { } else {
await ErrorCodeApi.updateErrorCodeApi(data) await ErrorCodeApi.updateErrorCode(data)
message.success(t('common.updateSuccess')) message.success(t('common.updateSuccess'))
} }
dialogVisible.value = false dialogVisible.value = false

View File

@ -1,6 +1,8 @@
<template> <template>
<doc-alert title="异常处理(错误码)" url="https://doc.iocoder.cn/exception/" />
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<content-wrap> <ContentWrap>
<el-form <el-form
class="-mb-15px" class="-mb-15px"
:model="queryParams" :model="queryParams"
@ -11,7 +13,7 @@
<el-form-item label="错误码类型" prop="type"> <el-form-item label="错误码类型" prop="type">
<el-select v-model="queryParams.type" placeholder="请选择错误码类型" clearable> <el-select v-model="queryParams.type" placeholder="请选择错误码类型" clearable>
<el-option <el-option
v-for="dict in getDictOptions(DICT_TYPE.SYSTEM_ERROR_CODE_TYPE)" v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_ERROR_CODE_TYPE)"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
@ -34,6 +36,7 @@
placeholder="请输入错误码编码" placeholder="请输入错误码编码"
clearable clearable
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
class="!w-240px"
/> />
</el-form-item> </el-form-item>
<el-form-item label="错误码提示" prop="message"> <el-form-item label="错误码提示" prop="message">
@ -62,7 +65,7 @@
<el-button <el-button
type="primary" type="primary"
plain plain
@click="openModal('create')" @click="openForm('create')"
v-hasPermi="['system:error-code:create']" v-hasPermi="['system:error-code:create']"
> >
<Icon icon="ep:plus" class="mr-5px" /> 新增 <Icon icon="ep:plus" class="mr-5px" /> 新增
@ -78,10 +81,10 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" /> <el-table-column label="编号" align="center" prop="id" />
<el-table-column label="类型" align="center" prop="type" width="80"> <el-table-column label="类型" align="center" prop="type" width="80">
@ -105,7 +108,7 @@
<el-button <el-button
link link
type="primary" type="primary"
@click="openModal('update', scope.row.id)" @click="openForm('update', scope.row.id)"
v-hasPermi="['system:error-code:update']" v-hasPermi="['system:error-code:update']"
> >
编辑 编辑
@ -128,30 +131,25 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<error-code-form ref="modalRef" @success="getList" /> <ErrorCodeForm ref="formRef" @success="getList" />
</template> </template>
<script setup lang="ts" name="ErrorCode"> <script setup lang="ts" name="ErrorCode">
import * as ErrorCodeApi from '@/api/system/errorCode' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { DICT_TYPE, getDictOptions } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import ErrorCodeForm from './form.vue'
import download from '@/utils/download' import download from '@/utils/download'
import * as ErrorCodeApi from '@/api/system/errorCode'
import ErrorCodeForm from './ErrorCodeForm.vue'
const message = useMessage() // const message = useMessage() //
const { t } = useI18n() // const { t } = useI18n() //
// const loading = ref(true) //
const loading = ref(true) const exportLoading = ref(false) //
// const total = ref(0) //
const exportLoading = ref(false) const list = ref([]) //
//
const total = ref(0)
//
const list = ref([])
//
const queryParams = reactive({ const queryParams = reactive({
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
@ -161,15 +159,13 @@ const queryParams = reactive({
message: undefined, message: undefined,
createTime: [] createTime: []
}) })
// const queryFormRef = ref() //
const queryFormRef = ref()
/** 查询列表 */ /** 查询列表 */
const getList = async () => { const getList = async () => {
loading.value = true loading.value = true
//
try { try {
const data = await ErrorCodeApi.getErrorCodePageApi(queryParams) const data = await ErrorCodeApi.getErrorCodePage(queryParams)
list.value = data.list list.value = data.list
total.value = data.total total.value = data.total
} finally { } finally {
@ -190,9 +186,9 @@ const resetQuery = () => {
} }
/** 添加/修改操作 */ /** 添加/修改操作 */
const modalRef = ref() const formRef = ref()
const openModal = (type: string, id?: number) => { const openForm = (type: string, id?: number) => {
modalRef.value.openModal(type, id) formRef.value.open(type, id)
} }
/** 删除按钮操作 */ /** 删除按钮操作 */
@ -200,7 +196,7 @@ const handleDelete = async (id: number) => {
try { try {
// //
await message.delConfirm() await message.delConfirm()
await ErrorCodeApi.deleteErrorCodeApi(id) await ErrorCodeApi.deleteErrorCode(id)
message.success(t('common.delSuccess')) message.success(t('common.delSuccess'))
// //
await getList() await getList()
@ -214,7 +210,7 @@ const handleExport = async () => {
await message.exportConfirm() await message.exportConfirm()
// //
exportLoading.value = true exportLoading.value = true
const data = await ErrorCodeApi.excelErrorCodeApi(queryParams) const data = await ErrorCodeApi.excelErrorCode(queryParams)
download.excel(data, '错误码.xls') download.excel(data, '错误码.xls')
} catch { } catch {
} finally { } finally {

View File

@ -1,5 +1,7 @@
<template> <template>
<content-wrap> <doc-alert title="系统日志" url="https://doc.iocoder.cn/system-log/" />
<ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form
class="-mb-15px" class="-mb-15px"
@ -51,10 +53,10 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column label="日志编号" align="center" prop="id" /> <el-table-column label="日志编号" align="center" prop="id" />
<el-table-column label="操作类型" align="center" prop="logType"> <el-table-column label="操作类型" align="center" prop="logType">
@ -97,7 +99,7 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 表单弹窗详情 --> <!-- 表单弹窗详情 -->
<LoginLogDetail ref="detailRef" /> <LoginLogDetail ref="detailRef" />

View File

@ -10,7 +10,6 @@
<script setup lang="ts"> <script setup lang="ts">
import * as MailAccountApi from '@/api/system/mail/account' import * as MailAccountApi from '@/api/system/mail/account'
import { rules, allSchemas } from './account.data' import { rules, allSchemas } from './account.data'
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
@ -21,7 +20,7 @@ const formType = ref('') // 表单的类型create - 新增update - 修改
const formRef = ref() // Ref const formRef = ref() // Ref
/** 打开弹窗 */ /** 打开弹窗 */
const openModal = async (type: string, id?: number) => { const open = async (type: string, id?: number) => {
dialogVisible.value = true dialogVisible.value = true
dialogTitle.value = t('action.' + type) dialogTitle.value = t('action.' + type)
formType.value = type formType.value = type
@ -36,7 +35,7 @@ const openModal = async (type: string, id?: number) => {
} }
} }
} }
defineExpose({ openModal }) // openModal defineExpose({ open }) // open
/** 提交表单 */ /** 提交表单 */
const emit = defineEmits(['success']) // success const emit = defineEmits(['success']) // success

View File

@ -1,6 +1,5 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas' import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
const { t } = useI18n() // 国际化 const { t } = useI18n() // 国际化
// 表单校验 // 表单校验

View File

@ -1,23 +1,25 @@
<template> <template>
<doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<content-wrap> <ContentWrap>
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams"> <Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams">
<!-- 新增等操作按钮 --> <!-- 新增等操作按钮 -->
<template #actionMore> <template #actionMore>
<el-button <el-button
type="primary" type="primary"
plain plain
@click="openModal('create')" @click="openForm('create')"
v-hasPermi="['system:mail-account:create']" v-hasPermi="['system:mail-account:create']"
> >
<Icon icon="ep:plus" class="mr-5px" /> 新增 <Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button> </el-button>
</template> </template>
</Search> </Search>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<Table <Table
:columns="allSchemas.tableColumns" :columns="allSchemas.tableColumns"
:data="tableObject.tableList" :data="tableObject.tableList"
@ -32,7 +34,7 @@
<el-button <el-button
link link
type="primary" type="primary"
@click="openModal('update', row.id)" @click="openForm('update', row.id)"
v-hasPermi="['system:mail-account:update']" v-hasPermi="['system:mail-account:update']"
> >
编辑 编辑
@ -47,15 +49,15 @@
</el-button> </el-button>
</template> </template>
</Table> </Table>
</content-wrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<mail-account-form ref="modalRef" @success="getList" /> <MailAccountForm ref="formRef" @success="getList" />
</template> </template>
<script setup lang="ts" name="MailAccount"> <script setup lang="ts" name="MailAccount">
import { allSchemas } from './account.data' import { allSchemas } from './account.data'
import * as MailAccountApi from '@/api/system/mail/account' import * as MailAccountApi from '@/api/system/mail/account'
import MailAccountForm from './form.vue' import MailAccountForm from './MailAccountForm.vue'
// tableObject // tableObject
// tableMethods // tableMethods
@ -68,9 +70,9 @@ const { tableObject, tableMethods } = useTable({
const { getList, setSearchParams } = tableMethods const { getList, setSearchParams } = tableMethods
/** 添加/修改操作 */ /** 添加/修改操作 */
const modalRef = ref() const formRef = ref()
const openModal = (type: string, id?: number) => { const openForm = (type: string, id?: number) => {
modalRef.value.openModal(type, id) formRef.value.open(type, id)
} }
/** 删除按钮操作 */ /** 删除按钮操作 */

View File

@ -17,7 +17,7 @@ const detailLoading = ref(false) // 表单的加载中
const detailData = ref() // const detailData = ref() //
/** 打开弹窗 */ /** 打开弹窗 */
const openModal = async (id: number) => { const open = async (id: number) => {
dialogVisible.value = true dialogVisible.value = true
// //
detailLoading.value = true detailLoading.value = true
@ -27,5 +27,5 @@ const openModal = async (id: number) => {
detailLoading.value = false detailLoading.value = false
} }
} }
defineExpose({ openModal }) // openModal defineExpose({ open }) // open
</script> </script>

View File

@ -1,11 +1,13 @@
<template> <template>
<doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<content-wrap> <ContentWrap>
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" /> <Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<Table <Table
:columns="allSchemas.tableColumns" :columns="allSchemas.tableColumns"
:data="tableObject.tableList" :data="tableObject.tableList"
@ -20,22 +22,22 @@
<el-button <el-button
link link
type="primary" type="primary"
@click="openModal(row.id)" @click="openDetail(row.id)"
v-hasPermi="['system:mail-log:query']" v-hasPermi="['system:mail-log:query']"
> >
详情 详情
</el-button> </el-button>
</template> </template>
</Table> </Table>
</content-wrap> </ContentWrap>
<!-- 表单弹窗详情 --> <!-- 表单弹窗详情 -->
<mail-log-detail ref="modalRef" /> <mail-log-detail ref="detailRef" />
</template> </template>
<script setup lang="ts" name="MailLog"> <script setup lang="ts" name="MailLog">
import { allSchemas } from './log.data' import { allSchemas } from './log.data'
import * as MailLogApi from '@/api/system/mail/log' import * as MailLogApi from '@/api/system/mail/log'
import MailLogDetail from './detail.vue' import MailLogDetail from './MailLogDetail.vue'
// tableObject // tableObject
// tableMethods // tableMethods
@ -47,9 +49,9 @@ const { tableObject, tableMethods } = useTable({
const { getList, setSearchParams } = tableMethods const { getList, setSearchParams } = tableMethods
/** 详情操作 */ /** 详情操作 */
const modalRef = ref() const detailRef = ref()
const openModal = (id: number) => { const openDetail = (id: number) => {
modalRef.value.openModal(id) detailRef.value.open(id)
} }
/** 初始化 **/ /** 初始化 **/

View File

@ -3,7 +3,7 @@ import { dateFormatter } from '@/utils/formatTime'
import * as MailAccountApi from '@/api/system/mail/account' import * as MailAccountApi from '@/api/system/mail/account'
// 邮箱账号的列表 // 邮箱账号的列表
const accounts = await MailAccountApi.getSimpleMailAccountList() const accountList = await MailAccountApi.getSimpleMailAccountList()
// CrudSchemahttps://kailong110120130.gitee.io/vue-element-plus-admin-doc/hooks/useCrudSchemas.html // CrudSchemahttps://kailong110120130.gitee.io/vue-element-plus-admin-doc/hooks/useCrudSchemas.html
const crudSchemas = reactive<CrudSchema[]>([ const crudSchemas = reactive<CrudSchema[]>([
@ -74,7 +74,7 @@ const crudSchemas = reactive<CrudSchema[]>([
search: { search: {
show: true, show: true,
component: 'Select', component: 'Select',
api: () => accounts, api: () => accountList,
componentProps: { componentProps: {
optionsAlias: { optionsAlias: {
labelField: 'mail', labelField: 'mail',

View File

@ -16,7 +16,6 @@
<script setup lang="ts"> <script setup lang="ts">
import * as MailTemplateApi from '@/api/system/mail/template' import * as MailTemplateApi from '@/api/system/mail/template'
import { allSchemas, rules } from './template.data' import { allSchemas, rules } from './template.data'
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
@ -27,7 +26,7 @@ const formType = ref('') // 表单的类型create - 新增update - 修改
const formRef = ref() // Ref const formRef = ref() // Ref
/** 打开弹窗 */ /** 打开弹窗 */
const openModal = async (type: string, id?: number) => { const open = async (type: string, id?: number) => {
dialogVisible.value = true dialogVisible.value = true
dialogTitle.value = t('action.' + type) dialogTitle.value = t('action.' + type)
formType.value = type formType.value = type
@ -42,7 +41,7 @@ const openModal = async (type: string, id?: number) => {
} }
} }
} }
defineExpose({ openModal }) // openModal defineExpose({ open }) // open
/** 提交表单 */ /** 提交表单 */
const emit = defineEmits(['success']) // success const emit = defineEmits(['success']) // success

View File

@ -33,7 +33,6 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import * as MailTemplateApi from '@/api/system/mail/template' import * as MailTemplateApi from '@/api/system/mail/template'
const message = useMessage() // const message = useMessage() //
const dialogVisible = ref(false) // const dialogVisible = ref(false) //
@ -53,7 +52,7 @@ const formRules = reactive({
const formRef = ref() // Ref const formRef = ref() // Ref
/** 打开弹窗 */ /** 打开弹窗 */
const openModal = async (id: number) => { const open = async (id: number) => {
dialogVisible.value = true dialogVisible.value = true
resetForm() resetForm()
// //
@ -76,7 +75,7 @@ const openModal = async (id: number) => {
formLoading.value = false formLoading.value = false
} }
} }
defineExpose({ openModal }) // openModal defineExpose({ open }) // open
/** 提交表单 */ /** 提交表单 */
const submitForm = async () => { const submitForm = async () => {

View File

@ -1,23 +1,25 @@
<template> <template>
<doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<content-wrap> <ContentWrap>
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams"> <Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams">
<!-- 新增等操作按钮 --> <!-- 新增等操作按钮 -->
<template #actionMore> <template #actionMore>
<el-button <el-button
type="primary" type="primary"
plain plain
@click="openModal('create')" @click="openForm('create')"
v-hasPermi="['system:mail-account:create']" v-hasPermi="['system:mail-account:create']"
> >
<Icon icon="ep:plus" class="mr-5px" /> 新增 <Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button> </el-button>
</template> </template>
</Search> </Search>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<Table <Table
:columns="allSchemas.tableColumns" :columns="allSchemas.tableColumns"
:data="tableObject.tableList" :data="tableObject.tableList"
@ -32,7 +34,7 @@
<el-button <el-button
link link
type="primary" type="primary"
@click="openSend(row.id)" @click="openSendForm(row.id)"
v-hasPermi="['system:mail-template:send-mail']" v-hasPermi="['system:mail-template:send-mail']"
> >
测试 测试
@ -40,7 +42,7 @@
<el-button <el-button
link link
type="primary" type="primary"
@click="openModal('update', row.id)" @click="openForm('update', row.id)"
v-hasPermi="['system:mail-template:update']" v-hasPermi="['system:mail-template:update']"
> >
编辑 编辑
@ -55,19 +57,19 @@
</el-button> </el-button>
</template> </template>
</Table> </Table>
</content-wrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<mail-template-form ref="modalRef" @success="getList" /> <MailTemplateForm ref="formRef" @success="getList" />
<!-- 表单弹窗发送测试 --> <!-- 表单弹窗发送测试 -->
<mail-template-send ref="sendRef" /> <MailTemplateSendForm ref="sendFormRef" />
</template> </template>
<script setup lang="ts" name="MailTemplate"> <script setup lang="ts" name="MailTemplate">
import { allSchemas } from './template.data' import { allSchemas } from './template.data'
import * as MailTemplateApi from '@/api/system/mail/template' import * as MailTemplateApi from '@/api/system/mail/template'
import MailTemplateForm from './form.vue' import MailTemplateForm from './MailTemplateForm.vue'
import MailTemplateSend from './send.vue' import MailTemplateSendForm from './MailTemplateSendForm.vue'
// tableObject // tableObject
// tableMethods // tableMethods
@ -80,9 +82,9 @@ const { tableObject, tableMethods } = useTable({
const { getList, setSearchParams } = tableMethods const { getList, setSearchParams } = tableMethods
/** 添加/修改操作 */ /** 添加/修改操作 */
const modalRef = ref() const formRef = ref()
const openModal = (type: string, id?: number) => { const openForm = (type: string, id?: number) => {
modalRef.value.openModal(type, id) formRef.value.open(type, id)
} }
/** 删除按钮操作 */ /** 删除按钮操作 */
@ -91,9 +93,9 @@ const handleDelete = (id: number) => {
} }
/** 发送测试操作 */ /** 发送测试操作 */
const sendRef = ref() const sendFormRef = ref()
const openSend = (id: number) => { const openSendForm = (id: number) => {
sendRef.value.openModal(id) sendFormRef.value.open(id)
} }
/** 初始化 **/ /** 初始化 **/

View File

@ -4,7 +4,7 @@ import { TableColumn } from '@/types/table'
import * as MailAccountApi from '@/api/system/mail/account' import * as MailAccountApi from '@/api/system/mail/account'
// 邮箱账号的列表 // 邮箱账号的列表
const accounts = await MailAccountApi.getSimpleMailAccountList() const accountList = await MailAccountApi.getSimpleMailAccountList()
// 表单校验 // 表单校验
export const rules = reactive({ export const rules = reactive({
@ -49,12 +49,12 @@ const crudSchemas = reactive<CrudSchema[]>([
field: 'accountId', field: 'accountId',
width: '200px', width: '200px',
formatter: (_: Recordable, __: TableColumn, cellValue: number) => { formatter: (_: Recordable, __: TableColumn, cellValue: number) => {
return accounts.find((account) => account.id === cellValue)?.mail return accountList.find((account) => account.id === cellValue)?.mail
}, },
search: { search: {
show: true, show: true,
component: 'Select', component: 'Select',
api: () => accounts, api: () => accountList,
componentProps: { componentProps: {
optionsAlias: { optionsAlias: {
labelField: 'mail', labelField: 'mail',
@ -64,7 +64,7 @@ const crudSchemas = reactive<CrudSchema[]>([
}, },
form: { form: {
component: 'Select', component: 'Select',
api: () => accounts, api: () => accountList,
componentProps: { componentProps: {
optionsAlias: { optionsAlias: {
labelField: 'mail', labelField: 'mail',

View File

@ -163,7 +163,7 @@ const open = async (type: string, id?: number, parentId?: number) => {
if (id) { if (id) {
formLoading.value = true formLoading.value = true
try { try {
formData.value = await MenuApi.getMenuApi(id) formData.value = await MenuApi.getMenu(id)
} finally { } finally {
formLoading.value = false formLoading.value = false
} }

View File

@ -1,4 +1,7 @@
<template> <template>
<doc-alert title="功能权限" url="https://doc.iocoder.cn/resource-permission" />
<doc-alert title="菜单路由" url="https://doc.iocoder.cn/vue2/route/" />
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<ContentWrap> <ContentWrap>
<el-form <el-form

View File

@ -16,7 +16,7 @@
<el-form-item label="公告类型" prop="type"> <el-form-item label="公告类型" prop="type">
<el-select v-model="formData.type" placeholder="请选择公告类型" clearable> <el-select v-model="formData.type" placeholder="请选择公告类型" clearable>
<el-option <el-option
v-for="dict in getDictOptions(DICT_TYPE.SYSTEM_NOTICE_TYPE)" v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_NOTICE_TYPE)"
:key="parseInt(dict.value)" :key="parseInt(dict.value)"
:label="dict.label" :label="dict.label"
:value="parseInt(dict.value)" :value="parseInt(dict.value)"
@ -26,7 +26,7 @@
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="formData.status" placeholder="请选择状态" clearable> <el-select v-model="formData.status" placeholder="请选择状态" clearable>
<el-option <el-option
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)" v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="parseInt(dict.value)" :key="parseInt(dict.value)"
:label="dict.label" :label="dict.label"
:value="parseInt(dict.value)" :value="parseInt(dict.value)"
@ -44,7 +44,8 @@
</Dialog> </Dialog>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { DICT_TYPE, getDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { CommonStatusEnum } from '@/utils/constants'
import * as NoticeApi from '@/api/system/notice' import * as NoticeApi from '@/api/system/notice'
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
@ -58,7 +59,7 @@ const formData = ref({
title: '', title: '',
type: undefined, type: undefined,
content: '', content: '',
status: undefined, status: CommonStatusEnum.ENABLE,
remark: '' remark: ''
}) })
const formRules = reactive({ const formRules = reactive({
@ -70,7 +71,7 @@ const formRules = reactive({
const formRef = ref() // Ref const formRef = ref() // Ref
/** 打开弹窗 */ /** 打开弹窗 */
const openModal = async (type: string, id?: number) => { const open = async (type: string, id?: number) => {
dialogVisible.value = true dialogVisible.value = true
dialogTitle.value = t('action.' + type) dialogTitle.value = t('action.' + type)
formType.value = type formType.value = type
@ -85,7 +86,7 @@ const openModal = async (type: string, id?: number) => {
} }
} }
} }
defineExpose({ openModal }) // openModal defineExpose({ open }) // open
/** 提交表单 */ /** 提交表单 */
const emit = defineEmits(['success']) // success const emit = defineEmits(['success']) // success
@ -120,7 +121,7 @@ const resetForm = () => {
title: '', title: '',
type: undefined, type: undefined,
content: '', content: '',
status: undefined, status: CommonStatusEnum.ENABLE,
remark: '' remark: ''
} }
formRef.value?.resetFields() formRef.value?.resetFields()

View File

@ -1,5 +1,5 @@
<template> <template>
<content-wrap> <ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form
class="-mb-15px" class="-mb-15px"
@ -25,10 +25,10 @@
class="!w-240px" class="!w-240px"
> >
<el-option <el-option
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)" v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="parseInt(dict.value)" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="parseInt(dict.value)" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -38,17 +38,17 @@
<el-button <el-button
type="primary" type="primary"
plain plain
@click="openModal('create')" @click="openForm('create')"
v-hasPermi="['system:notice:create']" v-hasPermi="['system:notice:create']"
> >
<Icon icon="ep:plus" class="mr-5px" /> 新增 <Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column label="公告编号" align="center" prop="id" /> <el-table-column label="公告编号" align="center" prop="id" />
<el-table-column label="公告标题" align="center" prop="title" /> <el-table-column label="公告标题" align="center" prop="title" />
@ -74,7 +74,7 @@
<el-button <el-button
link link
type="primary" type="primary"
@click="openModal('update', scope.row.id)" @click="openForm('update', scope.row.id)"
v-hasPermi="['system:notice:update']" v-hasPermi="['system:notice:update']"
> >
编辑 编辑
@ -97,17 +97,16 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<notice-form ref="modalRef" @success="getList" /> <NoticeForm ref="formRef" @success="getList" />
</template> </template>
<script setup lang="tsx"> <script setup lang="tsx">
import { DICT_TYPE, getDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import * as NoticeApi from '@/api/system/notice' import * as NoticeApi from '@/api/system/notice'
import { DictTag } from '@/components/DictTag' import NoticeForm from './NoticeForm.vue'
import NoticeForm from './form.vue'
const message = useMessage() // const message = useMessage() //
const { t } = useI18n() // const { t } = useI18n() //
@ -148,9 +147,9 @@ const resetQuery = () => {
} }
/** 添加/修改操作 */ /** 添加/修改操作 */
const modalRef = ref() const formRef = ref()
const openModal = (type: string, id?: number) => { const openForm = (type: string, id?: number) => {
modalRef.value.openModal(type, id) formRef.value.open(type, id)
} }
/** 删除按钮操作 */ /** 删除按钮操作 */

View File

@ -1,5 +1,7 @@
<template> <template>
<content-wrap> <doc-alert title="站内信配置" url="https://doc.iocoder.cn/notify/" />
<ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form
class="-mb-15px" class="-mb-15px"
@ -72,10 +74,10 @@
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" /> <el-table-column label="编号" align="center" prop="id" />
<el-table-column label="用户类型" align="center" prop="userType"> <el-table-column label="用户类型" align="center" prop="userType">
@ -146,7 +148,7 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 表单弹窗详情 --> <!-- 表单弹窗详情 -->
<NotifyMessageDetail ref="detailRef" /> <NotifyMessageDetail ref="detailRef" />

View File

@ -1,5 +1,7 @@
<template> <template>
<content-wrap> <doc-alert title="站内信配置" url="https://doc.iocoder.cn/notify/" />
<ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form
class="-mb-15px" class="-mb-15px"
@ -45,10 +47,10 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<content-wrap>
<!-- 列表 --> <!-- 列表 -->
<ContentWrap>
<el-table <el-table
v-loading="loading" v-loading="loading"
:data="list" :data="list"
@ -107,7 +109,7 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 表单弹窗详情 --> <!-- 表单弹窗详情 -->
<MyNotifyMessageDetail ref="detailRef" /> <MyNotifyMessageDetail ref="detailRef" />

View File

@ -1,6 +1,8 @@
<template> <template>
<doc-alert title="OAuth 2.0SSO 单点登录)" url="https://doc.iocoder.cn/oauth2/" />
<!-- 搜索 --> <!-- 搜索 -->
<content-wrap> <ContentWrap>
<el-form <el-form
class="-mb-15px" class="-mb-15px"
:model="queryParams" :model="queryParams"
@ -40,10 +42,10 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column label="客户端编号" align="center" prop="clientId" /> <el-table-column label="客户端编号" align="center" prop="clientId" />
<el-table-column label="客户端密钥" align="center" prop="secret" /> <el-table-column label="客户端密钥" align="center" prop="secret" />
@ -71,6 +73,7 @@
:key="index" :key="index"
v-for="(authorizedGrantType, index) in scope.row.authorizedGrantTypes" v-for="(authorizedGrantType, index) in scope.row.authorizedGrantTypes"
:index="index" :index="index"
class="mr-5px"
> >
{{ authorizedGrantType }} {{ authorizedGrantType }}
</el-tag> </el-tag>
@ -111,7 +114,7 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<ClientForm ref="formRef" @success="getList" /> <ClientForm ref="formRef" @success="getList" />

View File

@ -1,5 +1,7 @@
<template> <template>
<content-wrap> <doc-alert title="OAuth 2.0SSO 单点登录)" url="https://doc.iocoder.cn/oauth2/" />
<ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form <el-form
class="-mb-15px" class="-mb-15px"
@ -46,10 +48,10 @@
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</content-wrap> </ContentWrap>
<!-- 列表 --> <!-- 列表 -->
<content-wrap> <ContentWrap>
<el-table v-loading="loading" :data="list"> <el-table v-loading="loading" :data="list">
<el-table-column label="访问令牌" align="center" prop="accessToken" width="300" /> <el-table-column label="访问令牌" align="center" prop="accessToken" width="300" />
<el-table-column label="刷新令牌" align="center" prop="refreshToken" width="300" /> <el-table-column label="刷新令牌" align="center" prop="refreshToken" width="300" />
@ -93,7 +95,7 @@
v-model:limit="queryParams.pageSize" v-model:limit="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
</content-wrap> </ContentWrap>
</template> </template>
<script setup lang="ts" name="Oauth2AccessToken"> <script setup lang="ts" name="Oauth2AccessToken">

View File

@ -66,7 +66,7 @@ const detailLoading = ref(false) // 表单的加载中
const detailData = ref() // const detailData = ref() //
/** 打开弹窗 */ /** 打开弹窗 */
const openModal = async (data: OperateLogApi.OperateLogVO) => { const open = async (data: OperateLogApi.OperateLogVO) => {
dialogVisible.value = true dialogVisible.value = true
// //
detailLoading.value = true detailLoading.value = true
@ -76,5 +76,5 @@ const openModal = async (data: OperateLogApi.OperateLogVO) => {
detailLoading.value = false detailLoading.value = false
} }
} }
defineExpose({ openModal }) // openModal defineExpose({ open }) // open
</script> </script>

Some files were not shown because too many files have changed in this diff Show More