diff --git a/apps/web-ele/src/adapter/component/index.ts b/apps/web-ele/src/adapter/component/index.ts index 0804f9f692ef470a74c4c641fba32433a510c601..7a5d9f074e1795d9572aae559add6784ae221329 100644 --- a/apps/web-ele/src/adapter/component/index.ts +++ b/apps/web-ele/src/adapter/component/index.ts @@ -163,6 +163,7 @@ const withDefaultPlaceholder = ( // 这里需要自行根据业务组件库进行适配,需要用到的组件都需要在这里类型说明 export type ComponentType = + | 'ApiCascader' | 'ApiSelect' | 'ApiTreeSelect' | 'Checkbox' @@ -184,7 +185,6 @@ export type ComponentType = | 'TimePicker' | 'TreeSelect' | 'Upload' - | 'ApiCascader' | BaseFormComponentType; async function initComponentAdapter() { @@ -212,13 +212,6 @@ async function initComponentAdapter() { 'select', { component: ElCascader, - props: { - props: { - label: 'label', - value: 'value', - children: 'children', - }, - }, }, ), ApiTreeSelect: withDefaultPlaceholder( @@ -229,7 +222,6 @@ async function initComponentAdapter() { 'select', { component: ElTreeSelect, - props: { label: 'label', children: 'children' }, nodeKey: 'value', loadingSlot: 'loading', optionsPropName: 'data', diff --git a/apps/web-ele/src/api/mall/product/category.ts b/apps/web-ele/src/api/mall/product/category.ts index 3ca05b0f90bf7f250188d62dccdaa839c2bbc816..12d7202f48d9ecd68a626f6aa06f040f4cebfa91 100644 --- a/apps/web-ele/src/api/mall/product/category.ts +++ b/apps/web-ele/src/api/mall/product/category.ts @@ -53,6 +53,6 @@ export function getCategoryList(params: any) { // 获得商品分类列表 export function getCategorySimpleList() { return requestClient.get( - '/product/category/list-all-simple', + '/product/category/list', ); } diff --git a/apps/web-ele/src/api/mall/statistics/member.ts b/apps/web-ele/src/api/mall/statistics/member.ts index fb7a6b01a3c9a0a91031889783b28883ac72af5d..bcc993047486fde68c9b603d51f0cc81c7a04f3e 100644 --- a/apps/web-ele/src/api/mall/statistics/member.ts +++ b/apps/web-ele/src/api/mall/statistics/member.ts @@ -1,6 +1,6 @@ import type { MallDataComparisonResp } from './common'; -import { formatDate } from '@vben/utils'; +import { formatDate2 } from '@vben/utils'; import { requestClient } from '#/api/request'; @@ -84,7 +84,10 @@ export function getMemberAnalyse(params: MallMemberStatisticsApi.AnalyseReq) { '/statistics/member/analyse', { params: { - times: [formatDate(params.times[0]), formatDate(params.times[1])], + times: [ + formatDate2(params.times[0] || new Date()), + formatDate2(params.times[1] || new Date()), + ], }, }, ); @@ -124,7 +127,7 @@ export function getMemberRegisterCountList(beginTime: Date, endTime: Date) { '/statistics/member/register-count-list', { params: { - times: [formatDate(beginTime), formatDate(endTime)], + times: [formatDate2(beginTime), formatDate2(endTime)], }, }, ); diff --git a/apps/web-ele/src/api/mall/statistics/product.ts b/apps/web-ele/src/api/mall/statistics/product.ts index d458d4353c1a9a3e70f8c86d5b2768d135a8ccfb..089da4af7723271ce9fb0d9cfd3019e8f54eec4b 100644 --- a/apps/web-ele/src/api/mall/statistics/product.ts +++ b/apps/web-ele/src/api/mall/statistics/product.ts @@ -2,6 +2,8 @@ import type { PageParam, PageResult } from '@vben/request'; import type { MallDataComparisonResp } from './common'; +import { formatDate2 } from '@vben/utils'; + import { requestClient } from '#/api/request'; export namespace MallProductStatisticsApi { @@ -38,26 +40,58 @@ export namespace MallProductStatisticsApi { /** 浏览转化率 */ browseConvertPercent: number; } + + /** 会员分析 Request */ + export interface ProductStatisticsReq { + times: Date[]; + } } /** 获得商品统计分析 */ -export function getProductStatisticsAnalyse(params: PageParam) { +export function getProductStatisticsAnalyse( + params: MallProductStatisticsApi.ProductStatisticsReq, +) { return requestClient.get< MallDataComparisonResp - >('/statistics/product/analyse', { params }); + >('/statistics/product/analyse', { + params: { + times: [ + formatDate2(params.times[0] || new Date()), + formatDate2(params.times[1] || new Date()), + ], + }, + }); } /** 获得商品状况明细 */ -export function getProductStatisticsList(params: PageParam) { +export function getProductStatisticsList( + params: MallProductStatisticsApi.ProductStatisticsReq, +) { return requestClient.get( '/statistics/product/list', - { params }, + { + params: { + times: [ + formatDate2(params.times[0] || new Date()), + formatDate2(params.times[1] || new Date()), + ], + }, + }, ); } /** 导出获得商品状况明细 Excel */ -export function exportProductStatisticsExcel(params: PageParam) { - return requestClient.download('/statistics/product/export-excel', { params }); +export function exportProductStatisticsExcel( + params: MallProductStatisticsApi.ProductStatisticsReq, +) { + return requestClient.download('/statistics/product/export-excel', { + params: { + times: [ + formatDate2(params.times[0] || new Date()), + formatDate2(params.times[1] || new Date()), + ], + }, + }); } /** 获得商品排行榜分页 */ diff --git a/apps/web-ele/src/api/mall/statistics/trade.ts b/apps/web-ele/src/api/mall/statistics/trade.ts index 1f866c636f6b56c6cf292c0c20d43f035b265a5c..0b52be5107a4e0e8a965785dd08e1e73215bcf1e 100644 --- a/apps/web-ele/src/api/mall/statistics/trade.ts +++ b/apps/web-ele/src/api/mall/statistics/trade.ts @@ -1,6 +1,6 @@ import type { MallDataComparisonResp } from './common'; -import { formatDate } from '@vben/utils'; +import { formatDate2 } from '@vben/utils'; import { requestClient } from '#/api/request'; @@ -15,7 +15,7 @@ export namespace MallTradeStatisticsApi { /** 交易状况 Request */ export interface TradeTrendReq { - times: [Date, Date]; + times: Date[]; } /** 交易状况统计 Response */ @@ -64,8 +64,11 @@ export namespace MallTradeStatisticsApi { /** 时间参数需要格式化, 确保接口能识别 */ const formatDateParam = (params: MallTradeStatisticsApi.TradeTrendReq) => { return { - times: [formatDate(params.times[0]), formatDate(params.times[1])], - } as MallTradeStatisticsApi.TradeTrendReq; + times: [ + formatDate2(params.times[0] || new Date()), + formatDate2(params.times[1] || new Date()), + ], + }; }; /** 查询交易统计 */ @@ -128,8 +131,8 @@ export function getOrderCountTrendComparison( >('/statistics/trade/order-count-trend', { params: { type, - beginTime: formatDate(beginTime), - endTime: formatDate(endTime), + beginTime: formatDate2(beginTime), + endTime: formatDate2(endTime), }, }); } diff --git a/apps/web-ele/src/api/mall/trade/afterSale/index.ts b/apps/web-ele/src/api/mall/trade/afterSale/index.ts index 95326af015757e801c79715e5d2866e0e8b8d7c7..2aed74c24dd09f4893c0e2a414306dff52306242 100644 --- a/apps/web-ele/src/api/mall/trade/afterSale/index.ts +++ b/apps/web-ele/src/api/mall/trade/afterSale/index.ts @@ -1,5 +1,7 @@ import type { PageParam, PageResult } from '@vben/request'; +import type { MallOrderApi } from '#/api/mall/trade/order'; + import { requestClient } from '#/api/request'; export namespace MallAfterSaleApi { @@ -75,6 +77,21 @@ export namespace MallAfterSaleApi { receiveTime?: Date; /** 收货备注 */ receiveReason?: string; + /** 订单 */ + order?: MallOrderApi.Order; + /** 订单操作日志 */ + logs?: MallOrderApi.OrderLog[]; + /** 订单项 */ + orderItem?: MallOrderApi.OrderItem; + /** 用户信息 */ + user?: { + /** 用户头像 */ + avatar?: string; + /** 用户编号 */ + id?: null | number; + /** 用户昵称 */ + nickname?: string; + }; } /** 拒绝售后请求 */ diff --git a/apps/web-ele/src/api/mall/trade/order/index.ts b/apps/web-ele/src/api/mall/trade/order/index.ts index 6017fa5f5ed1d9f3635a310945658644ea7682aa..a9d7d18848941b486079b48cd5218dddd4745dc0 100644 --- a/apps/web-ele/src/api/mall/trade/order/index.ts +++ b/apps/web-ele/src/api/mall/trade/order/index.ts @@ -53,6 +53,8 @@ export namespace MallOrderApi { /** 订单日志 */ export interface OrderLog { + /** 日志编号 */ + id: number; /** 日志内容 */ content?: string; /** 创建时间 */ @@ -108,7 +110,7 @@ export namespace MallOrderApi { /** 订单调价(总) */ adjustPrice?: null | number; /** 应付金额(总) */ - payPrice?: null | number; + payPrice?: null | number | string; /** 发货方式 */ deliveryType?: null | number; /** 自提门店编号 */ @@ -226,6 +228,13 @@ export namespace MallOrderApi { /** 收件人详细地址 */ receiverDetailAddress: string; } + + export interface OrderExpressTrackRespDTO { + /** 发生时间 */ + time: Date; + /** 快递状态 */ + content: string; + } } /** 查询交易订单列表 */ @@ -254,7 +263,9 @@ export function getOrder(id: number) { /** 查询交易订单物流详情 */ export function getExpressTrackList(id: number) { - return requestClient.get(`/trade/order/get-express-track-list?id=${id}`); + return requestClient.get( + `/trade/order/get-express-track-list?id=${id}`, + ); } /** 订单发货 */ diff --git a/apps/web-ele/src/locales/langs/zh-CN/page.json b/apps/web-ele/src/locales/langs/zh-CN/page.json index eefc4924b8cc5d7d9832b93d2414176db8b16e4b..30180ddf8df0253a3c2862fd7aeda1d770b4bf35 100644 --- a/apps/web-ele/src/locales/langs/zh-CN/page.json +++ b/apps/web-ele/src/locales/langs/zh-CN/page.json @@ -29,5 +29,62 @@ "tenant": { "placeholder": "请选择租户", "success": "切换租户成功" + }, + "common": { + "inputText": "请输入", + "selectText": "请选择", + "startTimeText": "开始时间", + "endTimeText": "结束时间", + "login": "登录", + "required": "该项为必填项", + "loginOut": "退出系统", + "document": "项目文档", + "profile": "个人中心", + "reminder": "温馨提示", + "loginOutMessage": "是否退出本系统?", + "back": "返回", + "ok": "确定", + "save": "保存", + "cancel": "取消", + "close": "关闭", + "reload": "重新加载", + "success": "成功", + "closeTab": "关闭标签页", + "closeTheLeftTab": "关闭左侧标签页", + "closeTheRightTab": "关闭右侧标签页", + "closeOther": "关闭其他标签页", + "closeAll": "关闭全部标签页", + "prevLabel": "上一步", + "nextLabel": "下一步", + "skipLabel": "跳过", + "doneLabel": "结束", + "menu": "菜单", + "menuDes": "以路由的结构渲染的菜单栏", + "collapse": "展开缩收", + "collapseDes": "展开和缩放菜单栏", + "tagsView": "标签页", + "tagsViewDes": "用于记录路由历史记录", + "tool": "工具", + "toolDes": "用于设置定制系统", + "query": "查询", + "reset": "重置", + "shrink": "收起", + "expand": "展开", + "confirmTitle": "系统提示", + "exportMessage": "是否确认导出数据项?", + "importMessage": "是否确认导入数据项?", + "createSuccess": "新增成功", + "updateSuccess": "修改成功", + "delMessage": "是否删除所选中数据?", + "delDataMessage": "是否删除数据?", + "delNoData": "请选择需要删除的数据", + "delSuccess": "删除成功", + "index": "序号", + "status": "状态", + "createTime": "创建时间", + "updateTime": "更新时间", + "copy": "复制", + "copySuccess": "复制成功", + "copyError": "复制失败" } } diff --git a/apps/web-ele/src/router/routes/modules/mall.ts b/apps/web-ele/src/router/routes/modules/mall.ts index 80416ba6506d4aba7463153e3622d327134ac551..d5d39646288942208b4fd591374b91f7a5cbc58a 100644 --- a/apps/web-ele/src/router/routes/modules/mall.ts +++ b/apps/web-ele/src/router/routes/modules/mall.ts @@ -40,37 +40,37 @@ const routes: RouteRecordRaw[] = [ }, ], }, - // { - // path: '/mall/trade', - // name: 'TradeCenter', - // meta: { - // title: '交易中心', - // icon: 'lucide:shopping-cart', - // keepAlive: true, - // hideInMenu: true, - // }, - // children: [ - // { - // path: String.raw`order/detail/:id(\d+)`, - // name: 'TradeOrderDetail', - // meta: { - // title: '订单详情', - // activeMenu: '/mall/trade/order', - // }, - // component: () => import('#/views/mall/trade/order/detail/index.vue'), - // }, - // { - // path: String.raw`after-sale/detail/:id(\d+)`, - // name: 'TradeAfterSaleDetail', - // meta: { - // title: '退款详情', - // activeMenu: '/mall/trade/after-sale', - // }, - // component: () => - // import('#/views/mall/trade/afterSale/detail/index.vue'), - // }, - // ], - // }, + { + path: '/mall/trade', + name: 'TradeCenter', + meta: { + title: '交易中心', + icon: 'lucide:shopping-cart', + keepAlive: true, + hideInMenu: true, + }, + children: [ + { + path: String.raw`order/detail/:id(\d+)`, + name: 'TradeOrderDetail', + meta: { + title: '订单详情', + activeMenu: '/mall/trade/order', + }, + component: () => import('#/views/mall/trade/order/modules/detail.vue'), + }, + { + path: String.raw`after-sale/detail/:id(\d+)`, + name: 'TradeAfterSaleDetail', + meta: { + title: '退款详情', + activeMenu: '/mall/trade/after-sale', + }, + component: () => + import('#/views/mall/trade/afterSale/modules/detail.vue'), + }, + ], + }, ]; export default routes; diff --git a/apps/web-ele/src/utils/constants.ts b/apps/web-ele/src/utils/constants.ts index 78da9f94781fca67202a6aa3458734bf733649e5..9b684696b0af81de53ae8ce39b7b76f64f4a5aca 100644 --- a/apps/web-ele/src/utils/constants.ts +++ b/apps/web-ele/src/utils/constants.ts @@ -201,6 +201,16 @@ export const PayOrderStatusEnum = { }; // ========== MALL - 商品模块 ========== +/** + * 商品 首页 日期类型 + */ +export enum TimeRangeTypeEnum { + DAY30 = 1, + MONTH = 30, + WEEK = 7, + YEAR = 365, +} + /** * 商品 SPU 状态 */ diff --git a/apps/web-ele/src/views/infra/codegen/index.vue b/apps/web-ele/src/views/infra/codegen/index.vue index c8ab1b8c3d4e82e90fdcda6b6a51bbd968065a4b..27584befaadbd1f6fa23b8a5fbeb2e0e30388d4c 100644 --- a/apps/web-ele/src/views/infra/codegen/index.vue +++ b/apps/web-ele/src/views/infra/codegen/index.vue @@ -12,7 +12,7 @@ import { useRouter } from 'vue-router'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; import { isEmpty } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -73,47 +73,38 @@ function onEdit(row: InfraCodegenApi.CodegenTable) { /** 删除代码生成配置 */ async function onDelete(row: InfraCodegenApi.CodegenTable) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.tableName]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该代码生成配置吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteCodegenTable(row.id); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.tableName])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteCodegenTable(row.id); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.tableName])); + onRefresh(); } /** 批量删除代码生成配置 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该代码生成配置吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteCodegenTableList(checkedIds.value); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteCodegenTableList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } /** 同步数据库 */ async function onSync(row: InfraCodegenApi.CodegenTable) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.updating', [row.tableName]), - fullscreen: true, + await ElMessageBox.confirm('确定要同步该代码生成配置吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await syncCodegenFromDB(row.id); - ElMessage.success($t('ui.actionMessage.updateSuccess', [row.tableName])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await syncCodegenFromDB(row.id); + ElMessage.success($t('ui.actionMessage.updateSuccess', [row.tableName])); + onRefresh(); } /** 生成代码 */ diff --git a/apps/web-ele/src/views/infra/config/index.vue b/apps/web-ele/src/views/infra/config/index.vue index e765f2bae7a6e7c6d5f62014c6926a7a7690684c..506addc337261228069cc1afcd11ff513a5e29b8 100644 --- a/apps/web-ele/src/views/infra/config/index.vue +++ b/apps/web-ele/src/views/infra/config/index.vue @@ -10,7 +10,7 @@ import { ref } from 'vue'; import { Page, useVbenModal } from '@vben/common-ui'; import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -52,34 +52,26 @@ function onEdit(row: InfraConfigApi.Config) { /** 删除参数 */ async function onDelete(row: InfraConfigApi.Config) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该参数吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteConfig(row.id as number); - loadingInstance.close(); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteConfig(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } /** 批量删除参数 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该参数吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteConfigList(checkedIds.value); - loadingInstance.close(); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteConfigList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/infra/dataSourceConfig/index.vue b/apps/web-ele/src/views/infra/dataSourceConfig/index.vue index 65eacafe4b9f90764121dc4f556dfdfc5cdab00a..f99b565387f91a62cbe699392ec70ed985c61261 100644 --- a/apps/web-ele/src/views/infra/dataSourceConfig/index.vue +++ b/apps/web-ele/src/views/infra/dataSourceConfig/index.vue @@ -10,7 +10,7 @@ import { onMounted, ref } from 'vue'; import { Page, useVbenModal } from '@vben/common-ui'; import { isEmpty } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -40,34 +40,26 @@ function onEdit(row: InfraDataSourceConfigApi.DataSourceConfig) { /** 删除数据源 */ async function onDelete(row: InfraDataSourceConfigApi.DataSourceConfig) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该数据源吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteDataSourceConfig(row.id as number); - loadingInstance.close(); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - await handleLoadData(); - } finally { - loadingInstance.close(); - } + await deleteDataSourceConfig(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } /** 批量删除数据源 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该数据源吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteDataSourceConfigList(checkedIds.value); - loadingInstance.close(); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - await handleLoadData(); - } finally { - loadingInstance.close(); - } + await deleteDataSourceConfigList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/infra/file/index.vue b/apps/web-ele/src/views/infra/file/index.vue index 75385ef6151bcb5b62cd949a1ebba6dcef464eaf..8fcca84b1d682ad8b2806575d2bf0a083d905772 100644 --- a/apps/web-ele/src/views/infra/file/index.vue +++ b/apps/web-ele/src/views/infra/file/index.vue @@ -11,7 +11,7 @@ import { Page, useVbenModal } from '@vben/common-ui'; import { isEmpty, openWindow } from '@vben/utils'; import { useClipboard } from '@vueuse/core'; -import { ElButton, ElImage, ElLoading, ElMessage } from 'element-plus'; +import { ElButton, ElImage, ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { deleteFile, deleteFileList, getFilePage } from '#/api/infra/file'; @@ -60,36 +60,28 @@ function openUrl(url?: string) { /** 删除文件 */ async function onDelete(row: InfraFileApi.File) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name || row.path]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该文件吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteFile(row.id as number); - loadingInstance.close(); - ElMessage.success( - $t('ui.actionMessage.deleteSuccess', [row.name || row.path]), - ); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteFile(row.id as number); + ElMessage.success( + $t('ui.actionMessage.deleteSuccess', [row.name || row.path]), + ); + onRefresh(); } /** 批量删除文件 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该文件吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteFileList(checkedIds.value); - loadingInstance.close(); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteFileList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/infra/fileConfig/index.vue b/apps/web-ele/src/views/infra/fileConfig/index.vue index 8d809c605d1d3ea234c51e21c30fb7577896f7e0..bcf67269e7ca58f5e22ae2f5bd4d497f1c86683e 100644 --- a/apps/web-ele/src/views/infra/fileConfig/index.vue +++ b/apps/web-ele/src/views/infra/fileConfig/index.vue @@ -10,7 +10,7 @@ import { ref } from 'vue'; import { confirm, Page, useVbenModal } from '@vben/common-ui'; import { isEmpty, openWindow } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -86,34 +86,26 @@ async function onTest(row: InfraFileConfigApi.FileConfig) { /** 删除文件配置 */ async function onDelete(row: InfraFileConfigApi.FileConfig) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该文件配置吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteFileConfig(row.id as number); - loadingInstance.close(); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteFileConfig(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } /** 批量删除文件配置 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该文件配置吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteFileConfigList(checkedIds.value); - loadingInstance.close(); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteFileConfigList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/infra/job/index.vue b/apps/web-ele/src/views/infra/job/index.vue index 034a53c67441a8e2c06ad540c049cddb53b6f501..e197c9689e7f7a214fe56598554e252e4d31583b 100644 --- a/apps/web-ele/src/views/infra/job/index.vue +++ b/apps/web-ele/src/views/infra/job/index.vue @@ -11,7 +11,7 @@ import { useRouter } from 'vue-router'; import { confirm, DocAlert, Page, useVbenModal } from '@vben/common-ui'; import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -105,32 +105,26 @@ function onLog(row?: InfraJobApi.Job) { /** 删除任务 */ async function onDelete(row: InfraJobApi.Job) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该任务吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteJob(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteJob(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } /** 批量删除任务 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该任务吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteJobList(checkedIds.value); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteJobList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/mall/home/components/analysis-chart-card.vue b/apps/web-ele/src/views/mall/home/components/analysis-chart-card.vue new file mode 100644 index 0000000000000000000000000000000000000000..807b6bad090c36ae81382bd3e338506eb8045d20 --- /dev/null +++ b/apps/web-ele/src/views/mall/home/components/analysis-chart-card.vue @@ -0,0 +1,25 @@ + + + diff --git a/apps/web-ele/src/views/mall/home/components/analysis-overview-icon.vue b/apps/web-ele/src/views/mall/home/components/analysis-overview-icon.vue new file mode 100644 index 0000000000000000000000000000000000000000..80ebbbd80e5713e023196d79da2d0a2eded3fe20 --- /dev/null +++ b/apps/web-ele/src/views/mall/home/components/analysis-overview-icon.vue @@ -0,0 +1,100 @@ + + + diff --git a/apps/web-ele/src/views/mall/home/components/analysis-overview.vue b/apps/web-ele/src/views/mall/home/components/analysis-overview.vue new file mode 100644 index 0000000000000000000000000000000000000000..6e1aa439f9000193f08c3950beb740ada11a8d8b --- /dev/null +++ b/apps/web-ele/src/views/mall/home/components/analysis-overview.vue @@ -0,0 +1,174 @@ + + + + diff --git a/apps/web-ele/src/views/mall/home/components/analysis-trade-overview.vue b/apps/web-ele/src/views/mall/home/components/analysis-trade-overview.vue new file mode 100644 index 0000000000000000000000000000000000000000..b188a9d2cffe2b5fe7964bae323094588ffd9b7b --- /dev/null +++ b/apps/web-ele/src/views/mall/home/components/analysis-trade-overview.vue @@ -0,0 +1,87 @@ + + + diff --git a/apps/web-ele/src/views/mall/home/components/data.ts b/apps/web-ele/src/views/mall/home/components/data.ts new file mode 100644 index 0000000000000000000000000000000000000000..021a20e5fdf9e3c4fef07f14e3e42e1bc6b32b41 --- /dev/null +++ b/apps/web-ele/src/views/mall/home/components/data.ts @@ -0,0 +1,39 @@ +export interface WorkbenchQuickDataShowItem { + name: string; + value: number; + prefix: string; + decimals: number; + routerName: string; +} + +export interface AnalysisOverviewItem { + title: string; + totalTitle?: string; + totalValue?: number; + value: number; + prefix?: string; + tooltip?: string; + // 环比增长相关字段 + showGrowthRate?: boolean; // 是否显示环比增长率,默认为false +} + +export interface AnalysisOverviewIconItem { + icon: string; + title: string; + value: number; + prefix?: string; + iconBgColor: string; + iconColor: string; + tooltip?: string; + decimals?: number; + percent?: number; +} + +export interface AnalysisOverviewTradeItem { + title: string; + value: number; + prefix?: string; + decimals?: number; + percent?: number; + tooltip?: string; +} diff --git a/apps/web-ele/src/views/mall/home/components/member-funnel-card.vue b/apps/web-ele/src/views/mall/home/components/member-funnel-card.vue new file mode 100644 index 0000000000000000000000000000000000000000..089e507ad480f3037ad224a60c3f9f633886a8d5 --- /dev/null +++ b/apps/web-ele/src/views/mall/home/components/member-funnel-card.vue @@ -0,0 +1,162 @@ + + + diff --git a/apps/web-ele/src/views/mall/home/components/member-statistics-card.vue b/apps/web-ele/src/views/mall/home/components/member-statistics-card.vue new file mode 100644 index 0000000000000000000000000000000000000000..603e9bbcfe645d96a9620cfc5220a417cf352933 --- /dev/null +++ b/apps/web-ele/src/views/mall/home/components/member-statistics-card.vue @@ -0,0 +1,101 @@ + + diff --git a/apps/web-ele/src/views/mall/home/components/member-terminal-card.vue b/apps/web-ele/src/views/mall/home/components/member-terminal-card.vue new file mode 100644 index 0000000000000000000000000000000000000000..6631ef7bac3ffb999eb02d1a17cc3226e200ac59 --- /dev/null +++ b/apps/web-ele/src/views/mall/home/components/member-terminal-card.vue @@ -0,0 +1,80 @@ + + diff --git a/apps/web-ele/src/views/mall/home/components/shortcut-date-range-picker.vue b/apps/web-ele/src/views/mall/home/components/shortcut-date-range-picker.vue new file mode 100644 index 0000000000000000000000000000000000000000..a8431d5cd1d1530dab69431c0286fe6645943dc4 --- /dev/null +++ b/apps/web-ele/src/views/mall/home/components/shortcut-date-range-picker.vue @@ -0,0 +1,87 @@ + + diff --git a/apps/web-ele/src/views/mall/home/components/trade-trend-card.vue b/apps/web-ele/src/views/mall/home/components/trade-trend-card.vue new file mode 100644 index 0000000000000000000000000000000000000000..8c2b2b6923c70f5ae739c62d0ea1263267c57ed3 --- /dev/null +++ b/apps/web-ele/src/views/mall/home/components/trade-trend-card.vue @@ -0,0 +1,225 @@ + + diff --git a/apps/web-ele/src/views/mall/home/components/workbench-quick-data-show.vue b/apps/web-ele/src/views/mall/home/components/workbench-quick-data-show.vue new file mode 100644 index 0000000000000000000000000000000000000000..3d55ccb8bbe94587f3e85ee0162f9e84136e0d72 --- /dev/null +++ b/apps/web-ele/src/views/mall/home/components/workbench-quick-data-show.vue @@ -0,0 +1,72 @@ + + + diff --git a/apps/web-ele/src/views/mall/home/index.vue b/apps/web-ele/src/views/mall/home/index.vue index 21b6279b470e883a3a761b77e96c03896ed442cc..3ebbe281ad7c6ec44515278d83e031368166ce87 100644 --- a/apps/web-ele/src/views/mall/home/index.vue +++ b/apps/web-ele/src/views/mall/home/index.vue @@ -1,29 +1,30 @@ + + diff --git a/apps/web-ele/src/views/mall/statistics/member/components/member-sex-card.vue b/apps/web-ele/src/views/mall/statistics/member/components/member-sex-card.vue new file mode 100644 index 0000000000000000000000000000000000000000..84b8c7e65ea347f01f3a7ddca3a9a82eced0a4f3 --- /dev/null +++ b/apps/web-ele/src/views/mall/statistics/member/components/member-sex-card.vue @@ -0,0 +1,72 @@ + + + diff --git a/apps/web-ele/src/views/mall/statistics/member/index.vue b/apps/web-ele/src/views/mall/statistics/member/index.vue index 203b6d91164ea36b733dc1f28e8c8233de80218a..c98ec1b2e8792892f4bf99c421ea95a04295db18 100644 --- a/apps/web-ele/src/views/mall/statistics/member/index.vue +++ b/apps/web-ele/src/views/mall/statistics/member/index.vue @@ -1,7 +1,64 @@ diff --git a/apps/web-ele/src/views/mall/statistics/product/components/product-rank.vue b/apps/web-ele/src/views/mall/statistics/product/components/product-rank.vue new file mode 100644 index 0000000000000000000000000000000000000000..09ba064c5ee8c991347bd127881cf9727cb71522 --- /dev/null +++ b/apps/web-ele/src/views/mall/statistics/product/components/product-rank.vue @@ -0,0 +1,153 @@ + + + diff --git a/apps/web-ele/src/views/mall/statistics/product/components/product-summary.vue b/apps/web-ele/src/views/mall/statistics/product/components/product-summary.vue new file mode 100644 index 0000000000000000000000000000000000000000..41e7a94a1a75362d6ebab97136b501118cfc2461 --- /dev/null +++ b/apps/web-ele/src/views/mall/statistics/product/components/product-summary.vue @@ -0,0 +1,331 @@ + + + diff --git a/apps/web-ele/src/views/mall/statistics/product/index.vue b/apps/web-ele/src/views/mall/statistics/product/index.vue index cfc1f5ce30769edcd950c4581b7e42d687c08ade..26d1b86ca75197b3778e63df32506fef8792d194 100644 --- a/apps/web-ele/src/views/mall/statistics/product/index.vue +++ b/apps/web-ele/src/views/mall/statistics/product/index.vue @@ -1,7 +1,8 @@ diff --git a/apps/web-ele/src/views/mall/statistics/trade/components/trade-transaction-card.vue b/apps/web-ele/src/views/mall/statistics/trade/components/trade-transaction-card.vue new file mode 100644 index 0000000000000000000000000000000000000000..9087e0ef2b9b18cf0764ee724698f72f185a9c3d --- /dev/null +++ b/apps/web-ele/src/views/mall/statistics/trade/components/trade-transaction-card.vue @@ -0,0 +1,280 @@ + + diff --git a/apps/web-ele/src/views/mall/statistics/trade/index.vue b/apps/web-ele/src/views/mall/statistics/trade/index.vue index dd0e7eb2b5c9b19f3c24957c91344e63c75f2d00..4aae9367de52504dacbf4d148aec8629c7432089 100644 --- a/apps/web-ele/src/views/mall/statistics/trade/index.vue +++ b/apps/web-ele/src/views/mall/statistics/trade/index.vue @@ -1,7 +1,76 @@ diff --git a/apps/web-ele/src/views/mall/trade/afterSale/modules/detail.vue b/apps/web-ele/src/views/mall/trade/afterSale/modules/detail.vue new file mode 100644 index 0000000000000000000000000000000000000000..1c35bcef447d8a8f5faddaed28adbceae1e80b68 --- /dev/null +++ b/apps/web-ele/src/views/mall/trade/afterSale/modules/detail.vue @@ -0,0 +1,450 @@ + + + diff --git a/apps/web-ele/src/views/mall/trade/afterSale/modules/disagree-form.vue b/apps/web-ele/src/views/mall/trade/afterSale/modules/disagree-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..5408161610d91068ecb8051d8d748177b8b5be2d --- /dev/null +++ b/apps/web-ele/src/views/mall/trade/afterSale/modules/disagree-form.vue @@ -0,0 +1,129 @@ + + + diff --git a/apps/web-ele/src/views/mall/trade/brokerage/user/index.vue b/apps/web-ele/src/views/mall/trade/brokerage/user/index.vue index b9e51048061220d9ad6f71090f1248f9a152dc1f..93f764f6dea758b25a242422cc064b97170c82f0 100644 --- a/apps/web-ele/src/views/mall/trade/brokerage/user/index.vue +++ b/apps/web-ele/src/views/mall/trade/brokerage/user/index.vue @@ -6,7 +6,7 @@ import { useAccess } from '@vben/access'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; import { $t } from '@vben/locales'; -import { ElLoading, ElMessage, ElSwitch } from 'element-plus'; +import { ElLoading, ElMessage, ElMessageBox, ElSwitch } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -68,17 +68,14 @@ function openCreateUserForm() { /** 清除上级推广人 */ async function handleClearBindUser(row: MallBrokerageUserApi.BrokerageUser) { - const loadingInstance = ElLoading.service({ - text: `正在清除"${row.nickname}"的上级推广人...`, - fullscreen: true, + await ElMessageBox.confirm(`确定清除"${row.nickname}"的上级推广人吗?`, { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await clearBindUser({ id: row.id as number }); - ElMessage.success('清除成功'); - onRefresh(); - } finally { - loadingInstance.close(); - } + await clearBindUser({ id: row.id as number }); + ElMessage.success('清除成功'); + onRefresh(); } /** 推广资格:开通/关闭 */ diff --git a/apps/web-ele/src/views/mall/trade/brokerage/withdraw/index.vue b/apps/web-ele/src/views/mall/trade/brokerage/withdraw/index.vue index d6cd5921fc3e6e22f1e73af4b5035a7d9429a5fb..6ae35d480235eacc8841883d0993af3c2a31adf5 100644 --- a/apps/web-ele/src/views/mall/trade/brokerage/withdraw/index.vue +++ b/apps/web-ele/src/views/mall/trade/brokerage/withdraw/index.vue @@ -4,10 +4,10 @@ import type { MallBrokerageWithdrawApi } from '#/api/mall/trade/brokerage/withdr import { h } from 'vue'; -import { confirm, Page, prompt } from '@vben/common-ui'; +import { Page, prompt } from '@vben/common-ui'; import { formatDateTime } from '@vben/utils'; -import { ElInput, ElMessage } from 'element-plus'; +import { ElInput, ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -35,14 +35,14 @@ function onRefresh() { /** 审核通过 */ async function handleApprove(row: MallBrokerageWithdrawApi.BrokerageWithdraw) { - try { - await confirm('确定要审核通过吗?'); - await approveBrokerageWithdraw(row.id); - ElMessage.success($t('ui.actionMessage.operationSuccess')); - onRefresh(); - } catch (error) { - console.error('审核失败:', error); - } + await ElMessageBox.confirm('确定要审核通过吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }); + await approveBrokerageWithdraw(row.id); + ElMessage.success($t('ui.actionMessage.operationSuccess')); + onRefresh(); } /** 审核驳回 */ @@ -73,14 +73,14 @@ function handleReject(row: MallBrokerageWithdrawApi.BrokerageWithdraw) { async function handleRetryTransfer( row: MallBrokerageWithdrawApi.BrokerageWithdraw, ) { - try { - await confirm('确定要重新转账吗?'); - await approveBrokerageWithdraw(row.id); - ElMessage.success($t('ui.actionMessage.operationSuccess')); - onRefresh(); - } catch (error) { - console.error('重新转账失败:', error); - } + await ElMessageBox.confirm('确定要重新转账吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }); + await approveBrokerageWithdraw(row.id); + ElMessage.success($t('ui.actionMessage.operationSuccess')); + onRefresh(); } const [Grid, gridApi] = useVbenVxeGrid({ diff --git a/apps/web-ele/src/views/mall/trade/delivery/express/index.vue b/apps/web-ele/src/views/mall/trade/delivery/express/index.vue index 97ba38045e9275a9ea9861f6ea338ded94f20ae6..82dba2bd73016f6217c88e7fd2316a4ed1a13b48 100644 --- a/apps/web-ele/src/views/mall/trade/delivery/express/index.vue +++ b/apps/web-ele/src/views/mall/trade/delivery/express/index.vue @@ -5,7 +5,7 @@ import type { MallDeliveryExpressApi } from '#/api/mall/trade/delivery/express'; import { Page, useVbenModal } from '@vben/common-ui'; import { downloadFileFromBlobPart } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -46,16 +46,14 @@ function handleEdit(row: MallDeliveryExpressApi.DeliveryExpress) { /** 删除快递公司 */ async function handleDelete(row: MallDeliveryExpressApi.DeliveryExpress) { - const hideLoading = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), + await ElMessageBox.confirm($t('ui.actionMessage.deleting', [row.name]), { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteDeliveryExpress(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - hideLoading.close(); - } + await deleteDeliveryExpress(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } const [Grid, gridApi] = useVbenVxeGrid({ diff --git a/apps/web-ele/src/views/mall/trade/delivery/expressTemplate/index.vue b/apps/web-ele/src/views/mall/trade/delivery/expressTemplate/index.vue index 76751bfa263a414dd5324710250797eb34801623..230eb11297ff490af7b591045d6d8304aee5dce9 100644 --- a/apps/web-ele/src/views/mall/trade/delivery/expressTemplate/index.vue +++ b/apps/web-ele/src/views/mall/trade/delivery/expressTemplate/index.vue @@ -4,7 +4,7 @@ import type { MallDeliveryExpressTemplateApi } from '#/api/mall/trade/delivery/e import { Page, useVbenModal } from '@vben/common-ui'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -40,16 +40,14 @@ function handleEdit(row: MallDeliveryExpressTemplateApi.ExpressTemplate) { async function handleDelete( row: MallDeliveryExpressTemplateApi.ExpressTemplate, ) { - const hideLoading = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), + await ElMessageBox.confirm($t('ui.actionMessage.deleting', [row.name]), { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteDeliveryExpressTemplate(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - hideLoading.close(); - } + await deleteDeliveryExpressTemplate(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } const [Grid, gridApi] = useVbenVxeGrid({ diff --git a/apps/web-ele/src/views/mall/trade/delivery/pickUpOrder/data.ts b/apps/web-ele/src/views/mall/trade/delivery/pickUpOrder/data.ts index a020803853ed2cb292c2b1037a84320f211d6fd3..8b03d72c885850055e408af01d24ca042ceaebef 100644 --- a/apps/web-ele/src/views/mall/trade/delivery/pickUpOrder/data.ts +++ b/apps/web-ele/src/views/mall/trade/delivery/pickUpOrder/data.ts @@ -35,10 +35,8 @@ export function useGridFormSchema(): VbenFormSchema[] { component: 'ApiSelect', componentProps: { api: getSimpleDeliveryPickUpStoreList, - fieldNames: { - label: 'name', - value: 'id', - }, + labelField: 'name', + valueField: 'id', }, dependencies: { triggerFields: ['deliveryType'], diff --git a/apps/web-ele/src/views/mall/trade/delivery/pickUpStore/data.ts b/apps/web-ele/src/views/mall/trade/delivery/pickUpStore/data.ts index ac3e0828730464ed43755074c5f4165a87d0db7b..86b08471f881caca5dc537d0d2ec2f0797d3edb5 100644 --- a/apps/web-ele/src/views/mall/trade/delivery/pickUpStore/data.ts +++ b/apps/web-ele/src/views/mall/trade/delivery/pickUpStore/data.ts @@ -51,7 +51,9 @@ export function useFormSchema(): VbenFormSchema[] { component: 'ApiTreeSelect', componentProps: { api: () => getAreaTree(), - fieldNames: { label: 'name', value: 'id', children: 'children' }, + labelField: 'name', + valueField: 'id', + childrenField: 'children', }, }, { @@ -130,7 +132,8 @@ export function useBindFormSchema(): VbenFormSchema[] { rules: 'required', componentProps: { api: () => getSimpleUserList(), - fieldNames: { label: 'nickname', value: 'id' }, + labelField: 'nickname', + valueField: 'id', mode: 'tags', allowClear: true, }, diff --git a/apps/web-ele/src/views/mall/trade/delivery/pickUpStore/index.vue b/apps/web-ele/src/views/mall/trade/delivery/pickUpStore/index.vue index 769decd18218e60f55449942b19d908a3fb8dbd9..c74b3ec38c0505ed5d9f30a3b761be09b4b83bec 100644 --- a/apps/web-ele/src/views/mall/trade/delivery/pickUpStore/index.vue +++ b/apps/web-ele/src/views/mall/trade/delivery/pickUpStore/index.vue @@ -4,7 +4,7 @@ import type { MallDeliveryPickUpStoreApi } from '#/api/mall/trade/delivery/pickU import { Page, useVbenModal } from '@vben/common-ui'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -49,16 +49,14 @@ function handleBind(row: MallDeliveryPickUpStoreApi.PickUpStore) { /** 删除门店 */ async function handleDelete(row: MallDeliveryPickUpStoreApi.PickUpStore) { - const hideLoading = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), + await ElMessageBox.confirm('确定要删除该门店吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteDeliveryPickUpStore(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - hideLoading.close(); - } + await deleteDeliveryPickUpStore(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } const [Grid, gridApi] = useVbenVxeGrid({ diff --git a/apps/web-ele/src/views/mall/trade/order/modules/delevery-form.vue b/apps/web-ele/src/views/mall/trade/order/modules/delevery-form.vue index 92fd9fec446d039689495d717535eaf543570595..5408161610d91068ecb8051d8d748177b8b5be2d 100644 --- a/apps/web-ele/src/views/mall/trade/order/modules/delevery-form.vue +++ b/apps/web-ele/src/views/mall/trade/order/modules/delevery-form.vue @@ -54,10 +54,8 @@ const [Form, formApi] = useVbenForm({ component: 'ApiSelect', componentProps: { api: getSimpleDeliveryExpressList, - fieldNames: { - label: 'name', - value: 'id', - }, + labelField: 'name', + valueField: 'id', }, dependencies: { triggerFields: ['expressType'], diff --git a/apps/web-ele/src/views/mall/trade/order/modules/detail.vue b/apps/web-ele/src/views/mall/trade/order/modules/detail.vue new file mode 100644 index 0000000000000000000000000000000000000000..b7536688440e42e74c4adcbc19070b96a371cf92 --- /dev/null +++ b/apps/web-ele/src/views/mall/trade/order/modules/detail.vue @@ -0,0 +1,561 @@ + + + diff --git a/apps/web-ele/src/views/mall/trade/order/modules/update-address-form.vue b/apps/web-ele/src/views/mall/trade/order/modules/update-address-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..c68d5fe788302ad96317a06d62f5e968aa355f72 --- /dev/null +++ b/apps/web-ele/src/views/mall/trade/order/modules/update-address-form.vue @@ -0,0 +1,131 @@ + + + diff --git a/apps/web-ele/src/views/mall/trade/order/modules/update-price-form.vue b/apps/web-ele/src/views/mall/trade/order/modules/update-price-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..1728944c5655cf042f9612e47add83aeb148b7a4 --- /dev/null +++ b/apps/web-ele/src/views/mall/trade/order/modules/update-price-form.vue @@ -0,0 +1,134 @@ + + + diff --git a/apps/web-ele/src/views/mall/trade/order/modules/update-remark-form.vue b/apps/web-ele/src/views/mall/trade/order/modules/update-remark-form.vue new file mode 100644 index 0000000000000000000000000000000000000000..b84767caf99b956c13d6ec79b276d768db77d185 --- /dev/null +++ b/apps/web-ele/src/views/mall/trade/order/modules/update-remark-form.vue @@ -0,0 +1,94 @@ + + + diff --git a/apps/web-ele/src/views/member/group/index.vue b/apps/web-ele/src/views/member/group/index.vue index 6955a12e5b7df9c76d77aa814c434efc22acea62..3ef08103a7cf74874cd0ed9623c4dc3466da3dd0 100644 --- a/apps/web-ele/src/views/member/group/index.vue +++ b/apps/web-ele/src/views/member/group/index.vue @@ -4,7 +4,7 @@ import type { MemberGroupApi } from '#/api/member/group'; import { Page, useVbenModal } from '@vben/common-ui'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { deleteGroup, getGroupPage } from '#/api/member/group'; @@ -35,17 +35,14 @@ function handleEdit(row: MemberGroupApi.Group) { /** 删除分组 */ async function handleDelete(row: MemberGroupApi.Group) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该分组吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteGroup(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteGroup(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } const [Grid, gridApi] = useVbenVxeGrid({ diff --git a/apps/web-ele/src/views/member/level/index.vue b/apps/web-ele/src/views/member/level/index.vue index b45701cd552a2a8900d5a8e103e28ec9ef0286a9..463538c95ad205caf94ea58e98a1c0369bc623dd 100644 --- a/apps/web-ele/src/views/member/level/index.vue +++ b/apps/web-ele/src/views/member/level/index.vue @@ -4,7 +4,7 @@ import type { MemberLevelApi } from '#/api/member/level'; import { Page, useVbenModal } from '@vben/common-ui'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { deleteLevel, getLevelList } from '#/api/member/level'; @@ -35,17 +35,14 @@ function handleEdit(row: MemberLevelApi.Level) { /** 删除等级 */ async function handleDelete(row: MemberLevelApi.Level) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该等级吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteLevel(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteLevel(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } const [Grid, gridApi] = useVbenVxeGrid({ diff --git a/apps/web-ele/src/views/member/tag/index.vue b/apps/web-ele/src/views/member/tag/index.vue index ac336af8c6faeb07487e883e478f7e5b5f4507c7..3194c6d7dda05c7507c8e0ff0b58f7efd18f1446 100644 --- a/apps/web-ele/src/views/member/tag/index.vue +++ b/apps/web-ele/src/views/member/tag/index.vue @@ -4,7 +4,7 @@ import type { MemberTagApi } from '#/api/member/tag'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { deleteMemberTag, getMemberTagPage } from '#/api/member/tag'; @@ -35,17 +35,14 @@ function handleEdit(row: MemberTagApi.Tag) { /** 删除会员标签 */ async function handleDelete(row: MemberTagApi.Tag) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该会员标签吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteMemberTag(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteMemberTag(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } const [Grid, gridApi] = useVbenVxeGrid({ diff --git a/apps/web-ele/src/views/member/user/data.ts b/apps/web-ele/src/views/member/user/data.ts index 12c5353aac440f76a80f01b98d59f4c61799659c..aaadde5faeb8e44219273ef6193e925b117bf054 100644 --- a/apps/web-ele/src/views/member/user/data.ts +++ b/apps/web-ele/src/views/member/user/data.ts @@ -86,7 +86,9 @@ export function useFormSchema(): VbenFormSchema[] { label: '所在地', componentProps: { api: () => getAreaTree(), - fieldNames: { label: 'name', value: 'id', children: 'children' }, + labelField: 'name', + valueField: 'id', + childrenField: 'children', }, }, { @@ -95,7 +97,8 @@ export function useFormSchema(): VbenFormSchema[] { label: '用户标签', componentProps: { api: () => getSimpleTagList(), - fieldNames: { label: 'name', value: 'id' }, + labelField: 'name', + valueField: 'id', mode: 'multiple', }, }, @@ -105,7 +108,8 @@ export function useFormSchema(): VbenFormSchema[] { label: '用户分组', componentProps: { api: () => getSimpleGroupList(), - fieldNames: { label: 'name', value: 'id' }, + labelField: 'name', + valueField: 'id', }, }, { @@ -151,7 +155,8 @@ export function useGridFormSchema(): VbenFormSchema[] { component: 'ApiSelect', componentProps: { api: () => getSimpleTagList(), - fieldNames: { label: 'name', value: 'id' }, + labelField: 'name', + valueField: 'id', mode: 'multiple', }, }, @@ -161,7 +166,8 @@ export function useGridFormSchema(): VbenFormSchema[] { component: 'ApiSelect', componentProps: { api: () => getSimpleLevelList(), - fieldNames: { label: 'name', value: 'id' }, + labelField: 'name', + valueField: 'id', }, }, { @@ -170,7 +176,8 @@ export function useGridFormSchema(): VbenFormSchema[] { component: 'ApiSelect', componentProps: { api: () => getSimpleGroupList(), - fieldNames: { label: 'name', value: 'id' }, + labelField: 'name', + valueField: 'id', }, }, ]; @@ -290,7 +297,8 @@ export function useLeavelFormSchema(): VbenFormSchema[] { component: 'ApiSelect', componentProps: { api: () => getSimpleLevelList(), - fieldNames: { label: 'name', value: 'id' }, + labelField: 'name', + valueField: 'id', }, }, { diff --git a/apps/web-ele/src/views/pay/app/index.vue b/apps/web-ele/src/views/pay/app/index.vue index 89bf837583c0370e8cfc1da46e8d75842ab80f65..6659e226a8e4c8cc484887b38222b1b633d6901d 100644 --- a/apps/web-ele/src/views/pay/app/index.vue +++ b/apps/web-ele/src/views/pay/app/index.vue @@ -4,7 +4,7 @@ import type { PayAppApi } from '#/api/pay/app/index'; import { confirm, DocAlert, Page, useVbenModal } from '@vben/common-ui'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { changeAppStatus, deleteApp, getAppPage } from '#/api/pay/app/index'; @@ -39,17 +39,14 @@ function handleEdit(row: Required) { } async function handleDelete(row: Required) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该应用吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteApp(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteApp(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } /** 更新状态 */ diff --git a/apps/web-ele/src/views/pay/wallet/rechargePackage/index.vue b/apps/web-ele/src/views/pay/wallet/rechargePackage/index.vue index 8a1513f35c91b0b7164e3e5394c196b4fdb47546..69b5696708b42371f97afa943e93ac6009cdd9ae 100644 --- a/apps/web-ele/src/views/pay/wallet/rechargePackage/index.vue +++ b/apps/web-ele/src/views/pay/wallet/rechargePackage/index.vue @@ -3,7 +3,7 @@ import type { VxeTableGridOptions } from '#/adapter/vxe-table'; import { Page, useVbenModal } from '@vben/common-ui'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -37,17 +37,14 @@ function handleEdit(row: any) { /** 删除套餐 */ async function handleDelete(row: any) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该充值套餐吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deletePackage(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deletePackage(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } const [Grid, gridApi] = useVbenVxeGrid({ diff --git a/apps/web-ele/src/views/system/dept/index.vue b/apps/web-ele/src/views/system/dept/index.vue index abaaf0c6d663dae9b874b1a3316e1cbccdb6a9e3..78f08840aeaeff3c21a02ae088e69ba779f4d373 100644 --- a/apps/web-ele/src/views/system/dept/index.vue +++ b/apps/web-ele/src/views/system/dept/index.vue @@ -11,7 +11,7 @@ import { onMounted, ref } from 'vue'; import { Page, useVbenModal } from '@vben/common-ui'; import { Plus } from '@vben/icons'; -import { ElButton, ElLoading, ElMessage } from 'element-plus'; +import { ElButton, ElMessage, ElMessageBox } from 'element-plus'; import { useVbenVxeGrid } from '#/adapter/vxe-table'; import { deleteDept, getDeptList } from '#/api/system/dept'; @@ -62,19 +62,14 @@ function onEdit(row: SystemDeptApi.Dept) { /** 删除部门 */ async function onDelete(row: SystemDeptApi.Dept) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该部门吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteDept(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } catch { - // 异常处理 - } finally { - loadingInstance.close(); - } + await deleteDept(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } /** 表格操作按钮的回调函数 */ diff --git a/apps/web-ele/src/views/system/dict/modules/data-grid.vue b/apps/web-ele/src/views/system/dict/modules/data-grid.vue index a28ccc0152a6f54454b96646c2e68ad3657ec8ad..6a9c9e1e1868ccc498aa9125cc45c5330dbf1318 100644 --- a/apps/web-ele/src/views/system/dict/modules/data-grid.vue +++ b/apps/web-ele/src/views/system/dict/modules/data-grid.vue @@ -10,7 +10,7 @@ import { ref, watch } from 'vue'; import { useVbenModal } from '@vben/common-ui'; import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -59,32 +59,26 @@ function onEdit(row: any) { /** 删除字典数据 */ async function onDelete(row: any) { - const loadingInstance = ElLoading.service({ - text: $t('common.processing'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该字典数据吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteDictData(row.id); - ElMessage.success($t('common.operationSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteDictData(row.id); + ElMessage.success($t('common.operationSuccess')); + onRefresh(); } /** 批量删除字典数据 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该字典数据吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteDictDataList(checkedIds.value); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteDictDataList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/system/dict/modules/type-grid.vue b/apps/web-ele/src/views/system/dict/modules/type-grid.vue index 675b665a960ee5ce0ea8e7e9c912f62c93ac29ae..1c6f8ea227e4969636d94b07a727f1d3dbe3ef37 100644 --- a/apps/web-ele/src/views/system/dict/modules/type-grid.vue +++ b/apps/web-ele/src/views/system/dict/modules/type-grid.vue @@ -10,7 +10,7 @@ import { ref } from 'vue'; import { useVbenModal } from '@vben/common-ui'; import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -54,32 +54,26 @@ function onEdit(row: any) { /** 删除字典类型 */ async function onDelete(row: SystemDictTypeApi.DictType) { - const loadingInstance = ElLoading.service({ - text: $t('common.processing'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该字典类型吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteDictType(row.id as number); - ElMessage.success($t('common.operationSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteDictType(row.id as number); + ElMessage.success($t('common.operationSuccess')); + onRefresh(); } /** 批量删除字典类型 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该字典类型吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteDictTypeList(checkedIds.value); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteDictTypeList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/system/mail/account/index.vue b/apps/web-ele/src/views/system/mail/account/index.vue index fdd342bbd274a57506bcd07bf23f62db84a601bd..10a7dacc23420d78616f643cb1d6714abb2b4a33 100644 --- a/apps/web-ele/src/views/system/mail/account/index.vue +++ b/apps/web-ele/src/views/system/mail/account/index.vue @@ -10,7 +10,7 @@ import { ref } from 'vue'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; import { isEmpty } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -45,32 +45,26 @@ function onEdit(row: SystemMailAccountApi.MailAccount) { /** 删除邮箱账号 */ async function onDelete(row: SystemMailAccountApi.MailAccount) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.mail]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该邮箱账号吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteMailAccount(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.mail])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteMailAccount(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.mail])); + onRefresh(); } /** 批量删除邮箱账号 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该邮箱账号吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteMailAccountList(checkedIds.value); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteMailAccountList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/system/mail/template/index.vue b/apps/web-ele/src/views/system/mail/template/index.vue index 3e2bedcacf9e490c97622fac248851c1e64888d6..5ebc854c805a6927e381418a7cee184b6351b2de 100644 --- a/apps/web-ele/src/views/system/mail/template/index.vue +++ b/apps/web-ele/src/views/system/mail/template/index.vue @@ -11,7 +11,7 @@ import { onMounted, ref } from 'vue'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; import { isEmpty } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { getSimpleMailAccountList } from '#/api/system/mail/account'; @@ -65,32 +65,26 @@ function onSend(row: SystemMailTemplateApi.MailTemplate) { /** 删除邮件模板 */ async function onDelete(row: SystemMailTemplateApi.MailTemplate) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该邮件模板吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteMailTemplate(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteMailTemplate(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } /** 批量删除邮件模板 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该邮件模板吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteMailTemplateList(checkedIds.value); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteMailTemplateList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/system/menu/index.vue b/apps/web-ele/src/views/system/menu/index.vue index f8f2959e021a39604ba1ec5646042aa6b4c93e00..1254848803f55fb78ba6efcebdf34bafc25d54fd 100644 --- a/apps/web-ele/src/views/system/menu/index.vue +++ b/apps/web-ele/src/views/system/menu/index.vue @@ -10,7 +10,7 @@ import { ref } from 'vue'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; import { IconifyIcon, Plus } from '@vben/icons'; -import { ElButton, ElLoading, ElMessage } from 'element-plus'; +import { ElButton, ElMessage, ElMessageBox } from 'element-plus'; import { useVbenVxeGrid } from '#/adapter/vxe-table'; import { deleteMenu, getMenuList } from '#/api/system/menu'; @@ -47,19 +47,14 @@ function onEdit(row: SystemMenuApi.Menu) { /** 删除菜单 */ async function onDelete(row: SystemMenuApi.Menu) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该菜单吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteMenu(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } catch { - // 异常处理 - } finally { - loadingInstance.close(); - } + await deleteMenu(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } /** 表格操作按钮的回调函数 */ diff --git a/apps/web-ele/src/views/system/notice/index.vue b/apps/web-ele/src/views/system/notice/index.vue index 4970ac43c76e2fed65e69dd7782cd5aeae4b4de9..85d225cfa68c3f8bcc68224f1a804e05ef4792e1 100644 --- a/apps/web-ele/src/views/system/notice/index.vue +++ b/apps/web-ele/src/views/system/notice/index.vue @@ -10,7 +10,7 @@ import { ref } from 'vue'; import { Page, useVbenModal } from '@vben/common-ui'; import { isEmpty } from '@vben/utils'; -import { ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -46,36 +46,26 @@ function onEdit(row: SystemNoticeApi.Notice) { /** 删除公告 */ async function onDelete(row: SystemNoticeApi.Notice) { - const loadingInstance = ElMessage({ - message: $t('ui.actionMessage.deleting', [row.title]), - type: 'info', - duration: 0, + await ElMessageBox.confirm('确定要删除该公告吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteNotice(row.id as number); - loadingInstance.close(); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.title])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteNotice(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.title])); + onRefresh(); } /** 批量删除公告 */ async function onDeleteBatch() { - const loadingInstance = ElMessage({ - message: $t('ui.actionMessage.deleting'), - type: 'info', - duration: 0, + await ElMessageBox.confirm('确定要删除该公告吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteNoticeList(checkedIds.value); - loadingInstance.close(); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteNoticeList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/system/oauth2/client/index.vue b/apps/web-ele/src/views/system/oauth2/client/index.vue index 895c4c7a2b6c105f506c71821fc3677a8aa4a60c..c0faaaffc61584e0f4eed61e9f7a7f5926595f36 100644 --- a/apps/web-ele/src/views/system/oauth2/client/index.vue +++ b/apps/web-ele/src/views/system/oauth2/client/index.vue @@ -10,7 +10,7 @@ import { ref } from 'vue'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; import { isEmpty } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -45,32 +45,26 @@ function onEdit(row: SystemOAuth2ClientApi.OAuth2Client) { /** 删除 OAuth2 客户端 */ async function onDelete(row: SystemOAuth2ClientApi.OAuth2Client) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该 OAuth2 客户端吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteOAuth2Client(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteOAuth2Client(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } /** 批量删除 OAuth2 客户端 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该 OAuth2 客户端吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteOAuth2ClientList(checkedIds.value); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteOAuth2ClientList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/system/oauth2/token/index.vue b/apps/web-ele/src/views/system/oauth2/token/index.vue index 88b0311a098f9689a256b909c68ee259826fac49..7a83b532376813d17907dd76a1919d959f01a804 100644 --- a/apps/web-ele/src/views/system/oauth2/token/index.vue +++ b/apps/web-ele/src/views/system/oauth2/token/index.vue @@ -7,7 +7,7 @@ import type { SystemOAuth2TokenApi } from '#/api/system/oauth2/token'; import { DocAlert, Page } from '@vben/common-ui'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -25,19 +25,14 @@ function onRefresh() { /** 删除 OAuth2 令牌 */ async function onDelete(row: SystemOAuth2TokenApi.OAuth2Token) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', ['令牌']), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该令牌吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteOAuth2Token(row.accessToken); - ElMessage.success($t('ui.actionMessage.operationSuccess')); - onRefresh(); - } catch { - // 异常处理 - } finally { - loadingInstance.close(); - } + await deleteOAuth2Token(row.accessToken); + ElMessage.success($t('ui.actionMessage.operationSuccess')); + onRefresh(); } /** 表格操作按钮的回调函数 */ diff --git a/apps/web-ele/src/views/system/operatelog/data.ts b/apps/web-ele/src/views/system/operatelog/data.ts index e7c7424733767dfeaa6a3b8a87b54a022e007282..d23d210fec80a877ea22d67bc1fdac28ad291c7f 100644 --- a/apps/web-ele/src/views/system/operatelog/data.ts +++ b/apps/web-ele/src/views/system/operatelog/data.ts @@ -18,7 +18,7 @@ export function useGridFormSchema(): VbenFormSchema[] { component: 'ApiSelect', componentProps: { api: getSimpleUserList, - fieldNames: { + props: { label: 'nickname', value: 'id', }, diff --git a/apps/web-ele/src/views/system/post/index.vue b/apps/web-ele/src/views/system/post/index.vue index 37cbebaf5c7f40452d42f387131208df0a5e5796..85f80230a8e797d56f82ae02ab2d84b1be079536 100644 --- a/apps/web-ele/src/views/system/post/index.vue +++ b/apps/web-ele/src/views/system/post/index.vue @@ -10,7 +10,7 @@ import { ref } from 'vue'; import { Page, useVbenModal } from '@vben/common-ui'; import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -52,32 +52,26 @@ function onEdit(row: SystemPostApi.Post) { /** 删除岗位 */ async function onDelete(row: SystemPostApi.Post) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该岗位吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deletePost(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deletePost(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } /** 批量删除岗位 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该岗位吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deletePostList(checkedIds.value); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deletePostList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/system/role/index.vue b/apps/web-ele/src/views/system/role/index.vue index c1d23cb2eb392f03c9fb00b0baee623d18783923..c5565bfa12e0bea0ff4829ae44727149f81cd0e2 100644 --- a/apps/web-ele/src/views/system/role/index.vue +++ b/apps/web-ele/src/views/system/role/index.vue @@ -11,7 +11,7 @@ import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; import { Download, Plus } from '@vben/icons'; import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; -import { ElButton, ElLoading, ElMessage } from 'element-plus'; +import { ElButton, ElMessage, ElMessageBox } from 'element-plus'; import { useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -66,32 +66,26 @@ function onCreate() { /** 删除角色 */ async function onDelete(row: SystemRoleApi.Role) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该角色吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteRole(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteRole(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } /** 批量删除角色 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该角色吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteRoleList(checkedIds.value); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteRoleList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/system/sms/channel/index.vue b/apps/web-ele/src/views/system/sms/channel/index.vue index e01b2c7ad1d5c20f47a83d9f6c3bf943129d1a58..d7e68fe9ae298bb0763c20e05cba9c73985f3b16 100644 --- a/apps/web-ele/src/views/system/sms/channel/index.vue +++ b/apps/web-ele/src/views/system/sms/channel/index.vue @@ -10,7 +10,7 @@ import { ref } from 'vue'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -52,32 +52,26 @@ function onEdit(row: SystemSmsChannelApi.SmsChannel) { /** 删除短信渠道 */ async function onDelete(row: SystemSmsChannelApi.SmsChannel) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.signature]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该短信渠道吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteSmsChannel(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.signature])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteSmsChannel(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.signature])); + onRefresh(); } /** 批量删除短信渠道 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该短信渠道吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteSmsChannelList(checkedIds.value); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteSmsChannelList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/system/sms/template/index.vue b/apps/web-ele/src/views/system/sms/template/index.vue index 1e35e38f13535b6dc2e8dc9eea9dba5fea85dc9e..bfb40d271b57549516fe957d7bc9d591a97ef7cd 100644 --- a/apps/web-ele/src/views/system/sms/template/index.vue +++ b/apps/web-ele/src/views/system/sms/template/index.vue @@ -10,7 +10,7 @@ import { ref } from 'vue'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -63,32 +63,26 @@ function onSend(row: SystemSmsTemplateApi.SmsTemplate) { /** 删除短信模板 */ async function onDelete(row: SystemSmsTemplateApi.SmsTemplate) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该短信模板吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteSmsTemplate(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteSmsTemplate(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } /** 批量删除短信模板 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该短信模板吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteSmsTemplateList(checkedIds.value); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteSmsTemplateList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/system/social/client/index.vue b/apps/web-ele/src/views/system/social/client/index.vue index 46245f58ed1770000115a921334cee2e30b5e2ac..cf6b73d7851ab1985b4aec18f6c110a3861c0dfc 100644 --- a/apps/web-ele/src/views/system/social/client/index.vue +++ b/apps/web-ele/src/views/system/social/client/index.vue @@ -10,7 +10,7 @@ import { ref } from 'vue'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; import { isEmpty } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -45,32 +45,26 @@ function onEdit(row: SystemSocialClientApi.SocialClient) { /** 删除社交客户端 */ async function onDelete(row: SystemSocialClientApi.SocialClient) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.name]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该社交客户端吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteSocialClient(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteSocialClient(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } /** 批量删除社交客户端 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该社交客户端吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteSocialClientList(checkedIds.value); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteSocialClientList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/system/tenant/index.vue b/apps/web-ele/src/views/system/tenant/index.vue index f692af9fc2d20e085f9dedb2004fcc710788e7f5..7bb5e2187ab88b9cf772c88815c9cc1f90cf1262 100644 --- a/apps/web-ele/src/views/system/tenant/index.vue +++ b/apps/web-ele/src/views/system/tenant/index.vue @@ -11,7 +11,7 @@ import { onMounted, ref } from 'vue'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -64,34 +64,26 @@ function onEdit(row: SystemTenantApi.Tenant) { /** 删除租户 */ async function onDelete(row: SystemTenantApi.Tenant) { - const loading = ElLoading.service({ - lock: true, - text: $t('ui.actionMessage.deleting', [row.name]), - background: 'rgba(0, 0, 0, 0.7)', + await ElMessageBox.confirm('确定要删除该租户吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteTenant(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - loading.close(); - } + await deleteTenant(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } /** 批量删除租户 */ async function onDeleteBatch() { - const loading = ElLoading.service({ - lock: true, - text: $t('ui.actionMessage.deleting'), - background: 'rgba(0, 0, 0, 0.7)', + await ElMessageBox.confirm('确定要删除该租户吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteTenantList(checkedIds.value); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loading.close(); - } + await deleteTenantList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/system/tenantPackage/index.vue b/apps/web-ele/src/views/system/tenantPackage/index.vue index 246cd5cf7e04b223b5f597269c2582a4158d018d..a791fc0f7ec0314bc12bf31c662269760ed69689 100644 --- a/apps/web-ele/src/views/system/tenantPackage/index.vue +++ b/apps/web-ele/src/views/system/tenantPackage/index.vue @@ -10,7 +10,7 @@ import { ref } from 'vue'; import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; import { isEmpty } from '@vben/utils'; -import { ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -45,36 +45,26 @@ function onEdit(row: SystemTenantPackageApi.TenantPackage) { /** 删除租户套餐 */ async function onDelete(row: SystemTenantPackageApi.TenantPackage) { - const loadingInstance = ElMessage({ - message: $t('ui.actionMessage.deleting', [row.name]), - type: 'info', - duration: 0, + await ElMessageBox.confirm('确定要删除该租户套餐吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteTenantPackage(row.id as number); - loadingInstance.close(); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteTenantPackage(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.name])); + onRefresh(); } /** 批量删除租户套餐 */ async function onDeleteBatch() { - const loadingInstance = ElMessage({ - message: $t('ui.actionMessage.deleting'), - type: 'info', - duration: 0, + await ElMessageBox.confirm('确定要删除该租户套餐吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteTenantPackageList(checkedIds.value); - loadingInstance.close(); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteTenantPackageList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/apps/web-ele/src/views/system/user/index.vue b/apps/web-ele/src/views/system/user/index.vue index 13ec5428cd02f2f8fe164547abcf73ee99e1beeb..72e3b44ab7c2186061c0307a09c6c301a0bcc7aa 100644 --- a/apps/web-ele/src/views/system/user/index.vue +++ b/apps/web-ele/src/views/system/user/index.vue @@ -8,7 +8,7 @@ import { ref } from 'vue'; import { confirm, DocAlert, Page, useVbenModal } from '@vben/common-ui'; import { downloadFileFromBlobPart, isEmpty } from '@vben/utils'; -import { ElLoading, ElMessage } from 'element-plus'; +import { ElMessage, ElMessageBox } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -83,32 +83,26 @@ function onEdit(row: SystemUserApi.User) { /** 删除用户 */ async function onDelete(row: SystemUserApi.User) { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting', [row.username]), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该用户吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteUser(row.id as number); - ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.username])); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteUser(row.id as number); + ElMessage.success($t('ui.actionMessage.deleteSuccess', [row.username])); + onRefresh(); } /** 批量删除用户 */ async function onDeleteBatch() { - const loadingInstance = ElLoading.service({ - text: $t('ui.actionMessage.deleting'), - fullscreen: true, + await ElMessageBox.confirm('确定要删除该用户吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }); - try { - await deleteUserList(checkedIds.value); - ElMessage.success($t('ui.actionMessage.deleteSuccess')); - onRefresh(); - } finally { - loadingInstance.close(); - } + await deleteUserList(checkedIds.value); + ElMessage.success($t('ui.actionMessage.deleteSuccess')); + onRefresh(); } const checkedIds = ref([]); diff --git a/packages/@core/base/shared/src/utils/date.ts b/packages/@core/base/shared/src/utils/date.ts index b66654d0e73d8208d66e1ad8656ae58d74ffb1c6..8cc41b4137f8217e0b59c86b94aea80b5f17c0e7 100644 --- a/packages/@core/base/shared/src/utils/date.ts +++ b/packages/@core/base/shared/src/utils/date.ts @@ -26,6 +26,15 @@ export function formatDateTime(time: Date | number | string | undefined) { return formatDate(time, 'YYYY-MM-DD HH:mm:ss'); } +export function formatDate2(date: Date, format?: string): string { + // 日期不存在,则返回空 + if (!date) { + return ''; + } + // 日期存在,则进行格式化 + return date ? dayjs(date).format(format ?? 'YYYY-MM-DD HH:mm:ss') : ''; +} + export function isDate(value: any): value is Date { return value instanceof Date; } diff --git a/packages/@core/base/shared/src/utils/index.ts b/packages/@core/base/shared/src/utils/index.ts index 7a22c972d0215053afd2d20bc537615643910ebf..0323d031575835d9c319d71235c7b7dc03ecc9d9 100644 --- a/packages/@core/base/shared/src/utils/index.ts +++ b/packages/@core/base/shared/src/utils/index.ts @@ -22,3 +22,18 @@ export { default as cloneDeep } from 'lodash.clonedeep'; export { default as get } from 'lodash.get'; export { default as isEqual } from 'lodash.isequal'; export { default as set } from 'lodash.set'; + +/** + * 构建排序字段 + * @param prop 字段名称 + * @param order 顺序 + */ +export const buildSortingField = ({ + prop, + order, +}: { + order: 'ascending' | 'descending'; + prop: string; +}) => { + return { field: prop, order: order === 'ascending' ? 'asc' : 'desc' }; +};