refactor: 破坏性更新 dict 抽离

This commit is contained in:
xingyu4j
2025-09-05 12:00:24 +08:00
parent b79bebab18
commit 5ef57590e0
112 changed files with 397 additions and 518 deletions

View File

@@ -1,16 +1,17 @@
<script lang="ts" setup>
import type { DictDataType } from '@vben/hooks';
import type { EchartsUIType } from '@vben/plugins/echarts';
import type { MallMemberStatisticsApi } from '#/api/mall/statistics/member';
import type { DictDataType } from '#/utils/dict';
import { onMounted, reactive, ref } from 'vue';
import { AnalysisChartCard } from '@vben/common-ui';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { EchartsUI, useEcharts } from '@vben/plugins/echarts';
import * as MemberStatisticsApi from '#/api/mall/statistics/member';
import { DICT_TYPE, getIntDictOptions } from '#/utils/dict';
/** 会员终端卡片 */
defineOptions({ name: 'MemberTerminalCard' });
@@ -49,7 +50,7 @@ const terminalChartOptions = reactive({
const getMemberTerminalStatisticsList = async () => {
loading.value = true;
const list = await MemberStatisticsApi.getMemberTerminalStatisticsList();
const dictDataList = getIntDictOptions(DICT_TYPE.TERMINAL);
const dictDataList = getDictOptions(DICT_TYPE.TERMINAL, 'number');
if (terminalChartOptions.series && terminalChartOptions.series.length > 0) {
(terminalChartOptions.series[0] as any).data = dictDataList.map(
(dictData: DictDataType) => {

View File

@@ -2,11 +2,12 @@ import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import type { MallCategoryApi } from '#/api/mall/product/category';
import { CommonStatusEnum, DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { handleTree } from '@vben/utils';
import { z } from '#/adapter/form';
import { getCategoryList } from '#/api/mall/product/category';
import { CommonStatusEnum, DICT_TYPE, getDictOptions } from '#/utils';
/** 新增/修改的表单 */
export function useFormSchema(): VbenFormSchema[] {

View File

@@ -1,13 +1,13 @@
<script lang="ts" setup>
import { watch } from 'vue';
import { DeliveryTypeEnum } from '@vben/constants';
import { DeliveryTypeEnum, DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { ElMessage } from 'element-plus';
import { useVbenForm } from '#/adapter/form';
import * as ExpressTemplateApi from '#/api/mall/trade/delivery/expressTemplate';
import { DICT_TYPE, getIntDictOptions } from '#/utils';
const props = defineProps<{
propFormData: Object;
@@ -57,7 +57,7 @@ const [Form, formApi] = useVbenForm({
label: '配送方式',
component: 'CheckboxGroup',
componentProps: {
options: getIntDictOptions(DICT_TYPE.TRADE_DELIVERY_TYPE),
options: getDictOptions(DICT_TYPE.TRADE_DELIVERY_TYPE, 'number'),
},
rules: 'required',
},

View File

@@ -1,10 +1,14 @@
<script lang="ts" setup>
import type { DictDataType } from '@vben/hooks';
import type { MallSpuApi } from '#/api/mall/product/spu';
import { onMounted, ref } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { Page } from '@vben/common-ui';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { IconifyIcon } from '@vben/icons';
import { floatToFixed2 } from '@vben/utils';
@@ -25,7 +29,6 @@ import {
import * as ProductBrandApi from '#/api/mall/product/brand';
import * as ProductCategoryApi from '#/api/mall/product/category';
import * as ProductSpuApi from '#/api/mall/product/spu';
import { DICT_TYPE, getIntDictOptions } from '#/utils/dict';
interface Category {
id: number;
@@ -38,13 +41,6 @@ interface Brand {
name: string;
}
interface DictData {
value: number | string;
label: string;
colorType?: string;
cssClass?: string;
}
const { push } = useRouter(); // 路由
const { params } = useRoute(); // 查询参数
@@ -52,7 +48,7 @@ const formLoading = ref(false); // 表单的加载中1修改时的数据
const activeTab = ref('basic'); // 当前激活的标签页
const categoryList = ref<Category[]>([]); // 商品分类列表
const brandList = ref<Brand[]>([]); // 商品品牌列表
const deliveryTypeDict = ref<DictData[]>([]); // 配送方式字典
const deliveryTypeDict = ref<DictDataType[]>([]); // 配送方式字典
// SPU 表单数据
const formData = ref<MallSpuApi.Spu>({
@@ -90,8 +86,13 @@ const formData = ref<MallSpuApi.Spu>({
/** 获取配送方式字典 */
const getDeliveryTypeDict = async () => {
try {
deliveryTypeDict.value = await getIntDictOptions(
deliveryTypeDict.value = await getDictOptions(
DICT_TYPE.TRADE_DELIVERY_TYPE,
'number',
);
deliveryTypeDict.value = await getDictOptions(
DICT_TYPE.TRADE_DELIVERY_TYPE,
'number',
);
} catch (error) {
console.error('获取配送方式字典失败', error);

View File

@@ -1,10 +1,10 @@
import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { formatDate } from '@vben/utils';
import { DICT_TYPE, getDictOptions } from '#/utils';
/** 新增/修改的表单 */
export function useFormSchema(): VbenFormSchema[] {
return [

View File

@@ -1,10 +1,10 @@
import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { formatDate } from '@vben/utils';
import { DICT_TYPE, getDictOptions } from '#/utils';
/** 表单配置 */
export function useFormSchema(): VbenFormSchema[] {
return [

View File

@@ -3,6 +3,8 @@ import type { MallCombinationActivityApi } from '#/api/mall/promotion/combinatio
import { onMounted, ref } from 'vue';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import {
dateFormatter,
fenToYuan,
@@ -15,7 +17,6 @@ import { CHANGE_EVENT } from 'element-plus';
import * as ProductCategoryApi from '#/api/mall/product/category';
import * as CombinationActivityApi from '#/api/mall/promotion/combination/combinationActivity';
import { DICT_TYPE, getIntDictOptions } from '#/utils/dict';
/**
* 活动表格选择对话框
@@ -270,7 +271,7 @@ onMounted(async () => {
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS, 'number')"
:key="dict.value"
:label="dict.label"
:value="dict.value"

View File

@@ -1,7 +1,8 @@
import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import { DICT_TYPE, getDictOptions } from '#/utils';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
/** 列表的搜索表单 */
export function useGridFormSchema(): VbenFormSchema[] {

View File

@@ -3,10 +3,10 @@ import type { MallCouponTemplateApi } from '#/api/mall/promotion/coupon/couponTe
import { reactive, ref } from 'vue';
import { CouponTemplateTakeTypeEnum } from '@vben/constants';
import { CouponTemplateTakeTypeEnum, DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import * as CouponTemplateApi from '#/api/mall/promotion/coupon/couponTemplate';
import { DICT_TYPE, getIntDictOptions } from '#/utils/dict';
import {
discountFormat,
remainedCountFormat,
@@ -117,8 +117,9 @@ const submitForm = () => {
placeholder="请选择优惠券类型"
>
<el-option
v-for="dict in getIntDictOptions(
v-for="dict in getDictOptions(
DICT_TYPE.PROMOTION_DISCOUNT_TYPE,
'number',
)"
:key="dict.value"
:label="dict.label"

View File

@@ -1,10 +1,10 @@
import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { formatDate } from '@vben/utils';
import { DICT_TYPE, getDictOptions } from '#/utils';
/** 表单配置 */
export function useFormSchema(): VbenFormSchema[] {
return [

View File

@@ -1,7 +1,8 @@
import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import { DICT_TYPE, getDictOptions } from '#/utils/dict';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
/** 表单配置 */
export function useFormSchema(): VbenFormSchema[] {

View File

@@ -3,12 +3,13 @@ import type { MallPointActivityApi } from '#/api/mall/promotion/point';
import { computed, ref } from 'vue';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { dateFormatter, fenToYuanFormat } from '@vben/utils';
import { CHANGE_EVENT } from 'element-plus';
import * as PointActivityApi from '#/api/mall/promotion/point';
import { DICT_TYPE, getIntDictOptions } from '#/utils/dict';
/**
* 活动表格选择对话框
@@ -225,7 +226,7 @@ const calculateIsCheckAll = () => {
placeholder="请选择活动状态"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS, 'number')"
:key="dict.value"
:label="dict.label"
:value="dict.value"

View File

@@ -1,7 +1,8 @@
import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import { DICT_TYPE, getDictOptions } from '#/utils';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
/** 表单配置 */
export function useFormSchema(): VbenFormSchema[] {

View File

@@ -1,7 +1,8 @@
import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import { DICT_TYPE, getDictOptions } from '#/utils';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
/** 列表的搜索表单 */
export function useGridFormSchema(): VbenFormSchema[] {

View File

@@ -3,6 +3,8 @@ import type { MallSeckillActivityApi } from '#/api/mall/promotion/seckill/seckil
import { onMounted, ref } from 'vue';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import {
dateFormatter,
fenToYuan,
@@ -15,7 +17,6 @@ import { CHANGE_EVENT } from 'element-plus';
import * as ProductCategoryApi from '#/api/mall/product/category';
import * as SeckillActivityApi from '#/api/mall/promotion/seckill/seckillActivity';
import { DICT_TYPE, getIntDictOptions } from '#/utils/dict';
/**
* 活动表格选择对话框
@@ -263,7 +264,7 @@ onMounted(async () => {
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS, 'number')"
:key="dict.value"
:label="dict.label"
:value="dict.value"

View File

@@ -2,7 +2,8 @@ import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import type { MallSeckillConfigApi } from '#/api/mall/promotion/seckill/seckillConfig';
import { DICT_TYPE, getDictOptions } from '#/utils';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
/** 新增/修改的表单 */
export function useFormSchema(): VbenFormSchema[] {

View File

@@ -1,16 +1,17 @@
<script setup lang="ts">
import type { DictDataType } from '@vben/hooks';
import type { EchartsUIType } from '@vben/plugins/echarts';
import type { MallMemberStatisticsApi } from '#/api/mall/statistics/member';
import type { DictDataType } from '#/utils/dict';
import { onMounted, reactive, ref } from 'vue';
import { AnalysisChartCard } from '@vben/common-ui';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { EchartsUI, useEcharts } from '@vben/plugins/echarts';
import * as MemberStatisticsApi from '#/api/mall/statistics/member';
import { DICT_TYPE, getIntDictOptions } from '#/utils/dict';
const chartRef = ref<EchartsUIType>();
const { renderEcharts } = useEcharts(chartRef);
@@ -43,7 +44,7 @@ const sexChartOptions = reactive({
/** 按照性别,查询会员统计列表 */
const getMemberSexStatisticsList = async () => {
const list = await MemberStatisticsApi.getMemberSexStatisticsList();
const dictDataList = getIntDictOptions(DICT_TYPE.SYSTEM_USER_SEX);
const dictDataList = getDictOptions(DICT_TYPE.SYSTEM_USER_SEX, 'number');
dictDataList.push({ label: '未知', value: null } as any);
(sexChartOptions.series[0] as any).data = dictDataList.map(
(dictData: DictDataType) => {

View File

@@ -6,12 +6,13 @@ import { onMounted, ref } from 'vue';
import { useRouter } from 'vue-router';
import { DocAlert, Page } from '@vben/common-ui';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { ElButton, ElTabs } from 'element-plus';
import { TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { getAfterSalePage } from '#/api/mall/trade/afterSale';
import { DICT_TYPE, getDictOptions } from '#/utils';
import { useGridColumns, useGridFormSchema } from './data';

View File

@@ -6,6 +6,8 @@ import { onMounted, ref } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { confirm, Page } from '@vben/common-ui';
import { DICT_TYPE } from '@vben/constants';
import { getDictLabel, getDictObj } from '@vben/hooks';
import { $t } from '@vben/locales';
import { fenToYuan, formatDate } from '@vben/utils';
@@ -21,7 +23,6 @@ import {
import * as AfterSaleApi from '#/api/mall/trade/afterSale/index';
import ContentWrap from '#/components/content-wrap/content-wrap.vue';
import { DictTag } from '#/components/dict-tag';
import { DICT_TYPE, getDictLabel, getDictObj } from '#/utils/dict';
import UpdateAuditReasonForm from './disagree-form.vue';

View File

@@ -1,6 +1,7 @@
import type { VbenFormSchema } from '#/adapter/form';
import { DICT_TYPE, getDictOptions } from '#/utils';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
/** 售后表单 */
export function useFormSchema(): VbenFormSchema[] {

View File

@@ -1,8 +1,10 @@
import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import { CommonStatusEnum, DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { z } from '#/adapter/form';
import { CommonStatusEnum, DICT_TYPE, getDictOptions } from '#/utils';
/** 新增/修改的表单 */
export function useFormSchema(): VbenFormSchema[] {

View File

@@ -1,8 +1,10 @@
import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import { CommonStatusEnum, DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { z } from '#/adapter/form';
import { CommonStatusEnum, DICT_TYPE, getDictOptions } from '#/utils';
/** 新增/修改的表单 */
export function useFormSchema(): VbenFormSchema[] {

View File

@@ -7,7 +7,12 @@ import { onMounted, ref } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { confirm, Page, useVbenModal } from '@vben/common-ui';
import { DeliveryTypeEnum, TradeOrderStatusEnum } from '@vben/constants';
import {
DeliveryTypeEnum,
DICT_TYPE,
TradeOrderStatusEnum,
} from '@vben/constants';
import { getDictLabel, getDictObj } from '@vben/hooks';
import { fenToYuan, formatDate } from '@vben/utils';
import {
@@ -23,7 +28,6 @@ import * as DeliveryPickUpStoreApi from '#/api/mall/trade/delivery/pickUpStore';
import * as TradeOrderApi from '#/api/mall/trade/order';
import ContentWrap from '#/components/content-wrap/content-wrap.vue';
import { DictTag } from '#/components/dict-tag';
import { DICT_TYPE, getDictLabel, getDictObj } from '#/utils/dict';
import OrderDeliveryForm from './delevery-form.vue';
import OrderUpdateAddressForm from './update-address-form.vue';