From 998906ba27a5b9e2c71781e309ce14f9ef23c5bf Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Sat, 23 Nov 2024 23:01:37 +0800 Subject: [PATCH] =?UTF-8?q?completepage:=20=F0=9F=8D=BB=20=E6=94=B6?= =?UTF-8?q?=E5=85=A5=E5=92=8C=E6=94=AF=E5=87=BA=E9=A1=B5=E9=9D=A2=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.production | 2 +- build/buildEnv.ts | 2 +- images/ReadMe/image-20241107133345299.png | Bin 36069 -> 0 bytes src/api/v1/financial/{ => admin}/bill.ts | 0 .../financial/{ => admin}/budgetCategory.ts | 0 src/api/v1/financial/{ => admin}/category.ts | 0 .../{ => admin}/debtRepaymentPlan.ts | 0 .../v1/financial/{ => admin}/debtTracking.ts | 0 .../v1/financial/{ => admin}/savingGoal.ts | 0 .../user}/billUser.ts | 5 + .../user}/budgetCategoryUser.ts | 0 .../user}/categoryUser.ts | 0 .../user}/debtRepaymentPlanUser.ts | 0 .../user}/debtTrackingUser.ts | 0 .../user}/savingGoalUser.ts | 0 src/components/Analyse/analyse-table.vue | 166 +++++++++++++++++ src/components/Analyse/char-line.vue | 104 +++++++++++ src/components/Analyse/char-pie.vue | 64 +++++++ src/components/Analyse/empty.svg | 1 + src/components/Analyse/index.vue | 169 ++++++++++++++++++ src/components/Flicker/index.css | 39 ++++ src/components/Flicker/index.ts | 44 +++++ src/enums/dateEnums.ts | 6 + src/layout/components/lay-footer/index.vue | 3 +- src/router/modules/financial.ts | 25 ++- src/store/financial/bill.ts | 2 +- src/store/financial/budgetCategory.ts | 7 +- src/store/financial/category.ts | 2 +- src/store/financial/debtRepaymentPlan.ts | 2 +- src/store/financial/debtTracking.ts | 2 +- src/store/financial/savingGoal.ts | 2 +- src/store/financialUser/billUser.ts | 4 +- src/store/financialUser/budgetCategoryUser.ts | 2 +- src/store/financialUser/categoryUser.ts | 2 +- .../financialUser/debtRepaymentPlanUser.ts | 2 +- src/store/financialUser/debtTrackingUser.ts | 2 +- src/store/financialUser/savingGoalUser.ts | 2 +- .../configuration/emailTemplate/index.vue | 10 +- .../emailTemplate/utils/hooks.tsx | 11 ++ .../account-bill/expend/index.vue | 88 +++++++++ .../account-bill/income/index.vue | 89 +++++++++ .../budget-category-dialog.vue | 2 +- .../budget-category-dialog.vue | 2 +- src/views/welcome/components/ChartLine.vue | 1 - .../welcome/components/charts/ChartBar.vue | 108 +++++++++++ .../welcome/components/charts/ChartLine.vue | 62 +++++++ .../welcome/components/charts/ChartRound.vue | 73 ++++++++ src/views/welcome/components/charts/index.ts | 3 + .../welcome/components/server-read-me.vue | 23 --- .../welcome/components/table/columns.tsx | 99 ++++++++++ src/views/welcome/components/table/empty.svg | 1 + src/views/welcome/components/table/index.vue | 60 +++++++ src/views/welcome/components/web-read-me.vue | 23 --- src/views/welcome/index.vue | 151 ++++++++-------- src/views/welcome/utils/data.ts | 84 ++++++++- src/views/welcome/utils/hooks.ts | 34 ---- 56 files changed, 1405 insertions(+), 180 deletions(-) delete mode 100644 images/ReadMe/image-20241107133345299.png rename src/api/v1/financial/{ => admin}/bill.ts (100%) rename src/api/v1/financial/{ => admin}/budgetCategory.ts (100%) rename src/api/v1/financial/{ => admin}/category.ts (100%) rename src/api/v1/financial/{ => admin}/debtRepaymentPlan.ts (100%) rename src/api/v1/financial/{ => admin}/debtTracking.ts (100%) rename src/api/v1/financial/{ => admin}/savingGoal.ts (100%) rename src/api/v1/{financialUser => financial/user}/billUser.ts (82%) rename src/api/v1/{financialUser => financial/user}/budgetCategoryUser.ts (100%) rename src/api/v1/{financialUser => financial/user}/categoryUser.ts (100%) rename src/api/v1/{financialUser => financial/user}/debtRepaymentPlanUser.ts (100%) rename src/api/v1/{financialUser => financial/user}/debtTrackingUser.ts (100%) rename src/api/v1/{financialUser => financial/user}/savingGoalUser.ts (100%) create mode 100644 src/components/Analyse/analyse-table.vue create mode 100644 src/components/Analyse/char-line.vue create mode 100644 src/components/Analyse/char-pie.vue create mode 100644 src/components/Analyse/empty.svg create mode 100644 src/components/Analyse/index.vue create mode 100644 src/components/Flicker/index.css create mode 100644 src/components/Flicker/index.ts create mode 100644 src/enums/dateEnums.ts create mode 100644 src/views/financial-user/account-bill/expend/index.vue create mode 100644 src/views/financial-user/account-bill/income/index.vue create mode 100644 src/views/welcome/components/charts/ChartBar.vue create mode 100644 src/views/welcome/components/charts/ChartLine.vue create mode 100644 src/views/welcome/components/charts/ChartRound.vue create mode 100644 src/views/welcome/components/charts/index.ts delete mode 100644 src/views/welcome/components/server-read-me.vue create mode 100644 src/views/welcome/components/table/columns.tsx create mode 100644 src/views/welcome/components/table/empty.svg create mode 100644 src/views/welcome/components/table/index.vue delete mode 100644 src/views/welcome/components/web-read-me.vue delete mode 100644 src/views/welcome/utils/hooks.ts diff --git a/.env.production b/.env.production index 5abfbd1..ce69b86 100644 --- a/.env.production +++ b/.env.production @@ -20,7 +20,7 @@ VITE_BASE_API_RETRY=5 VITE_BASE_API_RETRY_DELAY=3000 # 是否在打包时使用cdn替换本地库 替换 true 不替换 false -VITE_CDN=false +VITE_CDN=true # 是否启用gzip压缩或brotli压缩(分两种情况,删除原始文件和不删除原始文件) # 压缩时不删除原始文件的配置:gzip、brotli、both(同时开启 gzip 与 brotli 压缩)、none(不开启压缩,默认) diff --git a/build/buildEnv.ts b/build/buildEnv.ts index 074a3c2..6b13a67 100644 --- a/build/buildEnv.ts +++ b/build/buildEnv.ts @@ -42,7 +42,7 @@ export const buildEnvironment = () => { manualChunks: id => { // 如果是包含在包中则打包成 vendor if (id.includes('node_modules')) { - return `vendor`; + return id.toString().split('node_modules/')[1].split('/')[1].toString(); } }, }, diff --git a/images/ReadMe/image-20241107133345299.png b/images/ReadMe/image-20241107133345299.png deleted file mode 100644 index c1b212d51f339c5ade211db5fbe7223248742933..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36069 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 Zd&J2h*T%I#_ZIjyNl`g)*?YY&{}-_aYo`DJ diff --git a/src/api/v1/financial/bill.ts b/src/api/v1/financial/admin/bill.ts similarity index 100% rename from src/api/v1/financial/bill.ts rename to src/api/v1/financial/admin/bill.ts diff --git a/src/api/v1/financial/budgetCategory.ts b/src/api/v1/financial/admin/budgetCategory.ts similarity index 100% rename from src/api/v1/financial/budgetCategory.ts rename to src/api/v1/financial/admin/budgetCategory.ts diff --git a/src/api/v1/financial/category.ts b/src/api/v1/financial/admin/category.ts similarity index 100% rename from src/api/v1/financial/category.ts rename to src/api/v1/financial/admin/category.ts diff --git a/src/api/v1/financial/debtRepaymentPlan.ts b/src/api/v1/financial/admin/debtRepaymentPlan.ts similarity index 100% rename from src/api/v1/financial/debtRepaymentPlan.ts rename to src/api/v1/financial/admin/debtRepaymentPlan.ts diff --git a/src/api/v1/financial/debtTracking.ts b/src/api/v1/financial/admin/debtTracking.ts similarity index 100% rename from src/api/v1/financial/debtTracking.ts rename to src/api/v1/financial/admin/debtTracking.ts diff --git a/src/api/v1/financial/savingGoal.ts b/src/api/v1/financial/admin/savingGoal.ts similarity index 100% rename from src/api/v1/financial/savingGoal.ts rename to src/api/v1/financial/admin/savingGoal.ts diff --git a/src/api/v1/financialUser/billUser.ts b/src/api/v1/financial/user/billUser.ts similarity index 82% rename from src/api/v1/financialUser/billUser.ts rename to src/api/v1/financial/user/billUser.ts index 6b2b248..051950e 100644 --- a/src/api/v1/financialUser/billUser.ts +++ b/src/api/v1/financial/user/billUser.ts @@ -8,6 +8,11 @@ export const fetchGetUserBillList = (data: any) => { return http.request>('get', `bill/noManage/getUserBillList/${data.currentPage}/${data.pageSize}`, { params: data }); }; +/** 账单信息---账单收入和支出 */ +export const fetchGetExpendOrIncome = (data: any) => { + return http.request>('get', 'bill/noManage/getExpendOrIncome', { params: data }); +}; + /** 账单信息---添加账单信息 */ export const fetchAddUserBill = (data: any) => { return http.request>('post', 'bill/noManage/addUserBill', { data }); diff --git a/src/api/v1/financialUser/budgetCategoryUser.ts b/src/api/v1/financial/user/budgetCategoryUser.ts similarity index 100% rename from src/api/v1/financialUser/budgetCategoryUser.ts rename to src/api/v1/financial/user/budgetCategoryUser.ts diff --git a/src/api/v1/financialUser/categoryUser.ts b/src/api/v1/financial/user/categoryUser.ts similarity index 100% rename from src/api/v1/financialUser/categoryUser.ts rename to src/api/v1/financial/user/categoryUser.ts diff --git a/src/api/v1/financialUser/debtRepaymentPlanUser.ts b/src/api/v1/financial/user/debtRepaymentPlanUser.ts similarity index 100% rename from src/api/v1/financialUser/debtRepaymentPlanUser.ts rename to src/api/v1/financial/user/debtRepaymentPlanUser.ts diff --git a/src/api/v1/financialUser/debtTrackingUser.ts b/src/api/v1/financial/user/debtTrackingUser.ts similarity index 100% rename from src/api/v1/financialUser/debtTrackingUser.ts rename to src/api/v1/financial/user/debtTrackingUser.ts diff --git a/src/api/v1/financialUser/savingGoalUser.ts b/src/api/v1/financial/user/savingGoalUser.ts similarity index 100% rename from src/api/v1/financialUser/savingGoalUser.ts rename to src/api/v1/financial/user/savingGoalUser.ts diff --git a/src/components/Analyse/analyse-table.vue b/src/components/Analyse/analyse-table.vue new file mode 100644 index 0000000..3597865 --- /dev/null +++ b/src/components/Analyse/analyse-table.vue @@ -0,0 +1,166 @@ + + + + + + + diff --git a/src/components/Analyse/char-line.vue b/src/components/Analyse/char-line.vue new file mode 100644 index 0000000..6d4530b --- /dev/null +++ b/src/components/Analyse/char-line.vue @@ -0,0 +1,104 @@ + + + diff --git a/src/components/Analyse/char-pie.vue b/src/components/Analyse/char-pie.vue new file mode 100644 index 0000000..59f2bd4 --- /dev/null +++ b/src/components/Analyse/char-pie.vue @@ -0,0 +1,64 @@ + + + diff --git a/src/components/Analyse/empty.svg b/src/components/Analyse/empty.svg new file mode 100644 index 0000000..5c8b211 --- /dev/null +++ b/src/components/Analyse/empty.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/Analyse/index.vue b/src/components/Analyse/index.vue new file mode 100644 index 0000000..3459ee4 --- /dev/null +++ b/src/components/Analyse/index.vue @@ -0,0 +1,169 @@ + + + + + diff --git a/src/components/Flicker/index.css b/src/components/Flicker/index.css new file mode 100644 index 0000000..4c40af4 --- /dev/null +++ b/src/components/Flicker/index.css @@ -0,0 +1,39 @@ +.point { + width: var(--point-width); + height: var(--point-height); + background: var(--point-background); + position: relative; + border-radius: var(--point-border-radius); +} + +.point-flicker:after { + background: var(--point-background); +} + +.point-flicker:before, +.point-flicker:after { + content: ""; + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + border-radius: var(--point-border-radius); + animation: flicker 1.2s ease-out infinite; +} + +@keyframes flicker { + 0% { + transform: scale(0.5); + opacity: 1; + } + + 30% { + opacity: 1; + } + + 100% { + transform: scale(var(--point-scale)); + opacity: 0; + } +} diff --git a/src/components/Flicker/index.ts b/src/components/Flicker/index.ts new file mode 100644 index 0000000..b829323 --- /dev/null +++ b/src/components/Flicker/index.ts @@ -0,0 +1,44 @@ +import "./index.css"; +import { type Component, h, defineComponent } from "vue"; + +export interface attrsType { + width?: string; + height?: string; + borderRadius?: number | string; + background?: string; + scale?: number | string; +} + +/** + * 圆点、方形闪烁动画组件 + * @param width 可选 string 宽 + * @param height 可选 string 高 + * @param borderRadius 可选 number | string 传0为方形、传50%或者不传为圆形 + * @param background 可选 string 闪烁颜色 + * @param scale 可选 number | string 闪烁范围,默认2,值越大闪烁范围越大 + * @returns Component + */ +export function useRenderFlicker(attrs?: attrsType): Component { + return defineComponent({ + name: "ReFlicker", + render() { + return h( + "div", + { + class: "point point-flicker", + style: { + "--point-width": attrs?.width ?? "12px", + "--point-height": attrs?.height ?? "12px", + "--point-background": + attrs?.background ?? "var(--el-color-primary)", + "--point-border-radius": attrs?.borderRadius ?? "50%", + "--point-scale": attrs?.scale ?? "2" + } + }, + { + default: () => [] + } + ); + } + }); +} diff --git a/src/enums/dateEnums.ts b/src/enums/dateEnums.ts new file mode 100644 index 0000000..f6621a0 --- /dev/null +++ b/src/enums/dateEnums.ts @@ -0,0 +1,6 @@ +import dayjs from 'dayjs'; + +export const currentWeek = [dayjs().startOf('week').add(1, 'day'), dayjs().endOf('week').add(1, 'day')]; +export const currentMouth = [dayjs().startOf('month'), dayjs().endOf('month').add(1, 'day')]; +export const currentYear = [dayjs().startOf('year'), dayjs().endOf('year')]; +export const days = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; diff --git a/src/layout/components/lay-footer/index.vue b/src/layout/components/lay-footer/index.vue index 4359551..58586b4 100644 --- a/src/layout/components/lay-footer/index.vue +++ b/src/layout/components/lay-footer/index.vue @@ -8,8 +8,7 @@ const Copyright = getConfig('Copyright'); diff --git a/src/router/modules/financial.ts b/src/router/modules/financial.ts index eae139c..e257684 100644 --- a/src/router/modules/financial.ts +++ b/src/router/modules/financial.ts @@ -10,7 +10,7 @@ export default [ rank: 1, }, children: [ - // 账单查询 + // 账单概览 { path: '/financial-user/bill', name: 'BillUser', @@ -20,7 +20,28 @@ export default [ title: 'billManagement', }, }, - // 用户分类 + + // 支出分析 + { + path: '/financial-user/expend', + name: 'ExpendUser', + component: () => import('@/views/financial-user/account-bill/expend/index.vue'), + meta: { + icon: 'icon-park-outline:expenses', + title: 'expendAnalyse', + }, + }, + // 收入分析 + { + path: '/financial-user/income', + name: 'IncomeUser', + component: () => import('@/views/financial-user/account-bill/income/index.vue'), + meta: { + icon: 'icon-park-outline:income', + title: 'incomeAnalyse', + }, + }, + // 账单分类管理 { path: '/financial-user/category', name: 'CategoryUser', diff --git a/src/store/financial/bill.ts b/src/store/financial/bill.ts index c4eaaf5..8995ceb 100644 --- a/src/store/financial/bill.ts +++ b/src/store/financial/bill.ts @@ -1,5 +1,5 @@ import { defineStore } from 'pinia'; -import { fetchAddBill, fetchDeleteBill, fetchGetBillList, fetchUpdateBill } from '@/api/v1/financial/bill'; +import { fetchAddBill, fetchDeleteBill, fetchGetBillList, fetchUpdateBill } from '@/api/v1/financial/admin/bill'; import { pageSizes } from '@/enums/baseConstant'; import { storeMessage } from '@/utils/message'; import { storePagination } from '@/store/useStorePagination'; diff --git a/src/store/financial/budgetCategory.ts b/src/store/financial/budgetCategory.ts index b34b0fe..08361dc 100644 --- a/src/store/financial/budgetCategory.ts +++ b/src/store/financial/budgetCategory.ts @@ -1,5 +1,10 @@ import { defineStore } from 'pinia'; -import { fetchAddBudgetCategory, fetchDeleteBudgetCategory, fetchGetBudgetCategoryList, fetchUpdateBudgetCategory } from '@/api/v1/financial/budgetCategory'; +import { + fetchAddBudgetCategory, + fetchDeleteBudgetCategory, + fetchGetBudgetCategoryList, + fetchUpdateBudgetCategory, +} from '@/api/v1/financial/admin/budgetCategory'; import { pageSizes } from '@/enums/baseConstant'; import { storeMessage } from '@/utils/message'; import { storePagination } from '@/store/useStorePagination'; diff --git a/src/store/financial/category.ts b/src/store/financial/category.ts index 0ae1ae8..d068162 100644 --- a/src/store/financial/category.ts +++ b/src/store/financial/category.ts @@ -1,5 +1,5 @@ import { defineStore } from 'pinia'; -import { fetchAddCategory, fetchDeleteCategory, fetchGetCategoryAllList, fetchGetCategoryList, fetchUpdateCategory } from '@/api/v1/financial/category'; +import { fetchAddCategory, fetchDeleteCategory, fetchGetCategoryAllList, fetchGetCategoryList, fetchUpdateCategory } from '@/api/v1/financial/admin/category'; import { pageSizes } from '@/enums/baseConstant'; import { storeMessage } from '@/utils/message'; import { storePagination } from '@/store/useStorePagination'; diff --git a/src/store/financial/debtRepaymentPlan.ts b/src/store/financial/debtRepaymentPlan.ts index 59b3356..5f4d5e4 100644 --- a/src/store/financial/debtRepaymentPlan.ts +++ b/src/store/financial/debtRepaymentPlan.ts @@ -4,7 +4,7 @@ import { fetchDeleteDebtRepaymentPlan, fetchGetDebtRepaymentPlanList, fetchUpdateDebtRepaymentPlan, -} from '@/api/v1/financial/debtRepaymentPlan'; +} from '@/api/v1/financial/admin/debtRepaymentPlan'; import { pageSizes } from '@/enums/baseConstant'; import { storeMessage } from '@/utils/message'; import { storePagination } from '@/store/useStorePagination'; diff --git a/src/store/financial/debtTracking.ts b/src/store/financial/debtTracking.ts index 2f9a51b..d9ffaa2 100644 --- a/src/store/financial/debtTracking.ts +++ b/src/store/financial/debtTracking.ts @@ -1,5 +1,5 @@ import { defineStore } from 'pinia'; -import { fetchAddDebtTracking, fetchDeleteDebtTracking, fetchGetDebtTrackingList, fetchUpdateDebtTracking } from '@/api/v1/financial/debtTracking'; +import { fetchAddDebtTracking, fetchDeleteDebtTracking, fetchGetDebtTrackingList, fetchUpdateDebtTracking } from '@/api/v1/financial/admin/debtTracking'; import { pageSizes } from '@/enums/baseConstant'; import { storeMessage } from '@/utils/message'; import { storePagination } from '@/store/useStorePagination'; diff --git a/src/store/financial/savingGoal.ts b/src/store/financial/savingGoal.ts index 585501c..c07cffa 100644 --- a/src/store/financial/savingGoal.ts +++ b/src/store/financial/savingGoal.ts @@ -1,5 +1,5 @@ import { defineStore } from 'pinia'; -import { fetchAddSavingGoal, fetchDeleteSavingGoal, fetchGetSavingGoalList, fetchUpdateSavingGoal } from '@/api/v1/financial/savingGoal'; +import { fetchAddSavingGoal, fetchDeleteSavingGoal, fetchGetSavingGoalList, fetchUpdateSavingGoal } from '@/api/v1/financial/admin/savingGoal'; import { pageSizes } from '@/enums/baseConstant'; import { storeMessage } from '@/utils/message'; import { storePagination } from '@/store/useStorePagination'; diff --git a/src/store/financialUser/billUser.ts b/src/store/financialUser/billUser.ts index c244d6d..94135ad 100644 --- a/src/store/financialUser/billUser.ts +++ b/src/store/financialUser/billUser.ts @@ -1,5 +1,5 @@ import { defineStore } from 'pinia'; -import { fetchAddUserBill, fetchDeleteUserBill, fetchGetUserBillList, fetchUpdateUserBill } from '@/api/v1/financialUser/billUser'; +import { fetchAddUserBill, fetchDeleteUserBill, fetchGetUserBillList, fetchUpdateUserBill } from '@/api/v1/financial/user/billUser'; import { pageSizes } from '@/enums/baseConstant'; import { storeMessage } from '@/utils/message'; import { storePagination } from '@/store/useStorePagination'; @@ -13,6 +13,8 @@ export const useBillUserStore = defineStore('billUserStore', { return { // 账单信息列表 datalist: [], + // 收入和支出 + expendWithIncomeList: [], // 查询表单 form: { // 类型:1 - 收入,-1 - 支出 diff --git a/src/store/financialUser/budgetCategoryUser.ts b/src/store/financialUser/budgetCategoryUser.ts index e1e2f2d..dc5dd01 100644 --- a/src/store/financialUser/budgetCategoryUser.ts +++ b/src/store/financialUser/budgetCategoryUser.ts @@ -7,7 +7,7 @@ import { fetchDeleteUserBudgetCategory, fetchGetUserBudgetCategoryList, fetchUpdateUserBudgetCategory, -} from '@/api/v1/financialUser/budgetCategoryUser'; +} from '@/api/v1/financial/user/budgetCategoryUser'; import { getDefaultDateRange } from '@/utils/date'; /** diff --git a/src/store/financialUser/categoryUser.ts b/src/store/financialUser/categoryUser.ts index 404b45d..d9c3255 100644 --- a/src/store/financialUser/categoryUser.ts +++ b/src/store/financialUser/categoryUser.ts @@ -5,7 +5,7 @@ import { fetchGetCategoryUserAllList, fetchGetCategoryUserList, fetchUpdateCategoryUser, -} from '@/api/v1/financialUser/categoryUser'; +} from '@/api/v1/financial/user/categoryUser'; import { pageSizes } from '@/enums/baseConstant'; import { storeMessage } from '@/utils/message'; import { storePagination } from '@/store/useStorePagination'; diff --git a/src/store/financialUser/debtRepaymentPlanUser.ts b/src/store/financialUser/debtRepaymentPlanUser.ts index f28635d..eaadcc7 100644 --- a/src/store/financialUser/debtRepaymentPlanUser.ts +++ b/src/store/financialUser/debtRepaymentPlanUser.ts @@ -7,7 +7,7 @@ import { fetchDeleteUserDebtRepaymentPlan, fetchGetUserDebtRepaymentPlanList, fetchUpdateUserDebtRepaymentPlan, -} from '@/api/v1/financialUser/debtRepaymentPlanUser'; +} from '@/api/v1/financial/user/debtRepaymentPlanUser'; /** * 债务还款计划表 Store diff --git a/src/store/financialUser/debtTrackingUser.ts b/src/store/financialUser/debtTrackingUser.ts index f5ca7cc..cdcad82 100644 --- a/src/store/financialUser/debtTrackingUser.ts +++ b/src/store/financialUser/debtTrackingUser.ts @@ -7,7 +7,7 @@ import { fetchDeleteUserDebtTracking, fetchGetUserDebtTrackingList, fetchUpdateUserDebtTracking, -} from '@/api/v1/financialUser/debtTrackingUser'; +} from '@/api/v1/financial/user/debtTrackingUser'; /** * 债务追踪 Store diff --git a/src/store/financialUser/savingGoalUser.ts b/src/store/financialUser/savingGoalUser.ts index cdf50fa..f231777 100644 --- a/src/store/financialUser/savingGoalUser.ts +++ b/src/store/financialUser/savingGoalUser.ts @@ -7,7 +7,7 @@ import { fetchDeleteUserSavingGoal, fetchGetUserSavingGoalList, fetchUpdateUserSavingGoal, -} from '@/api/v1/financialUser/savingGoalUser'; +} from '@/api/v1/financial/user/savingGoalUser'; import { getDefaultDateRange } from '@/utils/date'; /** diff --git a/src/views/configuration/emailTemplate/index.vue b/src/views/configuration/emailTemplate/index.vue index b022d56..12709dc 100644 --- a/src/views/configuration/emailTemplate/index.vue +++ b/src/views/configuration/emailTemplate/index.vue @@ -4,7 +4,7 @@ import { columns } from '@/views/configuration/emailTemplate/utils/columns'; import PureTableBar from '@/components/TableBar/src/bar'; import AddFill from '@iconify-icons/ri/add-circle-line'; import PureTable from '@pureadmin/table'; -import { onAdd, onDelete, onDeleteBatch, onSearch, onUpdate, selectRows } from '@/views/configuration/emailTemplate/utils/hooks'; +import { onAdd, onDelete, onDeleteBatch, onSearch, onUpdate, selectRows, viewTemplate } from '@/views/configuration/emailTemplate/utils/hooks'; import Delete from '@iconify-icons/ep/delete'; import EditPen from '@iconify-icons/ep/edit-pen'; import Refresh from '@iconify-icons/ep/refresh'; @@ -14,6 +14,7 @@ import { useEmailTemplateStore } from '@/store/configuration/emailTemplate.ts'; import { useRenderIcon } from '@/components/CommonIcon/src/hooks'; import { auth } from '@/views/configuration/emailTemplate/utils/auth'; import { hasAuth } from '@/router/utils'; +import View from '@iconify-icons/ep/view'; const tableRef = ref(); const formRef = ref(); @@ -122,7 +123,12 @@ onMounted(() => {