Compare commits

...

29 Commits

Author SHA1 Message Date
f96d4d8530 feat(dealer): 添加经销商申请管理功能
- 新增经销商申请页面,支持申请列表展示和分页查询
- 添加搜索组件,支持按客户名称、联系电话、审核状态等条件筛选
- 实现申请状态管理,包括跟进中、已签约、已取消三种状态
- 开发编辑弹窗功能,支持新增和修改申请信息
- 添加审核功能,支持批量通过和单个驳回操作
- 集成跟进记录管理,可查看历史记录并添加新的跟进内容
- 完善表单验证,包含必填字段校验和格式验证
- 优化模型定义,在相关实体中增加头像、昵称、真实姓名等字段
- 调整商品模型,将isShow字段从数字类型改为布尔类型
- 新增分销佣金相关字段,支持固定金额和百分比两种分佣类型
2026-01-28 22:37:37 +08:00
b9d2648e6f fix(register): 优化经销商注册流程中的邀请关系绑定逻辑
- 引入用户状态管理store以获取用户信息
- 重构邀请关系绑定逻辑,支持异步重试机制
- 使用Promise缓存防止重复请求
- 从localStorage和用户状态中获取tenantId和userId
- 在注册成功后主动获取用户信息确保数据完整
- 注释掉开发环境API配置以避免冲突
2026-01-22 14:26:09 +08:00
49c8d40e75 feat(register): 完善经销商注册功能并优化邀请机制
- 将登录方法替换为注册方法,实现完整的用户注册流程
- 添加短信验证码发送失败的错误处理和提示
- 实现邀请推荐关系绑定功能,支持注册后自动建立推荐关系
- 优化URL参数解析,支持tenantId和inviter参数的灵活获取
- 添加倒计时清理逻辑,防止内存泄漏
- 更新表单验证规则,移除不必要的字段验证
- 在邀请链接中添加tenantId参数,确保未登录用户能正确识别租户
- 添加注册成功后的自动登录和推荐关系建立流程
2026-01-22 11:29:15 +08:00
585b2e95fa refactor(cms): 移除多处组件中的语言参数传递逻辑
- 注释掉了 select-data.vue 中的 lang 参数设置
- 注释掉了 cmsAd/index.vue 中的 lang 参数设置
- 注释掉了 cmsArticle/index.vue 中的 lang 参数设置
- 注释掉了 cmsNavigation/index.vue 中的两处 lang 参数条件判断逻辑
- 统一移除了语言环境值的语言参数传递功能
2026-01-21 16:27:26 +08:00
4f33d67d98 feat(ad): 添加广告位备份恢复功能
- 在搜索组件中增加备份和恢复按钮
- 实现广告位数据导出为Excel文件功能
- 创建Import组件实现Excel文件导入恢复功能
- 修复表格row-key从cmsAdId改为adId
- 添加导出加载状态控制避免重复操作
- 实现按当前搜索条件导出指定数据
- 支持通过Excel文件批量恢复广告位数据
- 导入时自动识别更新或新增操作
- 添加文件格式和大小验证
- 实现导入进度提示和错误处理
2026-01-21 16:16:14 +08:00
6c01151af1 remove(credit): 删除信用模块相关API接口和数据模型
- 删除失信被执行人相关API接口和服务方法
- 删除司法大数据相关API接口和服务方法
- 删除企业信息相关API接口和服务方法
- 删除竞争对手相关API接口和服务方法
- 删除法院公告相关API接口和服务方法
- 删除开庭公告相关API接口和服务方法
- 删除客户信息相关API接口和服务方法
- 清理信用模块相关的数据传输对象定义
- 移除所有信用模块的增删改查和导入导出功能
- 删除分页查询和列表查询的相关实现
2026-01-21 00:29:01 +08:00
82ac209505 style(api): 统一代码风格并修复语法问题
- 统一import语句的空格格式
- 修复分号缺失问题
- 调整函数参数换行格式以符合规范
- 删除多余空行保持代码整洁
- 修复字符串拼接的换行格式问题
2026-01-21 00:26:14 +08:00
7a37f66081 style(sdy): 格式化代码以符合团队样式指南
- 标准化组件标签的闭合方式和缩进
- 统一导入语句的空格和换行格式
- 调整对象属性的换行和对齐方式
- 规范条件渲染表达式的格式
- 优化长逻辑行的换行和可读性
- 统一箭头函数和三元运算符的格式
2026-01-13 16:55:38 +08:00
ea8c799b19 feat(credit): 企业详情页面增加子表数据导入功能
- 为18个信用相关API的导入方法添加companyId参数支持
- 在企业详情页面的各个子表tab中添加导入和刷新按钮
- 创建credit-company-related-import组件实现统一的导入弹窗
- 新增taxpayerCode字段到用户信息模型中
- 移除企业详情页面中冗余的描述项注释代码
- 实现基于企业ID或纳税人识别号的数据加载缓存机制
- 添加导入模板下载功能和文件类型验证
2026-01-05 16:36:12 +08:00
41f273193e feat(credit): 企业详情页面增加子表数据导入功能
- 为18个信用相关API的导入方法添加companyId参数支持
- 在企业详情页面的各个子表tab中添加导入和刷新按钮
- 创建credit-company-related-import组件实现统一的导入弹窗
- 新增taxpayerCode字段到用户信息模型中
- 移除企业详情页面中冗余的描述项注释代码
- 实现基于企业ID或纳税人识别号的数据加载缓存机制
- 添加导入模板下载功能和文件类型验证
2026-01-05 13:03:15 +08:00
b494a7d951 feat(credit): 企业详情页面增加子表数据导入功能
- 为18个信用相关API的导入方法添加companyId参数支持
- 在企业详情页面的各个子表tab中添加导入和刷新按钮
- 创建credit-company-related-import组件实现统一的导入弹窗
- 新增taxpayerCode字段到用户信息模型中
- 移除企业详情页面中冗余的描述项注释代码
- 实现基于企业ID或纳税人识别号的数据加载缓存机制
- 添加导入模板下载功能和文件类型验证
2026-01-05 12:44:16 +08:00
74b06dbc17 feat(credit): 企业详情页面增加子表数据导入功能
- 为18个信用相关API的导入方法添加companyId参数支持
- 在企业详情页面的各个子表tab中添加导入和刷新按钮
- 创建credit-company-related-import组件实现统一的导入弹窗
- 新增taxpayerCode字段到用户信息模型中
- 移除企业详情页面中冗余的描述项注释代码
- 实现基于企业ID或纳税人识别号的数据加载缓存机制
- 添加导入模板下载功能和文件类型验证
2026-01-05 12:17:59 +08:00
90aaeef018 feat(credit): 添加链接地址字段支持
- 在多个信用模型中添加 url 字段定义,包括信用违约、立案、公司、竞争对手等
- 修复法院公告模型中的字段命名错误,将 defendant appellee 改为 appellee
- 在前端页面中实现链接地址的展示功能,为名称字段添加外链支持
- 优化页面布局结构,调整部分组件的缩进格式
- 修复时间格式化函数的换行问题,提升代码可读性
- 统一表格列宽度设置,优化页面显示效果
2026-01-03 22:36:45 +08:00
4f9a0e7f91 feat(payment): 添加统一下单接口并修复类型引用
- 添加 create 和 createWithOrder 两个统一下单接口
- 将 Order 类型替换为 ShopOrder 类型
- 修复 getNativeCode 函数的参数类型引用
- 修复 importArticles 导入语句的格式问题

feat(navigation): 实现导航管理导入导出功能

- 添加导航导入弹窗组件 Import.vue
- 实现导航数据导出功能,支持按搜索结果导出
- 优化导出数据的列宽设置
- 添加导出加载状态和错误处理
- 修复组件格式化问题

refactor(led): 重构LED显示页面实现自动轮播

- 重命名组件名称为 LedIndex
- 添加两个表格实例引用用于独立控制
- 实现页面自动轮播功能,设置10秒间隔
- 隐藏表格分页组件
- 优化页面加载和卸载逻辑

style(components): 统一组件代码格式化

- 修复多个组件中的格式化问题
- 统一 import 语句的格式
- 修复组件标签闭合问题
- 优化代码缩进和换行

chore(env): 更新开发环境配置注释

- 注释掉 VITE_API_URL 配置项
- 保持其他环境配置不变
2025-12-30 21:26:01 +08:00
9d5896dc86 led 2025-12-25 13:17:47 +08:00
268f8994ca feat(credit): 新增客户导入与数据导出功能
- 在信用客户模块中添加了导入客户的功能,支持通过文件上传方式导入客户数据
- 实现了多个信用相关模块的数据导出功能,包括企业、司法案件、风险关系、供应商及用户模块
- 更新了搜索组件以支持导出事件,并在各模块中实现了具体的导出逻辑
- 简化了部分表单项的标签显示并移除了冗余字段,优化了用户体验
- 修复了一些潜在的代码格式问题和不必要的注释块
2025-12-23 16:18:01 +08:00
f9c94a0590 feat(credit): 新增客户导入与数据导出功能
- 在信用客户模块中添加了导入客户的功能,支持通过文件上传方式导入客户数据
- 实现了多个信用相关模块的数据导出功能,包括企业、司法案件、风险关系、供应商及用户模块
- 更新了搜索组件以支持导出事件,并在各模块中实现了具体的导出逻辑
- 简化了部分表单项的标签显示并移除了冗余字段,优化了用户体验
- 修复了一些潜在的代码格式问题和不必要的注释块
2025-12-22 14:35:07 +08:00
ecd571c60b feat(credit): 新增客户导入与数据导出功能
- 在信用客户模块中添加了导入客户的功能,支持通过文件上传方式导入客户数据
- 实现了多个信用相关模块的数据导出功能,包括企业、司法案件、风险关系、供应商及用户模块
- 更新了搜索组件以支持导出事件,并在各模块中实现了具体的导出逻辑
- 简化了部分表单项的标签显示并移除了冗余字段,优化了用户体验
- 修复了一些潜在的代码格式问题和不必要的注释块
2025-12-22 10:00:49 +08:00
ebdc9b5933 feat(credit): 添加客户管理模块
- 新增客户数据模型定义
- 实现客户分页查询、列表查询、新增、修改、删除等API接口
- 创建客户管理页面,包含表格展示、编辑弹窗、搜索功能
- 添加客户编辑表单,支持客户信息的录入与修改
- 实现客户数据的状态管理与操作功能
- 优化开庭公告等模块的字段命名与代码结构
- 统一导入导出功能组件的使用方式
- 修复被告/被上诉人字段绑定错误的问题
2025-12-21 21:22:11 +08:00
f87103119a feat(credit): 新增企业信用管理模块
- 添加企业信息模型定义,包含企业基本信息、联系方式、行业分类等字段
- 实现企业信息的增删改查接口,支持分页查询和批量操作
- 开发企业信息管理页面,包含表格展示、搜索筛选功能
- 添加企业信息编辑弹窗,支持新增和修改企业信息
- 实现企业信息导入功能,支持Excel文件批量导入
- 添加企业信息导入模板下载功能
- 实现企业信息的状态管理和排序功能
- 添加企业信息的详情展示和操作按钮
- 实现企业信息的批量删除功能
- 添加企业信息的搜索功能,支持关键词模糊查询
2025-12-21 20:47:43 +08:00
3c8ede258c feat(credit): 新增企业信用管理模块
- 添加企业信息模型定义,包含企业基本信息、联系方式、行业分类等字段
- 实现企业信息的增删改查接口,支持分页查询和批量操作
- 开发企业信息管理页面,包含表格展示、搜索筛选功能
- 添加企业信息编辑弹窗,支持新增和修改企业信息
- 实现企业信息导入功能,支持Excel文件批量导入
- 添加企业信息导入模板下载功能
- 实现企业信息的状态管理和排序功能
- 添加企业信息的详情展示和操作按钮
- 实现企业信息的批量删除功能
- 添加企业信息的搜索功能,支持关键词模糊查询
2025-12-21 20:47:20 +08:00
5872043040 feat(credit): 重构企业信息展示组件为只读详情页
- 将原有的表单编辑模式改为只读的描述列表展示
- 新增多个企业相关字段的展示支持
- 集成Tabs组件展示企业相关的多维度信息
- 实现企业关联信息的异步加载与展示
- 添加数据格式化处理函数提升展示效果
- 移除原有表单提交相关逻辑和验证规则
- 新增企业相关信息接口调用方法
- 优化组件结构与数据流管理逻辑
2025-12-17 10:57:38 +08:00
958cbc4d20 Merge remote-tracking branch 'origin/dev' into dev 2025-12-17 10:03:07 +08:00
2962689f2f 111 2025-12-17 10:03:00 +08:00
b15d0010ad feat(credit): 新增企业信用管理模块
- 添加企业信息模型定义,包含企业基本信息、联系方式、行业分类等字段
- 实现企业信息的增删改查接口,支持分页查询和批量操作
- 开发企业信息管理页面,包含表格展示、搜索筛选功能
- 添加企业信息编辑弹窗,支持新增和修改企业信息
- 实现企业信息导入功能,支持Excel文件批量导入
- 添加企业信息导入模板下载功能
- 实现企业信息的状态管理和排序功能
- 添加企业信息的详情展示和操作按钮
- 实现企业信息的批量删除功能
- 添加企业信息的搜索功能,支持关键词模糊查询
2025-12-17 09:48:11 +08:00
cea60d96d7 feat(credit): 新增企业信用管理模块
- 添加企业信息模型定义,包含企业基本信息、联系方式、行业分类等字段
- 实现企业信息的增删改查接口,支持分页查询和批量操作
- 开发企业信息管理页面,包含表格展示、搜索筛选功能
- 添加企业信息编辑弹窗,支持新增和修改企业信息
- 实现企业信息导入功能,支持Excel文件批量导入
- 添加企业信息导入模板下载功能
- 实现企业信息的状态管理和排序功能
- 添加企业信息的详情展示和操作按钮
- 实现企业信息的批量删除功能
- 添加企业信息的搜索功能,支持关键词模糊查询
2025-12-17 09:32:29 +08:00
e82a4ce865 feat(credit): 新增司法案件管理功能
- 添加司法案件模型定义及API接口
- 实现司法案件分页查询、列表查询、新增、修改、删除及批量删除功能
- 开发司法案件编辑弹窗组件,支持表单验证和数据提交
- 创建搜索组件,支持关键词搜索、添加、导入和批量删除操作
- 构建司法案件主页面,集成表格展示、编辑弹窗及导入功能
- 实现司法案件导入功能,支持Excel文件上传及模板下载
- 配置开发环境API地址,确保接口请求正常
- 添加司法案件导入弹窗组件,支持拖拽上传及文件类型校验
2025-12-16 16:27:31 +08:00
5c783c2f51 feat(creditUser): 更新导入模板链接及表单项标签
- 优化导入模板下载链接的布局
- 将“客户名称”字段标签更正为“项目名称”
- 统一代码格式并移除冗余空行
- 调整表格列配置对齐方式
- 完善组件引用路径与方法导入结构
2025-12-16 15:14:27 +08:00
89d359b40e feat(shop): 完善订单发货功能及配送方式展示
- 新增发货备注、快递公司、发货人信息等字段
- 优化发货表单验证逻辑,支持不同配送方式的动态校验
- 新增配送方式为"商家送货"和"无需发货"的处理逻辑
- 完善订单详情页配送信息展示,增加发货店铺和无需发货备注显示
- 修复发货模态框中部分字段重置逻辑
- 调整开发环境API配置注释状态
2025-12-16 15:00:29 +08:00
569 changed files with 54167 additions and 40219 deletions

