fix: 吸收 Vue3 类型收敛与低风险修复
- 三端对齐 AI image 入参类型:DALL3 width/height 转 number,MJ base64Array 必填并初始化 - 收敛 CRM/BPM/IOT/Pay/Member/Mall/MP/Infra 等模块 VO 与表单类型 - 修复 mall kefu conversationList.toSorted 未写回导致排序无效 - Reward 商品范围数组改必填并初始化,表单直接绑定数组字段 - BPM form-design 去掉多余 props 捕获,收敛 form-create rule 类型 - simple-process 子流程固定多实例数量用 number 输入、string 存储 - 修复 web-ele 用户任务超时天数 ISO duration:P...D 而非 PT...D - 修复 web-antd BPM 表单设计模板孤立 > 噪声 验证:web-antd/web-ele clean typecheck 通过;web-antdv-next 既有错误未命中本轮文件migration
parent
4afe56d03b
commit
6ddaa3a755
|
|
@ -34,15 +34,15 @@ export namespace AiImageApi {
|
||||||
prompt: string; // 提示词
|
prompt: string; // 提示词
|
||||||
modelId: number; // 模型
|
modelId: number; // 模型
|
||||||
style: string; // 图像生成的风格
|
style: string; // 图像生成的风格
|
||||||
width: string; // 图片宽度
|
width: number; // 图片宽度
|
||||||
height: string; // 图片高度
|
height: number; // 图片高度
|
||||||
options: object; // 绘制参数,Map<String, String>
|
options: object; // 绘制参数,Map<String, String>
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ImageMidjourneyImagineReqVO {
|
export interface ImageMidjourneyImagineReqVO {
|
||||||
prompt: string; // 提示词
|
prompt: string; // 提示词
|
||||||
modelId: number; // 模型
|
modelId: number; // 模型
|
||||||
base64Array?: string[]; // size不能为空
|
base64Array: string[]; // 参考图 base64 列表
|
||||||
width: string; // 图片宽度
|
width: string; // 图片宽度
|
||||||
height: string; // 图片高度
|
height: string; // 图片高度
|
||||||
version: string; // 版本
|
version: string; // 版本
|
||||||
|
|
|
||||||
|
|
@ -11,15 +11,16 @@ export namespace CrmBusinessStatusApi {
|
||||||
deptNames?: string[];
|
deptNames?: string[];
|
||||||
creator?: string;
|
creator?: string;
|
||||||
createTime?: Date;
|
createTime?: Date;
|
||||||
statuses?: BusinessStatusType[];
|
statuses: BusinessStatusType[];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 商机状态信息 */
|
/** 商机状态信息 */
|
||||||
export interface BusinessStatusType {
|
export interface BusinessStatusType {
|
||||||
id?: number;
|
id?: number;
|
||||||
name: string;
|
name: string;
|
||||||
percent: number;
|
percent?: number;
|
||||||
[x: string]: any;
|
endStatus?: number;
|
||||||
|
key?: string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -43,7 +44,7 @@ export const DEFAULT_STATUSES = [
|
||||||
name: '无效',
|
name: '无效',
|
||||||
percent: 0,
|
percent: 0,
|
||||||
},
|
},
|
||||||
];
|
] satisfies CrmBusinessStatusApi.BusinessStatusType[];
|
||||||
|
|
||||||
/** 查询商机状态组列表 */
|
/** 查询商机状态组列表 */
|
||||||
export function getBusinessStatusPage(params: PageParam) {
|
export function getBusinessStatusPage(params: PageParam) {
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,18 @@ export namespace InfraCodegenApi {
|
||||||
parentMenuId: number;
|
parentMenuId: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 代码生成表保存请求 */
|
||||||
|
export interface CodegenTableSaveReqVO extends CodegenTable {
|
||||||
|
frontType?: null | number;
|
||||||
|
genPath?: string;
|
||||||
|
genType?: string;
|
||||||
|
masterTableId?: number;
|
||||||
|
subJoinColumnId?: number;
|
||||||
|
subJoinMany?: boolean;
|
||||||
|
treeParentColumnId?: number;
|
||||||
|
treeNameColumnId?: number;
|
||||||
|
}
|
||||||
|
|
||||||
/** 代码生成字段定义 */
|
/** 代码生成字段定义 */
|
||||||
export interface CodegenColumn {
|
export interface CodegenColumn {
|
||||||
id: number;
|
id: number;
|
||||||
|
|
@ -54,7 +66,7 @@ export namespace InfraCodegenApi {
|
||||||
|
|
||||||
/** 代码生成详情 */
|
/** 代码生成详情 */
|
||||||
export interface CodegenDetail {
|
export interface CodegenDetail {
|
||||||
table: CodegenTable;
|
table: CodegenTableSaveReqVO;
|
||||||
columns: CodegenColumn[];
|
columns: CodegenColumn[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -66,7 +78,7 @@ export namespace InfraCodegenApi {
|
||||||
|
|
||||||
/** 更新代码生成请求 */
|
/** 更新代码生成请求 */
|
||||||
export interface CodegenUpdateReqVO {
|
export interface CodegenUpdateReqVO {
|
||||||
table: any | CodegenTable;
|
table: CodegenTableSaveReqVO;
|
||||||
columns: CodegenColumn[];
|
columns: CodegenColumn[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
import type { Dayjs } from 'dayjs';
|
|
||||||
|
|
||||||
import type { PageParam, PageResult } from '@vben/request';
|
import type { PageParam, PageResult } from '@vben/request';
|
||||||
|
|
||||||
import { requestClient } from '#/api/request';
|
import { requestClient } from '#/api/request';
|
||||||
|
|
@ -7,7 +5,7 @@ import { requestClient } from '#/api/request';
|
||||||
export namespace Demo03StudentApi {
|
export namespace Demo03StudentApi {
|
||||||
/** 学生课程信息 */
|
/** 学生课程信息 */
|
||||||
export interface Demo03Course {
|
export interface Demo03Course {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
score?: number; // 分数
|
score?: number; // 分数
|
||||||
|
|
@ -15,7 +13,7 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生班级信息 */
|
/** 学生班级信息 */
|
||||||
export interface Demo03Grade {
|
export interface Demo03Grade {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
teacher?: string; // 班主任
|
teacher?: string; // 班主任
|
||||||
|
|
@ -23,10 +21,10 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生信息 */
|
/** 学生信息 */
|
||||||
export interface Demo03Student {
|
export interface Demo03Student {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
sex?: number; // 性别
|
sex?: number; // 性别
|
||||||
birthday?: Dayjs | string; // 出生日期
|
birthday?: number | string; // 出生日期
|
||||||
description?: string; // 简介
|
description?: string; // 简介
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
import type { Dayjs } from 'dayjs';
|
|
||||||
|
|
||||||
import type { PageParam, PageResult } from '@vben/request';
|
import type { PageParam, PageResult } from '@vben/request';
|
||||||
|
|
||||||
import { requestClient } from '#/api/request';
|
import { requestClient } from '#/api/request';
|
||||||
|
|
@ -7,7 +5,7 @@ import { requestClient } from '#/api/request';
|
||||||
export namespace Demo03StudentApi {
|
export namespace Demo03StudentApi {
|
||||||
/** 学生课程信息 */
|
/** 学生课程信息 */
|
||||||
export interface Demo03Course {
|
export interface Demo03Course {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
score?: number; // 分数
|
score?: number; // 分数
|
||||||
|
|
@ -15,7 +13,7 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生班级信息 */
|
/** 学生班级信息 */
|
||||||
export interface Demo03Grade {
|
export interface Demo03Grade {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
teacher?: string; // 班主任
|
teacher?: string; // 班主任
|
||||||
|
|
@ -23,10 +21,10 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生信息 */
|
/** 学生信息 */
|
||||||
export interface Demo03Student {
|
export interface Demo03Student {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
sex?: number; // 性别
|
sex?: number; // 性别
|
||||||
birthday?: Dayjs | string; // 出生日期
|
birthday?: number | string; // 出生日期
|
||||||
description?: string; // 简介
|
description?: string; // 简介
|
||||||
demo03courses?: Demo03Course[];
|
demo03courses?: Demo03Course[];
|
||||||
demo03grade?: Demo03Grade;
|
demo03grade?: Demo03Grade;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
import type { Dayjs } from 'dayjs';
|
|
||||||
|
|
||||||
import type { PageParam, PageResult } from '@vben/request';
|
import type { PageParam, PageResult } from '@vben/request';
|
||||||
|
|
||||||
import { requestClient } from '#/api/request';
|
import { requestClient } from '#/api/request';
|
||||||
|
|
@ -7,7 +5,7 @@ import { requestClient } from '#/api/request';
|
||||||
export namespace Demo03StudentApi {
|
export namespace Demo03StudentApi {
|
||||||
/** 学生课程信息 */
|
/** 学生课程信息 */
|
||||||
export interface Demo03Course {
|
export interface Demo03Course {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
score?: number; // 分数
|
score?: number; // 分数
|
||||||
|
|
@ -15,7 +13,7 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生班级信息 */
|
/** 学生班级信息 */
|
||||||
export interface Demo03Grade {
|
export interface Demo03Grade {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
teacher?: string; // 班主任
|
teacher?: string; // 班主任
|
||||||
|
|
@ -23,10 +21,10 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生信息 */
|
/** 学生信息 */
|
||||||
export interface Demo03Student {
|
export interface Demo03Student {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
sex?: number; // 性别
|
sex?: number; // 性别
|
||||||
birthday?: Dayjs | string; // 出生日期
|
birthday?: number | string; // 出生日期
|
||||||
description?: string; // 简介
|
description?: string; // 简介
|
||||||
demo03courses?: Demo03Course[];
|
demo03courses?: Demo03Course[];
|
||||||
demo03grade?: Demo03Grade;
|
demo03grade?: Demo03Grade;
|
||||||
|
|
|
||||||
|
|
@ -6,11 +6,11 @@ export namespace IoTOtaTaskApi {
|
||||||
/** IoT OTA 升级任务 */
|
/** IoT OTA 升级任务 */
|
||||||
export interface Task {
|
export interface Task {
|
||||||
id?: number;
|
id?: number;
|
||||||
name?: string;
|
name: string;
|
||||||
description?: string;
|
description?: string;
|
||||||
firmwareId?: number;
|
firmwareId?: number;
|
||||||
status?: number;
|
status?: number;
|
||||||
deviceScope?: number;
|
deviceScope: number;
|
||||||
deviceIds?: number[];
|
deviceIds?: number[];
|
||||||
deviceTotalCount?: number;
|
deviceTotalCount?: number;
|
||||||
deviceSuccessCount?: number;
|
deviceSuccessCount?: number;
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,8 @@ export namespace ThingModelApi {
|
||||||
required?: boolean;
|
required?: boolean;
|
||||||
dataType?: string;
|
dataType?: string;
|
||||||
description?: string;
|
description?: string;
|
||||||
dataSpecs?: any;
|
dataSpecs?: ThingModelDataSpecs;
|
||||||
dataSpecsList?: any[];
|
dataSpecsList?: ThingModelPropertyDataSpecs[];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** IoT 物模型服务 */
|
/** IoT 物模型服务 */
|
||||||
|
|
@ -64,8 +64,8 @@ export namespace ThingModelApi {
|
||||||
direction?: string;
|
direction?: string;
|
||||||
paraOrder?: number;
|
paraOrder?: number;
|
||||||
dataType?: string;
|
dataType?: string;
|
||||||
dataSpecs?: any;
|
dataSpecs?: ThingModelDataSpecs;
|
||||||
dataSpecsList?: any[];
|
dataSpecsList?: ThingModelPropertyDataSpecs[];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** IoT 物模型 TSL(树形)响应 */
|
/** IoT 物模型 TSL(树形)响应 */
|
||||||
|
|
@ -78,19 +78,35 @@ export namespace ThingModelApi {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** IoT 数据定义(数值型) */
|
/** IoT 数据定义(数值型) */
|
||||||
export interface DataSpecsNumberData {
|
export interface ThingModelDataSpecs {
|
||||||
|
accessMode?: string;
|
||||||
|
childDataType?: string;
|
||||||
|
dataSpecs?: ThingModelDataSpecs;
|
||||||
|
dataSpecsList?: ThingModelPropertyDataSpecs[];
|
||||||
|
dataType?: string;
|
||||||
|
defaultValue?: string;
|
||||||
|
description?: string;
|
||||||
|
identifier?: string;
|
||||||
|
length?: number | string;
|
||||||
min?: number | string;
|
min?: number | string;
|
||||||
max?: number | string;
|
max?: number | string;
|
||||||
|
name?: string;
|
||||||
|
precise?: string;
|
||||||
|
required?: boolean;
|
||||||
|
size?: number | string;
|
||||||
step?: number | string;
|
step?: number | string;
|
||||||
unit?: string;
|
unit?: string;
|
||||||
unitName?: string;
|
unitName?: string;
|
||||||
|
value?: number | string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** IoT 数据定义(数值型) */
|
||||||
|
export type DataSpecsNumberData = ThingModelDataSpecs;
|
||||||
|
|
||||||
/** IoT 数据定义(枚举/布尔型) */
|
/** IoT 数据定义(枚举/布尔型) */
|
||||||
export interface DataSpecsEnumOrBoolData {
|
export type DataSpecsEnumOrBoolData = ThingModelDataSpecs;
|
||||||
value: number | string;
|
|
||||||
name: string;
|
export type ThingModelPropertyDataSpecs = Property & ThingModelDataSpecs;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 生成「必填 + 数字」类校验器:拼到 size / length / 枚举值上 */
|
/** 生成「必填 + 数字」类校验器:拼到 size / length / 枚举值上 */
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ export namespace MallCombinationActivityApi {
|
||||||
id?: number; // 活动编号
|
id?: number; // 活动编号
|
||||||
name?: string; // 活动名称
|
name?: string; // 活动名称
|
||||||
spuId?: number; // 商品 SPU 编号
|
spuId?: number; // 商品 SPU 编号
|
||||||
|
spuName?: string; // 商品 SPU 名称
|
||||||
totalLimitCount?: number; // 总限购数量
|
totalLimitCount?: number; // 总限购数量
|
||||||
singleLimitCount?: number; // 单次限购数量
|
singleLimitCount?: number; // 单次限购数量
|
||||||
startTime?: Date; // 开始时间
|
startTime?: Date; // 开始时间
|
||||||
|
|
@ -21,7 +22,7 @@ export namespace MallCombinationActivityApi {
|
||||||
limitDuration?: number; // 限制时长
|
limitDuration?: number; // 限制时长
|
||||||
combinationPrice?: number; // 拼团价格
|
combinationPrice?: number; // 拼团价格
|
||||||
products: CombinationProduct[]; // 商品列表
|
products: CombinationProduct[]; // 商品列表
|
||||||
picUrl?: any;
|
picUrl?: string; // 商品图片
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 拼团活动所需属性 */
|
/** 拼团活动所需属性 */
|
||||||
|
|
|
||||||
|
|
@ -26,9 +26,9 @@ export namespace MallRewardActivityApi {
|
||||||
conditionType?: number; // 条件类型
|
conditionType?: number; // 条件类型
|
||||||
productScope?: number; // 商品范围
|
productScope?: number; // 商品范围
|
||||||
rules: RewardRule[]; // 优惠规则列表
|
rules: RewardRule[]; // 优惠规则列表
|
||||||
productScopeValues?: number[]; // 商品范围值(仅表单使用):值为品类编号列表、商品编号列表
|
productScopeValues: number[]; // 商品范围值(仅表单使用):值为品类编号列表、商品编号列表
|
||||||
productCategoryIds?: number[]; // 商品分类编号列表(仅表单使用)
|
productCategoryIds: number[]; // 商品分类编号列表(仅表单使用)
|
||||||
productSpuIds?: number[]; // 商品 SPU 编号列表(仅表单使用)
|
productSpuIds: number[]; // 商品 SPU 编号列表(仅表单使用)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ export namespace MallSeckillActivityApi {
|
||||||
totalStock?: number; // 秒杀总库存
|
totalStock?: number; // 秒杀总库存
|
||||||
seckillPrice?: number; // 秒杀价格
|
seckillPrice?: number; // 秒杀价格
|
||||||
products?: SeckillProduct[]; // 秒杀商品列表
|
products?: SeckillProduct[]; // 秒杀商品列表
|
||||||
picUrl?: any;
|
picUrl?: string; // 商品图片
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,20 +4,21 @@ export namespace MallTradeConfigApi {
|
||||||
/** 交易中心配置 */
|
/** 交易中心配置 */
|
||||||
export interface Config {
|
export interface Config {
|
||||||
id?: number;
|
id?: number;
|
||||||
afterSaleRefundReasons?: string[];
|
afterSaleRefundReasons: string[];
|
||||||
afterSaleReturnReasons?: string[];
|
afterSaleReturnReasons: string[];
|
||||||
deliveryExpressFreeEnabled?: boolean;
|
deliveryExpressFreeEnabled: boolean;
|
||||||
deliveryExpressFreePrice?: number;
|
deliveryExpressFreePrice: number;
|
||||||
deliveryPickUpEnabled?: boolean;
|
deliveryPickUpEnabled: boolean;
|
||||||
brokerageEnabled?: boolean;
|
brokerageEnabled?: boolean;
|
||||||
brokerageEnabledCondition?: number;
|
brokerageEnabledCondition?: number;
|
||||||
brokerageBindMode?: number;
|
brokerageBindMode?: number;
|
||||||
brokeragePosterUrls?: string;
|
brokeragePosterUrls: string[];
|
||||||
brokerageFirstPercent?: number;
|
brokerageFirstPercent?: number;
|
||||||
brokerageSecondPercent?: number;
|
brokerageSecondPercent?: number;
|
||||||
brokerageWithdrawMinPrice?: number;
|
brokerageWithdrawMinPrice: number;
|
||||||
brokerageFrozenDays?: number;
|
brokerageFrozenDays: number;
|
||||||
brokerageWithdrawTypes?: string;
|
brokerageWithdrawFeePercent: number;
|
||||||
|
brokerageWithdrawTypes: number[];
|
||||||
tencentLbsKey?: string;
|
tencentLbsKey?: string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ export namespace MemberConfigApi {
|
||||||
/** 积分设置信息 */
|
/** 积分设置信息 */
|
||||||
export interface Config {
|
export interface Config {
|
||||||
id?: number;
|
id?: number;
|
||||||
pointTradeDeductEnable: number;
|
pointTradeDeductEnable: boolean;
|
||||||
pointTradeDeductUnitPrice: number;
|
pointTradeDeductUnitPrice: number;
|
||||||
pointTradeDeductMaxPrice: number;
|
pointTradeDeductMaxPrice: number;
|
||||||
pointTradeGivePoint: number;
|
pointTradeGivePoint: number;
|
||||||
|
|
|
||||||
|
|
@ -10,27 +10,31 @@ export namespace MemberUserApi {
|
||||||
birthday?: number;
|
birthday?: number;
|
||||||
createTime?: number;
|
createTime?: number;
|
||||||
loginDate?: number;
|
loginDate?: number;
|
||||||
loginIp: string;
|
loginIp?: string;
|
||||||
mark: string;
|
mark?: string;
|
||||||
mobile: string;
|
mobile?: string;
|
||||||
email?: string;
|
email?: string;
|
||||||
name?: string;
|
name?: string;
|
||||||
nickname?: string;
|
nickname?: string;
|
||||||
registerIp: string;
|
registerIp?: string;
|
||||||
sex: number;
|
sex?: number;
|
||||||
status: number;
|
status?: number;
|
||||||
areaId?: number;
|
areaId?: number;
|
||||||
areaName?: string;
|
areaName?: string;
|
||||||
levelName: string;
|
tagIds?: number[];
|
||||||
point?: number;
|
groupId?: number;
|
||||||
totalPoint?: number;
|
levelId?: number;
|
||||||
experience?: number;
|
levelName?: null | string;
|
||||||
|
point?: null | number;
|
||||||
|
totalPoint?: null | number;
|
||||||
|
experience?: null | number;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 会员用户等级更新信息 */
|
/** 会员用户等级更新信息 */
|
||||||
export interface UserUpdateLevelReqVO {
|
export interface UserUpdateLevelReqVO {
|
||||||
id: number;
|
id: number;
|
||||||
levelId: number;
|
levelId: number;
|
||||||
|
reason: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 会员用户积分更新信息 */
|
/** 会员用户积分更新信息 */
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,12 @@ export namespace MpTagApi {
|
||||||
count?: number;
|
count?: number;
|
||||||
createTime?: Date;
|
createTime?: Date;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 标签精简信息 */
|
||||||
|
export interface SimpleTag {
|
||||||
|
tagId: number;
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 创建公众号标签 */
|
/** 创建公众号标签 */
|
||||||
|
|
@ -46,7 +52,7 @@ export function getTagPage(params: PageParam) {
|
||||||
|
|
||||||
/** 获取公众号标签精简信息列表 */
|
/** 获取公众号标签精简信息列表 */
|
||||||
export function getSimpleTagList() {
|
export function getSimpleTagList() {
|
||||||
return requestClient.get<MpTagApi.Tag[]>('/mp/tag/list-all-simple');
|
return requestClient.get<MpTagApi.SimpleTag[]>('/mp/tag/list-all-simple');
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 同步公众号标签 */
|
/** 同步公众号标签 */
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,16 @@ import type { PageParam, PageResult } from '@vben/request';
|
||||||
import { requestClient } from '#/api/request';
|
import { requestClient } from '#/api/request';
|
||||||
|
|
||||||
export namespace PayNotifyApi {
|
export namespace PayNotifyApi {
|
||||||
|
/** 支付通知日志 */
|
||||||
|
export interface NotifyLog {
|
||||||
|
id?: number;
|
||||||
|
status?: number;
|
||||||
|
notifyTimes?: number;
|
||||||
|
lastExecuteTime?: Date;
|
||||||
|
createTime?: Date;
|
||||||
|
response?: string;
|
||||||
|
}
|
||||||
|
|
||||||
/** 支付通知任务 */
|
/** 支付通知任务 */
|
||||||
export interface NotifyTask {
|
export interface NotifyTask {
|
||||||
id: number;
|
id: number;
|
||||||
|
|
@ -20,13 +30,13 @@ export namespace PayNotifyApi {
|
||||||
maxNotifyTimes: number;
|
maxNotifyTimes: number;
|
||||||
createTime: Date;
|
createTime: Date;
|
||||||
updateTime: Date;
|
updateTime: Date;
|
||||||
logs?: any[];
|
logs?: NotifyLog[];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获得支付通知明细 */
|
/** 获得支付通知明细 */
|
||||||
export function getNotifyTaskDetail(id: number) {
|
export function getNotifyTaskDetail(id: number) {
|
||||||
return requestClient.get(`/pay/notify/get-detail?id=${id}`);
|
return requestClient.get<PayNotifyApi.NotifyTask>(`/pay/notify/get-detail?id=${id}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获得支付通知分页 */
|
/** 获得支付通知分页 */
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ export const useMallKefuStore = defineStore('mall-kefu', {
|
||||||
},
|
},
|
||||||
conversationSort() {
|
conversationSort() {
|
||||||
// 按置顶属性和最后消息时间排序
|
// 按置顶属性和最后消息时间排序
|
||||||
this.conversationList.toSorted((a, b) => {
|
this.conversationList = this.conversationList.toSorted((a, b) => {
|
||||||
// 按照置顶排序,置顶的会在前面
|
// 按照置顶排序,置顶的会在前面
|
||||||
if (a.adminPinned !== b.adminPinned) {
|
if (a.adminPinned !== b.adminPinned) {
|
||||||
return a.adminPinned ? -1 : 1;
|
return a.adminPinned ? -1 : 1;
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@ const props = defineProps({
|
||||||
const emits = defineEmits(['onBtnClick', 'onMjBtnClick']);
|
const emits = defineEmits(['onBtnClick', 'onMjBtnClick']);
|
||||||
|
|
||||||
/** 处理点击事件 */
|
/** 处理点击事件 */
|
||||||
async function handleButtonClick(type: string, detail: AiImageApi.Image) {
|
async function handleButtonClick(type: string) {
|
||||||
emits('onBtnClick', type, detail);
|
emits('onBtnClick', type, props.detail);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 处理 Midjourney 按钮点击事件 */
|
/** 处理 Midjourney 按钮点击事件 */
|
||||||
|
|
@ -79,28 +79,28 @@ onMounted(async () => {
|
||||||
<Button
|
<Button
|
||||||
class="m-0 p-2"
|
class="m-0 p-2"
|
||||||
type="text"
|
type="text"
|
||||||
@click="handleButtonClick('download', detail)"
|
@click="handleButtonClick('download')"
|
||||||
>
|
>
|
||||||
<IconifyIcon icon="lucide:download" />
|
<IconifyIcon icon="lucide:download" />
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
class="m-0 p-2"
|
class="m-0 p-2"
|
||||||
type="text"
|
type="text"
|
||||||
@click="handleButtonClick('regeneration', detail)"
|
@click="handleButtonClick('regeneration')"
|
||||||
>
|
>
|
||||||
<IconifyIcon icon="lucide:refresh-cw" />
|
<IconifyIcon icon="lucide:refresh-cw" />
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
class="m-0 p-2"
|
class="m-0 p-2"
|
||||||
type="text"
|
type="text"
|
||||||
@click="handleButtonClick('delete', detail)"
|
@click="handleButtonClick('delete')"
|
||||||
>
|
>
|
||||||
<IconifyIcon icon="lucide:trash" />
|
<IconifyIcon icon="lucide:trash" />
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
class="m-0 p-2"
|
class="m-0 p-2"
|
||||||
type="text"
|
type="text"
|
||||||
@click="handleButtonClick('more', detail)"
|
@click="handleButtonClick('more')"
|
||||||
>
|
>
|
||||||
<IconifyIcon icon="lucide:ellipsis-vertical" />
|
<IconifyIcon icon="lucide:ellipsis-vertical" />
|
||||||
</Button>
|
</Button>
|
||||||
|
|
@ -119,8 +119,8 @@ onMounted(async () => {
|
||||||
<div class="mt-2 flex w-full flex-wrap justify-start">
|
<div class="mt-2 flex w-full flex-wrap justify-start">
|
||||||
<Button
|
<Button
|
||||||
size="small"
|
size="small"
|
||||||
v-for="(button, index) in detail?.buttons"
|
v-for="button in detail?.buttons"
|
||||||
:key="index"
|
:key="button.customId"
|
||||||
class="m-2 ml-0 min-w-10"
|
class="m-2 ml-0 min-w-10"
|
||||||
@click="handleMidjourneyBtnClick(button)"
|
@click="handleMidjourneyBtnClick(button)"
|
||||||
>
|
>
|
||||||
|
|
|
||||||
|
|
@ -111,8 +111,8 @@ async function handleGenerateImage() {
|
||||||
prompt: prompt.value, // 提示词
|
prompt: prompt.value, // 提示词
|
||||||
modelId: matchedModel.id, // 使用匹配到的模型
|
modelId: matchedModel.id, // 使用匹配到的模型
|
||||||
style: style.value, // 图像生成的风格
|
style: style.value, // 图像生成的风格
|
||||||
width: imageSize.width, // size 不能为空
|
width: Number(imageSize.width), // size 不能为空
|
||||||
height: imageSize.height, // size 不能为空
|
height: Number(imageSize.height), // size 不能为空
|
||||||
options: {
|
options: {
|
||||||
style: style.value, // 图像生成的风格
|
style: style.value, // 图像生成的风格
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,7 @@ async function handleGenerateImage() {
|
||||||
const req = {
|
const req = {
|
||||||
prompt: prompt.value,
|
prompt: prompt.value,
|
||||||
modelId: matchedModel.id,
|
modelId: matchedModel.id,
|
||||||
|
base64Array: [],
|
||||||
width: imageSize.width,
|
width: imageSize.width,
|
||||||
height: imageSize.height,
|
height: imageSize.height,
|
||||||
version: selectVersion.value,
|
version: selectVersion.value,
|
||||||
|
|
|
||||||
|
|
@ -186,6 +186,12 @@ const multiFormFieldOptions = computed(() => {
|
||||||
(item) => item.type === 'select' || item.type === 'checkbox',
|
(item) => item.type === 'select' || item.type === 'checkbox',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
const multiInstanceSourceNumber = computed({
|
||||||
|
get: () => Number(configForm.value.multiInstanceSource || 1),
|
||||||
|
set: (value?: number) => {
|
||||||
|
configForm.value.multiInstanceSource = String(value || '');
|
||||||
|
},
|
||||||
|
});
|
||||||
const childFormFieldOptions = ref<any[]>([]);
|
const childFormFieldOptions = ref<any[]>([]);
|
||||||
|
|
||||||
/** 保存配置 */
|
/** 保存配置 */
|
||||||
|
|
@ -806,7 +812,7 @@ onMounted(async () => {
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<InputNumber
|
<InputNumber
|
||||||
v-model:value="configForm.multiInstanceSource"
|
v-model:value="multiInstanceSourceNumber"
|
||||||
:min="1"
|
:min="1"
|
||||||
/>
|
/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
|
||||||
|
|
@ -24,19 +24,21 @@ import {
|
||||||
import { getForm } from '#/api/bpm/form';
|
import { getForm } from '#/api/bpm/form';
|
||||||
import { setConfAndFields2 } from '#/components/form-create';
|
import { setConfAndFields2 } from '#/components/form-create';
|
||||||
|
|
||||||
const props = defineProps({
|
type FormCreateRule = {
|
||||||
formList: {
|
[key: string]: unknown;
|
||||||
type: Array<BpmFormApi.Form>,
|
props?: Record<string, unknown>;
|
||||||
required: true,
|
};
|
||||||
},
|
|
||||||
});
|
defineProps<{
|
||||||
|
formList: BpmFormApi.Form[];
|
||||||
|
}>();
|
||||||
|
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
|
|
||||||
const modelData = defineModel<any>(); // 创建本地数据副本
|
const modelData = defineModel<any>(); // 创建本地数据副本
|
||||||
const formPreview = ref({
|
const formPreview = ref({
|
||||||
formData: {} as any,
|
formData: {} as any,
|
||||||
rule: [],
|
rule: [] as FormCreateRule[],
|
||||||
option: {
|
option: {
|
||||||
submitBtn: false,
|
submitBtn: false,
|
||||||
resetBtn: false,
|
resetBtn: false,
|
||||||
|
|
@ -63,7 +65,7 @@ watch(
|
||||||
const data = await getForm(newFormId);
|
const data = await getForm(newFormId);
|
||||||
setConfAndFields2(formPreview.value, data.conf, data.fields);
|
setConfAndFields2(formPreview.value, data.conf, data.fields);
|
||||||
// 设置只读
|
// 设置只读
|
||||||
formPreview.value.rule.forEach((item: any) => {
|
formPreview.value.rule.forEach((item) => {
|
||||||
item.props = { ...item.props, disabled: true };
|
item.props = { ...item.props, disabled: true };
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -111,13 +113,12 @@ defineExpose({ validate });
|
||||||
>
|
>
|
||||||
<Select v-model:value="modelData.formId" allow-clear>
|
<Select v-model:value="modelData.formId" allow-clear>
|
||||||
<SelectOption
|
<SelectOption
|
||||||
v-for="form in props.formList"
|
v-for="form in formList"
|
||||||
:key="form.id"
|
:key="form.id"
|
||||||
:value="form.id"
|
:value="form.id"
|
||||||
>
|
>
|
||||||
{{ form.name }}
|
{{ form.name }}
|
||||||
</SelectOption>
|
</SelectOption>
|
||||||
>
|
|
||||||
</Select>
|
</Select>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
<FormItem
|
<FormItem
|
||||||
|
|
|
||||||
|
|
@ -64,8 +64,8 @@ const detailForm = ref<ProcessFormData>({
|
||||||
const fApi = ref<any>();
|
const fApi = ref<any>();
|
||||||
|
|
||||||
const startUserSelectTasks = ref<UserTask[]>([]);
|
const startUserSelectTasks = ref<UserTask[]>([]);
|
||||||
const startUserSelectAssignees = ref<Record<string, string[]>>({});
|
const startUserSelectAssignees = ref<Record<string, number[]>>({});
|
||||||
const tempStartUserSelectAssignees = ref<Record<string, string[]>>({});
|
const tempStartUserSelectAssignees = ref<Record<string, number[]>>({});
|
||||||
|
|
||||||
const bpmnXML = ref<string | undefined>(undefined);
|
const bpmnXML = ref<string | undefined>(undefined);
|
||||||
const simpleJson = ref<string | undefined>(undefined);
|
const simpleJson = ref<string | undefined>(undefined);
|
||||||
|
|
|
||||||
|
|
@ -85,10 +85,10 @@ export function useGridColumns(): VxeTableGridOptions['columns'] {
|
||||||
export function useFormColumns(): VxeTableGridOptions['columns'] {
|
export function useFormColumns(): VxeTableGridOptions['columns'] {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
field: 'defaultStatus',
|
field: 'endStatus',
|
||||||
title: '阶段',
|
title: '阶段',
|
||||||
minWidth: 100,
|
minWidth: 100,
|
||||||
slots: { default: 'defaultStatus' },
|
slots: { default: 'endStatus' },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'name',
|
field: 'name',
|
||||||
|
|
|
||||||
|
|
@ -108,7 +108,7 @@ async function handleAddStatus() {
|
||||||
formData.value!.statuses!.splice(-3, 0, {
|
formData.value!.statuses!.splice(-3, 0, {
|
||||||
name: '',
|
name: '',
|
||||||
percent: undefined,
|
percent: undefined,
|
||||||
} as any);
|
});
|
||||||
await nextTick();
|
await nextTick();
|
||||||
await gridApi.grid.reloadData(formData.value!.statuses as any);
|
await gridApi.grid.reloadData(formData.value!.statuses as any);
|
||||||
}
|
}
|
||||||
|
|
@ -152,9 +152,9 @@ const [Grid, gridApi] = useVbenVxeGrid({
|
||||||
<Form class="mx-4">
|
<Form class="mx-4">
|
||||||
<template #statuses>
|
<template #statuses>
|
||||||
<Grid class="w-full">
|
<Grid class="w-full">
|
||||||
<template #defaultStatus="{ row, rowIndex }">
|
<template #endStatus="{ row, rowIndex }">
|
||||||
<span>
|
<span>
|
||||||
{{ row.defaultStatus ? '结束' : `阶段${rowIndex + 1}` }}
|
{{ row.endStatus ? '结束' : `阶段${rowIndex + 1}` }}
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
<template #name="{ row }">
|
<template #name="{ row }">
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ import {
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
columns?: InfraCodegenApi.CodegenColumn[];
|
columns?: InfraCodegenApi.CodegenColumn[];
|
||||||
table?: InfraCodegenApi.CodegenTable;
|
table?: InfraCodegenApi.CodegenTableSaveReqVO;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const tables = ref<InfraCodegenApi.CodegenTable[]>([]);
|
const tables = ref<InfraCodegenApi.CodegenTable[]>([]);
|
||||||
|
|
@ -70,7 +70,7 @@ function updateTreeSchema(): void {
|
||||||
schema: useGenerationInfoTreeFormSchema(props.columns),
|
schema: useGenerationInfoTreeFormSchema(props.columns),
|
||||||
});
|
});
|
||||||
// 树表信息回显
|
// 树表信息回显
|
||||||
treeFormApi.setValues(props.table as any);
|
treeFormApi.setValues(props.table || {});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 更新主子表信息表单 schema */
|
/** 更新主子表信息表单 schema */
|
||||||
|
|
@ -79,7 +79,7 @@ function updateSubSchema(): void {
|
||||||
schema: useGenerationInfoSubTableFormSchema(props.columns, tables.value),
|
schema: useGenerationInfoSubTableFormSchema(props.columns, tables.value),
|
||||||
});
|
});
|
||||||
// 主子表信息回显
|
// 主子表信息回显
|
||||||
subFormApi.setValues(props.table as any);
|
subFormApi.setValues(props.table || {});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获取合并的表单值 */
|
/** 获取合并的表单值 */
|
||||||
|
|
@ -140,7 +140,7 @@ watch(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const table = val as InfraCodegenApi.CodegenTable;
|
const table = val;
|
||||||
// 初始化树表的 schema
|
// 初始化树表的 schema
|
||||||
updateTreeSchema();
|
updateTreeSchema();
|
||||||
// 设置表单值
|
// 设置表单值
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,7 @@ function handleRowCheckboxChange({
|
||||||
}: {
|
}: {
|
||||||
records: Demo03StudentApi.Demo03Student[];
|
records: Demo03StudentApi.Demo03Student[];
|
||||||
}) {
|
}) {
|
||||||
checkedIds.value = records.map((item) => item.id)!;
|
checkedIds.value = records.map((item) => item.id!);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 导出表格 */
|
/** 导出表格 */
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import type { Rule } from 'ant-design-vue/es/form';
|
import type { Rule } from 'ant-design-vue/es/form';
|
||||||
|
import type { Dayjs } from 'dayjs';
|
||||||
|
|
||||||
import type { Demo03StudentApi } from '#/api/infra/demo/demo03/erp';
|
import type { Demo03StudentApi } from '#/api/infra/demo/demo03/erp';
|
||||||
|
|
||||||
|
|
@ -28,8 +29,15 @@ import { $t } from '#/locales';
|
||||||
|
|
||||||
const emit = defineEmits(['success']);
|
const emit = defineEmits(['success']);
|
||||||
|
|
||||||
|
type Demo03StudentFormData = Omit<
|
||||||
|
Demo03StudentApi.Demo03Student,
|
||||||
|
'birthday'
|
||||||
|
> & {
|
||||||
|
birthday?: Dayjs | string;
|
||||||
|
};
|
||||||
|
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
const formData = ref<Partial<Demo03StudentApi.Demo03Student>>({
|
const formData = ref<Partial<Demo03StudentFormData>>({
|
||||||
id: undefined,
|
id: undefined,
|
||||||
name: undefined,
|
name: undefined,
|
||||||
sex: undefined,
|
sex: undefined,
|
||||||
|
|
@ -96,7 +104,10 @@ const [Modal, modalApi] = useVbenModal({
|
||||||
modalApi.unlock();
|
modalApi.unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
formData.value = data;
|
formData.value = {
|
||||||
|
...data,
|
||||||
|
birthday: data.birthday === undefined ? undefined : String(data.birthday),
|
||||||
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import type { Rule } from 'ant-design-vue/es/form';
|
import type { Rule } from 'ant-design-vue/es/form';
|
||||||
|
import type { Dayjs } from 'dayjs';
|
||||||
|
|
||||||
import type { Demo03StudentApi } from '#/api/infra/demo/demo03/normal';
|
import type { Demo03StudentApi } from '#/api/infra/demo/demo03/normal';
|
||||||
|
|
||||||
|
|
@ -32,8 +33,15 @@ import Demo03GradeForm from './demo03-grade-form.vue';
|
||||||
|
|
||||||
const emit = defineEmits(['success']);
|
const emit = defineEmits(['success']);
|
||||||
|
|
||||||
|
type Demo03StudentFormData = Omit<
|
||||||
|
Demo03StudentApi.Demo03Student,
|
||||||
|
'birthday'
|
||||||
|
> & {
|
||||||
|
birthday?: Dayjs | string;
|
||||||
|
};
|
||||||
|
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
const formData = ref<Partial<Demo03StudentApi.Demo03Student>>({
|
const formData = ref<Partial<Demo03StudentFormData>>({
|
||||||
id: undefined,
|
id: undefined,
|
||||||
name: undefined,
|
name: undefined,
|
||||||
sex: undefined,
|
sex: undefined,
|
||||||
|
|
@ -116,7 +124,10 @@ const [Modal, modalApi] = useVbenModal({
|
||||||
modalApi.unlock();
|
modalApi.unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
formData.value = data;
|
formData.value = {
|
||||||
|
...data,
|
||||||
|
birthday: data.birthday === undefined ? undefined : String(data.birthday),
|
||||||
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import type { Rule } from 'ant-design-vue/es/form';
|
import type { Rule } from 'ant-design-vue/es/form';
|
||||||
|
import type { Dayjs } from 'dayjs';
|
||||||
|
|
||||||
import type { Demo03StudentApi } from '#/api/infra/demo/demo03/normal';
|
import type { Demo03StudentApi } from '#/api/infra/demo/demo03/normal';
|
||||||
|
|
||||||
|
|
@ -32,8 +33,15 @@ import Demo03GradeForm from './demo03-grade-form.vue';
|
||||||
|
|
||||||
const emit = defineEmits(['success']);
|
const emit = defineEmits(['success']);
|
||||||
|
|
||||||
|
type Demo03StudentFormData = Omit<
|
||||||
|
Demo03StudentApi.Demo03Student,
|
||||||
|
'birthday'
|
||||||
|
> & {
|
||||||
|
birthday?: Dayjs | string;
|
||||||
|
};
|
||||||
|
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
const formData = ref<Partial<Demo03StudentApi.Demo03Student>>({
|
const formData = ref<Partial<Demo03StudentFormData>>({
|
||||||
id: undefined,
|
id: undefined,
|
||||||
name: undefined,
|
name: undefined,
|
||||||
sex: undefined,
|
sex: undefined,
|
||||||
|
|
@ -115,7 +123,10 @@ const [Modal, modalApi] = useVbenModal({
|
||||||
modalApi.unlock();
|
modalApi.unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
formData.value = data;
|
formData.value = {
|
||||||
|
...data,
|
||||||
|
birthday: data.birthday === undefined ? undefined : String(data.birthday),
|
||||||
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ const isDeviceCondition = computed(() => {
|
||||||
* @param value 字段值
|
* @param value 字段值
|
||||||
*/
|
*/
|
||||||
function updateConditionField(field: any, value: any) {
|
function updateConditionField(field: any, value: any) {
|
||||||
(condition.value as any)[field] = value;
|
Object.assign(condition.value, { [field]: value });
|
||||||
emit('update:modelValue', condition.value);
|
emit('update:modelValue', condition.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -122,7 +122,7 @@ const timeValue2 = computed(() => {
|
||||||
* @param value 字段值
|
* @param value 字段值
|
||||||
*/
|
*/
|
||||||
function updateConditionField(field: any, value: any) {
|
function updateConditionField(field: any, value: any) {
|
||||||
(condition.value as any)[field] = value;
|
Object.assign(condition.value, { [field]: value });
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ const serviceConfig = computed(() => {
|
||||||
* @param value 字段值
|
* @param value 字段值
|
||||||
*/
|
*/
|
||||||
function updateConditionField(field: any, value: any) {
|
function updateConditionField(field: any, value: any) {
|
||||||
(condition.value as any)[field] = value;
|
Object.assign(condition.value, { [field]: value });
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -166,7 +166,7 @@ if (!props.isStructDataSpecs && !props.isParams) {
|
||||||
label="数据长度"
|
label="数据长度"
|
||||||
>
|
>
|
||||||
<Input
|
<Input
|
||||||
v-model:value="property.dataSpecs.length"
|
v-model:value="property.dataSpecs!.length"
|
||||||
class="!w-[255px]"
|
class="!w-[255px]"
|
||||||
placeholder="请输入文本字节长度"
|
placeholder="请输入文本字节长度"
|
||||||
>
|
>
|
||||||
|
|
|
||||||
|
|
@ -205,14 +205,7 @@ export function useFormSchema(): VbenFormSchema[] {
|
||||||
values.productScope === PromotionProductScopeEnum.CATEGORY.scope &&
|
values.productScope === PromotionProductScopeEnum.CATEGORY.scope &&
|
||||||
values.productScopeValues
|
values.productScopeValues
|
||||||
) {
|
) {
|
||||||
const categoryIds = values.productScopeValues;
|
form.setFieldValue('productCategoryIds', values.productScopeValues);
|
||||||
// 单选时使用数组不能反显,取第一个元素
|
|
||||||
form.setFieldValue(
|
|
||||||
'productCategoryIds',
|
|
||||||
Array.isArray(categoryIds) && categoryIds.length > 0
|
|
||||||
? categoryIds[0]
|
|
||||||
: categoryIds,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -237,9 +230,12 @@ export function useFormSchema(): VbenFormSchema[] {
|
||||||
trigger(values, form) {
|
trigger(values, form) {
|
||||||
switch (values.productScope) {
|
switch (values.productScope) {
|
||||||
case PromotionProductScopeEnum.CATEGORY.scope: {
|
case PromotionProductScopeEnum.CATEGORY.scope: {
|
||||||
const categoryIds = Array.isArray(values.productCategoryIds)
|
let categoryIds: number[] = [];
|
||||||
? values.productCategoryIds
|
if (Array.isArray(values.productCategoryIds)) {
|
||||||
: [values.productCategoryIds];
|
categoryIds = values.productCategoryIds;
|
||||||
|
} else if (values.productCategoryIds) {
|
||||||
|
categoryIds = [values.productCategoryIds];
|
||||||
|
}
|
||||||
form.setFieldValue('productScopeValues', categoryIds);
|
form.setFieldValue('productScopeValues', categoryIds);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,11 +27,18 @@ import RewardRule from './reward-rule.vue';
|
||||||
|
|
||||||
const emit = defineEmits(['success']);
|
const emit = defineEmits(['success']);
|
||||||
|
|
||||||
const formData = ref<Partial<MallRewardActivityApi.RewardActivity>>({
|
const createDefaultFormData = (): Partial<MallRewardActivityApi.RewardActivity> => ({
|
||||||
conditionType: PromotionConditionTypeEnum.PRICE.type,
|
conditionType: PromotionConditionTypeEnum.PRICE.type,
|
||||||
productScope: PromotionProductScopeEnum.ALL.scope,
|
productScope: PromotionProductScopeEnum.ALL.scope,
|
||||||
|
productScopeValues: [],
|
||||||
|
productCategoryIds: [],
|
||||||
|
productSpuIds: [],
|
||||||
rules: [],
|
rules: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const formData = ref<Partial<MallRewardActivityApi.RewardActivity>>(
|
||||||
|
createDefaultFormData(),
|
||||||
|
);
|
||||||
const getTitle = computed(() => {
|
const getTitle = computed(() => {
|
||||||
return formData.value?.id
|
return formData.value?.id
|
||||||
? $t('ui.actionTitle.edit', ['满减送'])
|
? $t('ui.actionTitle.edit', ['满减送'])
|
||||||
|
|
@ -106,17 +113,22 @@ const [Modal, modalApi] = useVbenModal({
|
||||||
},
|
},
|
||||||
async onOpenChange(isOpen: boolean) {
|
async onOpenChange(isOpen: boolean) {
|
||||||
if (!isOpen) {
|
if (!isOpen) {
|
||||||
formData.value = {};
|
formData.value = createDefaultFormData();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 加载数据
|
// 加载数据
|
||||||
const data = modalApi.getData<MallRewardActivityApi.RewardActivity>();
|
const data = modalApi.getData<MallRewardActivityApi.RewardActivity>();
|
||||||
if (!data || !data.id) {
|
if (!data || !data.id) {
|
||||||
|
formData.value = createDefaultFormData();
|
||||||
|
await formApi.setValues(formData.value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
modalApi.lock();
|
modalApi.lock();
|
||||||
try {
|
try {
|
||||||
const result = await getReward(data.id);
|
const result = {
|
||||||
|
...createDefaultFormData(),
|
||||||
|
...(await getReward(data.id)),
|
||||||
|
};
|
||||||
result.startAndEndTime = [
|
result.startAndEndTime = [
|
||||||
result.startTime ? String(result.startTime) : undefined,
|
result.startTime ? String(result.startTime) : undefined,
|
||||||
result.endTime ? String(result.endTime) : undefined,
|
result.endTime ? String(result.endTime) : undefined,
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ import { useBalanceFormSchema } from '../data';
|
||||||
|
|
||||||
const emit = defineEmits(['success']);
|
const emit = defineEmits(['success']);
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
id: 0,
|
id: undefined as number | undefined,
|
||||||
nickname: '',
|
nickname: '',
|
||||||
balance: '0',
|
balance: '0',
|
||||||
changeBalance: 0,
|
changeBalance: 0,
|
||||||
|
|
@ -48,7 +48,7 @@ const [Modal, modalApi] = useVbenModal({
|
||||||
const data = await formApi.getValues();
|
const data = await formApi.getValues();
|
||||||
try {
|
try {
|
||||||
await updateWalletBalance({
|
await updateWalletBalance({
|
||||||
userId: data.id,
|
userId: data.id!,
|
||||||
balance: yuanToFen(data.changeBalance) * data.changeType,
|
balance: yuanToFen(data.changeBalance) * data.changeType,
|
||||||
});
|
});
|
||||||
// 关闭并提示
|
// 关闭并提示
|
||||||
|
|
|
||||||
|
|
@ -34,15 +34,15 @@ export namespace AiImageApi {
|
||||||
prompt: string; // 提示词
|
prompt: string; // 提示词
|
||||||
modelId: number; // 模型
|
modelId: number; // 模型
|
||||||
style: string; // 图像生成的风格
|
style: string; // 图像生成的风格
|
||||||
width: string; // 图片宽度
|
width: number; // 图片宽度
|
||||||
height: string; // 图片高度
|
height: number; // 图片高度
|
||||||
options: object; // 绘制参数,Map<String, String>
|
options: object; // 绘制参数,Map<String, String>
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ImageMidjourneyImagineReqVO {
|
export interface ImageMidjourneyImagineReqVO {
|
||||||
prompt: string; // 提示词
|
prompt: string; // 提示词
|
||||||
modelId: number; // 模型
|
modelId: number; // 模型
|
||||||
base64Array?: string[]; // size不能为空
|
base64Array: string[]; // 参考图 base64 列表
|
||||||
width: string; // 图片宽度
|
width: string; // 图片宽度
|
||||||
height: string; // 图片高度
|
height: string; // 图片高度
|
||||||
version: string; // 版本
|
version: string; // 版本
|
||||||
|
|
|
||||||
|
|
@ -11,15 +11,16 @@ export namespace CrmBusinessStatusApi {
|
||||||
deptNames?: string[];
|
deptNames?: string[];
|
||||||
creator?: string;
|
creator?: string;
|
||||||
createTime?: Date;
|
createTime?: Date;
|
||||||
statuses?: BusinessStatusType[];
|
statuses: BusinessStatusType[];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 商机状态信息 */
|
/** 商机状态信息 */
|
||||||
export interface BusinessStatusType {
|
export interface BusinessStatusType {
|
||||||
id?: number;
|
id?: number;
|
||||||
name: string;
|
name: string;
|
||||||
percent: number;
|
percent?: number;
|
||||||
[x: string]: any;
|
endStatus?: number;
|
||||||
|
key?: string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -43,7 +44,7 @@ export const DEFAULT_STATUSES = [
|
||||||
name: '无效',
|
name: '无效',
|
||||||
percent: 0,
|
percent: 0,
|
||||||
},
|
},
|
||||||
];
|
] satisfies CrmBusinessStatusApi.BusinessStatusType[];
|
||||||
|
|
||||||
/** 查询商机状态组列表 */
|
/** 查询商机状态组列表 */
|
||||||
export function getBusinessStatusPage(params: PageParam) {
|
export function getBusinessStatusPage(params: PageParam) {
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,18 @@ export namespace InfraCodegenApi {
|
||||||
parentMenuId: number;
|
parentMenuId: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 代码生成表保存请求 */
|
||||||
|
export interface CodegenTableSaveReqVO extends CodegenTable {
|
||||||
|
frontType?: null | number;
|
||||||
|
genPath?: string;
|
||||||
|
genType?: string;
|
||||||
|
masterTableId?: number;
|
||||||
|
subJoinColumnId?: number;
|
||||||
|
subJoinMany?: boolean;
|
||||||
|
treeParentColumnId?: number;
|
||||||
|
treeNameColumnId?: number;
|
||||||
|
}
|
||||||
|
|
||||||
/** 代码生成字段定义 */
|
/** 代码生成字段定义 */
|
||||||
export interface CodegenColumn {
|
export interface CodegenColumn {
|
||||||
id: number;
|
id: number;
|
||||||
|
|
@ -54,7 +66,7 @@ export namespace InfraCodegenApi {
|
||||||
|
|
||||||
/** 代码生成详情 */
|
/** 代码生成详情 */
|
||||||
export interface CodegenDetail {
|
export interface CodegenDetail {
|
||||||
table: CodegenTable;
|
table: CodegenTableSaveReqVO;
|
||||||
columns: CodegenColumn[];
|
columns: CodegenColumn[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -66,7 +78,7 @@ export namespace InfraCodegenApi {
|
||||||
|
|
||||||
/** 更新代码生成请求 */
|
/** 更新代码生成请求 */
|
||||||
export interface CodegenUpdateReqVO {
|
export interface CodegenUpdateReqVO {
|
||||||
table: any | CodegenTable;
|
table: CodegenTableSaveReqVO;
|
||||||
columns: CodegenColumn[];
|
columns: CodegenColumn[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
import type { Dayjs } from 'dayjs';
|
|
||||||
|
|
||||||
import type { PageParam, PageResult } from '@vben/request';
|
import type { PageParam, PageResult } from '@vben/request';
|
||||||
|
|
||||||
import { requestClient } from '#/api/request';
|
import { requestClient } from '#/api/request';
|
||||||
|
|
@ -7,7 +5,7 @@ import { requestClient } from '#/api/request';
|
||||||
export namespace Demo03StudentApi {
|
export namespace Demo03StudentApi {
|
||||||
/** 学生课程信息 */
|
/** 学生课程信息 */
|
||||||
export interface Demo03Course {
|
export interface Demo03Course {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
score?: number; // 分数
|
score?: number; // 分数
|
||||||
|
|
@ -15,7 +13,7 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生班级信息 */
|
/** 学生班级信息 */
|
||||||
export interface Demo03Grade {
|
export interface Demo03Grade {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
teacher?: string; // 班主任
|
teacher?: string; // 班主任
|
||||||
|
|
@ -23,10 +21,10 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生信息 */
|
/** 学生信息 */
|
||||||
export interface Demo03Student {
|
export interface Demo03Student {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
sex?: number; // 性别
|
sex?: number; // 性别
|
||||||
birthday?: Dayjs | string; // 出生日期
|
birthday?: number | string; // 出生日期
|
||||||
description?: string; // 简介
|
description?: string; // 简介
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
import type { Dayjs } from 'dayjs';
|
|
||||||
|
|
||||||
import type { PageParam, PageResult } from '@vben/request';
|
import type { PageParam, PageResult } from '@vben/request';
|
||||||
|
|
||||||
import { requestClient } from '#/api/request';
|
import { requestClient } from '#/api/request';
|
||||||
|
|
@ -7,7 +5,7 @@ import { requestClient } from '#/api/request';
|
||||||
export namespace Demo03StudentApi {
|
export namespace Demo03StudentApi {
|
||||||
/** 学生课程信息 */
|
/** 学生课程信息 */
|
||||||
export interface Demo03Course {
|
export interface Demo03Course {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
score?: number; // 分数
|
score?: number; // 分数
|
||||||
|
|
@ -15,7 +13,7 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生班级信息 */
|
/** 学生班级信息 */
|
||||||
export interface Demo03Grade {
|
export interface Demo03Grade {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
teacher?: string; // 班主任
|
teacher?: string; // 班主任
|
||||||
|
|
@ -23,10 +21,10 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生信息 */
|
/** 学生信息 */
|
||||||
export interface Demo03Student {
|
export interface Demo03Student {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
sex?: number; // 性别
|
sex?: number; // 性别
|
||||||
birthday?: Dayjs | string; // 出生日期
|
birthday?: number | string; // 出生日期
|
||||||
description?: string; // 简介
|
description?: string; // 简介
|
||||||
demo03courses?: Demo03Course[];
|
demo03courses?: Demo03Course[];
|
||||||
demo03grade?: Demo03Grade;
|
demo03grade?: Demo03Grade;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
import type { Dayjs } from 'dayjs';
|
|
||||||
|
|
||||||
import type { PageParam, PageResult } from '@vben/request';
|
import type { PageParam, PageResult } from '@vben/request';
|
||||||
|
|
||||||
import { requestClient } from '#/api/request';
|
import { requestClient } from '#/api/request';
|
||||||
|
|
@ -7,7 +5,7 @@ import { requestClient } from '#/api/request';
|
||||||
export namespace Demo03StudentApi {
|
export namespace Demo03StudentApi {
|
||||||
/** 学生课程信息 */
|
/** 学生课程信息 */
|
||||||
export interface Demo03Course {
|
export interface Demo03Course {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
score?: number; // 分数
|
score?: number; // 分数
|
||||||
|
|
@ -15,7 +13,7 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生班级信息 */
|
/** 学生班级信息 */
|
||||||
export interface Demo03Grade {
|
export interface Demo03Grade {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
teacher?: string; // 班主任
|
teacher?: string; // 班主任
|
||||||
|
|
@ -23,10 +21,10 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生信息 */
|
/** 学生信息 */
|
||||||
export interface Demo03Student {
|
export interface Demo03Student {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
sex?: number; // 性别
|
sex?: number; // 性别
|
||||||
birthday?: Dayjs | string; // 出生日期
|
birthday?: number | string; // 出生日期
|
||||||
description?: string; // 简介
|
description?: string; // 简介
|
||||||
demo03courses?: Demo03Course[];
|
demo03courses?: Demo03Course[];
|
||||||
demo03grade?: Demo03Grade;
|
demo03grade?: Demo03Grade;
|
||||||
|
|
|
||||||
|
|
@ -6,11 +6,11 @@ export namespace IoTOtaTaskApi {
|
||||||
/** IoT OTA 升级任务 */
|
/** IoT OTA 升级任务 */
|
||||||
export interface Task {
|
export interface Task {
|
||||||
id?: number;
|
id?: number;
|
||||||
name?: string;
|
name: string;
|
||||||
description?: string;
|
description?: string;
|
||||||
firmwareId?: number;
|
firmwareId?: number;
|
||||||
status?: number;
|
status?: number;
|
||||||
deviceScope?: number;
|
deviceScope: number;
|
||||||
deviceIds?: number[];
|
deviceIds?: number[];
|
||||||
deviceTotalCount?: number;
|
deviceTotalCount?: number;
|
||||||
deviceSuccessCount?: number;
|
deviceSuccessCount?: number;
|
||||||
|
|
|
||||||
|
|
@ -32,8 +32,8 @@ export namespace ThingModelApi {
|
||||||
required?: boolean;
|
required?: boolean;
|
||||||
dataType?: string;
|
dataType?: string;
|
||||||
description?: string;
|
description?: string;
|
||||||
dataSpecs?: any;
|
dataSpecs?: ThingModelDataSpecs;
|
||||||
dataSpecsList?: any[];
|
dataSpecsList?: ThingModelPropertyDataSpecs[];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** IoT 物模型服务 */
|
/** IoT 物模型服务 */
|
||||||
|
|
@ -66,8 +66,8 @@ export namespace ThingModelApi {
|
||||||
direction?: string;
|
direction?: string;
|
||||||
paraOrder?: number;
|
paraOrder?: number;
|
||||||
dataType?: string;
|
dataType?: string;
|
||||||
dataSpecs?: any;
|
dataSpecs?: ThingModelDataSpecs;
|
||||||
dataSpecsList?: any[];
|
dataSpecsList?: ThingModelPropertyDataSpecs[];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** IoT 物模型 TSL(树形)响应 */
|
/** IoT 物模型 TSL(树形)响应 */
|
||||||
|
|
@ -80,19 +80,35 @@ export namespace ThingModelApi {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** IoT 数据定义(数值型) */
|
/** IoT 数据定义(数值型) */
|
||||||
export interface DataSpecsNumberData {
|
export interface ThingModelDataSpecs {
|
||||||
|
accessMode?: string;
|
||||||
|
childDataType?: string;
|
||||||
|
dataSpecs?: ThingModelDataSpecs;
|
||||||
|
dataSpecsList?: ThingModelPropertyDataSpecs[];
|
||||||
|
dataType?: string;
|
||||||
|
defaultValue?: string;
|
||||||
|
description?: string;
|
||||||
|
identifier?: string;
|
||||||
|
length?: number | string;
|
||||||
min?: number | string;
|
min?: number | string;
|
||||||
max?: number | string;
|
max?: number | string;
|
||||||
|
name?: string;
|
||||||
|
precise?: string;
|
||||||
|
required?: boolean;
|
||||||
|
size?: number | string;
|
||||||
step?: number | string;
|
step?: number | string;
|
||||||
unit?: string;
|
unit?: string;
|
||||||
unitName?: string;
|
unitName?: string;
|
||||||
|
value?: number | string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** IoT 数据定义(数值型) */
|
||||||
|
export type DataSpecsNumberData = ThingModelDataSpecs;
|
||||||
|
|
||||||
/** IoT 数据定义(枚举/布尔型) */
|
/** IoT 数据定义(枚举/布尔型) */
|
||||||
export interface DataSpecsEnumOrBoolData {
|
export type DataSpecsEnumOrBoolData = ThingModelDataSpecs;
|
||||||
value: number | string;
|
|
||||||
name: string;
|
export type ThingModelPropertyDataSpecs = Property & ThingModelDataSpecs;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 生成「必填 + 数字」类校验器:拼到 size / length / 枚举值上 */
|
/** 生成「必填 + 数字」类校验器:拼到 size / length / 枚举值上 */
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ export namespace MallCombinationActivityApi {
|
||||||
id?: number; // 活动编号
|
id?: number; // 活动编号
|
||||||
name?: string; // 活动名称
|
name?: string; // 活动名称
|
||||||
spuId?: number; // 商品 SPU 编号
|
spuId?: number; // 商品 SPU 编号
|
||||||
|
spuName?: string; // 商品 SPU 名称
|
||||||
totalLimitCount?: number; // 总限购数量
|
totalLimitCount?: number; // 总限购数量
|
||||||
singleLimitCount?: number; // 单次限购数量
|
singleLimitCount?: number; // 单次限购数量
|
||||||
startTime?: Date; // 开始时间
|
startTime?: Date; // 开始时间
|
||||||
|
|
@ -21,7 +22,7 @@ export namespace MallCombinationActivityApi {
|
||||||
limitDuration?: number; // 限制时长
|
limitDuration?: number; // 限制时长
|
||||||
combinationPrice?: number; // 拼团价格
|
combinationPrice?: number; // 拼团价格
|
||||||
products: CombinationProduct[]; // 商品列表
|
products: CombinationProduct[]; // 商品列表
|
||||||
picUrl?: any;
|
picUrl?: string; // 商品图片
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 拼团活动所需属性 */
|
/** 拼团活动所需属性 */
|
||||||
|
|
|
||||||
|
|
@ -26,9 +26,9 @@ export namespace MallRewardActivityApi {
|
||||||
conditionType?: number; // 条件类型
|
conditionType?: number; // 条件类型
|
||||||
productScope?: number; // 商品范围
|
productScope?: number; // 商品范围
|
||||||
rules: RewardRule[]; // 优惠规则列表
|
rules: RewardRule[]; // 优惠规则列表
|
||||||
productScopeValues?: number[]; // 商品范围值(仅表单使用):值为品类编号列表、商品编号列表
|
productScopeValues: number[]; // 商品范围值(仅表单使用):值为品类编号列表、商品编号列表
|
||||||
productCategoryIds?: number[]; // 商品分类编号列表(仅表单使用)
|
productCategoryIds: number[]; // 商品分类编号列表(仅表单使用)
|
||||||
productSpuIds?: number[]; // 商品 SPU 编号列表(仅表单使用)
|
productSpuIds: number[]; // 商品 SPU 编号列表(仅表单使用)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ export namespace MallSeckillActivityApi {
|
||||||
totalStock?: number; // 秒杀总库存
|
totalStock?: number; // 秒杀总库存
|
||||||
seckillPrice?: number; // 秒杀价格
|
seckillPrice?: number; // 秒杀价格
|
||||||
products?: SeckillProduct[]; // 秒杀商品列表
|
products?: SeckillProduct[]; // 秒杀商品列表
|
||||||
picUrl?: any;
|
picUrl?: string; // 商品图片
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,20 +4,21 @@ export namespace MallTradeConfigApi {
|
||||||
/** 交易中心配置 */
|
/** 交易中心配置 */
|
||||||
export interface Config {
|
export interface Config {
|
||||||
id?: number;
|
id?: number;
|
||||||
afterSaleRefundReasons?: string[];
|
afterSaleRefundReasons: string[];
|
||||||
afterSaleReturnReasons?: string[];
|
afterSaleReturnReasons: string[];
|
||||||
deliveryExpressFreeEnabled?: boolean;
|
deliveryExpressFreeEnabled: boolean;
|
||||||
deliveryExpressFreePrice?: number;
|
deliveryExpressFreePrice: number;
|
||||||
deliveryPickUpEnabled?: boolean;
|
deliveryPickUpEnabled: boolean;
|
||||||
brokerageEnabled?: boolean;
|
brokerageEnabled?: boolean;
|
||||||
brokerageEnabledCondition?: number;
|
brokerageEnabledCondition?: number;
|
||||||
brokerageBindMode?: number;
|
brokerageBindMode?: number;
|
||||||
brokeragePosterUrls?: string;
|
brokeragePosterUrls: string[];
|
||||||
brokerageFirstPercent?: number;
|
brokerageFirstPercent?: number;
|
||||||
brokerageSecondPercent?: number;
|
brokerageSecondPercent?: number;
|
||||||
brokerageWithdrawMinPrice?: number;
|
brokerageWithdrawMinPrice: number;
|
||||||
brokerageFrozenDays?: number;
|
brokerageFrozenDays: number;
|
||||||
brokerageWithdrawTypes?: string;
|
brokerageWithdrawFeePercent: number;
|
||||||
|
brokerageWithdrawTypes: number[];
|
||||||
tencentLbsKey?: string;
|
tencentLbsKey?: string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ export namespace MemberConfigApi {
|
||||||
/** 积分设置信息 */
|
/** 积分设置信息 */
|
||||||
export interface Config {
|
export interface Config {
|
||||||
id?: number;
|
id?: number;
|
||||||
pointTradeDeductEnable: number;
|
pointTradeDeductEnable: boolean;
|
||||||
pointTradeDeductUnitPrice: number;
|
pointTradeDeductUnitPrice: number;
|
||||||
pointTradeDeductMaxPrice: number;
|
pointTradeDeductMaxPrice: number;
|
||||||
pointTradeGivePoint: number;
|
pointTradeGivePoint: number;
|
||||||
|
|
|
||||||
|
|
@ -10,27 +10,31 @@ export namespace MemberUserApi {
|
||||||
birthday?: number;
|
birthday?: number;
|
||||||
createTime?: number;
|
createTime?: number;
|
||||||
loginDate?: number;
|
loginDate?: number;
|
||||||
loginIp: string;
|
loginIp?: string;
|
||||||
mark: string;
|
mark?: string;
|
||||||
mobile: string;
|
mobile?: string;
|
||||||
email?: string;
|
email?: string;
|
||||||
name?: string;
|
name?: string;
|
||||||
nickname?: string;
|
nickname?: string;
|
||||||
registerIp: string;
|
registerIp?: string;
|
||||||
sex: number;
|
sex?: number;
|
||||||
status: number;
|
status?: number;
|
||||||
areaId?: number;
|
areaId?: number;
|
||||||
areaName?: string;
|
areaName?: string;
|
||||||
levelName: string;
|
tagIds?: number[];
|
||||||
point?: number;
|
groupId?: number;
|
||||||
totalPoint?: number;
|
levelId?: number;
|
||||||
experience?: number;
|
levelName?: null | string;
|
||||||
|
point?: null | number;
|
||||||
|
totalPoint?: null | number;
|
||||||
|
experience?: null | number;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 会员用户等级更新信息 */
|
/** 会员用户等级更新信息 */
|
||||||
export interface UserUpdateLevelReqVO {
|
export interface UserUpdateLevelReqVO {
|
||||||
id: number;
|
id: number;
|
||||||
levelId: number;
|
levelId: number;
|
||||||
|
reason: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 会员用户积分更新信息 */
|
/** 会员用户积分更新信息 */
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,12 @@ export namespace MpTagApi {
|
||||||
count?: number;
|
count?: number;
|
||||||
createTime?: Date;
|
createTime?: Date;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 标签精简信息 */
|
||||||
|
export interface SimpleTag {
|
||||||
|
tagId: number;
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 创建公众号标签 */
|
/** 创建公众号标签 */
|
||||||
|
|
@ -46,7 +52,7 @@ export function getTagPage(params: PageParam) {
|
||||||
|
|
||||||
/** 获取公众号标签精简信息列表 */
|
/** 获取公众号标签精简信息列表 */
|
||||||
export function getSimpleTagList() {
|
export function getSimpleTagList() {
|
||||||
return requestClient.get<MpTagApi.Tag[]>('/mp/tag/list-all-simple');
|
return requestClient.get<MpTagApi.SimpleTag[]>('/mp/tag/list-all-simple');
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 同步公众号标签 */
|
/** 同步公众号标签 */
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,16 @@ import type { PageParam, PageResult } from '@vben/request';
|
||||||
import { requestClient } from '#/api/request';
|
import { requestClient } from '#/api/request';
|
||||||
|
|
||||||
export namespace PayNotifyApi {
|
export namespace PayNotifyApi {
|
||||||
|
/** 支付通知日志 */
|
||||||
|
export interface NotifyLog {
|
||||||
|
id?: number;
|
||||||
|
status?: number;
|
||||||
|
notifyTimes?: number;
|
||||||
|
lastExecuteTime?: Date;
|
||||||
|
createTime?: Date;
|
||||||
|
response?: string;
|
||||||
|
}
|
||||||
|
|
||||||
/** 支付通知任务 */
|
/** 支付通知任务 */
|
||||||
export interface NotifyTask {
|
export interface NotifyTask {
|
||||||
id: number;
|
id: number;
|
||||||
|
|
@ -20,13 +30,13 @@ export namespace PayNotifyApi {
|
||||||
maxNotifyTimes: number;
|
maxNotifyTimes: number;
|
||||||
createTime: Date;
|
createTime: Date;
|
||||||
updateTime: Date;
|
updateTime: Date;
|
||||||
logs?: any[];
|
logs?: NotifyLog[];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获得支付通知明细 */
|
/** 获得支付通知明细 */
|
||||||
export function getNotifyTaskDetail(id: number) {
|
export function getNotifyTaskDetail(id: number) {
|
||||||
return requestClient.get(`/pay/notify/get-detail?id=${id}`);
|
return requestClient.get<PayNotifyApi.NotifyTask>(`/pay/notify/get-detail?id=${id}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获得支付通知分页 */
|
/** 获得支付通知分页 */
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ export const useMallKefuStore = defineStore('mall-kefu', {
|
||||||
},
|
},
|
||||||
conversationSort() {
|
conversationSort() {
|
||||||
// 按置顶属性和最后消息时间排序
|
// 按置顶属性和最后消息时间排序
|
||||||
this.conversationList.toSorted((a, b) => {
|
this.conversationList = this.conversationList.toSorted((a, b) => {
|
||||||
// 按照置顶排序,置顶的会在前面
|
// 按照置顶排序,置顶的会在前面
|
||||||
if (a.adminPinned !== b.adminPinned) {
|
if (a.adminPinned !== b.adminPinned) {
|
||||||
return a.adminPinned ? -1 : 1;
|
return a.adminPinned ? -1 : 1;
|
||||||
|
|
|
||||||
|
|
@ -20,8 +20,8 @@ const props = defineProps({
|
||||||
const emits = defineEmits(['onBtnClick', 'onMjBtnClick']);
|
const emits = defineEmits(['onBtnClick', 'onMjBtnClick']);
|
||||||
|
|
||||||
/** 处理点击事件 */
|
/** 处理点击事件 */
|
||||||
async function handleButtonClick(type: string, detail: AiImageApi.Image) {
|
async function handleButtonClick(type: string) {
|
||||||
emits('onBtnClick', type, detail);
|
emits('onBtnClick', type, props.detail);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 处理 Midjourney 按钮点击事件 */
|
/** 处理 Midjourney 按钮点击事件 */
|
||||||
|
|
@ -79,28 +79,28 @@ onMounted(async () => {
|
||||||
<Button
|
<Button
|
||||||
class="m-0 p-2"
|
class="m-0 p-2"
|
||||||
type="text"
|
type="text"
|
||||||
@click="handleButtonClick('download', detail)"
|
@click="handleButtonClick('download')"
|
||||||
>
|
>
|
||||||
<IconifyIcon icon="lucide:download" />
|
<IconifyIcon icon="lucide:download" />
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
class="m-0 p-2"
|
class="m-0 p-2"
|
||||||
type="text"
|
type="text"
|
||||||
@click="handleButtonClick('regeneration', detail)"
|
@click="handleButtonClick('regeneration')"
|
||||||
>
|
>
|
||||||
<IconifyIcon icon="lucide:refresh-cw" />
|
<IconifyIcon icon="lucide:refresh-cw" />
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
class="m-0 p-2"
|
class="m-0 p-2"
|
||||||
type="text"
|
type="text"
|
||||||
@click="handleButtonClick('delete', detail)"
|
@click="handleButtonClick('delete')"
|
||||||
>
|
>
|
||||||
<IconifyIcon icon="lucide:trash" />
|
<IconifyIcon icon="lucide:trash" />
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
class="m-0 p-2"
|
class="m-0 p-2"
|
||||||
type="text"
|
type="text"
|
||||||
@click="handleButtonClick('more', detail)"
|
@click="handleButtonClick('more')"
|
||||||
>
|
>
|
||||||
<IconifyIcon icon="lucide:ellipsis-vertical" />
|
<IconifyIcon icon="lucide:ellipsis-vertical" />
|
||||||
</Button>
|
</Button>
|
||||||
|
|
@ -119,8 +119,8 @@ onMounted(async () => {
|
||||||
<div class="mt-2 flex w-full flex-wrap justify-start">
|
<div class="mt-2 flex w-full flex-wrap justify-start">
|
||||||
<Button
|
<Button
|
||||||
size="small"
|
size="small"
|
||||||
v-for="(button, index) in detail?.buttons"
|
v-for="button in detail?.buttons"
|
||||||
:key="index"
|
:key="button.customId"
|
||||||
class="m-2 ml-0 min-w-10"
|
class="m-2 ml-0 min-w-10"
|
||||||
@click="handleMidjourneyBtnClick(button)"
|
@click="handleMidjourneyBtnClick(button)"
|
||||||
>
|
>
|
||||||
|
|
|
||||||
|
|
@ -111,8 +111,8 @@ async function handleGenerateImage() {
|
||||||
prompt: prompt.value, // 提示词
|
prompt: prompt.value, // 提示词
|
||||||
modelId: matchedModel.id, // 使用匹配到的模型
|
modelId: matchedModel.id, // 使用匹配到的模型
|
||||||
style: style.value, // 图像生成的风格
|
style: style.value, // 图像生成的风格
|
||||||
width: imageSize.width, // size 不能为空
|
width: Number(imageSize.width), // size 不能为空
|
||||||
height: imageSize.height, // size 不能为空
|
height: Number(imageSize.height), // size 不能为空
|
||||||
options: {
|
options: {
|
||||||
style: style.value, // 图像生成的风格
|
style: style.value, // 图像生成的风格
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,7 @@ async function handleGenerateImage() {
|
||||||
const req = {
|
const req = {
|
||||||
prompt: prompt.value,
|
prompt: prompt.value,
|
||||||
modelId: matchedModel.id,
|
modelId: matchedModel.id,
|
||||||
|
base64Array: [],
|
||||||
width: imageSize.width,
|
width: imageSize.width,
|
||||||
height: imageSize.height,
|
height: imageSize.height,
|
||||||
version: selectVersion.value,
|
version: selectVersion.value,
|
||||||
|
|
|
||||||
|
|
@ -186,6 +186,12 @@ const multiFormFieldOptions = computed(() => {
|
||||||
(item) => item.type === 'select' || item.type === 'checkbox',
|
(item) => item.type === 'select' || item.type === 'checkbox',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
const multiInstanceSourceNumber = computed({
|
||||||
|
get: () => Number(configForm.value.multiInstanceSource || 1),
|
||||||
|
set: (value?: number) => {
|
||||||
|
configForm.value.multiInstanceSource = String(value || '');
|
||||||
|
},
|
||||||
|
});
|
||||||
const childFormFieldOptions = ref<any[]>([]);
|
const childFormFieldOptions = ref<any[]>([]);
|
||||||
|
|
||||||
/** 保存配置 */
|
/** 保存配置 */
|
||||||
|
|
@ -781,7 +787,7 @@ onMounted(async () => {
|
||||||
]"
|
]"
|
||||||
>
|
>
|
||||||
<InputNumber
|
<InputNumber
|
||||||
v-model:value="configForm.multiInstanceSource"
|
v-model:value="multiInstanceSourceNumber"
|
||||||
:min="1"
|
:min="1"
|
||||||
/>
|
/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
|
||||||
|
|
@ -20,20 +20,22 @@ import {
|
||||||
|
|
||||||
import { getForm } from '#/api/bpm/form';
|
import { getForm } from '#/api/bpm/form';
|
||||||
import { setConfAndFields2 } from '#/components/form-create';
|
import { setConfAndFields2 } from '#/components/form-create';
|
||||||
type Rule = any;
|
|
||||||
const props = defineProps({
|
type FormCreateRule = {
|
||||||
formList: {
|
[key: string]: unknown;
|
||||||
type: Array<BpmFormApi.Form>,
|
props?: Record<string, unknown>;
|
||||||
required: true,
|
};
|
||||||
},
|
|
||||||
});
|
defineProps<{
|
||||||
|
formList: BpmFormApi.Form[];
|
||||||
|
}>();
|
||||||
|
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
|
|
||||||
const modelData = defineModel<any>(); // 创建本地数据副本
|
const modelData = defineModel<any>(); // 创建本地数据副本
|
||||||
const formPreview = ref({
|
const formPreview = ref({
|
||||||
formData: {} as any,
|
formData: {} as any,
|
||||||
rule: [],
|
rule: [] as FormCreateRule[],
|
||||||
option: {
|
option: {
|
||||||
submitBtn: false,
|
submitBtn: false,
|
||||||
resetBtn: false,
|
resetBtn: false,
|
||||||
|
|
@ -41,7 +43,7 @@ const formPreview = ref({
|
||||||
},
|
},
|
||||||
}); // 表单预览数据
|
}); // 表单预览数据
|
||||||
|
|
||||||
const rules: Record<string, Rule[]> = {
|
const rules: Record<string, any[]> = {
|
||||||
formType: [{ required: true, message: '表单类型不能为空', trigger: 'blur' }],
|
formType: [{ required: true, message: '表单类型不能为空', trigger: 'blur' }],
|
||||||
formId: [{ required: true, message: '流程表单不能为空', trigger: 'blur' }],
|
formId: [{ required: true, message: '流程表单不能为空', trigger: 'blur' }],
|
||||||
formCustomCreatePath: [
|
formCustomCreatePath: [
|
||||||
|
|
@ -60,7 +62,7 @@ watch(
|
||||||
const data = await getForm(newFormId);
|
const data = await getForm(newFormId);
|
||||||
setConfAndFields2(formPreview.value, data.conf, data.fields);
|
setConfAndFields2(formPreview.value, data.conf, data.fields);
|
||||||
// 设置只读
|
// 设置只读
|
||||||
formPreview.value.rule.forEach((item: any) => {
|
formPreview.value.rule.forEach((item) => {
|
||||||
item.props = { ...item.props, disabled: true };
|
item.props = { ...item.props, disabled: true };
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -109,7 +111,7 @@ defineExpose({ validate });
|
||||||
<Select
|
<Select
|
||||||
v-model:value="modelData.formId"
|
v-model:value="modelData.formId"
|
||||||
allow-clear
|
allow-clear
|
||||||
:options="props.formList"
|
:options="formList"
|
||||||
:field-names="{ label: 'name', value: 'id' }"
|
:field-names="{ label: 'name', value: 'id' }"
|
||||||
/>
|
/>
|
||||||
</FormItem>
|
</FormItem>
|
||||||
|
|
|
||||||
|
|
@ -73,8 +73,8 @@ const detailForm = ref<ProcessFormData>({
|
||||||
const fApi = ref<any>();
|
const fApi = ref<any>();
|
||||||
|
|
||||||
const startUserSelectTasks = ref<UserTask[]>([]);
|
const startUserSelectTasks = ref<UserTask[]>([]);
|
||||||
const startUserSelectAssignees = ref<Record<string, string[]>>({});
|
const startUserSelectAssignees = ref<Record<string, number[]>>({});
|
||||||
const tempStartUserSelectAssignees = ref<Record<string, string[]>>({});
|
const tempStartUserSelectAssignees = ref<Record<string, number[]>>({});
|
||||||
|
|
||||||
const bpmnXML = ref<string | undefined>(undefined);
|
const bpmnXML = ref<string | undefined>(undefined);
|
||||||
const simpleJson = ref<string | undefined>(undefined);
|
const simpleJson = ref<string | undefined>(undefined);
|
||||||
|
|
|
||||||
|
|
@ -85,10 +85,10 @@ export function useGridColumns(): VxeTableGridOptions['columns'] {
|
||||||
export function useFormColumns(): VxeTableGridOptions['columns'] {
|
export function useFormColumns(): VxeTableGridOptions['columns'] {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
field: 'defaultStatus',
|
field: 'endStatus',
|
||||||
title: '阶段',
|
title: '阶段',
|
||||||
minWidth: 100,
|
minWidth: 100,
|
||||||
slots: { default: 'defaultStatus' },
|
slots: { default: 'endStatus' },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'name',
|
field: 'name',
|
||||||
|
|
|
||||||
|
|
@ -108,7 +108,7 @@ async function handleAddStatus() {
|
||||||
formData.value!.statuses!.splice(-3, 0, {
|
formData.value!.statuses!.splice(-3, 0, {
|
||||||
name: '',
|
name: '',
|
||||||
percent: undefined,
|
percent: undefined,
|
||||||
} as any);
|
});
|
||||||
await nextTick();
|
await nextTick();
|
||||||
await gridApi.grid.reloadData(formData.value!.statuses as any);
|
await gridApi.grid.reloadData(formData.value!.statuses as any);
|
||||||
}
|
}
|
||||||
|
|
@ -152,9 +152,9 @@ const [Grid, gridApi] = useVbenVxeGrid({
|
||||||
<Form class="mx-4">
|
<Form class="mx-4">
|
||||||
<template #statuses>
|
<template #statuses>
|
||||||
<Grid class="w-full">
|
<Grid class="w-full">
|
||||||
<template #defaultStatus="{ row, rowIndex }">
|
<template #endStatus="{ row, rowIndex }">
|
||||||
<span>
|
<span>
|
||||||
{{ row.defaultStatus ? '结束' : `阶段${rowIndex + 1}` }}
|
{{ row.endStatus ? '结束' : `阶段${rowIndex + 1}` }}
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
<template #name="{ row }">
|
<template #name="{ row }">
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ import {
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
columns?: InfraCodegenApi.CodegenColumn[];
|
columns?: InfraCodegenApi.CodegenColumn[];
|
||||||
table?: InfraCodegenApi.CodegenTable;
|
table?: InfraCodegenApi.CodegenTableSaveReqVO;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const tables = ref<InfraCodegenApi.CodegenTable[]>([]);
|
const tables = ref<InfraCodegenApi.CodegenTable[]>([]);
|
||||||
|
|
@ -70,7 +70,7 @@ function updateTreeSchema(): void {
|
||||||
schema: useGenerationInfoTreeFormSchema(props.columns),
|
schema: useGenerationInfoTreeFormSchema(props.columns),
|
||||||
});
|
});
|
||||||
// 树表信息回显
|
// 树表信息回显
|
||||||
treeFormApi.setValues(props.table as any);
|
treeFormApi.setValues(props.table || {});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 更新主子表信息表单 schema */
|
/** 更新主子表信息表单 schema */
|
||||||
|
|
@ -79,7 +79,7 @@ function updateSubSchema(): void {
|
||||||
schema: useGenerationInfoSubTableFormSchema(props.columns, tables.value),
|
schema: useGenerationInfoSubTableFormSchema(props.columns, tables.value),
|
||||||
});
|
});
|
||||||
// 主子表信息回显
|
// 主子表信息回显
|
||||||
subFormApi.setValues(props.table as any);
|
subFormApi.setValues(props.table || {});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获取合并的表单值 */
|
/** 获取合并的表单值 */
|
||||||
|
|
@ -140,7 +140,7 @@ watch(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const table = val as InfraCodegenApi.CodegenTable;
|
const table = val;
|
||||||
// 初始化树表的 schema
|
// 初始化树表的 schema
|
||||||
updateTreeSchema();
|
updateTreeSchema();
|
||||||
// 设置表单值
|
// 设置表单值
|
||||||
|
|
|
||||||
|
|
@ -149,7 +149,7 @@ function handleRowCheckboxChange({
|
||||||
}: {
|
}: {
|
||||||
records: Demo03StudentApi.Demo03Student[];
|
records: Demo03StudentApi.Demo03Student[];
|
||||||
}) {
|
}) {
|
||||||
checkedIds.value = records.map((item) => item.id)!;
|
checkedIds.value = records.map((item) => item.id!);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 导出表格 */
|
/** 导出表格 */
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ const isDeviceCondition = computed(() => {
|
||||||
* @param value 字段值
|
* @param value 字段值
|
||||||
*/
|
*/
|
||||||
function updateConditionField(field: any, value: any) {
|
function updateConditionField(field: any, value: any) {
|
||||||
(condition.value as any)[field] = value;
|
Object.assign(condition.value, { [field]: value });
|
||||||
emit('update:modelValue', condition.value);
|
emit('update:modelValue', condition.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,7 @@ const timeValue2 = computed(() => {
|
||||||
* @param value 字段值
|
* @param value 字段值
|
||||||
*/
|
*/
|
||||||
function updateConditionField(field: any, value: any) {
|
function updateConditionField(field: any, value: any) {
|
||||||
(condition.value as any)[field] = value;
|
Object.assign(condition.value, { [field]: value });
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ const serviceConfig = computed(() => {
|
||||||
* @param value 字段值
|
* @param value 字段值
|
||||||
*/
|
*/
|
||||||
function updateConditionField(field: any, value: any) {
|
function updateConditionField(field: any, value: any) {
|
||||||
(condition.value as any)[field] = value;
|
Object.assign(condition.value, { [field]: value });
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -163,7 +163,7 @@ if (!props.isStructDataSpecs && !props.isParams) {
|
||||||
label="数据长度"
|
label="数据长度"
|
||||||
>
|
>
|
||||||
<Input
|
<Input
|
||||||
v-model:value="property.dataSpecs.length"
|
v-model:value="property.dataSpecs!.length"
|
||||||
class="!w-[255px]"
|
class="!w-[255px]"
|
||||||
placeholder="请输入文本字节长度"
|
placeholder="请输入文本字节长度"
|
||||||
>
|
>
|
||||||
|
|
|
||||||
|
|
@ -205,14 +205,7 @@ export function useFormSchema(): VbenFormSchema[] {
|
||||||
values.productScope === PromotionProductScopeEnum.CATEGORY.scope &&
|
values.productScope === PromotionProductScopeEnum.CATEGORY.scope &&
|
||||||
values.productScopeValues
|
values.productScopeValues
|
||||||
) {
|
) {
|
||||||
const categoryIds = values.productScopeValues;
|
form.setFieldValue('productCategoryIds', values.productScopeValues);
|
||||||
// 单选时使用数组不能反显,取第一个元素
|
|
||||||
form.setFieldValue(
|
|
||||||
'productCategoryIds',
|
|
||||||
Array.isArray(categoryIds) && categoryIds.length > 0
|
|
||||||
? categoryIds[0]
|
|
||||||
: categoryIds,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -237,9 +230,12 @@ export function useFormSchema(): VbenFormSchema[] {
|
||||||
trigger(values, form) {
|
trigger(values, form) {
|
||||||
switch (values.productScope) {
|
switch (values.productScope) {
|
||||||
case PromotionProductScopeEnum.CATEGORY.scope: {
|
case PromotionProductScopeEnum.CATEGORY.scope: {
|
||||||
const categoryIds = Array.isArray(values.productCategoryIds)
|
let categoryIds: number[] = [];
|
||||||
? values.productCategoryIds
|
if (Array.isArray(values.productCategoryIds)) {
|
||||||
: [values.productCategoryIds];
|
categoryIds = values.productCategoryIds;
|
||||||
|
} else if (values.productCategoryIds) {
|
||||||
|
categoryIds = [values.productCategoryIds];
|
||||||
|
}
|
||||||
form.setFieldValue('productScopeValues', categoryIds);
|
form.setFieldValue('productScopeValues', categoryIds);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,11 +27,18 @@ import RewardRule from './reward-rule.vue';
|
||||||
|
|
||||||
const emit = defineEmits(['success']);
|
const emit = defineEmits(['success']);
|
||||||
|
|
||||||
const formData = ref<Partial<MallRewardActivityApi.RewardActivity>>({
|
const createDefaultFormData = (): Partial<MallRewardActivityApi.RewardActivity> => ({
|
||||||
conditionType: PromotionConditionTypeEnum.PRICE.type,
|
conditionType: PromotionConditionTypeEnum.PRICE.type,
|
||||||
productScope: PromotionProductScopeEnum.ALL.scope,
|
productScope: PromotionProductScopeEnum.ALL.scope,
|
||||||
|
productScopeValues: [],
|
||||||
|
productCategoryIds: [],
|
||||||
|
productSpuIds: [],
|
||||||
rules: [],
|
rules: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const formData = ref<Partial<MallRewardActivityApi.RewardActivity>>(
|
||||||
|
createDefaultFormData(),
|
||||||
|
);
|
||||||
const getTitle = computed(() => {
|
const getTitle = computed(() => {
|
||||||
return formData.value?.id
|
return formData.value?.id
|
||||||
? $t('ui.actionTitle.edit', ['满减送'])
|
? $t('ui.actionTitle.edit', ['满减送'])
|
||||||
|
|
@ -106,17 +113,22 @@ const [Modal, modalApi] = useVbenModal({
|
||||||
},
|
},
|
||||||
async onOpenChange(isOpen: boolean) {
|
async onOpenChange(isOpen: boolean) {
|
||||||
if (!isOpen) {
|
if (!isOpen) {
|
||||||
formData.value = {};
|
formData.value = createDefaultFormData();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 加载数据
|
// 加载数据
|
||||||
const data = modalApi.getData<MallRewardActivityApi.RewardActivity>();
|
const data = modalApi.getData<MallRewardActivityApi.RewardActivity>();
|
||||||
if (!data || !data.id) {
|
if (!data || !data.id) {
|
||||||
|
formData.value = createDefaultFormData();
|
||||||
|
await formApi.setValues(formData.value);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
modalApi.lock();
|
modalApi.lock();
|
||||||
try {
|
try {
|
||||||
const result = await getReward(data.id);
|
const result = {
|
||||||
|
...createDefaultFormData(),
|
||||||
|
...(await getReward(data.id)),
|
||||||
|
};
|
||||||
result.startAndEndTime = [
|
result.startAndEndTime = [
|
||||||
result.startTime ? String(result.startTime) : undefined,
|
result.startTime ? String(result.startTime) : undefined,
|
||||||
result.endTime ? String(result.endTime) : undefined,
|
result.endTime ? String(result.endTime) : undefined,
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ import { useBalanceFormSchema } from '../data';
|
||||||
|
|
||||||
const emit = defineEmits(['success']);
|
const emit = defineEmits(['success']);
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
id: 0,
|
id: undefined as number | undefined,
|
||||||
nickname: '',
|
nickname: '',
|
||||||
balance: '0',
|
balance: '0',
|
||||||
changeBalance: 0,
|
changeBalance: 0,
|
||||||
|
|
@ -48,7 +48,7 @@ const [Modal, modalApi] = useVbenModal({
|
||||||
const data = await formApi.getValues();
|
const data = await formApi.getValues();
|
||||||
try {
|
try {
|
||||||
await updateWalletBalance({
|
await updateWalletBalance({
|
||||||
userId: data.id,
|
userId: data.id!,
|
||||||
balance: yuanToFen(data.changeBalance) * data.changeType,
|
balance: yuanToFen(data.changeBalance) * data.changeType,
|
||||||
});
|
});
|
||||||
// 关闭并提示
|
// 关闭并提示
|
||||||
|
|
|
||||||
|
|
@ -34,15 +34,15 @@ export namespace AiImageApi {
|
||||||
prompt: string; // 提示词
|
prompt: string; // 提示词
|
||||||
modelId: number; // 模型
|
modelId: number; // 模型
|
||||||
style: string; // 图像生成的风格
|
style: string; // 图像生成的风格
|
||||||
width: string; // 图片宽度
|
width: number; // 图片宽度
|
||||||
height: string; // 图片高度
|
height: number; // 图片高度
|
||||||
options: object; // 绘制参数,Map<String, String>
|
options: object; // 绘制参数,Map<String, String>
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ImageMidjourneyImagineReqVO {
|
export interface ImageMidjourneyImagineReqVO {
|
||||||
prompt: string; // 提示词
|
prompt: string; // 提示词
|
||||||
modelId: number; // 模型
|
modelId: number; // 模型
|
||||||
base64Array?: string[]; // size不能为空
|
base64Array: string[]; // 参考图 base64 列表
|
||||||
width: string; // 图片宽度
|
width: string; // 图片宽度
|
||||||
height: string; // 图片高度
|
height: string; // 图片高度
|
||||||
version: string; // 版本
|
version: string; // 版本
|
||||||
|
|
|
||||||
|
|
@ -11,15 +11,16 @@ export namespace CrmBusinessStatusApi {
|
||||||
deptNames?: string[];
|
deptNames?: string[];
|
||||||
creator?: string;
|
creator?: string;
|
||||||
createTime?: Date;
|
createTime?: Date;
|
||||||
statuses?: BusinessStatusType[];
|
statuses: BusinessStatusType[];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 商机状态信息 */
|
/** 商机状态信息 */
|
||||||
export interface BusinessStatusType {
|
export interface BusinessStatusType {
|
||||||
id?: number;
|
id?: number;
|
||||||
name: string;
|
name: string;
|
||||||
percent: number;
|
percent?: number;
|
||||||
[x: string]: any;
|
endStatus?: number;
|
||||||
|
key?: string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -43,7 +44,7 @@ export const DEFAULT_STATUSES = [
|
||||||
name: '无效',
|
name: '无效',
|
||||||
percent: 0,
|
percent: 0,
|
||||||
},
|
},
|
||||||
];
|
] satisfies CrmBusinessStatusApi.BusinessStatusType[];
|
||||||
|
|
||||||
/** 查询商机状态组列表 */
|
/** 查询商机状态组列表 */
|
||||||
export function getBusinessStatusPage(params: PageParam) {
|
export function getBusinessStatusPage(params: PageParam) {
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,18 @@ export namespace InfraCodegenApi {
|
||||||
parentMenuId: number;
|
parentMenuId: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 代码生成表保存请求 */
|
||||||
|
export interface CodegenTableSaveReqVO extends CodegenTable {
|
||||||
|
frontType?: null | number;
|
||||||
|
genPath?: string;
|
||||||
|
genType?: string;
|
||||||
|
masterTableId?: number;
|
||||||
|
subJoinColumnId?: number;
|
||||||
|
subJoinMany?: boolean;
|
||||||
|
treeParentColumnId?: number;
|
||||||
|
treeNameColumnId?: number;
|
||||||
|
}
|
||||||
|
|
||||||
/** 代码生成字段定义 */
|
/** 代码生成字段定义 */
|
||||||
export interface CodegenColumn {
|
export interface CodegenColumn {
|
||||||
id: number;
|
id: number;
|
||||||
|
|
@ -54,7 +66,7 @@ export namespace InfraCodegenApi {
|
||||||
|
|
||||||
/** 代码生成详情 */
|
/** 代码生成详情 */
|
||||||
export interface CodegenDetail {
|
export interface CodegenDetail {
|
||||||
table: CodegenTable;
|
table: CodegenTableSaveReqVO;
|
||||||
columns: CodegenColumn[];
|
columns: CodegenColumn[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -66,7 +78,7 @@ export namespace InfraCodegenApi {
|
||||||
|
|
||||||
/** 更新代码生成请求 */
|
/** 更新代码生成请求 */
|
||||||
export interface CodegenUpdateReqVO {
|
export interface CodegenUpdateReqVO {
|
||||||
table: any | CodegenTable;
|
table: CodegenTableSaveReqVO;
|
||||||
columns: CodegenColumn[];
|
columns: CodegenColumn[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import { requestClient } from '#/api/request';
|
||||||
export namespace Demo03StudentApi {
|
export namespace Demo03StudentApi {
|
||||||
/** 学生课程信息 */
|
/** 学生课程信息 */
|
||||||
export interface Demo03Course {
|
export interface Demo03Course {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
score?: number; // 分数
|
score?: number; // 分数
|
||||||
|
|
@ -13,7 +13,7 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生班级信息 */
|
/** 学生班级信息 */
|
||||||
export interface Demo03Grade {
|
export interface Demo03Grade {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
teacher?: string; // 班主任
|
teacher?: string; // 班主任
|
||||||
|
|
@ -21,10 +21,10 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生信息 */
|
/** 学生信息 */
|
||||||
export interface Demo03Student {
|
export interface Demo03Student {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
sex?: number; // 性别
|
sex?: number; // 性别
|
||||||
birthday?: Date | string; // 出生日期
|
birthday?: number | string; // 出生日期
|
||||||
description?: string; // 简介
|
description?: string; // 简介
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import { requestClient } from '#/api/request';
|
||||||
export namespace Demo03StudentApi {
|
export namespace Demo03StudentApi {
|
||||||
/** 学生课程信息 */
|
/** 学生课程信息 */
|
||||||
export interface Demo03Course {
|
export interface Demo03Course {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
score?: number; // 分数
|
score?: number; // 分数
|
||||||
|
|
@ -13,7 +13,7 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生班级信息 */
|
/** 学生班级信息 */
|
||||||
export interface Demo03Grade {
|
export interface Demo03Grade {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
teacher?: string; // 班主任
|
teacher?: string; // 班主任
|
||||||
|
|
@ -21,10 +21,10 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生信息 */
|
/** 学生信息 */
|
||||||
export interface Demo03Student {
|
export interface Demo03Student {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
sex?: number; // 性别
|
sex?: number; // 性别
|
||||||
birthday?: Date | string; // 出生日期
|
birthday?: number | string; // 出生日期
|
||||||
description?: string; // 简介
|
description?: string; // 简介
|
||||||
demo03courses?: Demo03Course[];
|
demo03courses?: Demo03Course[];
|
||||||
demo03grade?: Demo03Grade;
|
demo03grade?: Demo03Grade;
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import { requestClient } from '#/api/request';
|
||||||
export namespace Demo03StudentApi {
|
export namespace Demo03StudentApi {
|
||||||
/** 学生课程信息 */
|
/** 学生课程信息 */
|
||||||
export interface Demo03Course {
|
export interface Demo03Course {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
score?: number; // 分数
|
score?: number; // 分数
|
||||||
|
|
@ -13,7 +13,7 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生班级信息 */
|
/** 学生班级信息 */
|
||||||
export interface Demo03Grade {
|
export interface Demo03Grade {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
studentId?: number; // 学生编号
|
studentId?: number; // 学生编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
teacher?: string; // 班主任
|
teacher?: string; // 班主任
|
||||||
|
|
@ -21,10 +21,10 @@ export namespace Demo03StudentApi {
|
||||||
|
|
||||||
/** 学生信息 */
|
/** 学生信息 */
|
||||||
export interface Demo03Student {
|
export interface Demo03Student {
|
||||||
id: number; // 编号
|
id?: number; // 编号
|
||||||
name?: string; // 名字
|
name?: string; // 名字
|
||||||
sex?: number; // 性别
|
sex?: number; // 性别
|
||||||
birthday?: Date | string; // 出生日期
|
birthday?: number | string; // 出生日期
|
||||||
description?: string; // 简介
|
description?: string; // 简介
|
||||||
demo03courses?: Demo03Course[];
|
demo03courses?: Demo03Course[];
|
||||||
demo03grade?: Demo03Grade;
|
demo03grade?: Demo03Grade;
|
||||||
|
|
|
||||||
|
|
@ -6,11 +6,11 @@ export namespace IoTOtaTaskApi {
|
||||||
/** IoT OTA 升级任务 */
|
/** IoT OTA 升级任务 */
|
||||||
export interface Task {
|
export interface Task {
|
||||||
id?: number;
|
id?: number;
|
||||||
name?: string;
|
name: string;
|
||||||
description?: string;
|
description?: string;
|
||||||
firmwareId?: number;
|
firmwareId?: number;
|
||||||
status?: number;
|
status?: number;
|
||||||
deviceScope?: number;
|
deviceScope: number;
|
||||||
deviceIds?: number[];
|
deviceIds?: number[];
|
||||||
deviceTotalCount?: number;
|
deviceTotalCount?: number;
|
||||||
deviceSuccessCount?: number;
|
deviceSuccessCount?: number;
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,8 @@ export namespace ThingModelApi {
|
||||||
required?: boolean;
|
required?: boolean;
|
||||||
dataType?: string;
|
dataType?: string;
|
||||||
description?: string;
|
description?: string;
|
||||||
dataSpecs?: any;
|
dataSpecs?: ThingModelDataSpecs;
|
||||||
dataSpecsList?: any[];
|
dataSpecsList?: ThingModelPropertyDataSpecs[];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** IoT 物模型服务 */
|
/** IoT 物模型服务 */
|
||||||
|
|
@ -64,8 +64,8 @@ export namespace ThingModelApi {
|
||||||
direction?: string;
|
direction?: string;
|
||||||
paraOrder?: number;
|
paraOrder?: number;
|
||||||
dataType?: string;
|
dataType?: string;
|
||||||
dataSpecs?: any;
|
dataSpecs?: ThingModelDataSpecs;
|
||||||
dataSpecsList?: any[];
|
dataSpecsList?: ThingModelPropertyDataSpecs[];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** IoT 物模型 TSL 响应 */
|
/** IoT 物模型 TSL 响应 */
|
||||||
|
|
@ -78,19 +78,35 @@ export namespace ThingModelApi {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** IoT 数据定义(数值型) */
|
/** IoT 数据定义(数值型) */
|
||||||
export interface DataSpecsNumberData {
|
export interface ThingModelDataSpecs {
|
||||||
|
accessMode?: string;
|
||||||
|
childDataType?: string;
|
||||||
|
dataSpecs?: ThingModelDataSpecs;
|
||||||
|
dataSpecsList?: ThingModelPropertyDataSpecs[];
|
||||||
|
dataType?: string;
|
||||||
|
defaultValue?: string;
|
||||||
|
description?: string;
|
||||||
|
identifier?: string;
|
||||||
|
length?: number | string;
|
||||||
min?: number | string;
|
min?: number | string;
|
||||||
max?: number | string;
|
max?: number | string;
|
||||||
|
name?: string;
|
||||||
|
precise?: string;
|
||||||
|
required?: boolean;
|
||||||
|
size?: number | string;
|
||||||
step?: number | string;
|
step?: number | string;
|
||||||
unit?: string;
|
unit?: string;
|
||||||
unitName?: string;
|
unitName?: string;
|
||||||
|
value?: number | string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** IoT 数据定义(数值型) */
|
||||||
|
export type DataSpecsNumberData = ThingModelDataSpecs;
|
||||||
|
|
||||||
/** IoT 数据定义(枚举/布尔型) */
|
/** IoT 数据定义(枚举/布尔型) */
|
||||||
export interface DataSpecsEnumOrBoolData {
|
export type DataSpecsEnumOrBoolData = ThingModelDataSpecs;
|
||||||
value: number | string;
|
|
||||||
name: string;
|
export type ThingModelPropertyDataSpecs = Property & ThingModelDataSpecs;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 生成「必填 + 数字」类校验器:拼到 size / length / 枚举值上 */
|
/** 生成「必填 + 数字」类校验器:拼到 size / length / 枚举值上 */
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ export namespace MallCombinationActivityApi {
|
||||||
id?: number; // 活动编号
|
id?: number; // 活动编号
|
||||||
name?: string; // 活动名称
|
name?: string; // 活动名称
|
||||||
spuId?: number; // 商品 SPU 编号
|
spuId?: number; // 商品 SPU 编号
|
||||||
|
spuName?: string; // 商品 SPU 名称
|
||||||
totalLimitCount?: number; // 总限购数量
|
totalLimitCount?: number; // 总限购数量
|
||||||
singleLimitCount?: number; // 单次限购数量
|
singleLimitCount?: number; // 单次限购数量
|
||||||
startTime?: Date; // 开始时间
|
startTime?: Date; // 开始时间
|
||||||
|
|
@ -21,7 +22,7 @@ export namespace MallCombinationActivityApi {
|
||||||
limitDuration?: number; // 限制时长
|
limitDuration?: number; // 限制时长
|
||||||
combinationPrice?: number; // 拼团价格
|
combinationPrice?: number; // 拼团价格
|
||||||
products: CombinationProduct[]; // 商品列表
|
products: CombinationProduct[]; // 商品列表
|
||||||
picUrl?: any;
|
picUrl?: string; // 商品图片
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 拼团活动所需属性 */
|
/** 拼团活动所需属性 */
|
||||||
|
|
|
||||||
|
|
@ -26,9 +26,9 @@ export namespace MallRewardActivityApi {
|
||||||
conditionType?: number; // 条件类型
|
conditionType?: number; // 条件类型
|
||||||
productScope?: number; // 商品范围
|
productScope?: number; // 商品范围
|
||||||
rules: RewardRule[]; // 优惠规则列表
|
rules: RewardRule[]; // 优惠规则列表
|
||||||
productScopeValues?: number[]; // 商品范围值(仅表单使用):值为品类编号列表、商品编号列表
|
productScopeValues: number[]; // 商品范围值(仅表单使用):值为品类编号列表、商品编号列表
|
||||||
productCategoryIds?: number[]; // 商品分类编号列表(仅表单使用)
|
productCategoryIds: number[]; // 商品分类编号列表(仅表单使用)
|
||||||
productSpuIds?: number[]; // 商品 SPU 编号列表(仅表单使用)
|
productSpuIds: number[]; // 商品 SPU 编号列表(仅表单使用)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ export namespace MallSeckillActivityApi {
|
||||||
totalStock?: number; // 秒杀总库存
|
totalStock?: number; // 秒杀总库存
|
||||||
seckillPrice?: number; // 秒杀价格
|
seckillPrice?: number; // 秒杀价格
|
||||||
products?: SeckillProduct[]; // 秒杀商品列表
|
products?: SeckillProduct[]; // 秒杀商品列表
|
||||||
picUrl?: any;
|
picUrl?: string; // 商品图片
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,20 +4,21 @@ export namespace MallTradeConfigApi {
|
||||||
/** 交易中心配置 */
|
/** 交易中心配置 */
|
||||||
export interface Config {
|
export interface Config {
|
||||||
id?: number;
|
id?: number;
|
||||||
afterSaleRefundReasons?: string[];
|
afterSaleRefundReasons: string[];
|
||||||
afterSaleReturnReasons?: string[];
|
afterSaleReturnReasons: string[];
|
||||||
deliveryExpressFreeEnabled?: boolean;
|
deliveryExpressFreeEnabled: boolean;
|
||||||
deliveryExpressFreePrice?: number;
|
deliveryExpressFreePrice: number;
|
||||||
deliveryPickUpEnabled?: boolean;
|
deliveryPickUpEnabled: boolean;
|
||||||
brokerageEnabled?: boolean;
|
brokerageEnabled?: boolean;
|
||||||
brokerageEnabledCondition?: number;
|
brokerageEnabledCondition?: number;
|
||||||
brokerageBindMode?: number;
|
brokerageBindMode?: number;
|
||||||
brokeragePosterUrls?: string;
|
brokeragePosterUrls: string[];
|
||||||
brokerageFirstPercent?: number;
|
brokerageFirstPercent?: number;
|
||||||
brokerageSecondPercent?: number;
|
brokerageSecondPercent?: number;
|
||||||
brokerageWithdrawMinPrice?: number;
|
brokerageWithdrawMinPrice: number;
|
||||||
brokerageFrozenDays?: number;
|
brokerageFrozenDays: number;
|
||||||
brokerageWithdrawTypes?: string;
|
brokerageWithdrawFeePercent: number;
|
||||||
|
brokerageWithdrawTypes: number[];
|
||||||
tencentLbsKey?: string;
|
tencentLbsKey?: string;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ export namespace MemberConfigApi {
|
||||||
/** 积分设置信息 */
|
/** 积分设置信息 */
|
||||||
export interface Config {
|
export interface Config {
|
||||||
id?: number;
|
id?: number;
|
||||||
pointTradeDeductEnable: number;
|
pointTradeDeductEnable: boolean;
|
||||||
pointTradeDeductUnitPrice: number;
|
pointTradeDeductUnitPrice: number;
|
||||||
pointTradeDeductMaxPrice: number;
|
pointTradeDeductMaxPrice: number;
|
||||||
pointTradeGivePoint: number;
|
pointTradeGivePoint: number;
|
||||||
|
|
|
||||||
|
|
@ -10,27 +10,31 @@ export namespace MemberUserApi {
|
||||||
birthday?: number;
|
birthday?: number;
|
||||||
createTime?: number;
|
createTime?: number;
|
||||||
loginDate?: number;
|
loginDate?: number;
|
||||||
loginIp: string;
|
loginIp?: string;
|
||||||
mark: string;
|
mark?: string;
|
||||||
mobile: string;
|
mobile?: string;
|
||||||
email?: string;
|
email?: string;
|
||||||
name?: string;
|
name?: string;
|
||||||
nickname?: string;
|
nickname?: string;
|
||||||
registerIp: string;
|
registerIp?: string;
|
||||||
sex: number;
|
sex?: number;
|
||||||
status: number;
|
status?: number;
|
||||||
areaId?: number;
|
areaId?: number;
|
||||||
areaName?: string;
|
areaName?: string;
|
||||||
levelName: string;
|
tagIds?: number[];
|
||||||
point?: number;
|
groupId?: number;
|
||||||
totalPoint?: number;
|
levelId?: number;
|
||||||
experience?: number;
|
levelName?: null | string;
|
||||||
|
point?: null | number;
|
||||||
|
totalPoint?: null | number;
|
||||||
|
experience?: null | number;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 会员用户等级更新信息 */
|
/** 会员用户等级更新信息 */
|
||||||
export interface UserUpdateLevelReqVO {
|
export interface UserUpdateLevelReqVO {
|
||||||
id: number;
|
id: number;
|
||||||
levelId: number;
|
levelId: number;
|
||||||
|
reason: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 会员用户积分更新信息 */
|
/** 会员用户积分更新信息 */
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,12 @@ export namespace MpTagApi {
|
||||||
count?: number;
|
count?: number;
|
||||||
createTime?: Date;
|
createTime?: Date;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 标签精简信息 */
|
||||||
|
export interface SimpleTag {
|
||||||
|
tagId: number;
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 创建公众号标签 */
|
/** 创建公众号标签 */
|
||||||
|
|
@ -46,7 +52,7 @@ export function getTagPage(params: PageParam) {
|
||||||
|
|
||||||
/** 获取公众号标签精简信息列表 */
|
/** 获取公众号标签精简信息列表 */
|
||||||
export function getSimpleTagList() {
|
export function getSimpleTagList() {
|
||||||
return requestClient.get<MpTagApi.Tag[]>('/mp/tag/list-all-simple');
|
return requestClient.get<MpTagApi.SimpleTag[]>('/mp/tag/list-all-simple');
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 同步公众号标签 */
|
/** 同步公众号标签 */
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,16 @@ import type { PageParam, PageResult } from '@vben/request';
|
||||||
import { requestClient } from '#/api/request';
|
import { requestClient } from '#/api/request';
|
||||||
|
|
||||||
export namespace PayNotifyApi {
|
export namespace PayNotifyApi {
|
||||||
|
/** 支付通知日志 */
|
||||||
|
export interface NotifyLog {
|
||||||
|
id?: number;
|
||||||
|
status?: number;
|
||||||
|
notifyTimes?: number;
|
||||||
|
lastExecuteTime?: Date;
|
||||||
|
createTime?: Date;
|
||||||
|
response?: string;
|
||||||
|
}
|
||||||
|
|
||||||
/** 支付通知任务 */
|
/** 支付通知任务 */
|
||||||
export interface NotifyTask {
|
export interface NotifyTask {
|
||||||
id: number;
|
id: number;
|
||||||
|
|
@ -20,13 +30,13 @@ export namespace PayNotifyApi {
|
||||||
maxNotifyTimes: number;
|
maxNotifyTimes: number;
|
||||||
createTime: Date;
|
createTime: Date;
|
||||||
updateTime: Date;
|
updateTime: Date;
|
||||||
logs?: any[];
|
logs?: NotifyLog[];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获得支付通知明细 */
|
/** 获得支付通知明细 */
|
||||||
export function getNotifyTaskDetail(id: number) {
|
export function getNotifyTaskDetail(id: number) {
|
||||||
return requestClient.get(`/pay/notify/get-detail?id=${id}`);
|
return requestClient.get<PayNotifyApi.NotifyTask>(`/pay/notify/get-detail?id=${id}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获得支付通知分页 */
|
/** 获得支付通知分页 */
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ export const useMallKefuStore = defineStore('mall-kefu', {
|
||||||
},
|
},
|
||||||
conversationSort() {
|
conversationSort() {
|
||||||
// 按置顶属性和最后消息时间排序
|
// 按置顶属性和最后消息时间排序
|
||||||
this.conversationList.toSorted((a, b) => {
|
this.conversationList = this.conversationList.toSorted((a, b) => {
|
||||||
// 按照置顶排序,置顶的会在前面
|
// 按照置顶排序,置顶的会在前面
|
||||||
if (a.adminPinned !== b.adminPinned) {
|
if (a.adminPinned !== b.adminPinned) {
|
||||||
return a.adminPinned ? -1 : 1;
|
return a.adminPinned ? -1 : 1;
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@ const emits = defineEmits(['onBtnClick', 'onMjBtnClick']);
|
||||||
const cardImageRef = ref<any>(); // 卡片 image ref
|
const cardImageRef = ref<any>(); // 卡片 image ref
|
||||||
|
|
||||||
/** 处理点击事件 */
|
/** 处理点击事件 */
|
||||||
async function handleButtonClick(type: string, detail: AiImageApi.Image) {
|
async function handleButtonClick(type: string) {
|
||||||
emits('onBtnClick', type, detail);
|
emits('onBtnClick', type, props.detail);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 处理 Midjourney 按钮点击事件 */
|
/** 处理 Midjourney 按钮点击事件 */
|
||||||
|
|
@ -84,28 +84,28 @@ onMounted(async () => {
|
||||||
<ElButton
|
<ElButton
|
||||||
class="m-0 p-2"
|
class="m-0 p-2"
|
||||||
text
|
text
|
||||||
@click="handleButtonClick('download', detail)"
|
@click="handleButtonClick('download')"
|
||||||
>
|
>
|
||||||
<IconifyIcon icon="lucide:download" />
|
<IconifyIcon icon="lucide:download" />
|
||||||
</ElButton>
|
</ElButton>
|
||||||
<ElButton
|
<ElButton
|
||||||
class="m-0 p-2"
|
class="m-0 p-2"
|
||||||
text
|
text
|
||||||
@click="handleButtonClick('regeneration', detail)"
|
@click="handleButtonClick('regeneration')"
|
||||||
>
|
>
|
||||||
<IconifyIcon icon="lucide:refresh-cw" />
|
<IconifyIcon icon="lucide:refresh-cw" />
|
||||||
</ElButton>
|
</ElButton>
|
||||||
<ElButton
|
<ElButton
|
||||||
class="m-0 p-2"
|
class="m-0 p-2"
|
||||||
text
|
text
|
||||||
@click="handleButtonClick('delete', detail)"
|
@click="handleButtonClick('delete')"
|
||||||
>
|
>
|
||||||
<IconifyIcon icon="lucide:trash" />
|
<IconifyIcon icon="lucide:trash" />
|
||||||
</ElButton>
|
</ElButton>
|
||||||
<ElButton
|
<ElButton
|
||||||
class="m-0 p-2"
|
class="m-0 p-2"
|
||||||
text
|
text
|
||||||
@click="handleButtonClick('more', detail)"
|
@click="handleButtonClick('more')"
|
||||||
>
|
>
|
||||||
<IconifyIcon icon="lucide:ellipsis-vertical" />
|
<IconifyIcon icon="lucide:ellipsis-vertical" />
|
||||||
</ElButton>
|
</ElButton>
|
||||||
|
|
@ -124,8 +124,8 @@ onMounted(async () => {
|
||||||
<div class="mt-2 flex w-full flex-wrap justify-start">
|
<div class="mt-2 flex w-full flex-wrap justify-start">
|
||||||
<ElButton
|
<ElButton
|
||||||
size="small"
|
size="small"
|
||||||
v-for="(button, index) in detail?.buttons"
|
v-for="button in detail?.buttons"
|
||||||
:key="index"
|
:key="button.customId"
|
||||||
class="m-2 ml-0 min-w-10"
|
class="m-2 ml-0 min-w-10"
|
||||||
@click="handleMidjourneyBtnClick(button)"
|
@click="handleMidjourneyBtnClick(button)"
|
||||||
>
|
>
|
||||||
|
|
|
||||||
|
|
@ -111,8 +111,8 @@ async function handleGenerateImage() {
|
||||||
prompt: prompt.value, // 提示词
|
prompt: prompt.value, // 提示词
|
||||||
modelId: matchedModel.id, // 使用匹配到的模型
|
modelId: matchedModel.id, // 使用匹配到的模型
|
||||||
style: style.value, // 图像生成的风格
|
style: style.value, // 图像生成的风格
|
||||||
width: imageSize.width, // size 不能为空
|
width: Number(imageSize.width), // size 不能为空
|
||||||
height: imageSize.height, // size 不能为空
|
height: Number(imageSize.height), // size 不能为空
|
||||||
options: {
|
options: {
|
||||||
style: style.value, // 图像生成的风格
|
style: style.value, // 图像生成的风格
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,7 @@ async function handleGenerateImage() {
|
||||||
const req = {
|
const req = {
|
||||||
prompt: prompt.value,
|
prompt: prompt.value,
|
||||||
modelId: matchedModel.id,
|
modelId: matchedModel.id,
|
||||||
|
base64Array: [],
|
||||||
width: imageSize.width,
|
width: imageSize.width,
|
||||||
height: imageSize.height,
|
height: imageSize.height,
|
||||||
version: selectVersion.value,
|
version: selectVersion.value,
|
||||||
|
|
|
||||||
|
|
@ -170,6 +170,12 @@ const multiFormFieldOptions = computed(() => {
|
||||||
(item) => item.type === 'select' || item.type === 'checkbox',
|
(item) => item.type === 'select' || item.type === 'checkbox',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
const multiInstanceSourceNumber = computed({
|
||||||
|
get: () => Number(configForm.value.multiInstanceSource || 1),
|
||||||
|
set: (value?: number) => {
|
||||||
|
configForm.value.multiInstanceSource = String(value || '');
|
||||||
|
},
|
||||||
|
});
|
||||||
const childFormFieldOptions = ref<any[]>([]);
|
const childFormFieldOptions = ref<any[]>([]);
|
||||||
|
|
||||||
/** 保存配置 */
|
/** 保存配置 */
|
||||||
|
|
@ -721,7 +727,7 @@ onMounted(async () => {
|
||||||
trigger: 'change',
|
trigger: 'change',
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<ElInputNumber v-model="configForm.multiInstanceSource" :min="1" />
|
<ElInputNumber v-model="multiInstanceSourceNumber" :min="1" />
|
||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
<ElFormItem
|
<ElFormItem
|
||||||
v-if="
|
v-if="
|
||||||
|
|
|
||||||
|
|
@ -548,12 +548,12 @@ function useTimeoutHandler() {
|
||||||
if (!configForm.value.timeoutHandlerEnable) {
|
if (!configForm.value.timeoutHandlerEnable) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
let strTimeDuration = 'PT';
|
let strTimeDuration = 'P';
|
||||||
if (timeUnit.value === TimeUnitType.MINUTE) {
|
if (timeUnit.value === TimeUnitType.MINUTE) {
|
||||||
strTimeDuration += `${configForm.value.timeDuration}M`;
|
strTimeDuration += `T${configForm.value.timeDuration}M`;
|
||||||
}
|
}
|
||||||
if (timeUnit.value === TimeUnitType.HOUR) {
|
if (timeUnit.value === TimeUnitType.HOUR) {
|
||||||
strTimeDuration += `${configForm.value.timeDuration}H`;
|
strTimeDuration += `T${configForm.value.timeDuration}H`;
|
||||||
}
|
}
|
||||||
if (timeUnit.value === TimeUnitType.DAY) {
|
if (timeUnit.value === TimeUnitType.DAY) {
|
||||||
strTimeDuration += `${configForm.value.timeDuration}D`;
|
strTimeDuration += `${configForm.value.timeDuration}D`;
|
||||||
|
|
|
||||||
|
|
@ -24,19 +24,21 @@ import {
|
||||||
import { getForm } from '#/api/bpm/form';
|
import { getForm } from '#/api/bpm/form';
|
||||||
import { setConfAndFields2 } from '#/components/form-create';
|
import { setConfAndFields2 } from '#/components/form-create';
|
||||||
|
|
||||||
const props = defineProps({
|
type FormCreateRule = {
|
||||||
formList: {
|
[key: string]: unknown;
|
||||||
type: Array<BpmFormApi.Form>,
|
props?: Record<string, unknown>;
|
||||||
required: true,
|
};
|
||||||
},
|
|
||||||
});
|
defineProps<{
|
||||||
|
formList: BpmFormApi.Form[];
|
||||||
|
}>();
|
||||||
|
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
|
|
||||||
const modelData = defineModel<any>(); // 创建本地数据副本
|
const modelData = defineModel<any>(); // 创建本地数据副本
|
||||||
const formPreview = ref({
|
const formPreview = ref({
|
||||||
formData: {} as any,
|
formData: {} as any,
|
||||||
rule: [],
|
rule: [] as FormCreateRule[],
|
||||||
option: {
|
option: {
|
||||||
submitBtn: false,
|
submitBtn: false,
|
||||||
resetBtn: false,
|
resetBtn: false,
|
||||||
|
|
@ -63,7 +65,7 @@ watch(
|
||||||
const data = await getForm(newFormId);
|
const data = await getForm(newFormId);
|
||||||
setConfAndFields2(formPreview.value, data.conf, data.fields);
|
setConfAndFields2(formPreview.value, data.conf, data.fields);
|
||||||
// 设置只读
|
// 设置只读
|
||||||
formPreview.value.rule.forEach((item: any) => {
|
formPreview.value.rule.forEach((item) => {
|
||||||
item.props = { ...item.props, disabled: true };
|
item.props = { ...item.props, disabled: true };
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -110,7 +112,7 @@ defineExpose({ validate });
|
||||||
>
|
>
|
||||||
<ElSelect v-model="modelData.formId" clearable>
|
<ElSelect v-model="modelData.formId" clearable>
|
||||||
<ElOption
|
<ElOption
|
||||||
v-for="form in props.formList"
|
v-for="form in formList"
|
||||||
:key="form.id"
|
:key="form.id"
|
||||||
:value="form.id!"
|
:value="form.id!"
|
||||||
:label="form.name"
|
:label="form.name"
|
||||||
|
|
|
||||||
|
|
@ -72,8 +72,8 @@ const detailForm = ref<ProcessFormData>({
|
||||||
const fApi = ref<any>();
|
const fApi = ref<any>();
|
||||||
|
|
||||||
const startUserSelectTasks = ref<UserTask[]>([]);
|
const startUserSelectTasks = ref<UserTask[]>([]);
|
||||||
const startUserSelectAssignees = ref<Record<string, string[]>>({});
|
const startUserSelectAssignees = ref<Record<string, number[]>>({});
|
||||||
const tempStartUserSelectAssignees = ref<Record<string, string[]>>({});
|
const tempStartUserSelectAssignees = ref<Record<string, number[]>>({});
|
||||||
|
|
||||||
const bpmnXML = ref<string | undefined>(undefined);
|
const bpmnXML = ref<string | undefined>(undefined);
|
||||||
const simpleJson = ref<string | undefined>(undefined);
|
const simpleJson = ref<string | undefined>(undefined);
|
||||||
|
|
|
||||||
|
|
@ -87,10 +87,10 @@ export function useGridColumns(): VxeTableGridOptions['columns'] {
|
||||||
export function useFormColumns(): VxeTableGridOptions['columns'] {
|
export function useFormColumns(): VxeTableGridOptions['columns'] {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
field: 'defaultStatus',
|
field: 'endStatus',
|
||||||
title: '阶段',
|
title: '阶段',
|
||||||
minWidth: 100,
|
minWidth: 100,
|
||||||
slots: { default: 'defaultStatus' },
|
slots: { default: 'endStatus' },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
field: 'name',
|
field: 'name',
|
||||||
|
|
|
||||||
|
|
@ -108,7 +108,7 @@ async function handleAddStatus() {
|
||||||
formData.value!.statuses!.splice(-3, 0, {
|
formData.value!.statuses!.splice(-3, 0, {
|
||||||
name: '',
|
name: '',
|
||||||
percent: undefined,
|
percent: undefined,
|
||||||
} as any);
|
});
|
||||||
await nextTick();
|
await nextTick();
|
||||||
await gridApi.grid.reloadData(formData.value!.statuses as any);
|
await gridApi.grid.reloadData(formData.value!.statuses as any);
|
||||||
}
|
}
|
||||||
|
|
@ -152,9 +152,9 @@ const [Grid, gridApi] = useVbenVxeGrid({
|
||||||
<Form class="mx-4">
|
<Form class="mx-4">
|
||||||
<template #statuses>
|
<template #statuses>
|
||||||
<Grid class="w-full">
|
<Grid class="w-full">
|
||||||
<template #defaultStatus="{ row, rowIndex }">
|
<template #endStatus="{ row, rowIndex }">
|
||||||
<span>
|
<span>
|
||||||
{{ row.defaultStatus ? '结束' : `阶段${rowIndex + 1}` }}
|
{{ row.endStatus ? '结束' : `阶段${rowIndex + 1}` }}
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
<template #name="{ row }">
|
<template #name="{ row }">
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ import {
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
columns?: InfraCodegenApi.CodegenColumn[];
|
columns?: InfraCodegenApi.CodegenColumn[];
|
||||||
table?: InfraCodegenApi.CodegenTable;
|
table?: InfraCodegenApi.CodegenTableSaveReqVO;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const tables = ref<InfraCodegenApi.CodegenTable[]>([]);
|
const tables = ref<InfraCodegenApi.CodegenTable[]>([]);
|
||||||
|
|
@ -70,7 +70,7 @@ function updateTreeSchema(): void {
|
||||||
schema: useGenerationInfoTreeFormSchema(props.columns),
|
schema: useGenerationInfoTreeFormSchema(props.columns),
|
||||||
});
|
});
|
||||||
// 树表信息回显
|
// 树表信息回显
|
||||||
treeFormApi.setValues(props.table as any);
|
treeFormApi.setValues(props.table || {});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 更新主子表信息表单 schema */
|
/** 更新主子表信息表单 schema */
|
||||||
|
|
@ -79,7 +79,7 @@ function updateSubSchema(): void {
|
||||||
schema: useGenerationInfoSubTableFormSchema(props.columns, tables.value),
|
schema: useGenerationInfoSubTableFormSchema(props.columns, tables.value),
|
||||||
});
|
});
|
||||||
// 主子表信息回显
|
// 主子表信息回显
|
||||||
subFormApi.setValues(props.table as any);
|
subFormApi.setValues(props.table || {});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 获取合并的表单值 */
|
/** 获取合并的表单值 */
|
||||||
|
|
@ -140,7 +140,7 @@ watch(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const table = val as InfraCodegenApi.CodegenTable;
|
const table = val;
|
||||||
// 初始化树表的 schema
|
// 初始化树表的 schema
|
||||||
updateTreeSchema();
|
updateTreeSchema();
|
||||||
// 设置表单值
|
// 设置表单值
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ const isDeviceCondition = computed(() => {
|
||||||
* @param value 字段值
|
* @param value 字段值
|
||||||
*/
|
*/
|
||||||
function updateConditionField(field: any, value: any) {
|
function updateConditionField(field: any, value: any) {
|
||||||
(condition.value as any)[field] = value;
|
Object.assign(condition.value, { [field]: value });
|
||||||
emit('update:modelValue', condition.value);
|
emit('update:modelValue', condition.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,7 @@ const timeValue2 = computed(() => {
|
||||||
* @param value 字段值
|
* @param value 字段值
|
||||||
*/
|
*/
|
||||||
function updateConditionField(field: any, value: any) {
|
function updateConditionField(field: any, value: any) {
|
||||||
(condition.value as any)[field] = value;
|
Object.assign(condition.value, { [field]: value });
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue