diff --git a/.eslintrc.js b/.eslintrc.js index 31c239b6..72d4664b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -22,7 +22,8 @@ module.exports = defineConfig({ 'plugin:vue/vue3-recommended', 'plugin:@typescript-eslint/recommended', 'prettier', - 'plugin:prettier/recommended' + 'plugin:prettier/recommended', + '@unocss' ], rules: { 'vue/script-setup-uses-vars': 'error', diff --git a/.vscode/settings.json b/.vscode/settings.json index 3a9abed7..45156944 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,5 @@ { "typescript.tsdk": "./node_modules/typescript/lib", - "volar.tsPlugin": true, - "volar.tsPluginStatus": false, "npm.packageManager": "pnpm", "editor.tabSize": 2, "prettier.printWidth": 100, // 超过最大值换行 @@ -102,57 +100,35 @@ "i18n-ally.displayLanguage": "zh-CN", "i18n-ally.enabledFrameworks": ["vue", "react"], "cSpell.words": [ - "xingyu", - "yudao", - "unocss", + "brotli", "browserslist", + "codemirror", + "commitlint", + "cropperjs", + "echarts", "esnext", - "unplugin", + "esno", + "iconify", + "INTLIFY", + "lintstagedrc", + "logicflow", + "nprogress", + "pinia", + "pnpm", "qrcode", "sider", - "pinia", - "sider", - "nprogress", - "INTLIFY", - "stylelint", - "esno", - "vitejs", "sortablejs", - "codemirror", - "iconify", - "commitlint", + "stylelint", + "unocss", + "unplugin", + "unref", "videojs", - "echarts", - "wangeditor", - "cropperjs", - "logicflow", + "vitejs", "vueuse", - "zxcvbn", - "lintstagedrc", - "brotli", - "sider", - "pnpm" - ], - "vetur.format.scriptInitialIndent": true, - "vetur.format.styleInitialIndent": true, - "vetur.validation.script": false, - "MicroPython.executeButton": [ - { - "text": "▶", - "tooltip": "运行", - "alignment": "left", - "command": "extension.executeFile", - "priority": 3.5 - } - ], - "MicroPython.syncButton": [ - { - "text": "$(sync)", - "tooltip": "同步", - "alignment": "left", - "command": "extension.execute", - "priority": 4 - } + "wangeditor", + "xingyu", + "yudao", + "zxcvbn" ], // 控制相关文件嵌套展示 "explorer.fileNesting.enabled": true, @@ -161,7 +137,8 @@ "*.ts": "$(capture).test.ts, $(capture).test.tsx", "*.tsx": "$(capture).test.ts, $(capture).test.tsx", "*.env": "$(capture).env.*", - "package.json": "pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore" + "package.json": "pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.eslintrc-auto-import.json,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore" }, - "terminal.integrated.scrollback": 10000 + "terminal.integrated.scrollback": 10000, + "nuxt.isNuxtApp": false } diff --git a/README.md b/README.md index 5e6a43e0..8466bbc3 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ## 🐶 新手必读 -* nodejs > 16.0.0 && pnpm > 8.6.0 (强制使用pnpm) +* nodejs > 16.18.0 && pnpm > 8.6.0 (强制使用pnpm) * 演示地址【Vue3 + element-plus】: * 演示地址【Vue3 + vben(ant-design-vue)】: * 演示地址【Vue2 + element-ui】: @@ -40,13 +40,13 @@ |----------------------------------------------------------------------|------------------|--------| | [Vue](https://staging-cn.vuejs.org/) | Vue 框架 | 3.3.4 | | [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.4.9 | -| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.3.12 | -| [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 5.1.6 | +| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.3.14 | +| [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 5.2.2 | | [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.1.6 | | [vueuse](https://vueuse.org/) | 常用工具集 | 10.4.1 | -| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.2.2 | -| [vue-router](https://router.vuejs.org/) | Vue 路由 | 4.2.4 | -| [unocss](https://uno.antfu.me/) | 原子 css | 0.55.3 | +| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.4.1 | +| [vue-router](https://router.vuejs.org/) | Vue 路由 | 4.2.5 | +| [unocss](https://uno.antfu.me/) | 原子 css | 0.56.1 | | [iconify](https://icon-sets.iconify.design/) | 在线图标库 | 3.1.1 | | [wangeditor](https://www.wangeditor.com/) | 富文本编辑器 | 5.1.23 | diff --git a/package.json b/package.json index 798aa6d1..22334907 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "yudao-ui-admin-vue3", - "version": "1.8.0-snapshot", + "version": "1.8.2-snapshot", "description": "基于vue3、vite4、element-plus、typesScript", "author": "xingyu", "private": false, @@ -22,32 +22,32 @@ "clean:cache": "npx rimraf node_modules/.cache", "lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src", "lint:format": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"", - "lint:style": "stylelint --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/", + "lint:style": "stylelint --fix \"./src/**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/", "lint:lint-staged": "lint-staged -c " }, "dependencies": { "@element-plus/icons-vue": "^2.1.0", - "@form-create/designer": "^3.1.0", - "@form-create/element-ui": "^3.1.17", + "@form-create/designer": "^3.1.3", + "@form-create/element-ui": "^3.1.24", "@iconify/iconify": "^3.1.1", "@videojs-player/vue": "^1.0.0", "@vueuse/core": "^10.4.1", "@wangeditor/editor": "^5.1.23", "@wangeditor/editor-for-vue": "^5.1.10", - "@zxcvbn-ts/core": "^3.0.3", + "@zxcvbn-ts/core": "^3.0.4", "animate.css": "^4.1.1", "axios": "^1.5.0", "benz-amr-recorder": "^1.1.5", "bpmn-js-token-simulation": "^0.10.0", "camunda-bpmn-moddle": "^7.0.1", - "cropperjs": "^1.6.0", + "cropperjs": "^1.6.1", "crypto-js": "^4.1.1", - "dayjs": "^1.11.9", + "dayjs": "^1.11.10", "diagram-js": "^12.3.0", "echarts": "^5.4.3", "echarts-wordcloud": "^2.1.0", - "element-plus": "2.3.12", - "fast-xml-parser": "^4.2.7", + "element-plus": "2.3.14", + "fast-xml-parser": "^4.3.0", "highlight.js": "^11.8.0", "intro.js": "^7.2.0", "jsencrypt": "^3.3.2", @@ -59,12 +59,12 @@ "qrcode": "^1.5.3", "qs": "^6.11.2", "steady-xml": "^0.1.0", - "url": "^0.11.1", + "url": "^0.11.3", "video.js": "^7.21.5", - "vue": "3.3.4", + "vue": "^3.3.4", "vue-dompurify-html": "^4.1.4", - "vue-i18n": "9.2.2", - "vue-router": "^4.2.4", + "vue-i18n": "^9.4.1", + "vue-router": "^4.2.5", "vue-types": "^5.1.1", "vuedraggable": "^4.1.0", "web-storage-cache": "^1.1.1", @@ -73,50 +73,51 @@ "devDependencies": { "@commitlint/cli": "^17.7.1", "@commitlint/config-conventional": "^17.7.0", - "@iconify/json": "^2.2.107", - "@intlify/unplugin-vue-i18n": "^0.12.3", + "@iconify/json": "^2.2.119", + "@intlify/unplugin-vue-i18n": "^1.2.0", "@purge-icons/generated": "^0.9.0", "@types/intro.js": "^5.1.1", - "@types/lodash-es": "^4.17.8", - "@types/node": "^20.5.0", + "@types/lodash-es": "^4.17.9", + "@types/node": "^20.6.0", "@types/nprogress": "^0.2.0", - "@types/qrcode": "^1.5.1", - "@types/qs": "^6.9.7", - "@typescript-eslint/eslint-plugin": "^6.4.1", - "@typescript-eslint/parser": "^6.4.1", - "@unocss/transformer-variant-group": "^0.55.3", + "@types/qrcode": "^1.5.2", + "@types/qs": "^6.9.8", + "@typescript-eslint/eslint-plugin": "^6.7.2", + "@typescript-eslint/parser": "^6.7.2", + "@unocss/transformer-variant-group": "^0.56.1", + "@unocss/eslint-config": "^0.56.1", "@vitejs/plugin-legacy": "^4.1.1", - "@vitejs/plugin-vue": "^4.3.3", + "@vitejs/plugin-vue": "^4.3.4", "@vitejs/plugin-vue-jsx": "^3.0.2", - "@vue-macros/volar": "^0.14.2", - "autoprefixer": "^10.4.15", - "bpmn-js": "^8.9.0", - "bpmn-js-properties-panel": "^0.46.0", + "@vue-macros/volar": "^0.14.3", + "autoprefixer": "^10.4.16", + "bpmn-js": "8.9.0", + "bpmn-js-properties-panel": "0.46.0", "consola": "^3.2.3", - "eslint": "^8.48.0", + "eslint": "^8.49.0", "eslint-config-prettier": "^9.0.0", "eslint-define-config": "^1.23.0", "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-vue": "^9.17.0", "lint-staged": "^14.0.1", - "postcss": "^8.4.28", + "postcss": "^8.4.30", "postcss-html": "^1.5.0", - "postcss-scss": "^4.0.7", - "prettier": "^3.0.2", + "postcss-scss": "^4.0.8", + "prettier": "^3.0.3", "rimraf": "^5.0.1", - "rollup": "^3.28.1", - "sass": "^1.66.1", + "rollup": "^3.29.2", + "sass": "^1.68.0", "stylelint": "^15.10.3", "stylelint-config-html": "^1.1.0", "stylelint-config-recommended": "^13.0.0", "stylelint-config-standard": "^34.0.0", "stylelint-order": "^6.0.3", - "terser": "^5.19.2", - "typescript": "5.1.6", - "unocss": "^0.55.3", + "terser": "^5.20.0", + "typescript": "5.2.2", + "unocss": "^0.56.1", "unplugin-auto-import": "^0.16.6", "unplugin-element-plus": "^0.8.0", - "unplugin-vue-components": "^0.25.1", + "unplugin-vue-components": "^0.25.2", "vite": "4.4.9", "vite-plugin-compression": "^0.5.1", "vite-plugin-ejs": "^1.6.4", @@ -126,7 +127,7 @@ "vite-plugin-svg-icons": "^2.0.1", "vite-plugin-top-level-await": "^1.3.1", "vue-eslint-parser": "^9.3.1", - "vue-tsc": "^1.8.8" + "vue-tsc": "^1.8.13" }, "license": "MIT", "repository": { diff --git a/src/api/bpm/task/index.ts b/src/api/bpm/task/index.ts index f6763720..ccd5c4ee 100644 --- a/src/api/bpm/task/index.ts +++ b/src/api/bpm/task/index.ts @@ -41,3 +41,20 @@ export const getTaskListByProcessInstanceId = async (processInstanceId) => { export const exportTask = async (params) => { return await request.download({ url: '/bpm/task/export', params }) } + +// 获取所有可回退的节点 +export const getReturnList = async (params) => { + return await request.get({ url: '/bpm/task/get-return-list', params }) +} + +// 回退 +export const returnTask = async (data) => { + return await request.put({ url: '/bpm/task/return', data }) +} + +/** + * 委派 + */ +export const delegateTask = async (data) => { + return await request.put({ url: '/bpm/task/delegate', data }) +} diff --git a/src/api/mall/promotion/bargain/bargainActivity.ts b/src/api/mall/promotion/bargain/bargainActivity.ts index 1e5d5f78..a4b543a6 100644 --- a/src/api/mall/promotion/bargain/bargainActivity.ts +++ b/src/api/mall/promotion/bargain/bargainActivity.ts @@ -7,17 +7,16 @@ export interface BargainActivityVO { startTime?: Date endTime?: Date status?: number - userSize?: number // 达到该人数,才能砍到低价 + helpMaxCount?: number // 达到该人数,才能砍到低价 bargainCount?: number // 最大帮砍次数 totalLimitCount?: number // 最大购买次数 spuId: number skuId: number bargainFirstPrice: number // 砍价起始价格,单位分 - bargainPrice: number // 砍价底价 + bargainMinPrice: number // 砍价底价 stock: number // 活动库存 randomMinPrice?: number // 用户每次砍价的最小金额,单位:分 randomMaxPrice?: number // 用户每次砍价的最大金额,单位:分 - successCount?: number // 砍价成功数量 } // 砍价活动所需属性。选择的商品和属性的时候使用方便使用活动的通用封装 diff --git a/src/api/mall/promotion/bargain/bargainHelp.ts b/src/api/mall/promotion/bargain/bargainHelp.ts new file mode 100644 index 00000000..4308ae66 --- /dev/null +++ b/src/api/mall/promotion/bargain/bargainHelp.ts @@ -0,0 +1,14 @@ +import request from '@/config/axios' + +export interface BargainHelpVO { + id: number + record: number + userId: number + reducePrice: number + endTime: Date +} + +// 查询砍价记录列表 +export const getBargainHelpPage = async (params) => { + return await request.get({ url: `/promotion/bargain-help/page`, params }) +} diff --git a/src/api/mall/promotion/bargain/bargainRecord.ts b/src/api/mall/promotion/bargain/bargainRecord.ts new file mode 100644 index 00000000..f90b7845 --- /dev/null +++ b/src/api/mall/promotion/bargain/bargainRecord.ts @@ -0,0 +1,19 @@ +import request from '@/config/axios' + +export interface BargainRecordVO { + id: number + activityId: number + userId: number + spuId: number + skuId: number + bargainFirstPrice: number + bargainPrice: number + status: number + orderId: number + endTime: Date +} + +// 查询砍价记录列表 +export const getBargainRecordPage = async (params) => { + return await request.get({ url: `/promotion/bargain-record/page`, params }) +} diff --git a/src/api/mall/promotion/seckill/seckillActivity.ts b/src/api/mall/promotion/seckill/seckillActivity.ts index 42c1c31c..e8346410 100644 --- a/src/api/mall/promotion/seckill/seckillActivity.ts +++ b/src/api/mall/promotion/seckill/seckillActivity.ts @@ -57,6 +57,11 @@ export const updateSeckillActivity = async (data: SeckillActivityVO) => { return await request.put({ url: '/promotion/seckill-activity/update', data }) } +// 关闭秒杀活动 +export const closeSeckillActivity = async (id: number) => { + return await request.put({ url: '/promotion/seckill-activity/close?id=' + id }) +} + // 删除秒杀活动 export const deleteSeckillActivity = async (id: number) => { return await request.delete({ url: '/promotion/seckill-activity/delete?id=' + id }) diff --git a/src/api/mall/trade/config/index.ts b/src/api/mall/trade/config/index.ts index 3a1771d8..66a81147 100644 --- a/src/api/mall/trade/config/index.ts +++ b/src/api/mall/trade/config/index.ts @@ -4,13 +4,13 @@ export interface ConfigVO { brokerageEnabled: boolean brokerageEnabledCondition: number brokerageBindMode: number - brokeragePostUrls: string + brokeragePosterUrls: string brokerageFirstPercent: number brokerageSecondPercent: number brokerageWithdrawMinPrice: number brokerageBankNames: string brokerageFrozenDays: number - brokerageWithdrawType: string + brokerageWithdrawTypes: string } // 查询交易中心配置详情 diff --git a/src/api/mall/trade/order/index.ts b/src/api/mall/trade/order/index.ts index 80669c57..ea78275f 100644 --- a/src/api/mall/trade/order/index.ts +++ b/src/api/mall/trade/order/index.ts @@ -41,15 +41,22 @@ export interface OrderVO { refundPrice?: number | null // 退款金额 couponId?: number | null // 优惠劵编号 couponPrice?: number | null // 优惠劵减免金额 + vipPrice?: number | null // VIP 减免金额 pointPrice?: number | null // 积分抵扣的金额 receiverAreaName?: string //收件人地区名字 items?: OrderItemRespVO[] // 订单项列表 - // 用户信息 + // 下单用户信息 user?: { id?: number | null nickname?: string avatar?: string } + // 推广用户信息 + brokerageUser?: { + id?: number | null + nickname?: string + avatar?: string + } // 订单操作日志 logs?: OrderLogRespVO[] } @@ -114,21 +121,26 @@ export interface DeliveryVO { } // 订单发货 -export const delivery = async (data: DeliveryVO) => { +export const deliveryOrder = async (data: DeliveryVO) => { return await request.put({ url: `/trade/order/delivery`, data }) } // 订单备注 -export const updateRemark = async (data: any) => { +export const updateOrderRemark = async (data: any) => { return await request.put({ url: `/trade/order/update-remark`, data }) } // 订单调价 -export const updatePrice = async (data: any) => { +export const updateOrderPrice = async (data: any) => { return await request.put({ url: `/trade/order/update-price`, data }) } // 修改订单地址 -export const updateAddress = async (data: any) => { +export const updateOrderAddress = async (data: any) => { return await request.put({ url: `/trade/order/update-address`, data }) } + +// 订单核销 +export const pickUpOrder = async (id: number) => { + return await request.put({ url: `/trade/order/pick-up?id=${id}` }) +} diff --git a/src/api/member/config/index.ts b/src/api/member/config/index.ts new file mode 100644 index 00000000..7ddca16b --- /dev/null +++ b/src/api/member/config/index.ts @@ -0,0 +1,19 @@ +import request from '@/config/axios' + +export interface ConfigVO { + id: number + pointTradeDeductEnable: number + pointTradeDeductUnitPrice: number + pointTradeDeductMaxPrice: number + pointTradeGivePoint: number +} + +// 查询积分设置详情 +export const getConfig = async () => { + return await request.get({ url: `/member/config/get` }) +} + +// 新增修改积分设置 +export const saveConfig = async (data: ConfigVO) => { + return await request.put({ url: `/member/config/save`, data }) +} diff --git a/src/api/member/point/config/index.ts b/src/api/member/point/config/index.ts deleted file mode 100644 index 9a3c4c48..00000000 --- a/src/api/member/point/config/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -import request from '@/config/axios' - -export interface ConfigVO { - id: number - tradeDeductEnable: number - tradeDeductUnitPrice: number - tradeDeductMaxPrice: number - tradeGivePoint: number -} - -// 查询积分设置详情 -export const getConfig = async () => { - return await request.get({ url: `/member/point/config/get` }) -} - -// 新增修改积分设置 -export const saveConfig = async (data: ConfigVO) => { - return await request.put({ url: `/member/point/config/save`, data }) -} diff --git a/src/api/member/signin/config/index.ts b/src/api/member/signin/config/index.ts index 558bdc70..50a7d63c 100644 --- a/src/api/member/signin/config/index.ts +++ b/src/api/member/signin/config/index.ts @@ -1,10 +1,11 @@ import request from '@/config/axios' export interface SignInConfigVO { - id: number - day: number | null - point: number | null - enable: boolean | null + id?: number + day?: number + point?: number + experience?: number + status?: number } // 查询积分签到规则列表 diff --git a/src/api/member/user/index.ts b/src/api/member/user/index.ts index 4d60988c..e38206a8 100644 --- a/src/api/member/user/index.ts +++ b/src/api/member/user/index.ts @@ -41,3 +41,13 @@ export const updateUser = async (data: UserVO) => { export const updateUserLevel = async (data: any) => { return await request.put({ url: `/member/user/update-level`, data }) } + +// 修改会员用户积分 +export const updateUserPoint = async (data: any) => { + return await request.put({ url: `/member/user/update-point`, data }) +} + +// 修改会员用户余额 +export const updateUserBalance = async (data: any) => { + return await request.put({ url: `/member/user/update-balance`, data }) +} diff --git a/src/api/pay/wallet/index.ts b/src/api/pay/wallet/index.ts new file mode 100644 index 00000000..b57deeb0 --- /dev/null +++ b/src/api/pay/wallet/index.ts @@ -0,0 +1,22 @@ +import request from '@/config/axios' + +/** 用户钱包查询参数 */ +export interface PayWalletUserReqVO { + userId: number + userType: number +} +/** 钱包 VO */ +export interface WalletVO { + id: number + userId: number + userType: number + balance: number + totalExpense: number + totalRecharge: number + freezePrice: number +} + +/** 查询用户钱包详情 */ +export const getWallet = async (params: PayWalletUserReqVO) => { + return await request.get({ url: `/pay/wallet/get`, params }) +} diff --git a/src/api/statistics/trade.ts b/src/api/statistics/trade.ts new file mode 100644 index 00000000..0194c228 --- /dev/null +++ b/src/api/statistics/trade.ts @@ -0,0 +1,72 @@ +import request from '@/config/axios' +import dayjs from 'dayjs' +import { formatDate } from '@/utils/formatTime' + +// todo @疯狂:挪到 mall 里哈 + +/** 交易统计对照 Response VO */ +export interface TradeStatisticsComparisonRespVO { + value: T + reference: T +} + +/** 交易统计 Response VO */ +export interface TradeSummaryRespVO { + yesterdayOrderCount: number + monthOrderCount: number + yesterdayPayPrice: number + monthPayPrice: number +} + +/** 交易状况 Request VO */ +export interface TradeTrendReqVO { + times: [dayjs.ConfigType, dayjs.ConfigType] +} + +/** 交易状况统计 Response VO */ +export interface TradeTrendSummaryRespVO { + time: string + turnover: number + orderPayPrice: number + rechargePrice: number + expensePrice: number + balancePrice: number + brokerageSettlementPrice: number + orderRefundPrice: number +} + +// 查询交易统计 +export const getTradeStatisticsSummary = () => { + return request.get>({ + url: '/statistics/trade/summary' + }) +} + +// 获得交易状况统计 +export const getTradeTrendSummary = (params: TradeTrendReqVO) => { + return request.get>({ + url: '/statistics/trade/trend/summary', + params: formatDateParam(params) + }) +} + +// 获得交易状况明细 +export const getTradeTrendList = (params: TradeTrendReqVO) => { + return request.get({ + url: '/statistics/trade/trend/list', + params: formatDateParam(params) + }) +} + +// 导出交易状况明细 +export const exportTradeTrend = (params: TradeTrendReqVO) => { + return request.download({ + url: '/statistics/trade/trend/export-excel', + params: formatDateParam(params) + }) +} + +/** 时间参数需要格式化, 确保接口能识别 */ +const formatDateParam = (params: TradeTrendReqVO) => { + return { times: [formatDate(params.times[0]), formatDate(params.times[1])] } as TradeTrendReqVO +} diff --git a/src/api/system/area/index.ts b/src/api/system/area/index.ts index b7da941f..e91a4997 100644 --- a/src/api/system/area/index.ts +++ b/src/api/system/area/index.ts @@ -5,14 +5,6 @@ export const getAreaTree = async () => { return await request.get({ url: '/system/area/tree' }) } -export const getChildrenArea = async (id: number) => { - return await request.get({ url: '/system/area/get-children?id=' + id }) -} - -export const getAreaListByIds = async (ids) => { - return await request.get({ url: '/system/area/get-by-ids?ids=' + ids }) -} - // 获得 IP 对应的地区名 export const getAreaByIp = async (ip: string) => { return await request.get({ url: '/system/area/get-by-ip?ip=' + ip }) diff --git a/src/components/Card/src/CardTitle.vue b/src/components/Card/src/CardTitle.vue index 041c116a..5b122f49 100644 --- a/src/components/Card/src/CardTitle.vue +++ b/src/components/Card/src/CardTitle.vue @@ -19,17 +19,18 @@ const { title } = defineProps({ .card-title { font-size: 14px; font-weight: 600; + &::before { - content: ''; + position: relative; + top: 8px; + left: -5px; display: inline-block; width: 3px; height: 14px; //background-color: #105cfb; background: var(--el-color-primary); - position: relative; - left: -5px; - top: 8px; border-radius: 5px; + content: ''; transform: translateY(-50%); } } diff --git a/src/components/CountTo/src/CountTo.vue b/src/components/CountTo/src/CountTo.vue index 1b1131a0..7a19bec7 100644 --- a/src/components/CountTo/src/CountTo.vue +++ b/src/components/CountTo/src/CountTo.vue @@ -11,21 +11,21 @@ const { getPrefixCls } = useDesign() const prefixCls = getPrefixCls('count-to') const props = defineProps({ - startVal: propTypes.number.def(0), - endVal: propTypes.number.def(2021), - duration: propTypes.number.def(3000), - autoplay: propTypes.bool.def(true), - decimals: propTypes.number.validate((value: number) => value >= 0).def(0), - decimal: propTypes.string.def('.'), - separator: propTypes.string.def(','), - prefix: propTypes.string.def(''), - suffix: propTypes.string.def(''), - useEasing: propTypes.bool.def(true), + startVal: propTypes.number.def(0), // 开始播放值 + endVal: propTypes.number.def(2021), // 最终值 + duration: propTypes.number.def(3000), // 动画时长 + autoplay: propTypes.bool.def(true), // 是否自动播放动画, 默认播放 + decimals: propTypes.number.validate((value: number) => value >= 0).def(0), // 显示的小数位数, 默认不显示小数 + decimal: propTypes.string.def('.'), // 小数分隔符号, 默认为点 + separator: propTypes.string.def(','), // 数字每三位的分隔符, 默认为逗号 + prefix: propTypes.string.def(''), // 前缀, 数值前面显示的内容 + suffix: propTypes.string.def(''), // 后缀, 数值后面显示的内容 + useEasing: propTypes.bool.def(true), // 是否使用缓动效果, 默认启用 easingFn: { type: Function as PropType<(t: number, b: number, c: number, d: number) => number>, default(t: number, b: number, c: number, d: number) { return (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b - } + } // 缓动函数 } }) diff --git a/src/components/Cropper/src/CropperAvatar.vue b/src/components/Cropper/src/CropperAvatar.vue index 414ba144..55a7d34b 100644 --- a/src/components/Cropper/src/CropperAvatar.vue +++ b/src/components/Cropper/src/CropperAvatar.vue @@ -1,7 +1,7 @@