View File

@@ -6,7 +6,7 @@ import type { PageParam } from '@/api';
export interface BszxBranch { export interface BszxBranch {
// ID // ID
id?: number; id?: number;
// 分部名称 // 分部名称
name?: string; name?: string;
// 排序(数字越小越靠前) // 排序(数字越小越靠前)
sortNumber?: number; sortNumber?: number;

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import { MODULES_API_URL } from '@/config/setting'; import { MODULES_API_URL } from '@/config/setting';
import {ShopOrder, ShopOrderParam} from "@/api/shop/shopOrder/model"; import { ShopOrder, ShopOrderParam } from '@/api/shop/shopOrder/model';
/** /**
* 分页查询百色中学-捐款记录 * 分页查询百色中学-捐款记录
@@ -19,7 +19,6 @@ export async function pageBszxOrder(params: ShopOrderParam) {
return Promise.reject(new Error(res.data.message)); return Promise.reject(new Error(res.data.message));
} }
/** /**
* 统计订单总金额(只统计有效订单) * 统计订单总金额(只统计有效订单)
*/ */

View File

@@ -2,7 +2,7 @@ import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type { BszxPay, BszxPayParam } from './model'; import type { BszxPay, BszxPayParam } from './model';
import { MODULES_API_URL } from '@/config/setting'; import { MODULES_API_URL } from '@/config/setting';
import {ShopOrder} from "@/api/shop/shopOrder/model"; import { ShopOrder } from '@/api/shop/shopOrder/model';
/** /**
* 分页查询百色中学-捐款记录 * 分页查询百色中学-捐款记录

View File

@@ -2,7 +2,7 @@ import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type { BszxPayRanking, BszxPayRankingParam } from './model'; import type { BszxPayRanking, BszxPayRankingParam } from './model';
import { MODULES_API_URL } from '@/config/setting'; import { MODULES_API_URL } from '@/config/setting';
import {BszxClass, BszxClassParam} from "@/api/bszx/bszxClass/model"; import { BszxClass, BszxClassParam } from '@/api/bszx/bszxClass/model';
/** /**
* 分页查询百色中学-捐款排行 * 分页查询百色中学-捐款排行
@@ -62,8 +62,6 @@ export async function ranking2(params?: BszxClassParam) {
return Promise.reject(new Error(res.data.message)); return Promise.reject(new Error(res.data.message));
} }
/** /**
* 添加百色中学-捐款排行 * 添加百色中学-捐款排行
*/ */

View File

@@ -78,7 +78,9 @@ export async function removeClinicAppointment(id?: number) {
/** /**
* 批量删除挂号 * 批量删除挂号
*/ */
export async function removeBatchClinicAppointment(data: (number | undefined)[]) { export async function removeBatchClinicAppointment(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/clinic/clinic-appointment/batch', '/clinic/clinic-appointment/batch',
{ {

View File

@@ -78,7 +78,9 @@ export async function removeClinicDoctorApply(id?: number) {
/** /**
* 批量删除医生入驻申请 * 批量删除医生入驻申请
*/ */
export async function removeBatchClinicDoctorApply(data: (number | undefined)[]) { export async function removeBatchClinicDoctorApply(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/clinic/clinic-doctor-apply/batch', '/clinic/clinic-doctor-apply/batch',
{ {

View File

@@ -1,17 +1,21 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type { ClinicDoctorMedicalRecord, ClinicDoctorMedicalRecordParam } from './model'; import type {
ClinicDoctorMedicalRecord,
ClinicDoctorMedicalRecordParam
} from './model';
/** /**
* 分页查询医疗记录 * 分页查询医疗记录
*/ */
export async function pageClinicDoctorMedicalRecord(params: ClinicDoctorMedicalRecordParam) { export async function pageClinicDoctorMedicalRecord(
const res = await request.get<ApiResult<PageResult<ClinicDoctorMedicalRecord>>>( params: ClinicDoctorMedicalRecordParam
'/clinic/clinic-doctor-medical-record/page', ) {
{ const res = await request.get<
params ApiResult<PageResult<ClinicDoctorMedicalRecord>>
} >('/clinic/clinic-doctor-medical-record/page', {
); params
});
if (res.data.code === 0) { if (res.data.code === 0) {
return res.data.data; return res.data.data;
} }
@@ -21,7 +25,9 @@ export async function pageClinicDoctorMedicalRecord(params: ClinicDoctorMedicalR
/** /**
* 查询医疗记录列表 * 查询医疗记录列表
*/ */
export async function listClinicDoctorMedicalRecord(params?: ClinicDoctorMedicalRecordParam) { export async function listClinicDoctorMedicalRecord(
params?: ClinicDoctorMedicalRecordParam
) {
const res = await request.get<ApiResult<ClinicDoctorMedicalRecord[]>>( const res = await request.get<ApiResult<ClinicDoctorMedicalRecord[]>>(
'/clinic/clinic-doctor-medical-record', '/clinic/clinic-doctor-medical-record',
{ {
@@ -37,7 +43,9 @@ export async function listClinicDoctorMedicalRecord(params?: ClinicDoctorMedical
/** /**
* 添加医疗记录 * 添加医疗记录
*/ */
export async function addClinicDoctorMedicalRecord(data: ClinicDoctorMedicalRecord) { export async function addClinicDoctorMedicalRecord(
data: ClinicDoctorMedicalRecord
) {
const res = await request.post<ApiResult<unknown>>( const res = await request.post<ApiResult<unknown>>(
'/clinic/clinic-doctor-medical-record', '/clinic/clinic-doctor-medical-record',
data data
@@ -51,7 +59,9 @@ export async function addClinicDoctorMedicalRecord(data: ClinicDoctorMedicalReco
/** /**
* 修改医疗记录 * 修改医疗记录
*/ */
export async function updateClinicDoctorMedicalRecord(data: ClinicDoctorMedicalRecord) { export async function updateClinicDoctorMedicalRecord(
data: ClinicDoctorMedicalRecord
) {
const res = await request.put<ApiResult<unknown>>( const res = await request.put<ApiResult<unknown>>(
'/clinic/clinic-doctor-medical-record', '/clinic/clinic-doctor-medical-record',
data data
@@ -78,7 +88,9 @@ export async function removeClinicDoctorMedicalRecord(id?: number) {
/** /**
* 批量删除医疗记录 * 批量删除医疗记录
*/ */
export async function removeBatchClinicDoctorMedicalRecord(data: (number | undefined)[]) { export async function removeBatchClinicDoctorMedicalRecord(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/clinic/clinic-doctor-medical-record/batch', '/clinic/clinic-doctor-medical-record/batch',
{ {

View File

@@ -78,7 +78,9 @@ export async function removeClinicDoctorUser(id?: number) {
/** /**
* 批量删除分销商用户记录表 * 批量删除分销商用户记录表
*/ */
export async function removeBatchClinicDoctorUser(data: (number | undefined)[]) { export async function removeBatchClinicDoctorUser(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/clinic/clinic-doctor-user/batch', '/clinic/clinic-doctor-user/batch',
{ {

View File

@@ -5,7 +5,9 @@ import type { ClinicMedicalHistory, ClinicMedicalHistoryParam } from './model';
/** /**
* 分页查询病例 * 分页查询病例
*/ */
export async function pageClinicMedicalHistory(params: ClinicMedicalHistoryParam) { export async function pageClinicMedicalHistory(
params: ClinicMedicalHistoryParam
) {
const res = await request.get<ApiResult<PageResult<ClinicMedicalHistory>>>( const res = await request.get<ApiResult<PageResult<ClinicMedicalHistory>>>(
'/clinic/clinic-medical-history/page', '/clinic/clinic-medical-history/page',
{ {
@@ -21,7 +23,9 @@ export async function pageClinicMedicalHistory(params: ClinicMedicalHistoryParam
/** /**
* 查询病例列表 * 查询病例列表
*/ */
export async function listClinicMedicalHistory(params?: ClinicMedicalHistoryParam) { export async function listClinicMedicalHistory(
params?: ClinicMedicalHistoryParam
) {
const res = await request.get<ApiResult<ClinicMedicalHistory[]>>( const res = await request.get<ApiResult<ClinicMedicalHistory[]>>(
'/clinic/clinic-medical-history', '/clinic/clinic-medical-history',
{ {
@@ -78,7 +82,9 @@ export async function removeClinicMedicalHistory(id?: number) {
/** /**
* 批量删除病例 * 批量删除病例
*/ */
export async function removeBatchClinicMedicalHistory(data: (number | undefined)[]) { export async function removeBatchClinicMedicalHistory(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/clinic/clinic-medical-history/batch', '/clinic/clinic-medical-history/batch',
{ {

View File

@@ -5,7 +5,9 @@ import type { ClinicMedicineInout, ClinicMedicineInoutParam } from './model';
/** /**
* 分页查询出入库 * 分页查询出入库
*/ */
export async function pageClinicMedicineInout(params: ClinicMedicineInoutParam) { export async function pageClinicMedicineInout(
params: ClinicMedicineInoutParam
) {
const res = await request.get<ApiResult<PageResult<ClinicMedicineInout>>>( const res = await request.get<ApiResult<PageResult<ClinicMedicineInout>>>(
'/clinic/clinic-medicine-inout/page', '/clinic/clinic-medicine-inout/page',
{ {
@@ -21,7 +23,9 @@ export async function pageClinicMedicineInout(params: ClinicMedicineInoutParam)
/** /**
* 查询出入库列表 * 查询出入库列表
*/ */
export async function listClinicMedicineInout(params?: ClinicMedicineInoutParam) { export async function listClinicMedicineInout(
params?: ClinicMedicineInoutParam
) {
const res = await request.get<ApiResult<ClinicMedicineInout[]>>( const res = await request.get<ApiResult<ClinicMedicineInout[]>>(
'/clinic/clinic-medicine-inout', '/clinic/clinic-medicine-inout',
{ {
@@ -78,7 +82,9 @@ export async function removeClinicMedicineInout(id?: number) {
/** /**
* 批量删除出入库 * 批量删除出入库
*/ */
export async function removeBatchClinicMedicineInout(data: (number | undefined)[]) { export async function removeBatchClinicMedicineInout(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/clinic/clinic-medicine-inout/batch', '/clinic/clinic-medicine-inout/batch',
{ {

View File

@@ -5,7 +5,9 @@ import type { ClinicMedicineStock, ClinicMedicineStockParam } from './model';
/** /**
* 分页查询药品库存 * 分页查询药品库存
*/ */
export async function pageClinicMedicineStock(params: ClinicMedicineStockParam) { export async function pageClinicMedicineStock(
params: ClinicMedicineStockParam
) {
const res = await request.get<ApiResult<PageResult<ClinicMedicineStock>>>( const res = await request.get<ApiResult<PageResult<ClinicMedicineStock>>>(
'/clinic/clinic-medicine-stock/page', '/clinic/clinic-medicine-stock/page',
{ {
@@ -21,7 +23,9 @@ export async function pageClinicMedicineStock(params: ClinicMedicineStockParam)
/** /**
* 查询药品库存列表 * 查询药品库存列表
*/ */
export async function listClinicMedicineStock(params?: ClinicMedicineStockParam) { export async function listClinicMedicineStock(
params?: ClinicMedicineStockParam
) {
const res = await request.get<ApiResult<ClinicMedicineStock[]>>( const res = await request.get<ApiResult<ClinicMedicineStock[]>>(
'/clinic/clinic-medicine-stock', '/clinic/clinic-medicine-stock',
{ {
@@ -78,7 +82,9 @@ export async function removeClinicMedicineStock(id?: number) {
/** /**
* 批量删除药品库存 * 批量删除药品库存
*/ */
export async function removeBatchClinicMedicineStock(data: (number | undefined)[]) { export async function removeBatchClinicMedicineStock(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/clinic/clinic-medicine-stock/batch', '/clinic/clinic-medicine-stock/batch',
{ {

View File

@@ -42,9 +42,9 @@ export interface ClinicOrder {
addressId?: number; addressId?: number;
// 收货地址 // 收货地址
address?: string; address?: string;
// //
addressLat?: string; addressLat?: string;
// //
addressLng?: string; addressLng?: string;
// 买家留言 // 买家留言
buyerRemarks?: string; buyerRemarks?: string;

View File

@@ -78,7 +78,9 @@ export async function removeClinicPatientUser(id?: number) {
/** /**
* 批量删除患者 * 批量删除患者
*/ */
export async function removeBatchClinicPatientUser(data: (number | undefined)[]) { export async function removeBatchClinicPatientUser(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/clinic/clinic-patient-user/batch', '/clinic/clinic-patient-user/batch',
{ {

View File

@@ -84,7 +84,9 @@ export async function removeClinicPrescription(id?: number) {
* 批量删除处方主表 * 批量删除处方主表
*/ */
export async function removeBatchClinicPrescription(data: (number | undefined)[]) { export async function removeBatchClinicPrescription(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/clinic/clinic-prescription/batch', '/clinic/clinic-prescription/batch',
{ {

View File

@@ -1,12 +1,17 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type { ClinicPrescriptionItem, ClinicPrescriptionItemParam } from './model'; import type {
ClinicPrescriptionItem,
ClinicPrescriptionItemParam
} from './model';
/** /**
* 分页查询处方明细表 * 分页查询处方明细表
*/ */
export async function pageClinicPrescriptionItem(params: ClinicPrescriptionItemParam) { export async function pageClinicPrescriptionItem(
params: ClinicPrescriptionItemParam
) {
const res = await request.get<ApiResult<PageResult<ClinicPrescriptionItem>>>( const res = await request.get<ApiResult<PageResult<ClinicPrescriptionItem>>>(
'/clinic/clinic-prescription-item/page', '/clinic/clinic-prescription-item/page',
{ {
@@ -23,7 +28,9 @@ export async function pageClinicPrescriptionItem(params: ClinicPrescriptionItemP
* 查询处方明细表 * 查询处方明细表
列表 列表
*/ */
export async function listClinicPrescriptionItem(params?: ClinicPrescriptionItemParam) { export async function listClinicPrescriptionItem(
params?: ClinicPrescriptionItemParam
) {
const res = await request.get<ApiResult<ClinicPrescriptionItem[]>>( const res = await request.get<ApiResult<ClinicPrescriptionItem[]>>(
'/clinic/clinic-prescription-item', '/clinic/clinic-prescription-item',
{ {
@@ -55,7 +62,9 @@ export async function addClinicPrescriptionItem(data: ClinicPrescriptionItem) {
* 修改处方明细表 * 修改处方明细表
*/ */
export async function updateClinicPrescriptionItem(data: ClinicPrescriptionItem) { export async function updateClinicPrescriptionItem(
data: ClinicPrescriptionItem
) {
const res = await request.put<ApiResult<unknown>>( const res = await request.put<ApiResult<unknown>>(
'/clinic/clinic-prescription-item', '/clinic/clinic-prescription-item',
data data
@@ -84,7 +93,9 @@ export async function removeClinicPrescriptionItem(id?: number) {
* 批量删除处方明细表 * 批量删除处方明细表
*/ */
export async function removeBatchClinicPrescriptionItem(data: (number | undefined)[]) { export async function removeBatchClinicPrescriptionItem(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/clinic/clinic-prescription-item/batch', '/clinic/clinic-prescription-item/batch',
{ {

View File

@@ -78,7 +78,9 @@ export async function removeClinicVisitRecord(id?: number) {
/** /**
* 批量删除病例 * 批量删除病例
*/ */
export async function removeBatchClinicVisitRecord(data: (number | undefined)[]) { export async function removeBatchClinicVisitRecord(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/clinic/clinic-visit-record/batch', '/clinic/clinic-visit-record/batch',
{ {

View File

@@ -1,6 +1,6 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type {ApiResult, PageResult} from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type {CmsArticle, CmsArticleParam} from './model'; import type { CmsArticle, CmsArticleParam } from './model';
/** /**
* 分页查询文章 * 分页查询文章
@@ -22,12 +22,9 @@ export async function pageCmsArticle(params: CmsArticleParam) {
* 查询文章列表 * 查询文章列表
*/ */
export async function listCmsArticle(params?: CmsArticleParam) { export async function listCmsArticle(params?: CmsArticleParam) {
const res = await request.get<ApiResult<CmsArticle[]>>( const res = await request.get<ApiResult<CmsArticle[]>>('/cms/cms-article', {
'/cms/cms-article', params
{ });
params
}
);
if (res.data.code === 0 && res.data.data) { if (res.data.code === 0 && res.data.data) {
return res.data.data; return res.data.data;
} }
@@ -38,10 +35,7 @@ export async function listCmsArticle(params?: CmsArticleParam) {
* 添加文章 * 添加文章
*/ */
export async function addCmsArticle(data: CmsArticle) { export async function addCmsArticle(data: CmsArticle) {
const res = await request.post<ApiResult<unknown>>( const res = await request.post<ApiResult<unknown>>('/cms/cms-article', data);
'/cms/cms-article',
data
);
if (res.data.code === 0) { if (res.data.code === 0) {
return res.data.message; return res.data.message;
} }
@@ -52,10 +46,7 @@ export async function addCmsArticle(data: CmsArticle) {
* 修改文章 * 修改文章
*/ */
export async function updateCmsArticle(data: CmsArticle) { export async function updateCmsArticle(data: CmsArticle) {
const res = await request.put<ApiResult<unknown>>( const res = await request.put<ApiResult<unknown>>('/cms/cms-article', data);
'/cms/cms-article',
data
);
if (res.data.code === 0) { if (res.data.code === 0) {
return res.data.message; return res.data.message;
} }
@@ -141,7 +132,6 @@ export async function getCount(params: CmsArticleParam) {
return Promise.reject(new Error(res.data.message)); return Promise.reject(new Error(res.data.message));
} }
/** /**
* 文章批量导入 * 文章批量导入
*/ */

View File

@@ -79,7 +79,9 @@ export async function removeCmsArticleComment(id?: number) {
/** /**
* 批量删除文章评论表 * 批量删除文章评论表
*/ */
export async function removeBatchCmsArticleComment(data: (number | undefined)[]) { export async function removeBatchCmsArticleComment(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-comment/batch', MODULES_API_URL + '/cms/cms-article-comment/batch',
{ {

View File

@@ -79,7 +79,9 @@ export async function removeCmsArticleContent(id?: number) {
/** /**
* 批量删除文章记录表 * 批量删除文章记录表
*/ */
export async function removeBatchCmsArticleContent(data: (number | undefined)[]) { export async function removeBatchCmsArticleContent(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-article-content/batch', MODULES_API_URL + '/cms/cms-article-content/batch',
{ {

View File

@@ -4,7 +4,7 @@ import type { PageParam } from '@/api';
* 文章记录表 * 文章记录表
*/ */
export interface CmsArticleContent { export interface CmsArticleContent {
// //
id?: number; id?: number;
// 文章ID // 文章ID
articleId?: number; articleId?: number;

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type { CmsDomain, CmsDomainParam } from './model'; import type { CmsDomain, CmsDomainParam } from './model';
import { SERVER_API_URL} from '@/config/setting'; import { SERVER_API_URL } from '@/config/setting';
/** /**
* 分页查询网站域名记录表 * 分页查询网站域名记录表
@@ -135,16 +135,17 @@ export async function resolvable(id: number) {
return Promise.reject(new Error(res.data.message)); return Promise.reject(new Error(res.data.message));
} }
/** /**
* 根据授权主域名 * 根据授权主域名
*/ */
export async function getAuthorizedDomain() { export async function getAuthorizedDomain() {
if(!localStorage.getItem('WebsiteId')){ if (!localStorage.getItem('WebsiteId')) {
return false; return false;
} }
const res = await request.get<ApiResult<CmsDomain>>( const res = await request.get<ApiResult<CmsDomain>>(
SERVER_API_URL + '/cms/cms-domain/getAuthorizedDomain/' + localStorage.getItem('WebsiteId') SERVER_API_URL +
'/cms/cms-domain/getAuthorizedDomain/' +
localStorage.getItem('WebsiteId')
); );
if (res.data.code === 0 && res.data.data) { if (res.data.code === 0 && res.data.data) {
return res.data.data; return res.data.data;

View File

@@ -6,7 +6,7 @@ import type { PageParam } from '@/api';
export interface CmsDomain { export interface CmsDomain {
// ID // ID
id?: number; id?: number;
// 类型 0赠送域名 1绑定域名 // 类型 0赠送域名 1绑定域名
type?: number; type?: number;
// 域名 // 域名
domain?: string; domain?: string;

View File

@@ -120,7 +120,6 @@ export async function getCmsNavigation(id: number) {
return Promise.reject(new Error(res.data.message)); return Promise.reject(new Error(res.data.message));
} }
/** /**
* 根据code查询导航 * 根据code查询导航
*/ */

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type { CmsWebsite, CmsWebsiteParam } from './model'; import type { CmsWebsite, CmsWebsiteParam } from './model';
import {MODULES_API_URL} from '@/config/setting'; import { MODULES_API_URL } from '@/config/setting';
/** /**
* 分页查询网站信息记录表 * 分页查询网站信息记录表

View File

@@ -1,6 +1,6 @@
import type { PageParam } from '@/api'; import type { PageParam } from '@/api';
import {CmsWebsiteSetting} from "@/api/cms/cmsWebsiteSetting/model"; import { CmsWebsiteSetting } from '@/api/cms/cmsWebsiteSetting/model';
import {CmsNavigation} from "@/api/cms/cmsNavigation/model"; import { CmsNavigation } from '@/api/cms/cmsNavigation/model';
/** /**
* 网站信息记录表 * 网站信息记录表
@@ -43,7 +43,7 @@ export interface CmsWebsite {
// 应用类型 0应用 1插件 // 应用类型 0应用 1插件
plugin?: boolean; plugin?: boolean;
// 默认编辑器 // 默认编辑器
editor?: number, editor?: number;
// 服务到期时间 // 服务到期时间
expirationTime?: string; expirationTime?: string;
// 模版ID // 模版ID

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type {CmsWebsiteField, CmsWebsiteFieldParam, Config} from './model'; import type { CmsWebsiteField, CmsWebsiteFieldParam, Config } from './model';
import {MODULES_API_URL, TEMPLATE_ID} from '@/config/setting'; import { MODULES_API_URL, TEMPLATE_ID } from '@/config/setting';
/** /**
* 分页查询应用参数 * 分页查询应用参数

View File

@@ -62,4 +62,4 @@ export interface Config {
ApiUrl?: string; ApiUrl?: string;
// 添加主题配置项 // 添加主题配置项
theme?: string; theme?: string;
} }

View File

@@ -79,7 +79,9 @@ export async function removeCmsWebsiteSetting(id?: number) {
/** /**
* 批量删除网站设置 * 批量删除网站设置
*/ */
export async function removeBatchCmsWebsiteSetting(data: (number | undefined)[]) { export async function removeBatchCmsWebsiteSetting(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/cms/cms-website-setting/batch', MODULES_API_URL + '/cms/cms-website-setting/batch',
{ {

View File

@@ -79,7 +79,9 @@ export async function removeDormitoryBuilding(id?: number) {
/** /**
* 批量删除宿舍楼栋 * 批量删除宿舍楼栋
*/ */
export async function removeBatchDormitoryBuilding(data: (number | undefined)[]) { export async function removeBatchDormitoryBuilding(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/dormitory/dormitory-building/batch', MODULES_API_URL + '/dormitory/dormitory-building/batch',
{ {

View File

@@ -1,5 +1,5 @@
import type { PageParam } from '@/api'; import type { PageParam } from '@/api';
import {HjmFence} from "@/api/hjm/hjmFence/model"; import { HjmFence } from '@/api/hjm/hjmFence/model';
/** /**
* 车辆管理 * 车辆管理
@@ -50,13 +50,13 @@ export interface HjmCar {
// 位置 // 位置
location?: string; location?: string;
// 经度 // 经度
longitude?: string, longitude?: string;
// 纬度 // 纬度
latitude?: string, latitude?: string;
// 区域 // 区域
district?: string; district?: string;
// 地址 // 地址
address?: string, address?: string;
// 组织ID // 组织ID
organizationId?: number; organizationId?: number;
// 父级组织ID // 父级组织ID

View File

@@ -1,5 +1,5 @@
import type { PageParam } from '@/api'; import type { PageParam } from '@/api';
import {HjmChoices} from "@/api/hjm/hjmChoices/model"; import { HjmChoices } from '@/api/hjm/hjmChoices/model';
/** /**
* 题目 * 题目
@@ -36,10 +36,10 @@ export interface HjmQuestions {
// 修改时间 // 修改时间
updateTime?: string; updateTime?: string;
// 选项 // 选项
choicesA?: string, choicesA?: string;
choicesB?: string, choicesB?: string;
choicesC?: string, choicesC?: string;
choicesD?: string, choicesD?: string;
choices?: number; choices?: number;
choicesList?: HjmChoices[]; choicesList?: HjmChoices[];
} }

View File

@@ -37,6 +37,8 @@ export interface PageParam {
tenantId?: number; tenantId?: number;
// 企业ID // 企业ID
companyId?: number; companyId?: number;
// 企业税号/统一社会信用代码
taxpayerCode?: string;
// 商户ID // 商户ID
merchantId?: number; merchantId?: number;
merchantName?: string; merchantName?: string;

View File

@@ -2,10 +2,10 @@ import request from '@/utils/request';
import type { ApiResult } from '@/api'; import type { ApiResult } from '@/api';
import type { User } from '@/api/system/user/model'; import type { User } from '@/api/system/user/model';
import type { UpdatePasswordParam, NoticeResult } from './model'; import type { UpdatePasswordParam, NoticeResult } from './model';
import {SERVER_API_URL} from '@/config/setting'; import { SERVER_API_URL } from '@/config/setting';
import { Company } from '@/api/system/company/model'; import { Company } from '@/api/system/company/model';
import { CmsWebsite } from '@/api/cms/cmsWebsite/model'; import { CmsWebsite } from '@/api/cms/cmsWebsite/model';
import {Menu} from "@/api/system/menu/model"; import { Menu } from '@/api/system/menu/model';
/** /**
* 获取当前登录的用户信息、菜单、权限、角色 * 获取当前登录的用户信息、菜单、权限、角色
@@ -24,12 +24,9 @@ export async function getTenantInfo(): Promise<Company> {
* 获取网站信息 https://cms-api.websoft.top/api * 获取网站信息 https://cms-api.websoft.top/api
*/ */
export async function getSiteInfo() { export async function getSiteInfo() {
const res = await request.get<ApiResult<CmsWebsite>>( const res = await request.get<ApiResult<CmsWebsite>>('/shop/getShopInfo', {
'/shop/getShopInfo', params: {}
{ });
params: {}
}
);
if (res.data.code === 0 && res.data.data) { if (res.data.code === 0 && res.data.data) {
return res.data.data; return res.data.data;
} }
@@ -66,9 +63,7 @@ export async function updateLoginUser(data: User) {
* @return * @return
*/ */
export async function getServerTime() { export async function getServerTime() {
const res = await request.get<ApiResult<any>>( const res = await request.get<ApiResult<any>>('/cms/website/getServerTime');
'/cms/website/getServerTime'
);
if (res.data.code === 0 && res.data.data) { if (res.data.code === 0 && res.data.data) {
return res.data.data; return res.data.data;
} }
@@ -80,9 +75,7 @@ export async function getServerTime() {
* @return * @return
*/ */
export async function getNext7day() { export async function getNext7day() {
const res = await request.get<ApiResult<any>>( const res = await request.get<ApiResult<any>>('/cms/website/getNext7day');
'/cms/website/getNext7day'
);
console.log('res.data.code: ', res.data.code); console.log('res.data.code: ', res.data.code);
if (res.data.code === 0 && res.data.data) { if (res.data.code === 0 && res.data.data) {
return res.data.data; return res.data.data;
@@ -118,9 +111,10 @@ export async function updatePassword(
/** /**
* 创建完整网站并初始化 * 创建完整网站并初始化
*/ */
export async function createCmsWebSite(data: CmsWebsite){ export async function createCmsWebSite(data: CmsWebsite) {
const res = await request.post<ApiResult<unknown>>( const res = await request.post<ApiResult<unknown>>(
SERVER_API_URL + '/superAdminRegister',data SERVER_API_URL + '/superAdminRegister',
data
); );
if (res.data.code === 0) { if (res.data.code === 0) {
return res.data.message; return res.data.message;

27
src/api/led/index.ts Normal file
View File

@@ -0,0 +1,27 @@
import request from '@/utils/request';
import type { ApiResult } from '@/api';
import { MODULES_API_URL } from '@/config/setting';
export async function stopReplace(data: any) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/led/bme/stop-replace',
data
);
if (res.data.code === 0) {
const data = res.data.data;
return data || [];
}
return Promise.reject(new Error(res.data.message));
}
export async function numberReplace(data: any) {
const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/led/bme/number-sources',
data
);
if (res.data.code === 0) {
const data = res.data.data;
return data || [];
}
return Promise.reject(new Error(res.data.message));
}

View File

@@ -0,0 +1,45 @@
import type { PageParam } from '@/api';
/**
* 黄家明_报险记录
*/
export interface HjmBxLog {
// 自增ID
id?: number;
// 用户ID
userId?: number;
// 车辆ID
carId?: number;
// 车牌号
carNo?: string;
// 操作员
realName?: string;
// 事故类型
accidentType?: string;
// 部门
parentOrganization?: string;
// 保险图片
image?: string;
// 排序(数字越小越靠前)
sortNumber?: number;
// 备注
comments?: string;
// 状态, 0正常, 1冻结
status?: number;
// 是否删除, 0否, 1是
deleted?: number;
// 租户id
tenantId?: number;
// 创建时间
createTime?: string;
// 修改时间
updateTime?: string;
}
/**
* 黄家明_报险记录搜索条件
*/
export interface HjmBxLogParam extends PageParam {
id?: number;
keywords?: string;
}

View File

@@ -1,4 +1,4 @@
import {MODULES_API_URL} from '@/config/setting'; import { MODULES_API_URL } from '@/config/setting';
/** /**
* 小程序码参数 * 小程序码参数

View File

@@ -6,9 +6,9 @@ import { SERVER_API_URL } from '@/config/setting';
* 二维码生成响应数据 * 二维码生成响应数据
*/ */
export interface QrCodeResponse { export interface QrCodeResponse {
token: string; // 二维码唯一标识token token: string; // 二维码唯一标识token
qrCode: string; // 二维码内容 qrCode: string; // 二维码内容
expiresIn: number; // 过期时间(秒) expiresIn: number; // 过期时间(秒)
} }
/** /**
@@ -16,19 +16,19 @@ export interface QrCodeResponse {
*/ */
export interface QrCodeStatusResponse { export interface QrCodeStatusResponse {
status: 'pending' | 'scanned' | 'confirmed' | 'expired'; status: 'pending' | 'scanned' | 'confirmed' | 'expired';
accessToken?: string; // 登录成功时返回的JWT token accessToken?: string; // 登录成功时返回的JWT token
userInfo?: any; // 用户信息 userInfo?: any; // 用户信息
expiresIn?: number; // 剩余过期时间(秒) expiresIn?: number; // 剩余过期时间(秒)
tenantId?: string; // 租户ID tenantId?: string; // 租户ID
} }
/** /**
* 确认登录请求参数 * 确认登录请求参数
*/ */
export interface QrLoginConfirmRequest { export interface QrLoginConfirmRequest {
token: string; // 二维码token token: string; // 二维码token
userId?: number; // 用户ID userId?: number; // 用户ID
platform?: string; // 登录平台 platform?: string; // 登录平台
} }
/** /**
@@ -50,7 +50,9 @@ export async function generateQrCode(): Promise<QrCodeResponse> {
/** /**
* 检查二维码状态 * 检查二维码状态
*/ */
export async function checkQrCodeStatus(token: string): Promise<QrCodeStatusResponse> { export async function checkQrCodeStatus(
token: string
): Promise<QrCodeStatusResponse> {
const res = await request.get<ApiResult<QrCodeStatusResponse>>( const res = await request.get<ApiResult<QrCodeStatusResponse>>(
SERVER_API_URL + `/qr-login/status/${token}` SERVER_API_URL + `/qr-login/status/${token}`
); );
@@ -65,12 +67,14 @@ export async function checkQrCodeStatus(token: string): Promise<QrCodeStatusResp
/** /**
* 扫码确认登录(移动端调用) * 扫码确认登录(移动端调用)
*/ */
export async function confirmQrLogin(requestData: QrLoginConfirmRequest): Promise<QrCodeStatusResponse> { export async function confirmQrLogin(
requestData: QrLoginConfirmRequest
): Promise<QrCodeStatusResponse> {
const res = await request.post<ApiResult<QrCodeStatusResponse>>( const res = await request.post<ApiResult<QrCodeStatusResponse>>(
SERVER_API_URL + '/qr-login/confirm', SERVER_API_URL + '/qr-login/confirm',
requestData requestData
); );
console.log(res,'>>>89898989') console.log(res, '>>>89898989');
if (res.data.code === 0 && res.data.data) { if (res.data.code === 0 && res.data.data) {
return res.data.data; return res.data.data;
} }
@@ -96,7 +100,9 @@ export async function scanQrCode(token: string): Promise<boolean> {
/** /**
* 微信小程序扫码登录确认 * 微信小程序扫码登录确认
*/ */
export async function wechatMiniProgramConfirm(requestData: QrLoginConfirmRequest): Promise<QrCodeStatusResponse> { export async function wechatMiniProgramConfirm(
requestData: QrLoginConfirmRequest
): Promise<QrCodeStatusResponse> {
const res = await request.post<ApiResult<QrCodeStatusResponse>>( const res = await request.post<ApiResult<QrCodeStatusResponse>>(
SERVER_API_URL + '/qr-login/wechat-confirm', SERVER_API_URL + '/qr-login/wechat-confirm',
requestData requestData
@@ -106,5 +112,7 @@ export async function wechatMiniProgramConfirm(requestData: QrLoginConfirmReques
return res.data.data; return res.data.data;
} }
return Promise.reject(new Error(res.data.message || '微信小程序登录确认失败')); return Promise.reject(
new Error(res.data.message || '微信小程序登录确认失败')
);
} }

View File

@@ -1,11 +1,11 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type {ApiResult} from '@/api'; import type { ApiResult } from '@/api';
import type {ShopDealerOrder, ShopDealerOrderParam} from './model'; import type { ShopDealerOrder, ShopDealerOrderParam } from './model';
import {utils, writeFile} from 'xlsx'; import { utils, writeFile } from 'xlsx';
import {message} from 'ant-design-vue'; import { message } from 'ant-design-vue';
import {getTenantId} from '@/utils/domain'; import { getTenantId } from '@/utils/domain';
import {listShopDealerOrder} from "@/api/shop/shopDealerOrder"; import { listShopDealerOrder } from '@/api/shop/shopDealerOrder';
import {MODULES_API_URL} from "@/config/setting"; import { MODULES_API_URL } from '@/config/setting';
/** /**
* 导入分销商订单 * 导入分销商订单
@@ -89,19 +89,19 @@ export async function exportSdyDealerOrder(params?: ShopDealerOrderParam) {
// 设置列宽 // 设置列宽
sheet['!cols'] = [ sheet['!cols'] = [
{wch: 15}, // 订单ID { wch: 15 }, // 订单ID
{wch: 12}, // 买家用户ID { wch: 12 }, // 买家用户ID
{wch: 12}, // 订单总金额 { wch: 12 }, // 订单总金额
{wch: 15}, // 一级分销商ID { wch: 15 }, // 一级分销商ID
{wch: 12}, // 一级佣金 { wch: 12 }, // 一级佣金
{wch: 15}, // 二级分销商ID { wch: 15 }, // 二级分销商ID
{wch: 12}, // 二级佣金 { wch: 12 }, // 二级佣金
{wch: 15}, // 三级分销商ID { wch: 15 }, // 三级分销商ID
{wch: 12}, // 三级佣金 { wch: 12 }, // 三级佣金
{wch: 10}, // 订单状态 { wch: 10 }, // 订单状态
{wch: 10}, // 结算状态 { wch: 10 }, // 结算状态
{wch: 20}, // 结算时间 { wch: 20 }, // 结算时间
{wch: 20} // 创建时间 { wch: 20 } // 创建时间
]; ];
message.destroy(); message.destroy();
@@ -113,7 +113,6 @@ export async function exportSdyDealerOrder(params?: ShopDealerOrderParam) {
message.destroy(); message.destroy();
message.success(`成功导出 ${list.length} 条记录`); message.success(`成功导出 ${list.length} 条记录`);
}, 1000); }, 1000);
} catch (error: any) { } catch (error: any) {
message.destroy(); message.destroy();
message.error(error.message || '导出失败,请重试'); message.error(error.message || '导出失败,请重试');

View File

@@ -78,7 +78,9 @@ export async function removeShopCommissionRole(id?: number) {
/** /**
* 批量删除分红角色 * 批量删除分红角色
*/ */
export async function removeBatchShopCommissionRole(data: (number | undefined)[]) { export async function removeBatchShopCommissionRole(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/shop/shop-commission-role/batch', '/shop/shop-commission-role/batch',
{ {

View File

@@ -4,15 +4,15 @@ import type { PageParam } from '@/api';
* 分红角色 * 分红角色
*/ */
export interface ShopCommissionRole { export interface ShopCommissionRole {
// //
id?: number; id?: number;
// //
title?: string; title?: string;
// //
provinceId?: number; provinceId?: number;
// //
cityId?: number; cityId?: number;
// //
regionId?: number; regionId?: number;
// 状态, 0正常, 1异常 // 状态, 0正常, 1异常
status?: number; status?: number;
@@ -22,7 +22,7 @@ export interface ShopCommissionRole {
tenantId?: number; tenantId?: number;
// 创建时间 // 创建时间
createTime?: string; createTime?: string;
// //
sortNumber?: number; sortNumber?: number;
} }

View File

@@ -22,12 +22,9 @@ export async function pageShopCoupon(params: ShopCouponParam) {
* 查询优惠券列表 * 查询优惠券列表
*/ */
export async function listShopCoupon(params?: ShopCouponParam) { export async function listShopCoupon(params?: ShopCouponParam) {
const res = await request.get<ApiResult<ShopCoupon[]>>( const res = await request.get<ApiResult<ShopCoupon[]>>('/shop/shop-coupon', {
'/shop/shop-coupon', params
{ });
params
}
);
if (res.data.code === 0 && res.data.data) { if (res.data.code === 0 && res.data.data) {
return res.data.data; return res.data.data;
} }
@@ -38,10 +35,7 @@ export async function listShopCoupon(params?: ShopCouponParam) {
* 添加优惠券 * 添加优惠券
*/ */
export async function addShopCoupon(data: ShopCoupon) { export async function addShopCoupon(data: ShopCoupon) {
const res = await request.post<ApiResult<unknown>>( const res = await request.post<ApiResult<unknown>>('/shop/shop-coupon', data);
'/shop/shop-coupon',
data
);
if (res.data.code === 0) { if (res.data.code === 0) {
return res.data.message; return res.data.message;
} }
@@ -52,10 +46,7 @@ export async function addShopCoupon(data: ShopCoupon) {
* 修改优惠券 * 修改优惠券
*/ */
export async function updateShopCoupon(data: ShopCoupon) { export async function updateShopCoupon(data: ShopCoupon) {
const res = await request.put<ApiResult<unknown>>( const res = await request.put<ApiResult<unknown>>('/shop/shop-coupon', data);
'/shop/shop-coupon',
data
);
if (res.data.code === 0) { if (res.data.code === 0) {
return res.data.message; return res.data.message;
} }

View File

@@ -1,6 +1,6 @@
import type { PageParam } from '@/api/index'; import type { PageParam } from '@/api/index';
import {ShopCouponApplyCate} from "@/api/shop/shopCouponApplyCate/model"; import { ShopCouponApplyCate } from '@/api/shop/shopCouponApplyCate/model';
import {ShopCouponApplyItem} from "@/api/shop/shopCouponApplyItem/model"; import { ShopCouponApplyItem } from '@/api/shop/shopCouponApplyItem/model';
/** /**
* 优惠券 * 优惠券

View File

@@ -1,4 +1,3 @@
/** /**
* 优惠券 * 优惠券
*/ */
@@ -7,5 +6,4 @@ export interface ShopCouponApplyCate {
couponId?: number; couponId?: number;
cateId?: number; cateId?: number;
cateLevel?: number; cateLevel?: number;
} }

View File

@@ -1,4 +1,3 @@
/** /**
* 优惠券 * 优惠券
*/ */
@@ -7,5 +6,4 @@ export interface ShopCouponApplyItem {
couponId?: number; couponId?: number;
type?: number; type?: number;
pk?: number; pk?: number;
} }

View File

@@ -8,7 +8,7 @@ import type { ShopDealerApply, ShopDealerApplyParam } from './model';
export async function pageShopDealerApply(params: ShopDealerApplyParam) { export async function pageShopDealerApply(params: ShopDealerApplyParam) {
const res = await request.get<ApiResult<PageResult<ShopDealerApply>>>( const res = await request.get<ApiResult<PageResult<ShopDealerApply>>>(
'/shop/shop-dealer-apply/page', '/shop/shop-dealer-apply/page',
{params} { params }
); );
if (res.data.code === 0) { if (res.data.code === 0) {
return res.data.data; return res.data.data;
@@ -22,7 +22,7 @@ export async function pageShopDealerApply(params: ShopDealerApplyParam) {
export async function listShopDealerApply(params?: ShopDealerApplyParam) { export async function listShopDealerApply(params?: ShopDealerApplyParam) {
const res = await request.get<ApiResult<ShopDealerApply[]>>( const res = await request.get<ApiResult<ShopDealerApply[]>>(
'/shop/shop-dealer-apply', '/shop/shop-dealer-apply',
{params} { params }
); );
if (res.data.code === 0 && res.data.data) { if (res.data.code === 0 && res.data.data) {
return res.data.data; return res.data.data;
@@ -116,7 +116,10 @@ export async function approveShopDealerApply(id: number) {
/** /**
* 驳回分销商申请 * 驳回分销商申请
*/ */
export async function rejectShopDealerApply(id: number, data: { rejectReason: string }) { export async function rejectShopDealerApply(
id: number,
data: { rejectReason: string }
) {
const res = await request.put<ApiResult<unknown>>( const res = await request.put<ApiResult<unknown>>(
`/shop/shop-dealer-apply/${id}/reject`, `/shop/shop-dealer-apply/${id}/reject`,
data data

View File

@@ -78,7 +78,9 @@ export async function removeShopDealerCapital(id?: number) {
/** /**
* 批量删除分销商资金明细表 * 批量删除分销商资金明细表
*/ */
export async function removeBatchShopDealerCapital(data: (number | undefined)[]) { export async function removeBatchShopDealerCapital(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/shop/shop-dealer-capital/batch', '/shop/shop-dealer-capital/batch',
{ {

View File

@@ -8,6 +8,8 @@ export interface ShopDealerCapital {
id?: number; id?: number;
// 分销商用户ID // 分销商用户ID
userId?: number; userId?: number;
// 分销商昵称
nickName?: string;
// 订单ID // 订单ID
orderId?: number; orderId?: number;
// 订单编号 // 订单编号

View File

@@ -201,7 +201,7 @@ export async function exportShopDealerOrder(params?: ShopDealerOrderParam) {
{ wch: 10 }, // 订单状态 { wch: 10 }, // 订单状态
{ wch: 10 }, // 结算状态 { wch: 10 }, // 结算状态
{ wch: 20 }, // 结算时间 { wch: 20 }, // 结算时间
{ wch: 20 } // 创建时间 { wch: 20 } // 创建时间
]; ];
message.destroy(); message.destroy();
@@ -213,7 +213,6 @@ export async function exportShopDealerOrder(params?: ShopDealerOrderParam) {
message.destroy(); message.destroy();
message.success(`成功导出 ${list.length} 条记录`); message.success(`成功导出 ${list.length} 条记录`);
}, 1000); }, 1000);
} catch (error: any) { } catch (error: any) {
message.destroy(); message.destroy();
message.error(error.message || '导出失败,请重试'); message.error(error.message || '导出失败,请重试');

View File

@@ -12,6 +12,8 @@ export interface ShopDealerOrder {
title?: string; title?: string;
// 买家用户昵称 // 买家用户昵称
nickname?: string; nickname?: string;
// 真实姓名
realName?: string;
// 订单编号 // 订单编号
orderNo?: string; orderNo?: string;
// 订单总金额(不含运费) // 订单总金额(不含运费)

View File

@@ -104,7 +104,10 @@ export async function removeBatchShopDealerPoster(ids: (number | undefined)[]) {
* 生成海报 * 生成海报
*/ */
export async function generatePoster(userId: number, config?: any) { export async function generatePoster(userId: number, config?: any) {
const res = await request.post('/shop/dealer/poster/generate', { userId, config }); const res = await request.post('/shop/dealer/poster/generate', {
userId,
config
});
if (res.data.code === 0) { if (res.data.code === 0) {
return res.data.data; return res.data.data;
} }
@@ -118,11 +121,15 @@ export async function uploadPosterBackground(file: File) {
const formData = new FormData(); const formData = new FormData();
formData.append('file', file); formData.append('file', file);
const res = await request.post('/shop/dealer/poster/upload/background', formData, { const res = await request.post(
headers: { '/shop/dealer/poster/upload/background',
'Content-Type': 'multipart/form-data' formData,
{
headers: {
'Content-Type': 'multipart/form-data'
}
} }
}); );
if (res.data.code === 0) { if (res.data.code === 0) {
return res.data.data; return res.data.data;

View File

@@ -79,7 +79,9 @@ export async function removeShopDealerRecord(id?: number) {
/** /**
* 批量删除客户跟进情况 * 批量删除客户跟进情况
*/ */
export async function removeBatchShopDealerRecord(data: (number | undefined)[]) { export async function removeBatchShopDealerRecord(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/shop/shop-dealer-record/batch', MODULES_API_URL + '/shop/shop-dealer-record/batch',
{ {

View File

@@ -78,7 +78,9 @@ export async function removeShopDealerReferee(id?: number) {
/** /**
* 批量删除分销商推荐关系表 * 批量删除分销商推荐关系表
*/ */
export async function removeBatchShopDealerReferee(data: (number | undefined)[]) { export async function removeBatchShopDealerReferee(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/shop/shop-dealer-referee/batch', '/shop/shop-dealer-referee/batch',
{ {

View File

@@ -45,4 +45,4 @@ export interface ShopDealerRefereeParam extends PageParam {
startTime?: string; startTime?: string;
endTime?: string; endTime?: string;
keywords?: string; keywords?: string;
} }

View File

@@ -78,7 +78,9 @@ export async function removeShopDealerSetting(id?: number) {
/** /**
* 批量删除分销商设置表 * 批量删除分销商设置表
*/ */
export async function removeBatchShopDealerSetting(data: (number | undefined)[]) { export async function removeBatchShopDealerSetting(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/shop/shop-dealer-setting/batch', '/shop/shop-dealer-setting/batch',
{ {

View File

@@ -129,12 +129,9 @@ export async function importShopDealerUsers(file: File) {
* 导出分销商用户 * 导出分销商用户
*/ */
export async function exportShopDealerUsers(params?: ShopDealerUserParam) { export async function exportShopDealerUsers(params?: ShopDealerUserParam) {
const res = await request.get<Blob>( const res = await request.get<Blob>('/shop/shop-dealer-user/export', {
'/shop/shop-dealer-user/export', params,
{ responseType: 'blob'
params, });
responseType: 'blob'
}
);
return res.data; return res.data;
} }

View File

@@ -6,8 +6,12 @@ import type { PageParam } from '@/api';
export interface ShopDealerUser { export interface ShopDealerUser {
// 主键ID // 主键ID
id?: number; id?: number;
// 类型 0经销商 1企业 2集团
type?: number;
// 自增ID // 自增ID
userId?: number; userId?: number;
// 头像
avatar?: string;
// 姓名 // 姓名
realName?: string; realName?: string;
// 手机号 // 手机号

View File

@@ -78,7 +78,9 @@ export async function removeShopDealerWithdraw(id?: number) {
/** /**
* 批量删除分销商提现明细表 * 批量删除分销商提现明细表
*/ */
export async function removeBatchShopDealerWithdraw(data: (number | undefined)[]) { export async function removeBatchShopDealerWithdraw(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/shop/shop-dealer-withdraw/batch', '/shop/shop-dealer-withdraw/batch',
{ {

View File

@@ -52,10 +52,7 @@ export async function addShopExpress(data: ShopExpress) {
* 修改物流公司 * 修改物流公司
*/ */
export async function updateShopExpress(data: ShopExpress) { export async function updateShopExpress(data: ShopExpress) {
const res = await request.put<ApiResult<unknown>>( const res = await request.put<ApiResult<unknown>>('/shop/shop-express', data);
'/shop/shop-express',
data
);
if (res.data.code === 0) { if (res.data.code === 0) {
return res.data.message; return res.data.message;
} }

View File

@@ -5,7 +5,9 @@ import type { ShopExpressTemplate, ShopExpressTemplateParam } from './model';
/** /**
* 分页查询运费模板 * 分页查询运费模板
*/ */
export async function pageShopExpressTemplate(params: ShopExpressTemplateParam) { export async function pageShopExpressTemplate(
params: ShopExpressTemplateParam
) {
const res = await request.get<ApiResult<PageResult<ShopExpressTemplate>>>( const res = await request.get<ApiResult<PageResult<ShopExpressTemplate>>>(
'/shop/shop-express-template/page', '/shop/shop-express-template/page',
{ {
@@ -21,7 +23,9 @@ export async function pageShopExpressTemplate(params: ShopExpressTemplateParam)
/** /**
* 查询运费模板列表 * 查询运费模板列表
*/ */
export async function listShopExpressTemplate(params?: ShopExpressTemplateParam) { export async function listShopExpressTemplate(
params?: ShopExpressTemplateParam
) {
const res = await request.get<ApiResult<ShopExpressTemplate[]>>( const res = await request.get<ApiResult<ShopExpressTemplate[]>>(
'/shop/shop-express-template', '/shop/shop-express-template',
{ {
@@ -78,7 +82,9 @@ export async function removeShopExpressTemplate(id?: number) {
/** /**
* 批量删除运费模板 * 批量删除运费模板
*/ */
export async function removeBatchShopExpressTemplate(data: (number | undefined)[]) { export async function removeBatchShopExpressTemplate(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/shop/shop-express-template/batch', '/shop/shop-express-template/batch',
{ {

View File

@@ -1,17 +1,21 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type { ShopExpressTemplateDetail, ShopExpressTemplateDetailParam } from './model'; import type {
ShopExpressTemplateDetail,
ShopExpressTemplateDetailParam
} from './model';
/** /**
* 分页查询运费模板 * 分页查询运费模板
*/ */
export async function pageShopExpressTemplateDetail(params: ShopExpressTemplateDetailParam) { export async function pageShopExpressTemplateDetail(
const res = await request.get<ApiResult<PageResult<ShopExpressTemplateDetail>>>( params: ShopExpressTemplateDetailParam
'/shop/shop-express-template-detail/page', ) {
{ const res = await request.get<
params ApiResult<PageResult<ShopExpressTemplateDetail>>
} >('/shop/shop-express-template-detail/page', {
); params
});
if (res.data.code === 0) { if (res.data.code === 0) {
return res.data.data; return res.data.data;
} }
@@ -21,7 +25,9 @@ export async function pageShopExpressTemplateDetail(params: ShopExpressTemplateD
/** /**
* 查询运费模板列表 * 查询运费模板列表
*/ */
export async function listShopExpressTemplateDetail(params?: ShopExpressTemplateDetailParam) { export async function listShopExpressTemplateDetail(
params?: ShopExpressTemplateDetailParam
) {
const res = await request.get<ApiResult<ShopExpressTemplateDetail[]>>( const res = await request.get<ApiResult<ShopExpressTemplateDetail[]>>(
'/shop/shop-express-template-detail', '/shop/shop-express-template-detail',
{ {
@@ -37,7 +43,9 @@ export async function listShopExpressTemplateDetail(params?: ShopExpressTemplate
/** /**
* 添加运费模板 * 添加运费模板
*/ */
export async function addShopExpressTemplateDetail(data: ShopExpressTemplateDetail) { export async function addShopExpressTemplateDetail(
data: ShopExpressTemplateDetail
) {
const res = await request.post<ApiResult<unknown>>( const res = await request.post<ApiResult<unknown>>(
'/shop/shop-express-template-detail', '/shop/shop-express-template-detail',
data data
@@ -51,7 +59,9 @@ export async function addShopExpressTemplateDetail(data: ShopExpressTemplateDeta
/** /**
* 修改运费模板 * 修改运费模板
*/ */
export async function updateShopExpressTemplateDetail(data: ShopExpressTemplateDetail) { export async function updateShopExpressTemplateDetail(
data: ShopExpressTemplateDetail
) {
const res = await request.put<ApiResult<unknown>>( const res = await request.put<ApiResult<unknown>>(
'/shop/shop-express-template-detail', '/shop/shop-express-template-detail',
data data
@@ -78,7 +88,9 @@ export async function removeShopExpressTemplateDetail(id?: number) {
/** /**
* 批量删除运费模板 * 批量删除运费模板
*/ */
export async function removeBatchShopExpressTemplateDetail(data: (number | undefined)[]) { export async function removeBatchShopExpressTemplateDetail(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
'/shop/shop-express-template-detail/batch', '/shop/shop-express-template-detail/batch',
{ {

View File

@@ -4,15 +4,15 @@ import type { PageParam } from '@/api';
* 运费模板 * 运费模板
*/ */
export interface ShopExpressTemplateDetail { export interface ShopExpressTemplateDetail {
// //
id?: number; id?: number;
// //
templateId?: number; templateId?: number;
// 0按件 // 0按件
type?: string; type?: string;
// //
provinceId?: number; provinceId?: number;
// //
cityId?: number; cityId?: number;
// 首件数量/重量 // 首件数量/重量
firstNum?: string; firstNum?: string;
@@ -32,7 +32,7 @@ export interface ShopExpressTemplateDetail {
createTime?: string; createTime?: string;
// 修改时间 // 修改时间
updateTime?: string; updateTime?: string;
// //
sortNumber?: number; sortNumber?: number;
} }

View File

@@ -94,7 +94,7 @@ export interface ShopGoods {
supplierMerchantId?: number; supplierMerchantId?: number;
supplierName?: string; supplierName?: string;
// 状态0未上架1上架 // 状态0未上架1上架
isShow?: number; isShow?: boolean;
// 状态, 0上架 1待上架 2待审核 3审核不通过 // 状态, 0上架 1待上架 2待审核 3审核不通过
status?: number; status?: number;
// 备注 // 备注
@@ -124,6 +124,19 @@ export interface ShopGoods {
canUseDate?: string; canUseDate?: string;
ensureTag?: string; ensureTag?: string;
expiredDay?: number; expiredDay?: number;
// --- 分销/佣金(新字段,后端保持 snake_case---
// 是否开启分销佣金0关闭 1开启
isOpenCommission?: number;
// 分佣类型10固定金额 20百分比
commissionType?: number;
// 一级/二级/三级分销佣金(单位以服务端为准)
firstMoney?: number;
secondMoney?: number;
thirdMoney?: number;
// 一级/二级分红(单位以服务端为准)
firstDividend?: number;
secondDividend?: number;
} }
export interface BathSet { export interface BathSet {

View File

@@ -79,7 +79,9 @@ export async function removeShopGoodsCategory(id?: number) {
/** /**
* 批量删除商品分类 * 批量删除商品分类
*/ */
export async function removeBatchShopGoodsCategory(data: (number | undefined)[]) { export async function removeBatchShopGoodsCategory(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/shop/shop-goods-category/batch', MODULES_API_URL + '/shop/shop-goods-category/batch',
{ {

View File

@@ -1,12 +1,17 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import { MODULES_API_URL } from '@/config/setting'; import { MODULES_API_URL } from '@/config/setting';
import { ShopGoodsRoleCommission, ShopGoodsRoleCommissionParam } from '@/api/shop/shopGoodsRoleCommission/model'; import {
ShopGoodsRoleCommission,
ShopGoodsRoleCommissionParam
} from '@/api/shop/shopGoodsRoleCommission/model';
/** /**
* 分页查询商品绑定角色的分润金额 * 分页查询商品绑定角色的分润金额
*/ */
export async function pageShopGoodsRoleCommission(params: ShopGoodsRoleCommissionParam) { export async function pageShopGoodsRoleCommission(
params: ShopGoodsRoleCommissionParam
) {
const res = await request.get<ApiResult<PageResult<ShopGoodsRoleCommission>>>( const res = await request.get<ApiResult<PageResult<ShopGoodsRoleCommission>>>(
MODULES_API_URL + '/shop/shop-goods-role-commission/page', MODULES_API_URL + '/shop/shop-goods-role-commission/page',
{ {
@@ -22,7 +27,9 @@ export async function pageShopGoodsRoleCommission(params: ShopGoodsRoleCommissio
/** /**
* 查询商品绑定角色的分润金额列表 * 查询商品绑定角色的分润金额列表
*/ */
export async function listShopGoodsRoleCommission(params?: ShopGoodsRoleCommissionParam) { export async function listShopGoodsRoleCommission(
params?: ShopGoodsRoleCommissionParam
) {
const res = await request.get<ApiResult<ShopGoodsRoleCommission[]>>( const res = await request.get<ApiResult<ShopGoodsRoleCommission[]>>(
MODULES_API_URL + '/shop/shop-goods-role-commission', MODULES_API_URL + '/shop/shop-goods-role-commission',
{ {
@@ -38,7 +45,9 @@ export async function listShopGoodsRoleCommission(params?: ShopGoodsRoleCommissi
/** /**
* 添加商品绑定角色的分润金额 * 添加商品绑定角色的分润金额
*/ */
export async function addShopGoodsRoleCommission(data: ShopGoodsRoleCommission) { export async function addShopGoodsRoleCommission(
data: ShopGoodsRoleCommission
) {
const res = await request.post<ApiResult<unknown>>( const res = await request.post<ApiResult<unknown>>(
MODULES_API_URL + '/shop/shop-goods-role-commission', MODULES_API_URL + '/shop/shop-goods-role-commission',
data data
@@ -52,7 +61,9 @@ export async function addShopGoodsRoleCommission(data: ShopGoodsRoleCommission)
/** /**
* 修改商品绑定角色的分润金额 * 修改商品绑定角色的分润金额
*/ */
export async function updateShopGoodsRoleCommission(data: ShopGoodsRoleCommission) { export async function updateShopGoodsRoleCommission(
data: ShopGoodsRoleCommission
) {
const res = await request.put<ApiResult<unknown>>( const res = await request.put<ApiResult<unknown>>(
MODULES_API_URL + '/shop/shop-goods-role-commission', MODULES_API_URL + '/shop/shop-goods-role-commission',
data data
@@ -79,7 +90,9 @@ export async function removeShopGoodsRoleCommission(id?: number) {
/** /**
* 批量删除商品绑定角色的分润金额 * 批量删除商品绑定角色的分润金额
*/ */
export async function removeBatchShopGoodsRoleCommission(data: (number | undefined)[]) { export async function removeBatchShopGoodsRoleCommission(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/shop/shop-goods-role-commission/batch', MODULES_API_URL + '/shop/shop-goods-role-commission/batch',
{ {

View File

@@ -30,9 +30,9 @@ export interface ShopMerchant {
merchantCategoryTitle?: string; merchantCategoryTitle?: string;
// 经纬度 // 经纬度
lngAndLat?: string; lngAndLat?: string;
// //
lng?: string; lng?: string;
// //
lat?: string; lat?: string;
// 所在省份 // 所在省份
province?: string; province?: string;
@@ -62,9 +62,9 @@ export interface ShopMerchant {
recommend?: number; recommend?: number;
// 是否营业 // 是否营业
isOn?: number; isOn?: number;
// //
startTime?: string; startTime?: string;
// //
endTime?: string; endTime?: string;
// 是否需要审核 // 是否需要审核
goodsReview?: number; goodsReview?: number;

View File

@@ -6,7 +6,9 @@ import { MODULES_API_URL } from '@/config/setting';
/** /**
* 分页查询商户账号 * 分页查询商户账号
*/ */
export async function pageShopMerchantAccount(params: ShopMerchantAccountParam) { export async function pageShopMerchantAccount(
params: ShopMerchantAccountParam
) {
const res = await request.get<ApiResult<PageResult<ShopMerchantAccount>>>( const res = await request.get<ApiResult<PageResult<ShopMerchantAccount>>>(
MODULES_API_URL + '/shop/shop-merchant-account/page', MODULES_API_URL + '/shop/shop-merchant-account/page',
{ {
@@ -22,7 +24,9 @@ export async function pageShopMerchantAccount(params: ShopMerchantAccountParam)
/** /**
* 查询商户账号列表 * 查询商户账号列表
*/ */
export async function listShopMerchantAccount(params?: ShopMerchantAccountParam) { export async function listShopMerchantAccount(
params?: ShopMerchantAccountParam
) {
const res = await request.get<ApiResult<ShopMerchantAccount[]>>( const res = await request.get<ApiResult<ShopMerchantAccount[]>>(
MODULES_API_URL + '/shop/shop-merchant-account', MODULES_API_URL + '/shop/shop-merchant-account',
{ {
@@ -79,7 +83,9 @@ export async function removeShopMerchantAccount(id?: number) {
/** /**
* 批量删除商户账号 * 批量删除商户账号
*/ */
export async function removeBatchShopMerchantAccount(data: (number | undefined)[]) { export async function removeBatchShopMerchantAccount(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/shop/shop-merchant-account/batch', MODULES_API_URL + '/shop/shop-merchant-account/batch',
{ {

View File

@@ -71,4 +71,4 @@ export interface ShopMerchantApplyParam extends PageParam {
shopType?: string; shopType?: string;
phone?: string; phone?: string;
keywords?: string; keywords?: string;
} }

View File

@@ -1,5 +1,5 @@
import type { PageParam } from '@/api'; import type { PageParam } from '@/api';
import {OrderGoods} from "@/api/system/orderGoods/model"; import { OrderGoods } from '@/api/system/orderGoods/model';
/** /**
* 订单 * 订单
@@ -136,9 +136,9 @@ export interface ShopOrder {
// 系统版本号 0当前版本 value=其他版本 // 系统版本号 0当前版本 value=其他版本
version?: number; version?: number;
// 买家备注 // 买家备注
buyerRemarks: undefined, buyerRemarks: undefined;
// 商家备注 // 商家备注
merchantRemarks: undefined, merchantRemarks: undefined;
// 用户id // 用户id
userId?: number; userId?: number;
// 备注 // 备注

View File

@@ -136,7 +136,7 @@ export interface ShopUser {
title?: string; title?: string;
// 安装的产品ID // 安装的产品ID
templateId?: number; templateId?: number;
// 插件安装状态(仅对超超管判断) 0未安装 1已安装 // 插件安装状态(仅对超超管判断) 0未安装 1已安装
installed?: number; installed?: number;
// 特长 // 特长
speciality?: string; speciality?: string;

View File

@@ -22,9 +22,9 @@ export interface ShopUserAddress {
address?: string; address?: string;
// 收货地址 // 收货地址
fullAddress?: string; fullAddress?: string;
// //
lat?: string; lat?: string;
// //
lng?: string; lng?: string;
// 1先生 2女士 // 1先生 2女士
gender?: number; gender?: number;

View File

@@ -79,7 +79,9 @@ export async function removeChatConversation(id?: number) {
/** /**
* 批量删除聊天消息表 * 批量删除聊天消息表
*/ */
export async function removeBatchChatConversation(data: (number | undefined)[]) { export async function removeBatchChatConversation(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
MODULES_API_URL + '/shop/chat-conversation/batch', MODULES_API_URL + '/shop/chat-conversation/batch',
{ {

View File

@@ -1,5 +1,5 @@
import type { PageParam } from '@/api'; import type { PageParam } from '@/api';
import type {Menu} from "@/api/system/menu/model"; import type { Menu } from '@/api/system/menu/model';
/** /**
* 企业信息 * 企业信息

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type {ApiResult, PageResult} from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type {CompanyComment, CompanyCommentParam} from './model'; import type { CompanyComment, CompanyCommentParam } from './model';
import {SERVER_API_URL} from '@/config/setting'; import { SERVER_API_URL } from '@/config/setting';
/** /**
* 分页查询应用评论 * 分页查询应用评论

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type { CompanyContent, CompanyContentParam } from './model'; import type { CompanyContent, CompanyContentParam } from './model';
import {SERVER_API_URL} from '@/config/setting'; import { SERVER_API_URL } from '@/config/setting';
/** /**
* 分页查询应用详情 * 分页查询应用详情
@@ -49,7 +49,6 @@ export async function getByCompanyId(id: number) {
return Promise.reject(new Error(res.data.message)); return Promise.reject(new Error(res.data.message));
} }
/** /**
* 添加应用详情 * 添加应用详情
*/ */

View File

@@ -4,7 +4,7 @@ import type { PageParam } from '@/api';
* 应用详情 * 应用详情
*/ */
export interface CompanyContent { export interface CompanyContent {
// //
id?: number; id?: number;
// 企业ID // 企业ID
companyId?: number; companyId?: number;

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type { CompanyParameter, CompanyParameterParam } from './model'; import type { CompanyParameter, CompanyParameterParam } from './model';
import {SERVER_API_URL} from '@/config/setting'; import { SERVER_API_URL } from '@/config/setting';
/** /**
* 分页查询应用参数 * 分页查询应用参数
@@ -79,7 +79,9 @@ export async function removeCompanyParameter(id?: number) {
/** /**
* 批量删除应用参数 * 批量删除应用参数
*/ */
export async function removeBatchCompanyParameter(data: (number | undefined)[]) { export async function removeBatchCompanyParameter(
data: (number | undefined)[]
) {
const res = await request.delete<ApiResult<unknown>>( const res = await request.delete<ApiResult<unknown>>(
SERVER_API_URL + '/system/company-parameter/batch', SERVER_API_URL + '/system/company-parameter/batch',
{ {

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type { CompanyUrl, CompanyUrlParam } from './model'; import type { CompanyUrl, CompanyUrlParam } from './model';
import {SERVER_API_URL} from '@/config/setting'; import { SERVER_API_URL } from '@/config/setting';
/** /**
* 分页查询应用域名 * 分页查询应用域名

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult } from '@/api'; import type { ApiResult } from '@/api';
import type { Menu, MenuParam } from './model'; import type { Menu, MenuParam } from './model';
import {SERVER_API_URL} from '@/config/setting'; import { SERVER_API_URL } from '@/config/setting';
/** /**
* 查询菜单列表 * 查询菜单列表
@@ -89,7 +89,6 @@ export async function deleteParentMenu(id?: number) {
return Promise.reject(new Error(res.data.message)); return Promise.reject(new Error(res.data.message));
} }
/** /**
* 安装应用 * 安装应用
*/ */

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type { Order, OrderParam } from './model'; import type { Order, OrderParam } from './model';
import {SERVER_API_URL} from '@/config/setting'; import { SERVER_API_URL } from '@/config/setting';
/** /**
* 分页查询订单 * 分页查询订单

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type { OrderGoods, OrderGoodsParam } from './model'; import type { OrderGoods, OrderGoodsParam } from './model';
import {SERVER_API_URL} from '@/config/setting'; import { SERVER_API_URL } from '@/config/setting';
/** /**
* 分页查询订单商品 * 分页查询订单商品

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type { Parameter, ParameterParam } from './model'; import type { Parameter, ParameterParam } from './model';
import {SERVER_API_URL} from '@/config/setting'; import { SERVER_API_URL } from '@/config/setting';
/** /**
* 分页查询应用参数 * 分页查询应用参数

View File

@@ -2,7 +2,7 @@ import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type { Payment, PaymentParam } from './model'; import type { Payment, PaymentParam } from './model';
import { SERVER_API_URL } from '@/config/setting'; import { SERVER_API_URL } from '@/config/setting';
import type { Order } from '@/api/shop/order/model'; import type { ShopOrder } from '@/api/shop/shopOrder/model';
/** /**
* 分页查询支付方式 * 分页查询支付方式
@@ -50,6 +50,34 @@ export async function addPayment(data: Payment) {
return Promise.reject(new Error(res.data.message)); return Promise.reject(new Error(res.data.message));
} }
/**
* 统一下单订单接口
*/
export async function create(data: Payment) {
const res = await request.post<ApiResult<unknown>>(
SERVER_API_URL + '/system/payment/create',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/**
* 统一下单订单接口(包含订单信息)
*/
export async function createWithOrder(data: Payment) {
const res = await request.post<ApiResult<unknown>>(
SERVER_API_URL + '/system/payment/create-with-order',
data
);
if (res.data.code === 0) {
return res.data.message;
}
return Promise.reject(new Error(res.data.message));
}
/** /**
* 修改支付方式 * 修改支付方式
*/ */
@@ -109,7 +137,7 @@ export async function getPayment(id: number) {
/** /**
* 生成支付二维码(微信native) * 生成支付二维码(微信native)
*/ */
export async function getNativeCode(data: Order) { export async function getNativeCode(data: ShopOrder) {
const res = await request.post<ApiResult<unknown>>( const res = await request.post<ApiResult<unknown>>(
SERVER_API_URL + '/system/wx-native-pay/codeUrl', SERVER_API_URL + '/system/wx-native-pay/codeUrl',
data data

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type { Url, UrlParam } from './model'; import type { Url, UrlParam } from './model';
import {SERVER_API_URL} from '@/config/setting'; import { SERVER_API_URL } from '@/config/setting';
/** /**
* 分页查询应用域名 * 分页查询应用域名

View File

@@ -270,7 +270,7 @@ export async function countUserBalance(params?: UserParam) {
* 选择管理员账号登录 * 选择管理员账号登录
* @param params * @param params
*/ */
export async function listAdminsByPhoneAll(params?: UserParam){ export async function listAdminsByPhoneAll(params?: UserParam) {
const res = await request.get<ApiResult<User[]>>( const res = await request.get<ApiResult<User[]>>(
SERVER_API_URL + '/system/user/listAdminsByPhoneAll', SERVER_API_URL + '/system/user/listAdminsByPhoneAll',
{ {
@@ -287,12 +287,9 @@ export async function listAdminsByPhoneAll(params?: UserParam){
* 导出用户列表 * 导出用户列表
*/ */
export async function exportUsers(params?: UserParam) { export async function exportUsers(params?: UserParam) {
const res = await request.get<Blob>( const res = await request.get<Blob>(SERVER_API_URL + '/system/user/export', {
SERVER_API_URL + '/system/user/export', params,
{ responseType: 'blob'
params, });
responseType: 'blob'
}
);
return res.data; return res.data;
} }

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type {ApiResult, PageResult} from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type {UserOauth, UserOauthParam} from './model'; import type { UserOauth, UserOauthParam } from './model';
import {SERVER_API_URL} from '@/config/setting'; import { SERVER_API_URL } from '@/config/setting';
/** /**
* 分页查询第三方用户信息表 * 分页查询第三方用户信息表

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request'; import request from '@/utils/request';
import type { ApiResult, PageResult } from '@/api'; import type { ApiResult, PageResult } from '@/api';
import type { UserVerify, UserVerifyParam } from './model'; import type { UserVerify, UserVerifyParam } from './model';
import {SERVER_API_URL} from '@/config/setting'; import { SERVER_API_URL } from '@/config/setting';
/** /**
* 分页查询实名认证 * 分页查询实名认证

View File

@@ -5,7 +5,7 @@ import type {
WebsiteField, WebsiteField,
WebsiteFieldParam WebsiteFieldParam
} from '@/api/system/website/field/model'; } from '@/api/system/website/field/model';
import {SERVER_API_URL, TEMPLATE_ID} from '@/config/setting'; import { SERVER_API_URL, TEMPLATE_ID } from '@/config/setting';
/** /**
* 分页查询项目参数 * 分页查询项目参数

View File

@@ -45,7 +45,7 @@
// 字典数据 // 字典数据
const data = getDictionaryOptions(props.dictCode); const data = getDictionaryOptions(props.dictCode);
const content = ref<any>() const content = ref<any>();
/* 更新选中数据 */ /* 更新选中数据 */
const updateValue = () => { const updateValue = () => {

View File

@@ -15,8 +15,8 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {ref} from 'vue'; import { ref } from 'vue';
import {listDictData} from "@/api/system/dict-data"; import { listDictData } from '@/api/system/dict-data';
const data = ref<any[]>([]); const data = ref<any[]>([]);
@@ -43,8 +43,8 @@
); );
// 字典数据 // 字典数据
listDictData({dictCode: props.dictCode}).then(res => { listDictData({ dictCode: props.dictCode }).then((res) => {
data.value = res.map(d => { data.value = res.map((d) => {
return { return {
dictDataId: d.dictDataId, dictDataId: d.dictDataId,
dictDataCode: d.dictDataCode, dictDataCode: d.dictDataCode,
@@ -61,7 +61,10 @@
const updateValue = (value: string) => { const updateValue = (value: string) => {
emit('update:value', value); emit('update:value', value);
emit('index', Number(props.index)); emit('index', Number(props.index));
emit('done', data.value.find(d => d.value === value)) emit(
'done',
data.value.find((d) => d.value === value)
);
}; };
/* 失去焦点 */ /* 失去焦点 */

View File

@@ -10,16 +10,14 @@
<div class="flex p-3 flex-col justify-center items-center"> <div class="flex p-3 flex-col justify-center items-center">
<ele-qr-code-svg :value="`${data}`" :size="260" /> <ele-qr-code-svg :value="`${data}`" :size="260" />
<span class="text-gray-400 py-3" @click="copyText(data)">{{ data }}</span> <span class="text-gray-400 py-3" @click="copyText(data)">{{ data }}</span>
<span class="text-gray-500 text-lg"> <span class="text-gray-500 text-lg"> 使用手机扫一扫 </span>
使用手机扫一扫
</span>
</div> </div>
</a-modal> </a-modal>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {CmsArticle} from "@/api/cms/cmsArticle/model"; import { CmsArticle } from '@/api/cms/cmsArticle/model';
import {copyText} from "@/utils/common"; import { copyText } from '@/utils/common';
withDefaults( withDefaults(
defineProps<{ defineProps<{

View File

@@ -3,15 +3,15 @@
<a-card title="二维码登录演示" :bordered="false"> <a-card title="二维码登录演示" :bordered="false">
<div class="demo-content"> <div class="demo-content">
<!-- 二维码登录组件 --> <!-- 二维码登录组件 -->
<QrLogin <QrLogin
@loginSuccess="handleLoginSuccess" @loginSuccess="handleLoginSuccess"
@loginError="handleLoginError" @loginError="handleLoginError"
/> />
<!-- 演示控制面板 --> <!-- 演示控制面板 -->
<div class="demo-controls"> <div class="demo-controls">
<h4>演示控制</h4> <h4>演示控制</h4>
<a-space direction="vertical" style="width: 100%;"> <a-space direction="vertical" style="width: 100%">
<a-button @click="simulateScanned" type="primary" ghost> <a-button @click="simulateScanned" type="primary" ghost>
模拟扫码 模拟扫码
</a-button> </a-button>
@@ -21,12 +21,10 @@
<a-button @click="simulateExpired" type="default"> <a-button @click="simulateExpired" type="default">
模拟过期 模拟过期
</a-button> </a-button>
<a-button @click="simulateError" danger> <a-button @click="simulateError" danger> 模拟错误 </a-button>
模拟错误
</a-button>
</a-space> </a-space>
</div> </div>
<!-- 状态显示 --> <!-- 状态显示 -->
<div class="demo-status"> <div class="demo-status">
<h4>当前状态</h4> <h4>当前状态</h4>
@@ -46,12 +44,12 @@
</div> </div>
</div> </div>
</a-card> </a-card>
<!-- 日志显示 --> <!-- 日志显示 -->
<a-card title="操作日志" :bordered="false" style="margin-top: 16px;"> <a-card title="操作日志" :bordered="false" style="margin-top: 16px">
<div class="demo-logs"> <div class="demo-logs">
<div <div
v-for="(log, index) in logs" v-for="(log, index) in logs"
:key="index" :key="index"
class="log-item" class="log-item"
:class="log.type" :class="log.type"
@@ -65,194 +63,197 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, onMounted } from 'vue'; import { ref, onMounted } from 'vue';
import { message } from 'ant-design-vue'; import { message } from 'ant-design-vue';
import QrLogin from './index.vue'; import QrLogin from './index.vue';
// 响应式数据 // 响应式数据
const currentQrKey = ref<string>(''); const currentQrKey = ref<string>('');
const currentStatus = ref<string>('loading'); const currentStatus = ref<string>('loading');
const remainingTime = ref<number>(300); const remainingTime = ref<number>(300);
const logs = ref<Array<{time: string, message: string, type: string}>>([]); const logs = ref<Array<{ time: string; message: string; type: string }>>([]);
// 添加日志 // 添加日志
const addLog = (message: string, type: 'info' | 'success' | 'error' | 'warning' = 'info') => { const addLog = (
const now = new Date(); message: string,
const time = now.toLocaleTimeString(); type: 'info' | 'success' | 'error' | 'warning' = 'info'
logs.value.unshift({ time, message, type }); ) => {
const now = new Date();
// 限制日志数量 const time = now.toLocaleTimeString();
if (logs.value.length > 50) { logs.value.unshift({ time, message, type });
logs.value = logs.value.slice(0, 50);
}
};
// 获取状态颜色 // 限制日志数量
const getStatusColor = (status: string) => { if (logs.value.length > 50) {
const colors = { logs.value = logs.value.slice(0, 50);
loading: 'blue', }
active: 'green',
scanned: 'orange',
expired: 'red',
error: 'red'
}; };
return colors[status] || 'default';
};
// 获取状态文本 // 获取状态颜色
const getStatusText = (status: string) => { const getStatusColor = (status: string) => {
const texts = { const colors = {
loading: '正在生成', loading: 'blue',
active: '等待扫码', active: 'green',
scanned: '已扫码', scanned: 'orange',
expired: '已过期', expired: 'red',
error: '生成失败' error: 'red'
};
return colors[status] || 'default';
}; };
return texts[status] || status;
};
// 处理登录成功 // 获取状态文本
const handleLoginSuccess = (token: string) => { const getStatusText = (status: string) => {
addLog(`登录成功获得token: ${token.substring(0, 20)}...`, 'success'); const texts = {
message.success('二维码登录成功!'); loading: '正在生成',
}; active: '等待扫码',
scanned: '已扫码',
expired: '已过期',
error: '生成失败'
};
return texts[status] || status;
};
// 处理登录错误 // 处理登录成功
const handleLoginError = (error: string) => { const handleLoginSuccess = (token: string) => {
addLog(`登录失败: ${error}`, 'error'); addLog(`登录成功获得token: ${token.substring(0, 20)}...`, 'success');
message.error(`登录失败: ${error}`); message.success('二维码登录成功!');
}; };
// 模拟扫码 // 处理登录错误
const simulateScanned = () => { const handleLoginError = (error: string) => {
currentStatus.value = 'scanned'; addLog(`登录失败: ${error}`, 'error');
addLog('模拟用户扫码', 'info'); message.error(`登录失败: ${error}`);
message.info('模拟扫码成功'); };
};
// 模拟确认登录 // 模拟扫码
const simulateConfirmed = () => { const simulateScanned = () => {
const mockToken = 'mock_token_' + Date.now(); currentStatus.value = 'scanned';
handleLoginSuccess(mockToken); addLog('模拟用户扫码', 'info');
}; message.info('模拟扫码成功');
};
// 模拟过期 // 模拟确认登录
const simulateExpired = () => { const simulateConfirmed = () => {
currentStatus.value = 'expired'; const mockToken = 'mock_token_' + Date.now();
remainingTime.value = 0; handleLoginSuccess(mockToken);
addLog('模拟二维码过期', 'warning'); };
message.warning('二维码已过期');
};
// 模拟错误 // 模拟过期
const simulateError = () => { const simulateExpired = () => {
currentStatus.value = 'error'; currentStatus.value = 'expired';
addLog('模拟生成二维码失败', 'error'); remainingTime.value = 0;
handleLoginError('网络连接失败'); addLog('模拟二维码过期', 'warning');
}; message.warning('二维码已过期');
};
// 组件挂载 // 模拟错误
onMounted(() => { const simulateError = () => {
addLog('二维码登录演示组件已加载', 'info'); currentStatus.value = 'error';
addLog('模拟生成二维码失败', 'error');
// 模拟生成二维码 handleLoginError('网络连接失败');
setTimeout(() => { };
currentQrKey.value = 'demo_qr_' + Date.now();
currentStatus.value = 'active'; // 组件挂载
addLog(`生成二维码成功Key: ${currentQrKey.value}`, 'success'); onMounted(() => {
addLog('二维码登录演示组件已加载', 'info');
// 开始倒计时
const timer = setInterval(() => { // 模拟生成二维码
if (remainingTime.value > 0) { setTimeout(() => {
remainingTime.value--; currentQrKey.value = 'demo_qr_' + Date.now();
} else { currentStatus.value = 'active';
clearInterval(timer); addLog(`生成二维码成功Key: ${currentQrKey.value}`, 'success');
if (currentStatus.value === 'active') {
simulateExpired(); // 开始倒计时
const timer = setInterval(() => {
if (remainingTime.value > 0) {
remainingTime.value--;
} else {
clearInterval(timer);
if (currentStatus.value === 'active') {
simulateExpired();
}
} }
} }, 1000);
}, 1000); }, 1000);
}, 1000); });
});
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.qr-login-demo { .qr-login-demo {
max-width: 800px; max-width: 800px;
margin: 0 auto; margin: 0 auto;
padding: 20px; padding: 20px;
} }
.demo-content {
display: grid;
grid-template-columns: 1fr 200px 200px;
gap: 24px;
align-items: start;
}
.demo-controls {
h4 {
margin-bottom: 12px;
color: #333;
}
}
.demo-status {
h4 {
margin-bottom: 12px;
color: #333;
}
}
.demo-logs {
max-height: 300px;
overflow-y: auto;
background: #f8f9fa;
border-radius: 4px;
padding: 12px;
}
.log-item {
display: flex;
margin-bottom: 8px;
font-size: 12px;
line-height: 1.4;
&:last-child {
margin-bottom: 0;
}
.log-time {
color: #999;
margin-right: 8px;
min-width: 80px;
}
.log-message {
flex: 1;
}
&.info .log-message {
color: #333;
}
&.success .log-message {
color: #52c41a;
}
&.error .log-message {
color: #ff4d4f;
}
&.warning .log-message {
color: #faad14;
}
}
@media (max-width: 768px) {
.demo-content { .demo-content {
grid-template-columns: 1fr; display: grid;
gap: 16px; grid-template-columns: 1fr 200px 200px;
gap: 24px;
align-items: start;
}
.demo-controls {
h4 {
margin-bottom: 12px;
color: #333;
}
}
.demo-status {
h4 {
margin-bottom: 12px;
color: #333;
}
}
.demo-logs {
max-height: 300px;
overflow-y: auto;
background: #f8f9fa;
border-radius: 4px;
padding: 12px;
}
.log-item {
display: flex;
margin-bottom: 8px;
font-size: 12px;
line-height: 1.4;
&:last-child {
margin-bottom: 0;
}
.log-time {
color: #999;
margin-right: 8px;
min-width: 80px;
}
.log-message {
flex: 1;
}
&.info .log-message {
color: #333;
}
&.success .log-message {
color: #52c41a;
}
&.error .log-message {
color: #ff4d4f;
}
&.warning .log-message {
color: #faad14;
}
}
@media (max-width: 768px) {
.demo-content {
grid-template-columns: 1fr;
gap: 16px;
}
} }
}
</style> </style>

View File

@@ -7,22 +7,29 @@
<p class="loading-text">正在生成二维码...</p> <p class="loading-text">正在生成二维码...</p>
</div> </div>
<div v-else-if="qrCodeStatus === 'active'" class="qr-active cursor-pointer"> <div
<ele-qr-code-svg :value="qrCodeData" :size="200" @click="refreshQrCode" /> v-else-if="qrCodeStatus === 'active'"
class="qr-active cursor-pointer"
>
<ele-qr-code-svg
:value="qrCodeData"
:size="200"
@click="refreshQrCode"
/>
<p class="qr-tip">请使用手机APP或小程序扫码登录</p> <p class="qr-tip">请使用手机APP或小程序扫码登录</p>
<p class="qr-expire-tip">二维码有效期{{ formatTime(expireTime) }}</p> <p class="qr-expire-tip">二维码有效期{{ formatTime(expireTime) }}</p>
</div> </div>
<div v-else-if="qrCodeStatus === 'scanned'" class="qr-scanned"> <div v-else-if="qrCodeStatus === 'scanned'" class="qr-scanned">
<div class="scanned-icon"> <div class="scanned-icon">
<CheckCircleOutlined style="font-size: 48px; color: #52c41a;" /> <CheckCircleOutlined style="font-size: 48px; color: #52c41a" />
</div> </div>
<p class="scanned-text">扫码成功请在手机上确认登录</p> <p class="scanned-text">扫码成功请在手机上确认登录</p>
</div> </div>
<div v-else-if="qrCodeStatus === 'expired'" class="qr-expired"> <div v-else-if="qrCodeStatus === 'expired'" class="qr-expired">
<div class="expired-icon"> <div class="expired-icon">
<ClockCircleOutlined style="font-size: 48px; color: #ff4d4f;" /> <ClockCircleOutlined style="font-size: 48px; color: #ff4d4f" />
</div> </div>
<p class="expired-text">二维码已过期</p> <p class="expired-text">二维码已过期</p>
<a-button type="primary" @click="refreshQrCode">刷新二维码</a-button> <a-button type="primary" @click="refreshQrCode">刷新二维码</a-button>
@@ -30,7 +37,7 @@
<div v-else-if="qrCodeStatus === 'error'" class="qr-error"> <div v-else-if="qrCodeStatus === 'error'" class="qr-error">
<div class="error-icon"> <div class="error-icon">
<ExclamationCircleOutlined style="font-size: 48px; color: #ff4d4f;" /> <ExclamationCircleOutlined style="font-size: 48px; color: #ff4d4f" />
</div> </div>
<p class="error-text">{{ errorMessage || '生成二维码失败' }}</p> <p class="error-text">{{ errorMessage || '生成二维码失败' }}</p>
<a-button type="primary" @click="refreshQrCode">重新生成</a-button> <a-button type="primary" @click="refreshQrCode">重新生成</a-button>
@@ -47,266 +54,272 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, onMounted, onUnmounted, computed } from 'vue'; import { ref, onMounted, onUnmounted, computed } from 'vue';
import { message } from 'ant-design-vue'; import { message } from 'ant-design-vue';
import { import {
CheckCircleOutlined, CheckCircleOutlined,
ClockCircleOutlined, ClockCircleOutlined,
ExclamationCircleOutlined, ExclamationCircleOutlined,
ReloadOutlined ReloadOutlined
} from '@ant-design/icons-vue'; } from '@ant-design/icons-vue';
import {generateQrCode, checkQrCodeStatus, type QrCodeResponse, QrCodeStatusResponse} from '@/api/passport/qrLogin'; import {
generateQrCode,
checkQrCodeStatus,
type QrCodeResponse,
QrCodeStatusResponse
} from '@/api/passport/qrLogin';
// 定义组件事件 // 定义组件事件
const emit = defineEmits<{ const emit = defineEmits<{
(e: 'loginSuccess', data: QrCodeStatusResponse): void; (e: 'loginSuccess', data: QrCodeStatusResponse): void;
(e: 'loginError', error: string): void; (e: 'loginError', error: string): void;
}>(); }>();
// 响应式数据 // 响应式数据
const qrCodeData = ref<string>(''); const qrCodeData = ref<string>('');
const qrCodeToken = ref<string>(''); const qrCodeToken = ref<string>('');
const qrCodeStatus = ref<'loading' | 'active' | 'scanned' | 'expired' | 'error'>('loading'); const qrCodeStatus = ref<
const expireTime = ref<number>(0); 'loading' | 'active' | 'scanned' | 'expired' | 'error'
const errorMessage = ref<string>(''); >('loading');
const refreshing = ref<boolean>(false); const expireTime = ref<number>(0);
const errorMessage = ref<string>('');
const refreshing = ref<boolean>(false);
// 定时器 // 定时器
let statusCheckTimer: number | null = null; let statusCheckTimer: number | null = null;
let expireTimer: number | null = null; let expireTimer: number | null = null;
// 计算属性:格式化剩余时间 // 计算属性:格式化剩余时间
const formatTime = computed(() => { const formatTime = computed(() => {
return (seconds: number) => { return (seconds: number) => {
const minutes = Math.floor(seconds / 60); const minutes = Math.floor(seconds / 60);
const remainingSeconds = seconds % 60; const remainingSeconds = seconds % 60;
return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`; return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;
}; };
}); });
/** /**
* 生成二维码 * 生成二维码
*/ */
const generateQrCodeData = async () => { const generateQrCodeData = async () => {
try {
qrCodeStatus.value = 'loading';
const response: QrCodeResponse = await generateQrCode();
// 后端返回的qrCode是二维码内容我们需要构造完整的URL
const baseUrl = window.location.origin;
const qrCodeUrl = `${baseUrl}/qr-confirm?qrCodeKey=${response.token}`;
qrCodeData.value = qrCodeUrl;
qrCodeToken.value = response.token;
qrCodeStatus.value = 'active';
expireTime.value = response.expiresIn || 300; // 默认5分钟过期
// 开始检查二维码状态
startStatusCheck();
// 开始倒计时
startExpireCountdown();
} catch (error: any) {
qrCodeStatus.value = 'error';
errorMessage.value = error.message || '生成二维码失败';
message.error(errorMessage.value);
}
};
/**
* 开始检查二维码状态
*/
const startStatusCheck = () => {
if (statusCheckTimer) {
clearInterval(statusCheckTimer);
}
statusCheckTimer = window.setInterval(async () => {
try { try {
const status = await checkQrCodeStatus(qrCodeToken.value); qrCodeStatus.value = 'loading';
const response: QrCodeResponse = await generateQrCode();
switch (status.status) { // 后端返回的qrCode是二维码内容我们需要构造完整的URL
case 'scanned': const baseUrl = window.location.origin;
qrCodeStatus.value = 'scanned'; const qrCodeUrl = `${baseUrl}/qr-confirm?qrCodeKey=${response.token}`;
break;
case 'confirmed':
// 登录成功
if(status.tenantId){
localStorage.setItem('TenantId', `${status.tenantId}`)
}
qrCodeStatus.value = 'active';
stopAllTimers();
emit('loginSuccess', status);
break;
case 'expired':
qrCodeStatus.value = 'expired';
stopAllTimers();
break;
case 'pending':
// 继续等待
break;
}
// 更新剩余时间 qrCodeData.value = qrCodeUrl;
if (status.expiresIn !== undefined) { qrCodeToken.value = response.token;
expireTime.value = status.expiresIn; qrCodeStatus.value = 'active';
} expireTime.value = response.expiresIn || 300; // 默认5分钟过期
// 开始检查二维码状态
startStatusCheck();
// 开始倒计时
startExpireCountdown();
} catch (error: any) { } catch (error: any) {
console.error('检查二维码状态失败:', error); qrCodeStatus.value = 'error';
// 继续检查,不中断流程 errorMessage.value = error.message || '生成二维码失败';
message.error(errorMessage.value);
} }
}, 2000); // 每2秒检查一次 };
};
/** /**
* 开始过期倒计时 * 开始检查二维码状态
*/ */
const startExpireCountdown = () => { const startStatusCheck = () => {
if (expireTimer) { if (statusCheckTimer) {
clearInterval(expireTimer); clearInterval(statusCheckTimer);
}
expireTimer = window.setInterval(() => {
if (expireTime.value <= 0) {
qrCodeStatus.value = 'expired';
stopAllTimers();
return;
} }
expireTime.value--;
}, 1000);
};
/** statusCheckTimer = window.setInterval(async () => {
* 停止所有定时器 try {
*/ const status = await checkQrCodeStatus(qrCodeToken.value);
const stopAllTimers = () => {
if (statusCheckTimer) {
clearInterval(statusCheckTimer);
statusCheckTimer = null;
}
if (expireTimer) {
clearInterval(expireTimer);
expireTimer = null;
}
};
/** switch (status.status) {
* 刷新二维码 case 'scanned':
*/ qrCodeStatus.value = 'scanned';
const refreshQrCode = async () => { break;
refreshing.value = true; case 'confirmed':
stopAllTimers(); // 登录成功
if (status.tenantId) {
localStorage.setItem('TenantId', `${status.tenantId}`);
}
qrCodeStatus.value = 'active';
stopAllTimers();
emit('loginSuccess', status);
break;
case 'expired':
qrCodeStatus.value = 'expired';
stopAllTimers();
break;
case 'pending':
// 继续等待
break;
}
try { // 更新剩余时间
await generateQrCodeData(); if (status.expiresIn !== undefined) {
} finally { expireTime.value = status.expiresIn;
refreshing.value = false; }
} } catch (error: any) {
}; console.error('检查二维码状态失败:', error);
// 继续检查,不中断流程
}
}, 2000); // 每2秒检查一次
};
// 组件挂载时生成二维码 /**
onMounted(() => { * 开始过期倒计时
generateQrCodeData(); */
}); const startExpireCountdown = () => {
if (expireTimer) {
clearInterval(expireTimer);
}
// 组件卸载时清理定时器 expireTimer = window.setInterval(() => {
onUnmounted(() => { if (expireTime.value <= 0) {
stopAllTimers(); qrCodeStatus.value = 'expired';
}); stopAllTimers();
return;
}
expireTime.value--;
}, 1000);
};
/**
* 停止所有定时器
*/
const stopAllTimers = () => {
if (statusCheckTimer) {
clearInterval(statusCheckTimer);
statusCheckTimer = null;
}
if (expireTimer) {
clearInterval(expireTimer);
expireTimer = null;
}
};
/**
* 刷新二维码
*/
const refreshQrCode = async () => {
refreshing.value = true;
stopAllTimers();
try {
await generateQrCodeData();
} finally {
refreshing.value = false;
}
};
// 组件挂载时生成二维码
onMounted(() => {
generateQrCodeData();
});
// 组件卸载时清理定时器
onUnmounted(() => {
stopAllTimers();
});
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.qr-login-container { .qr-login-container {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
padding: 20px; padding: 20px;
min-height: 300px; min-height: 300px;
}
.qr-code-wrapper {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 250px;
width: 100%;
}
.qr-loading {
display: flex;
flex-direction: column;
align-items: center;
gap: 16px;
.loading-text {
color: #666;
margin: 0;
}
}
.qr-active {
display: flex;
flex-direction: column;
align-items: center;
gap: 12px;
.qr-tip {
color: #333;
font-size: 14px;
margin: 0;
text-align: center;
} }
.qr-expire-tip { .qr-code-wrapper {
color: #999; display: flex;
font-size: 12px; flex-direction: column;
margin: 0; align-items: center;
justify-content: center;
min-height: 250px;
width: 100%;
} }
}
.qr-scanned { .qr-loading {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
gap: 16px; gap: 16px;
.scanned-text { .loading-text {
color: #52c41a; color: #666;
font-size: 14px; margin: 0;
margin: 0; }
text-align: center;
} }
}
.qr-expired { .qr-active {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
gap: 16px; gap: 12px;
.expired-text { .qr-tip {
color: #ff4d4f; color: #333;
font-size: 14px; font-size: 14px;
margin: 0; margin: 0;
text-align: center;
}
.qr-expire-tip {
color: #999;
font-size: 12px;
margin: 0;
}
} }
}
.qr-error { .qr-scanned {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
gap: 16px; gap: 16px;
.error-text { .scanned-text {
color: #ff4d4f; color: #52c41a;
font-size: 14px; font-size: 14px;
margin: 0; margin: 0;
text-align: center; text-align: center;
}
} }
}
.qr-actions { .qr-expired {
margin-top: 16px; display: flex;
} flex-direction: column;
align-items: center;
gap: 16px;
.expired-text {
color: #ff4d4f;
font-size: 14px;
margin: 0;
}
}
.qr-error {
display: flex;
flex-direction: column;
align-items: center;
gap: 16px;
.error-text {
color: #ff4d4f;
font-size: 14px;
margin: 0;
text-align: center;
}
}
.qr-actions {
margin-top: 16px;
}
</style> </style>

View File

@@ -27,7 +27,7 @@
import SelectData from './components/select-data.vue'; import SelectData from './components/select-data.vue';
import { CmsDesign } from '@/api/cms/cmsDesign/model'; import { CmsDesign } from '@/api/cms/cmsDesign/model';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
value?: any; value?: any;
placeholder?: string; placeholder?: string;

View File

@@ -27,7 +27,7 @@
import SelectData from './components/select-data.vue'; import SelectData from './components/select-data.vue';
import { CmsDesign } from '@/api/cms/Cmsdesign/model'; import { CmsDesign } from '@/api/cms/Cmsdesign/model';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
value?: any; value?: any;
placeholder?: string; placeholder?: string;
@@ -46,7 +46,7 @@ const props = withDefaults(
const showEdit = ref(false); const showEdit = ref(false);
// 当前编辑数据 // 当前编辑数据
const current = ref<CmsDesign | null>(null); const current = ref<CmsDesign | null>(null);
const content = ref<any>(props.value) const content = ref<any>(props.value);
/* 打开编辑弹窗 */ /* 打开编辑弹窗 */
const openEdit = (row?: CmsDesign) => { const openEdit = (row?: CmsDesign) => {

View File

@@ -28,7 +28,9 @@
</template> </template>
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
<template v-if="column.key === 'name'"> <template v-if="column.key === 'name'">
<div class="cursor-pointer" @click="onRadio(record)">{{ record.name }}</div> <div class="cursor-pointer" @click="onRadio(record)">{{
record.name
}}</div>
</template> </template>
<template v-if="column.key === 'action'"> <template v-if="column.key === 'action'">
<template v-if="pageId == record.pageId"> <template v-if="pageId == record.pageId">
@@ -118,7 +120,7 @@
}; };
const onRadio = (record: CmsDesign) => { const onRadio = (record: CmsDesign) => {
pageId.value = Number(record.pageId) pageId.value = Number(record.pageId);
updateVisible(false); updateVisible(false);
emit('done', record); emit('done', record);
}; };

View File

@@ -27,7 +27,7 @@
import SelectData from './components/select-data.vue'; import SelectData from './components/select-data.vue';
import { CmsDesign } from '@/api/cms/cmsDesign/model'; import { CmsDesign } from '@/api/cms/cmsDesign/model';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
value?: any; value?: any;
placeholder?: string; placeholder?: string;

View File

@@ -40,7 +40,7 @@
} }
); );
const content = ref<any>(props.value) const content = ref<any>(props.value);
const emit = defineEmits<{ const emit = defineEmits<{
(e: 'done', Dict): void; (e: 'done', Dict): void;

View File

@@ -47,8 +47,8 @@
import { User, UserParam } from '@/api/system/user/model'; import { User, UserParam } from '@/api/system/user/model';
import { EleProTable } from 'ele-admin-pro'; import { EleProTable } from 'ele-admin-pro';
import useSearch from '@/utils/use-search'; import useSearch from '@/utils/use-search';
import {pageHjmFence} from "@/api/hjm/hjmFence"; import { pageHjmFence } from '@/api/hjm/hjmFence';
import {HjmFenceParam} from "@/api/hjm/hjmFence/model"; import { HjmFenceParam } from '@/api/hjm/hjmFence/model';
const props = defineProps<{ const props = defineProps<{
// 弹窗是否打开 // 弹窗是否打开

View File

@@ -9,7 +9,7 @@
/> />
<a-button @click="openEdit"> <a-button @click="openEdit">
<template #icon> <template #icon>
<BulbOutlined class="ele-text-warning"/> <BulbOutlined class="ele-text-warning" />
</template> </template>
</a-button> </a-button>
</a-input-group> </a-input-group>
@@ -25,51 +25,50 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {BulbOutlined} from '@ant-design/icons-vue'; import { BulbOutlined } from '@ant-design/icons-vue';
import {ref, watch} from 'vue'; import { ref, watch } from 'vue';
import SelectData from './components/select-data.vue'; import SelectData from './components/select-data.vue';
import {HjmFence} from "@/api/hjm/hjmFence/model"; import { HjmFence } from '@/api/hjm/hjmFence/model';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
value?: any; value?: any;
placeholder?: string; placeholder?: string;
organizationId?: number; organizationId?: number;
}>(), }>(),
{ {
placeholder: '请选择' placeholder: '请选择'
} }
); );
const emit = defineEmits<{ const emit = defineEmits<{
(e: 'done', HjmFence): void; (e: 'done', HjmFence): void;
(e: 'clear'): void; (e: 'clear'): void;
}>(); }>();
// 是否显示编辑弹窗 // 是否显示编辑弹窗
const showEdit = ref(false); const showEdit = ref(false);
// 当前编辑数据 // 当前编辑数据
const current = ref<HjmFence | null>(null); const current = ref<HjmFence | null>(null);
const content = ref<HjmFence>(props.value) const content = ref<HjmFence>(props.value);
/* 打开编辑弹窗 */ /* 打开编辑弹窗 */
const openEdit = (row?: HjmFence) => { const openEdit = (row?: HjmFence) => {
current.value = row ?? null; current.value = row ?? null;
showEdit.value = true; showEdit.value = true;
}; };
const onChange = (row?: HjmFence) => { const onChange = (row?: HjmFence) => {
emit('done', row); emit('done', row);
}; };
// 查询租户列表 // 查询租户列表
// const appList = ref<App[] | undefined>([]); // const appList = ref<App[] | undefined>([]);
watch(
watch( () => props.value,
() => props.value, (visible) => {
(visible) => { content.value = visible;
content.value = visible; },
}, { immediate: true }
{immediate: true} );
);
</script> </script>

View File

@@ -64,19 +64,12 @@
@search="reload" @search="reload"
@pressEnter="reload" @pressEnter="reload"
/> />
<a-button <a-button type="text" @click="openUrl('/cms/photo/dict')"
type="text" >管理分组</a-button
@click="openUrl('/cms/photo/dict')"
>管理分组</a-button
> >
<a-alert <a-alert message="双击行也可以选择" banner closable />
message="双击行也可以选择"
banner
closable
/>
</a-space> </a-space>
</div> </div>
</div> </div>
</template> </template>
<template #bodyCell="{ column, record }"> <template #bodyCell="{ column, record }">
@@ -115,7 +108,7 @@
</template> </template>
<template v-else> <template v-else>
<a-space> <a-space>
<!-- <a-radio @click="onRadio(record)" />--> <!-- <a-radio @click="onRadio(record)" />-->
<a class="ele-text-success" @click="onRadio(record)">选择</a> <a class="ele-text-success" @click="onRadio(record)">选择</a>
<a-divider type="vertical" /> <a-divider type="vertical" />
<a-popconfirm <a-popconfirm
@@ -140,13 +133,18 @@
ColumnItem, ColumnItem,
DatasourceFunction DatasourceFunction
} from 'ele-admin-pro/es/ele-pro-table/types'; } from 'ele-admin-pro/es/ele-pro-table/types';
import {pageFiles, removeFile, uploadOss, uploadOssByGroupId} from '@/api/system/file'; import {
pageFiles,
removeFile,
uploadOss,
uploadOssByGroupId
} from '@/api/system/file';
import { EleProTable, messageLoading } from 'ele-admin-pro'; import { EleProTable, messageLoading } from 'ele-admin-pro';
import { FileRecord, FileRecordParam } from '@/api/system/file/model'; import { FileRecord, FileRecordParam } from '@/api/system/file/model';
import { EditOutlined, UploadOutlined } from '@ant-design/icons-vue'; import { EditOutlined, UploadOutlined } from '@ant-design/icons-vue';
import { DictData } from '@/api/system/dict-data/model'; import { DictData } from '@/api/system/dict-data/model';
import { pageDictData } from '@/api/system/dict-data'; import { pageDictData } from '@/api/system/dict-data';
import {isImage, isMobileDevice, openUrl} from '@/utils/common'; import { isImage, isMobileDevice, openUrl } from '@/utils/common';
import { message } from 'ant-design-vue/es'; import { message } from 'ant-design-vue/es';
import FileRecordEdit from './file-record-edit.vue'; import FileRecordEdit from './file-record-edit.vue';
@@ -232,10 +230,10 @@
if (dictDataId.value) { if (dictDataId.value) {
where.groupId = dictDataId.value; where.groupId = dictDataId.value;
} }
if(props.type == 'video'){ if (props.type == 'video') {
where.contentType = props.type; where.contentType = props.type;
} }
if(props.type == 'image'){ if (props.type == 'image') {
where.contentType = props.type; where.contentType = props.type;
} }
return pageFiles({ return pageFiles({
@@ -341,7 +339,6 @@
}); });
}; };
/* 自定义行属性 */ /* 自定义行属性 */
const customRow = (record: FileRecord) => { const customRow = (record: FileRecord) => {
return { return {
@@ -353,10 +350,10 @@
// 行双击事件 // 行双击事件
onDblclick: () => { onDblclick: () => {
updateVisible(false); updateVisible(false);
if(!isMobileDevice()){ if (!isMobileDevice()) {
record.path = record.url || record.downloadUrl; record.path = record.url || record.downloadUrl;
} }
console.log(record,'rec......') console.log(record, 'rec......');
emit('done', record); emit('done', record);
} }
}; };

Some files were not shown because too many files have changed in this diff Show More