Compare commits

..

No commits in common. "master" and "v2026.05" have entirely different histories.

765 changed files with 5546 additions and 39888 deletions

View File

@ -21,9 +21,6 @@ VITE_DROP_CONSOLE=false
# 是否sourcemap
VITE_SOURCEMAP=true
# 是否开启压缩,可以设置为 none, gzip, brotli, gzip,brotli
VITE_COMPRESS=none
# 打包路径
VITE_BASE_PATH=/

View File

@ -21,9 +21,6 @@ VITE_DROP_CONSOLE=false
# 是否sourcemap
VITE_SOURCEMAP=false
# 是否开启压缩,可以设置为 none, gzip, brotli, gzip,brotli
VITE_COMPRESS=none
# 打包路径
VITE_BASE_PATH=/

View File

@ -21,9 +21,6 @@ VITE_DROP_CONSOLE=true
# 是否sourcemap
VITE_SOURCEMAP=false
# 是否开启压缩,可以设置为 none, gzip, brotli, gzip,brotli
VITE_COMPRESS=none
# 打包路径
VITE_BASE_PATH=/

2
.gitignore vendored
View File

@ -7,5 +7,3 @@ pnpm-debug
auto-*.d.ts
.idea
.history
output/
.playwright-cli/

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

View File

@ -7,6 +7,5 @@
/src/types/env.d.ts
/src/types/auto-components.d.ts
/src/types/auto-imports.d.ts
/src/components/Tinyflow/ui/**
/docs/**/*
CHANGELOG

View File

@ -3,5 +3,4 @@
public/*
/dist*
/src/types/env.d.ts
/src/components/Tinyflow/ui/**
/docs/**/*

88
.vscode/settings.json vendored
View File

@ -1,7 +1,5 @@
{
"typescript.tsdk": "./node_modules/typescript/lib",
"volar.tsPlugin": true,
"volar.tsPluginStatus": false,
"typescript.tsdk": "node_modules/typescript/lib",
"npm.packageManager": "pnpm",
"editor.tabSize": 2,
"prettier.printWidth": 100, //
@ -85,75 +83,54 @@
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
"source.fixAll.eslint": "explicit",
"source.fixAll.stylelint": "explicit"
},
"editor.formatOnSave": true,
"[vue]": {
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.fixAll.stylelint": "explicit"
}
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"i18n-ally.localesPaths": ["src/locales"],
"i18n-ally.keystyle": "nested",
"i18n-ally.sortKeys": true,
"i18n-ally.namespace": true,
"i18n-ally.namespace": false,
"i18n-ally.enabledParsers": ["ts"],
"i18n-ally.sourceLanguage": "en",
"i18n-ally.displayLanguage": "zh-CN",
"i18n-ally.enabledFrameworks": ["vue", "react"],
"cSpell.words": [
"xingyu",
"yudao",
"unocss",
"brotli",
"browserslist",
"codemirror",
"commitlint",
"cropperjs",
"echart",
"echarts",
"esnext",
"unplugin",
"esno",
"iconify",
"INTLIFY",
"lintstagedrc",
"logicflow",
"nprogress",
"pinia",
"pnpm",
"qrcode",
"sider",
"pinia",
"sider",
"nprogress",
"INTLIFY",
"stylelint",
"esno",
"vitejs",
"sortablejs",
"codemirror",
"iconify",
"commitlint",
"stylelint",
"svgs",
"unocss",
"unplugin",
"unref",
"videojs",
"echarts",
"wangeditor",
"cropperjs",
"logicflow",
"VITE",
"vitejs",
"vueuse",
"zxcvbn",
"lintstagedrc",
"brotli",
"sider",
"pnpm"
],
"vetur.format.scriptInitialIndent": true,
"vetur.format.styleInitialIndent": true,
"vetur.validation.script": false,
"MicroPython.executeButton": [
{
"text": "▶",
"tooltip": "运行",
"alignment": "left",
"command": "extension.executeFile",
"priority": 3.5
}
],
"MicroPython.syncButton": [
{
"text": "$(sync)",
"tooltip": "同步",
"alignment": "left",
"command": "extension.execute",
"priority": 4
}
"wangeditor",
"xingyu",
"yudao",
"zxcvbn"
],
//
"explorer.fileNesting.enabled": true,
@ -162,7 +139,8 @@
"*.ts": "$(capture).test.ts, $(capture).test.tsx",
"*.tsx": "$(capture).test.ts, $(capture).test.tsx",
"*.env": "$(capture).env.*",
"package.json": "pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore"
"package.json": "pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.eslintrc-auto-import.json,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore"
},
"terminal.integrated.scrollback": 10000
"terminal.integrated.scrollback": 10000,
"nuxt.isNuxtApp": false
}

View File

@ -284,19 +284,6 @@
![预览图](/.image/common/iot-preview.png)
### IM 即时通讯
演示地址Vue3 + Element Plus<http://dashboard-vue3.yudao.iocoder.cn>
使用文档:<https://doc.iocoder.cn/im-preview/>
![功能图](/.image/common/im-feature.png)
| 聊天界面 | 聊天管理 |
| --- | --- |
| ![聊天界面](/.image/common/im-preview-home.png) | ![聊天管理](/.image/common/im-preview-manager.png) |
## 🐷 演示图
### 系统功能

View File

@ -1,31 +1,33 @@
import { resolve } from 'path'
import Vue from '@vitejs/plugin-vue'
import VueJsx from '@vitejs/plugin-vue-jsx'
import progress from 'vite-plugin-progress'
import EslintPlugin from 'vite-plugin-eslint2'
import { ViteEjsPlugin } from 'vite-plugin-ejs'
// @ts-ignore
import ElementPlus from 'unplugin-element-plus/vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import viteCompression from 'vite-plugin-compression'
import topLevelAwait from 'vite-plugin-top-level-await'
import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons-ng'
import UnoCSS from 'unocss/vite'
export function createVitePlugins(isBuild = false, env: Record<string, string> = {}) {
export function createVitePlugins() {
const root = process.cwd()
const compressTypes = (env.VITE_COMPRESS || '')
.split(',')
.map((item) => item.trim())
.filter((item) => item === 'gzip' || item === 'brotli')
// 路径查找
function pathResolve(dir: string) {
return resolve(root, '.', dir)
}
const plugins = [
return [
Vue(),
VueJsx(),
UnoCSS(),
progress(),
ElementPlus({}),
AutoImport({
include: [
@ -47,7 +49,7 @@ export function createVitePlugins(isBuild = false, env: Record<string, string> =
'@/utils/dict': ['DICT_TYPE']
}
],
dts: !isBuild && 'src/types/auto-imports.d.ts',
dts: 'src/types/auto-imports.d.ts',
resolvers: [ElementPlusResolver()],
eslintrc: {
enabled: false, // Default `false`
@ -57,16 +59,25 @@ export function createVitePlugins(isBuild = false, env: Record<string, string> =
}),
Components({
// 生成自定义 `auto-components.d.ts` 全局声明
dts: !isBuild && 'src/types/auto-components.d.ts',
dts: 'src/types/auto-components.d.ts',
// 自定义组件的解析器
resolvers: [ElementPlusResolver()],
globs: ['src/components/**/**.{vue, md}', '!src/components/DiyEditor/components/mobile/**']
}),
EslintPlugin({
cache: false,
include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // 检查的文件
}),
VueI18nPlugin({
runtimeOnly: true,
compositionOnly: true,
include: [resolve(__dirname, 'src/locales/**')]
}),
createSvgIconsPlugin({
iconDirs: [pathResolve('src/assets/svgs')],
symbolId: 'icon-[dir]-[name]'
}),
isBuild && compressTypes.includes('gzip') && viteCompression({
viteCompression({
verbose: true, // 是否在控制台输出压缩结果
disable: false, // 是否禁用
threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
@ -74,15 +85,13 @@ export function createVitePlugins(isBuild = false, env: Record<string, string> =
ext: '.gz', // 生成的压缩包后缀
deleteOriginFile: false //压缩后是否删除源文件
}),
isBuild && compressTypes.includes('brotli') && viteCompression({
verbose: true,
disable: false,
threshold: 10240,
algorithm: 'brotliCompress',
ext: '.br',
deleteOriginFile: false
ViteEjsPlugin(),
topLevelAwait({
// https://juejin.cn/post/7152191742513512485
// The export name of top-level await promise for each chunk module
promiseExportName: '__tla',
// The function to generate import names of top-level await promise in each chunk module
promiseImportName: (i) => `__tla_${i}`
})
]
return plugins.filter(Boolean)
}

View File

@ -17,8 +17,7 @@ export default tseslint.config(
'test/unit/coverage/',
'node_modules/',
'src/main.ts',
'src/types/auto-components.d.ts',
'src/components/Tinyflow/ui/**'
'src/types/auto-components.d.ts'
]
},
@ -62,7 +61,6 @@ export default tseslint.config(
'vue/attributes-order': 'off',
'vue/one-component-per-file': 'off',
'vue/html-closing-bracket-newline': 'off',
'vue/html-indent': 'off', // Vue 模板缩进交给 Prettier避免格式化规则互相拉扯。
'vue/max-attributes-per-line': 'off',
'vue/multiline-html-element-content-newline': 'off',
'vue/singleline-html-element-content-newline': 'off',

View File

@ -1,12 +0,0 @@
export default {
'src/**/*.{js,ts,tsx,vue}': [
'eslint --fix --cache --cache-location node_modules/.cache/eslint/',
'prettier --write --loglevel warn --cache --cache-location node_modules/.cache/prettier/.prettier-cache'
],
'src/**/*.{css,less,scss,postcss,vue}': [
'stylelint --fix --cache --cache-location node_modules/.cache/stylelint/'
],
'src/**/*.{json,html,md}': [
'prettier --write --loglevel warn --cache --cache-location node_modules/.cache/prettier/.prettier-cache'
]
}

View File

@ -8,7 +8,7 @@
"i": "pnpm install",
"dev": "vite --mode env.local",
"dev-server": "vite --mode dev",
"ts:check": "node --max_old_space_size=8192 ./node_modules/vue-tsc/bin/vue-tsc.js --noEmit --incremental --tsBuildInfoFile node_modules/.cache/vue-tsc/tsconfig.tsbuildinfo",
"ts:check": "node --max_old_space_size=8192 ./node_modules/vue-tsc/bin/vue-tsc.js --noEmit",
"build:local": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode env.local",
"build:dev": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode dev",
"build:test": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode test",
@ -19,14 +19,10 @@
"preview": "pnpm build:local && vite preview",
"clean": "npx rimraf node_modules",
"clean:cache": "npx rimraf node_modules/.cache",
"lint": "pnpm lint:eslint:check && pnpm lint:style:check && pnpm lint:format:check",
"lint:eslint": "eslint --fix ./src --cache --cache-location node_modules/.cache/eslint/",
"lint:eslint:check": "eslint ./src --cache --cache-location node_modules/.cache/eslint/",
"lint:format": "prettier --write --log-level warn --cache --cache-location node_modules/.cache/prettier/.prettier-cache \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"",
"lint:format:check": "prettier --check --cache --cache-location node_modules/.cache/prettier/.prettier-cache \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"",
"lint:eslint": "eslint --fix ./src",
"lint:format": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"",
"lint:style": "stylelint --fix \"./src/**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
"lint:style:check": "stylelint \"./src/**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
"lint:lint-staged": "lint-staged"
"lint:lint-staged": "lint-staged -c "
},
"dependencies": {
"@element-plus/icons-vue": "2.3.2",
@ -48,6 +44,7 @@
"cropperjs": "^2.1.1",
"crypto-js": "^4.2.0",
"dayjs": "^1.11.20",
"dayjs-plugin-lunar": "^1.4.1",
"dhtmlx-gantt": "^9.1.1",
"diagram-js": "^15.14.0",
"driver.js": "^1.4.0",
@ -59,7 +56,6 @@
"jsbarcode": "^3.12.3",
"jsencrypt": "^3.5.4",
"jsoneditor": "^10.4.3",
"livekit-client": "^2.18.9",
"lodash-es": "^4.18.1",
"markdown-it": "^14.1.1",
"markmap-common": "^0.18.9",
@ -94,6 +90,7 @@
"@commitlint/cli": "^20.5.3",
"@commitlint/config-conventional": "^20.5.3",
"@iconify/json": "^2.2.470",
"@intlify/unplugin-vue-i18n": "^11.1.2",
"@types/jsoneditor": "^9.9.6",
"@types/lodash-es": "^4.17.12",
"@types/node": "^25.6.0",
@ -103,6 +100,7 @@
"@unocss/eslint-config": "^66.6.8",
"@unocss/eslint-plugin": "66.6.8",
"@unocss/transformer-variant-group": "^66.6.8",
"@vitejs/plugin-legacy": "^8.0.1",
"@vitejs/plugin-vue": "^6.0.6",
"@vitejs/plugin-vue-jsx": "^5.1.5",
"autoprefixer": "^10.5.0",
@ -125,6 +123,7 @@
"stylelint-config-recommended": "^18.0.0",
"stylelint-config-standard": "^40.0.0",
"stylelint-order": "^8.1.1",
"terser": "^5.46.2",
"typescript": "6.0.3",
"typescript-eslint": "^8.59.2",
"unocss": "^66.6.8",
@ -133,7 +132,11 @@
"unplugin-vue-components": "^32.0.0",
"vite": "8.0.10",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-ejs": "^1.7.0",
"vite-plugin-eslint2": "^5.1.0",
"vite-plugin-progress": "^0.0.7",
"vite-plugin-svg-icons-ng": "^1.9.0",
"vite-plugin-top-level-await": "^1.6.0",
"vue-eslint-parser": "^10.4.0",
"vue-tsc": "^3.2.8"
},

File diff suppressed because it is too large Load Diff

View File

@ -12,7 +12,7 @@ export interface ChatConversationVO {
temperature: number // 温度参数
maxTokens: number // 单条回复的最大 Token 数量
maxContexts: number // 上下文的最大 Message 数量
createTime: Date // 创建时间
createTime?: Date // 创建时间
// 额外字段
systemMessage?: string // 角色设定
modelName?: string // 模型名字
@ -39,7 +39,7 @@ export const ChatConversationApi = {
},
// 删除【我的】聊天对话
deleteChatConversationMy: async (id: number) => {
deleteChatConversationMy: async (id: string) => {
return await request.delete({ url: `/ai/chat/conversation/delete-my?id=${id}` })
},

View File

@ -23,15 +23,15 @@ export interface ImageDrawReqVO {
prompt: string // 提示词
modelId: number // 模型
style: string // 图像生成的风格
width: number // 图片宽度
height: number // 图片高度
width: string // 图片宽度
height: string // 图片高度
options: object // 绘制参数Map<String, String>
}
export interface ImageMidjourneyImagineReqVO {
prompt: string // 提示词
modelId: number // 模型
base64Array: string[] // 参考图 base64 列表
base64Array: string[] // size不能为空
width: string // 图片宽度
height: string // 图片高度
version: string // 版本

View File

@ -36,7 +36,6 @@ export type ApprovalTaskInfo = {
assigneeUser: User
status: number
reason: string
attachments?: string[]
signPicUrl: string
}

View File

@ -1,5 +1,6 @@
import request from '@/config/axios'
export const updateBpmSimpleModel = async (data) => {
return await request.post({
url: '/bpm/model/simple/update',

View File

@ -1,18 +1,14 @@
import request from '@/config/axios'
export interface BusinessStatusTypeVO {
id?: number
id: number
name: string
deptIds: number[]
statuses: BusinessStatusVO[]
}
export interface BusinessStatusVO {
id?: number
name: string
percent?: number
endStatus?: number
key?: string
statuses?: {
id: number
name: string
percent: number
}
}
export const DEFAULT_STATUSES = [
@ -34,7 +30,7 @@ export const DEFAULT_STATUSES = [
name: '无效',
percent: 0
}
] satisfies BusinessStatusVO[]
]
// 查询商机状态组列表
export const getBusinessStatusPage = async (params: any) => {

View File

@ -11,11 +11,6 @@ export interface FinancePaymentVO {
remark: string // 备注
}
// ERP 付款单项 VO
export interface FinancePaymentItemVO {
paymentPrice: number // 本次付款金额,单位:元
}
// ERP 付款单 API
export const FinancePaymentApi = {
// 查询付款单分页

View File

@ -11,11 +11,6 @@ export interface FinanceReceiptVO {
remark: string // 备注
}
// ERP 收款单项 VO
export interface FinanceReceiptItemVO {
receiptPrice: number // 本次收款金额,单位:元
}
// ERP 收款单 API
export const FinanceReceiptApi = {
// 查询收款单分页

View File

@ -13,8 +13,8 @@ export interface ProductCategoryVO {
// ERP 产品分类 API
export const ProductCategoryApi = {
// 查询产品分类列表
getProductCategoryList: async (params?: any) => {
return await request.get({ url: `/erp/product-category/list`, params })
getProductCategoryList: async () => {
return await request.get({ url: `/erp/product-category/list` })
},
// 查询产品分类精简列表

View File

@ -2,45 +2,16 @@ import request from '@/config/axios'
// ERP 采购订单 VO
export interface PurchaseOrderVO {
id?: number // 订单工单编号
no?: string // 采购订单号
supplierId?: number // 供应商编号
accountId?: number // 结算账户编号
orderTime?: Date // 订单时间
totalCount?: number // 合计数量
totalProductPrice?: number // 合计产品金额,单位:元
discountPercent?: number // 优惠率
discountPrice?: number // 优惠金额,单位:元
id: number // 订单工单编号
no: string // 采购订单号
customerId: number // 客户编号
orderTime: Date // 订单时间
totalCount: number // 合计数量
totalPrice: number // 合计金额,单位:元
depositPrice?: number // 订金金额,单位:元
status?: number // 状态
remark?: string // 备注
fileUrl: string // 附件地址
inCount?: number // 采购入库数量
returnCount?: number // 采购退货数量
items: PurchaseOrderItemVO[] // 订单项
}
// ERP 采购订单项 VO
export interface PurchaseOrderItemVO {
id?: number
orderItemId?: number
productId?: number
productName?: string
productUnitName?: string
productBarCode?: string
productPrice?: number
stockCount?: number
count: number
totalCount?: number
inCount?: number
returnCount?: number
totalProductPrice?: number
taxPercent?: number
taxPrice?: number
totalPrice: number
remark?: string
warehouseId?: number
status: number // 状态
remark: string // 备注
outCount: number // 采购出库数量
returnCount: number // 采购退货数量
}
// ERP 采购订单 API

View File

@ -2,46 +2,16 @@ import request from '@/config/axios'
// ERP 销售订单 VO
export interface SaleOrderVO {
id?: number // 订单工单编号
no?: string // 销售订单号
customerId?: number // 客户编号
accountId?: number // 结算账户编号
saleUserId?: number // 销售人员编号
orderTime?: Date // 订单时间
totalCount?: number // 合计数量
totalProductPrice?: number // 合计产品金额,单位:元
discountPercent?: number // 优惠率
discountPrice?: number // 优惠金额,单位:元
id: number // 订单工单编号
no: string // 销售订单号
customerId: number // 客户编号
orderTime: Date // 订单时间
totalCount: number // 合计数量
totalPrice: number // 合计金额,单位:元
depositPrice?: number // 订金金额,单位:元
status?: number // 状态
remark?: string // 备注
fileUrl: string // 附件地址
outCount?: number // 销售出库数量
returnCount?: number // 销售退货数量
items: SaleOrderItemVO[] // 订单项
}
// ERP 销售订单项 VO
export interface SaleOrderItemVO {
id?: number
orderItemId?: number
productId?: number
productName?: string
productUnitName?: string
productBarCode?: string
productPrice?: number
stockCount?: number
count: number
totalCount?: number
outCount?: number
returnCount?: number
totalProductPrice?: number
taxPercent?: number
taxPrice?: number
totalPrice: number
remark?: string
warehouseId?: number
status: number // 状态
remark: string // 备注
outCount: number // 销售出库数量
returnCount: number // 销售退货数量
}
// ERP 销售订单 API

View File

@ -1,18 +0,0 @@
import request from '@/config/axios'
// 用户端能看到的频道素材详情
export interface ImChannelMaterialRespVO {
id: number
channelId: number
type: number
title: string
coverUrl?: string
summary?: string
content?: string
url?: string
}
// 获取频道素材详情;用于客户端点击图文卡片渲染详情页
export const getChannelMaterial = (id: number) => {
return request.get<ImChannelMaterialRespVO>({ url: '/im/channel/material/get', params: { id } })
}

View File

@ -1,19 +0,0 @@
import request from '@/config/axios'
// IM 会话读位置 Response VO
export interface ImConversationReadRespVO {
id: number // 读位置编号(增量拉取游标用)
conversationType: number // 会话类型,参见 ImConversationType
targetId: number // 会话目标编号
messageId: number // 最大已读消息编号
updateTime?: number // 最近更新时间(毫秒时间戳,增量拉取游标用)
}
// 增量拉取当前用户的会话读位置(重连 / 离线补偿)
export const pullMyConversationReadList = (params: {
lastUpdateTime?: number
lastId?: number
limit: number
}) => {
return request.get<ImConversationReadRespVO[]>({ url: '/im/conversation-read/pull', params })
}

View File

@ -1,23 +0,0 @@
import request from '@/config/axios'
// 用户端表情包项(精简版)
export interface ImFacePackUserItemVO {
id: number
url: string
name?: string
width: number
height: number
}
// 用户端表情包 + 嵌套 items
export interface ImFacePackUserVO {
id: number
name: string
icon?: string
items: ImFacePackUserItemVO[]
}
// 拉取所有启用的系统表情包(含表情列表)
export const getFacePackList = () => {
return request.get<ImFacePackUserVO[]>({ url: '/im/face-pack/list' })
}

View File

@ -1,33 +0,0 @@
import request from '@/config/axios'
// 个人表情
export interface ImFaceUserItemVO {
id: number
url: string
name?: string
width: number
height: number
}
// 添加个人表情请求
export interface ImFaceUserItemSaveReqVO {
url: string
name?: string
width: number
height: number
}
// 获取我的个人表情列表
export const getFaceUserItemList = () => {
return request.get<ImFaceUserItemVO[]>({ url: '/im/face-user-item/list' })
}
// 添加个人表情
export const createFaceUserItem = (data: ImFaceUserItemSaveReqVO) => {
return request.post<number>({ url: '/im/face-user-item/create', data })
}
// 删除个人表情
export const deleteFaceUserItem = (id: number) => {
return request.delete({ url: '/im/face-user-item/delete', params: { id } })
}

View File

@ -1,71 +0,0 @@
import request from '@/config/axios'
// IM 好友 Response VO
export interface ImFriendRespVO {
id: number // 关系记录编号
friendUserId: number // 好友的用户编号
silent?: boolean // 是否免打扰
displayName?: string // 好友展示备注(仅自己可见)
displayNamePinyin?: string // 备注的拼音(小写无空格,前端按首字母分桶 / 拼音搜索)
addSource?: number // 添加来源;参见 ImFriendAddSourceEnum
pinned?: boolean // 是否置顶联系人
blocked?: boolean // 是否拉黑
status?: number // 好友状态0=正常1=已删除)
addTime?: string // 添加好友时间
deleteTime?: string // 删除好友时间
updateTime?: number // 最近更新时间(毫秒时间戳,增量拉取游标用)
// 聚合字段(自 AdminUser
nickname?: string // 好友昵称
nicknamePinyin?: string // 昵称的拼音(小写无空格,前端按首字母分桶 / 拼音搜索)
avatar?: string // 好友头像
}
// IM 好友更新 Request VO
export interface ImFriendUpdateReqVO {
friendUserId: number // 好友的用户编号
silent?: boolean // 是否免打扰
displayName?: string // 好友展示备注
pinned?: boolean // 是否置顶联系人
}
// 获得当前登录用户的好友列表
export const getMyFriendList = () => {
return request.get<ImFriendRespVO[]>({ url: '/im/friend/list' })
}
// 增量拉取当前用户的好友关系(重连 / 离线补偿)
export const pullMyFriendList = (params: {
lastUpdateTime?: number
lastId?: number
limit: number
}) => {
return request.get<ImFriendRespVO[]>({ url: '/im/friend/pull', params })
}
// 获得好友详情
export const getFriend = (friendUserId: number | string) => {
return request.get<ImFriendRespVO>({ url: '/im/friend/get', params: { friendUserId } })
}
// 删除好友(单向软删除)
export const deleteFriend = (friendUserId: number | string, clear: boolean) => {
return request.delete<boolean>({
url: '/im/friend/delete',
params: { friendUserId, clear }
})
}
// 更新好友信息(备注 / 免打扰 / 联系人置顶)
export const updateFriend = (data: ImFriendUpdateReqVO) => {
return request.put<boolean>({ url: '/im/friend/update', data })
}
// 拉黑好友(必须先是好友;单边屏蔽对方私聊消息)
export const blockFriend = (friendUserId: number | string) => {
return request.put<boolean>({ url: '/im/friend/block', params: { friendUserId } })
}
// 移出黑名单
export const unblockFriend = (friendUserId: number | string) => {
return request.put<boolean>({ url: '/im/friend/unblock', params: { friendUserId } })
}

View File

@ -1,75 +0,0 @@
import request from '@/config/axios'
// IM 好友申请 Response VO
export interface ImFriendRequestRespVO {
id: number // 申请编号
fromUserId: number // 发起方用户编号
toUserId: number // 接收方用户编号
handleResult: number // 处理结果0=未处理1=同意2=拒绝
applyContent?: string // 申请理由
handleContent?: string // 处理理由(接收方拒绝时可选填)
addSource?: number // 添加来源;参见 ImFriendAddSourceEnum
handleTime?: string // 处理时间
createTime: string // 申请创建时间
updateTime?: number // 最近更新时间(毫秒时间戳,增量拉取游标用)
// 聚合字段(自 AdminUser
fromNickname?: string // 发起方昵称
fromAvatar?: string // 发起方头像
toNickname?: string // 接收方昵称
toAvatar?: string // 接收方头像
}
// IM 好友申请发起 Request VO
export interface ImFriendRequestApplyReqVO {
toUserId: number // 接收方用户编号
applyContent?: string // 申请理由
displayName?: string // 对接收方的备注(仅自己可见)
addSource?: number // 添加来源
}
// 发起好友申请
export const applyFriendRequest = (data: ImFriendRequestApplyReqVO) => {
return request.post<number | null>({ url: '/im/friend-request/apply', data })
}
// 同意好友申请
export const agreeFriendRequest = (id: number | string) => {
return request.put<boolean>({ url: '/im/friend-request/agree', params: { id } })
}
// 拒绝好友申请
export const refuseFriendRequest = (id: number | string, handleContent?: string) => {
return request.put<boolean>({
url: '/im/friend-request/refuse',
params: { id, handleContent }
})
}
// 查询「我相关」的好友申请列表(游标分页:传 maxId 加载更多)
export const getMyFriendRequestList = (limit: number, maxId?: number) => {
const params: Record<string, number> = { limit }
if (maxId != null) {
params.maxId = maxId
}
return request.get<ImFriendRequestRespVO[]>({
url: '/im/friend-request/list',
params
})
}
// 增量拉取「我相关」的好友申请变更(重连 / 离线补偿)
export const pullMyFriendRequestList = (params: {
lastUpdateTime?: number
lastId?: number
limit: number
}) => {
return request.get<ImFriendRequestRespVO[]>({ url: '/im/friend-request/pull', params })
}
// 按 id 单查「我相关」的申请记录带越权过滤WebSocket 通知到达后用)
export const getMyFriendRequest = (id: number) => {
return request.get<ImFriendRequestRespVO | null>({
url: '/im/friend-request/get',
params: { id }
})
}

View File

@ -1,140 +0,0 @@
import request from '@/config/axios'
import type { ImGroupMessageRespVO } from '@/api/im/message/group'
// 群 Response VO
export interface ImGroupRespVO {
id: number // 编号
name: string // 群名称
ownerUserId: number // 群主用户编号
avatar?: string // 群头像
notice?: string // 群公告
banned?: boolean // 是否封禁
mutedAll?: boolean // 是否全群禁言
joinApproval?: boolean // 进群是否需群主 / 管理员审批
bannedTime?: string // 封禁时间
status: number // 群状态0=正常1=已解散)
dissolvedTime?: string // 解散时间
createTime?: string // 创建时间
pinnedMessages?: ImGroupMessageRespVO[] // 群置顶消息列表(后端关联回填,仅当登录用户是群成员时非空)
joinStatus?: number // 当前登录用户在该群的成员状态(参见 CommonStatusEnum0 在群 / 1 已退群);历史退群群仍返回,供展示离线消息的群名 / 头像
groupRemark?: string // 当前登录用户对该群的备注
silent?: boolean // 当前登录用户是否免打扰
}
// 群消息置顶 / 取消置顶 Request VO
export interface ImGroupMessagePinReqVO {
id: number // 群编号
messageId: number // 消息编号
}
// 群创建 Request VO
export interface ImGroupCreateReqVO {
name: string // 群名称
memberUserIds?: number[] // 初始成员用户编号列表(建群同时邀请的好友,不含创建者自己)
joinApproval?: boolean // 进群是否需审批;不传默认 false 自由进群
}
// 群更新 Request VO
export interface ImGroupUpdateReqVO {
id: number // 群编号
name?: string // 群名称
avatar?: string // 群头像
notice?: string // 群公告
joinApproval?: boolean // 进群是否需审批
}
// 添加 / 撤销群管理员 Request VO
export interface ImGroupAdminReqVO {
id: number // 群编号
userIds: number[] // 目标用户编号列表
}
// 群主转让 Request VO
export interface ImGroupTransferOwnerReqVO {
id: number // 群编号
newOwnerUserId: number // 新群主用户编号
}
// 全群禁言 / 取消 Request VO
export interface ImGroupMuteAllReqVO {
id: number // 群编号
mutedAll: boolean // 是否全群禁言
}
// 成员禁言 Request VO
export interface ImGroupMuteMemberReqVO {
id: number // 群编号
userId: number // 被禁言的用户编号
mutedSeconds: number // 禁言时长0 表示永久禁言
}
// 取消成员禁言 Request VO
export interface ImGroupCancelMuteMemberReqVO {
id: number // 群编号
userId: number // 被取消禁言的用户编号
}
// 获得当前登录用户的群列表
export const getMyGroupList = () => {
return request.get<ImGroupRespVO[]>({ url: '/im/group/list' })
}
// 获得群详情
export const getGroup = (id: number | string) => {
return request.get<ImGroupRespVO>({ url: '/im/group/get', params: { id } })
}
// 创建群
export const createGroup = (data: ImGroupCreateReqVO) => {
return request.post<ImGroupRespVO>({ url: '/im/group/create', data })
}
// 更新群
export const updateGroup = (data: ImGroupUpdateReqVO) => {
return request.put<ImGroupRespVO>({ url: '/im/group/update', data })
}
// 解散群
export const dissolveGroup = (id: number | string) => {
return request.delete<boolean>({ url: '/im/group/dissolve', params: { id } })
}
// 添加群管理员(仅群主可调)
export const addGroupAdmin = (data: ImGroupAdminReqVO) => {
return request.put<boolean>({ url: '/im/group/add-admin', data })
}
// 撤销群管理员(仅群主可调)
export const removeGroupAdmin = (data: ImGroupAdminReqVO) => {
return request.put<boolean>({ url: '/im/group/remove-admin', data })
}
// 转让群主(仅老群主可调;旧群主转让后降为普通成员)
export const transferGroupOwner = (data: ImGroupTransferOwnerReqVO) => {
return request.put<boolean>({ url: '/im/group/transfer-owner', data })
}
// 置顶群消息(仅群主 / 管理员可调)
export const pinGroupMessage = (data: ImGroupMessagePinReqVO) => {
return request.put<boolean>({ url: '/im/group/pin-message', data })
}
// 取消置顶群消息(仅群主 / 管理员可调)
export const unpinGroupMessage = (data: ImGroupMessagePinReqVO) => {
return request.put<boolean>({ url: '/im/group/unpin-message', data })
}
// 全群禁言 / 取消(仅群主 / 管理员可调)
export const muteAll = (data: ImGroupMuteAllReqVO) => {
return request.put<boolean>({ url: '/im/group/mute-all', data })
}
// 禁言成员
export const muteMember = (data: ImGroupMuteMemberReqVO) => {
return request.put<boolean>({ url: '/im/group/mute-member', data })
}
// 取消成员禁言
export const cancelMuteMember = (data: ImGroupCancelMuteMemberReqVO) => {
return request.put<boolean>({ url: '/im/group/cancel-mute-member', data })
}

View File

@ -1,76 +0,0 @@
import request from '@/config/axios'
// 群成员 Response VO
export interface ImGroupMemberRespVO {
id: number // 编号
groupId: number // 群编号
userId: number // 用户编号
displayUserName?: string // 组内显示名(群主设置的备注)
groupRemark?: string // 群备注(当前用户对群的备注)
silent?: boolean // 是否免打扰
status?: number // 成员状态0=在群1=退群)
role?: number // 成员角色,参见 ImGroupMemberRole 枚举
joinTime?: string // 入群时间
quitTime?: string // 退群时间
muteEndTime?: string // 禁言到期时间
createTime?: string // 创建时间
// 聚合字段(自 AdminUser
nickname?: string // 用户昵称
avatar?: string // 用户头像
}
// 群成员邀请 Request VO
export interface ImGroupMemberInviteReqVO {
groupId: number // 群编号
memberUserIds: number[] // 被邀请的用户编号列表
}
// 群成员移除 Request VO
export interface ImGroupMemberRemoveReqVO {
groupId: number // 群编号
memberUserIds: number[] // 被移除的用户编号列表
}
// 群成员更新 Request VO
export interface ImGroupMemberUpdateReqVO {
groupId: number // 群编号
displayUserName?: string // 群内昵称
groupRemark?: string // 群备注
silent?: boolean // 是否免打扰
}
// 邀请用户加入群
export const inviteGroupMember = (data: ImGroupMemberInviteReqVO) => {
return request.post<boolean>({ url: '/im/group/invite', data })
}
// 退出群
export const quitGroup = (groupId: number | string) => {
return request.delete<boolean>({ url: '/im/group/quit', params: { groupId } })
}
// 移除群成员
export const removeGroupMember = (data: ImGroupMemberRemoveReqVO) => {
return request.delete<boolean>({ url: '/im/group/kicking', data })
}
// 获得群成员详情
export const getGroupMember = (groupId: number, userId: number) => {
return request.get<ImGroupMemberRespVO>({
url: '/im/group-member/get',
params: { groupId, userId }
})
}
// 获得指定群的成员列表(聚合 AdminUser 昵称 / 头像)
export const getGroupMemberList = (groupId: number | string) => {
return request.get<ImGroupMemberRespVO[]>({
url: '/im/group-member/list',
params: { groupId }
})
}
// 更新群成员
export const updateGroupMember = (data: ImGroupMemberUpdateReqVO) => {
return request.put<boolean>({ url: '/im/group-member/update', data })
}

View File

@ -1,81 +0,0 @@
import request from '@/config/axios'
// IM 加群申请 Response VO
export interface ImGroupRequestRespVO {
id: number // 申请编号
groupId: number // 群编号
userId: number // 申请人 / 被邀请人用户编号
inviterUserId?: number // 邀请人NULL 表示用户主动申请
handleResult: number // 处理结果0=未处理1=同意2=拒绝
applyContent?: string // 申请理由
handleContent?: string // 处理理由(拒绝时可选填)
handleUserId?: number // 处理人用户编号
addSource?: number // 加入来源;参见 ImGroupAddSourceEnum
handleTime?: string // 处理时间
createTime: string // 申请创建时间
updateTime?: number // 最近更新时间(毫秒时间戳,增量拉取游标用)
// 聚合字段
userNickname?: string // 申请人 / 被邀请人昵称
userAvatar?: string // 申请人 / 被邀请人头像
inviterNickname?: string // 邀请人昵称
inviterAvatar?: string // 邀请人头像
groupName?: string // 群名称
groupAvatar?: string // 群头像
}
// IM 加群申请发起 Request VO
export interface ImGroupRequestApplyReqVO {
groupId: number // 群编号
applyContent?: string // 申请理由
addSource?: number // 加入来源
}
// 申请加群
export const applyJoinGroup = (data: ImGroupRequestApplyReqVO) => {
return request.post<number | null>({ url: '/im/group-request/apply', data })
}
// 同意加群申请(群主或管理员)
export const agreeGroupRequest = (id: number | string) => {
return request.put<boolean>({ url: '/im/group-request/agree', params: { id } })
}
// 拒绝加群申请(群主或管理员)
export const refuseGroupRequest = (id: number | string, handleContent?: string) => {
return request.put<boolean>({
url: '/im/group-request/refuse',
params: { id, handleContent }
})
}
// 查询「我管理的所有群」下的未处理加群申请列表(不分页);前端 store 据此派生横幅红点 + Drawer 列表
export const getUnhandledRequestList = () => {
return request.get<ImGroupRequestRespVO[]>({
url: '/im/group-request/unhandled-list'
})
}
// 查询指定群下的全部加群申请(含已处理);仅群主 / 管理员可查
export const getGroupRequestListByGroupId = (groupId: number) => {
return request.get<ImGroupRequestRespVO[]>({
url: '/im/group-request/list-by-group',
params: { groupId }
})
}
// 按 id 单查申请记录带越权过滤WebSocket 通知到达后用)
export const getMyGroupRequest = (id: number) => {
return request.get<ImGroupRequestRespVO | null>({
url: '/im/group-request/get',
params: { id }
})
}
// 增量拉取我管理的所有群下加群申请变更(重连 / 离线补偿)
export const pullMyGroupRequestList = (params: {
lastUpdateTime?: number
lastId?: number
limit: number
}) => {
return request.get<ImGroupRequestRespVO[]>({ url: '/im/group-request/pull', params })
}

View File

@ -1,41 +0,0 @@
import request from '@/config/axios'
export interface ImManagerChannelVO {
id: number
code: string
name: string
avatar?: string
sort: number
status: number
createTime?: Date
}
// 获得频道分页
export const getManagerChannelPage = (params: PageParam) => {
return request.get({ url: '/im/manager/channel/page', params })
}
// 获得频道详情
export const getManagerChannel = (id: number) => {
return request.get({ url: '/im/manager/channel/get', params: { id } })
}
// 新增频道
export const createManagerChannel = (data: ImManagerChannelVO) => {
return request.post({ url: '/im/manager/channel/create', data })
}
// 修改频道
export const updateManagerChannel = (data: ImManagerChannelVO) => {
return request.put({ url: '/im/manager/channel/update', data })
}
// 删除频道
export const deleteManagerChannel = (id: number) => {
return request.delete({ url: '/im/manager/channel/delete', params: { id } })
}
// 获得启用的频道精简列表(表单选择用)
export const getSimpleChannelList = () => {
return request.get<ImManagerChannelVO[]>({ url: '/im/manager/channel/simple-list' })
}

View File

@ -1,47 +0,0 @@
import request from '@/config/axios'
export interface ImManagerChannelMaterialVO {
id: number
channelId: number
channelName?: string
type: number
title: string
coverUrl?: string
summary?: string
content?: string
url?: string
createTime?: Date
}
// 获得素材分页
export const getManagerChannelMaterialPage = (params: PageParam) => {
return request.get({ url: '/im/manager/channel-material/page', params })
}
// 获得指定频道下的素材精简列表
export const getSimpleManagerChannelMaterialList = (channelId: number) => {
return request.get({
url: '/im/manager/channel-material/simple-list',
params: { channelId }
})
}
// 获得素材详情
export const getManagerChannelMaterial = (id: number) => {
return request.get({ url: '/im/manager/channel-material/get', params: { id } })
}
// 新增素材
export const createManagerChannelMaterial = (data: ImManagerChannelMaterialVO) => {
return request.post({ url: '/im/manager/channel-material/create', data })
}
// 修改素材
export const updateManagerChannelMaterial = (data: ImManagerChannelMaterialVO) => {
return request.put({ url: '/im/manager/channel-material/update', data })
}
// 删除素材
export const deleteManagerChannelMaterial = (id: number) => {
return request.delete({ url: '/im/manager/channel-material/delete', params: { id } })
}

View File

@ -1,34 +0,0 @@
import request from '@/config/axios'
export interface ImManagerChannelMessageVO {
id: number
channelId: number
channelName?: string
materialId: number
materialTitle?: string
materialCoverUrl?: string
type: number
content?: string
receiverUserIds?: number[]
sendTime?: Date
}
export interface ImManagerChannelMessageSendReqVO {
materialId: number
receiverUserIds?: number[]
}
// 立即推送频道消息
export const sendManagerChannelMessage = (data: ImManagerChannelMessageSendReqVO) => {
return request.post({ url: '/im/manager/channel-message/send', data })
}
// 删除频道消息
export const deleteManagerChannelMessage = (id: number) => {
return request.delete({ url: '/im/manager/channel-message/delete', params: { id } })
}
// 获得频道消息分页
export const getManagerChannelMessagePage = (params: PageParam) => {
return request.get({ url: '/im/manager/channel-message/page', params })
}

View File

@ -1,46 +0,0 @@
import request from '@/config/axios'
export interface ImManagerFacePackItemVO {
id: number
packId: number
url: string
name?: string
width: number
height: number
sort: number
status: number
createTime?: Date
}
// 获得表情分页
export const getManagerFacePackItemPage = (params: PageParam) => {
return request.get({ url: '/im/manager/face-pack-item/page', params })
}
// 获得表情详情
export const getManagerFacePackItem = (id: number) => {
return request.get({ url: '/im/manager/face-pack-item/get', params: { id } })
}
// 新增表情
export const createManagerFacePackItem = (data: ImManagerFacePackItemVO) => {
return request.post({ url: '/im/manager/face-pack-item/create', data })
}
// 修改表情
export const updateManagerFacePackItem = (data: ImManagerFacePackItemVO) => {
return request.put({ url: '/im/manager/face-pack-item/update', data })
}
// 删除表情
export const deleteManagerFacePackItem = (id: number) => {
return request.delete({ url: '/im/manager/face-pack-item/delete', params: { id } })
}
// 批量删除表情
export const deleteManagerFacePackItemList = (ids: number[]) => {
return request.delete({
url: '/im/manager/face-pack-item/delete-list',
params: { ids: ids.join(',') }
})
}

View File

@ -1,43 +0,0 @@
import request from '@/config/axios'
export interface ImManagerFacePackVO {
id: number
name: string
icon?: string
sort: number
status: number
createTime?: Date
}
// 获得表情包分页
export const getManagerFacePackPage = (params: PageParam) => {
return request.get({ url: '/im/manager/face-pack/page', params })
}
// 获得表情包详情
export const getManagerFacePack = (id: number) => {
return request.get({ url: '/im/manager/face-pack/get', params: { id } })
}
// 新增表情包
export const createManagerFacePack = (data: ImManagerFacePackVO) => {
return request.post({ url: '/im/manager/face-pack/create', data })
}
// 修改表情包
export const updateManagerFacePack = (data: ImManagerFacePackVO) => {
return request.put({ url: '/im/manager/face-pack/update', data })
}
// 删除表情包
export const deleteManagerFacePack = (id: number) => {
return request.delete({ url: '/im/manager/face-pack/delete', params: { id } })
}
// 批量删除表情包
export const deleteManagerFacePackList = (ids: number[]) => {
return request.delete({
url: '/im/manager/face-pack/delete-list',
params: { ids: ids.join(',') }
})
}

View File

@ -1,22 +0,0 @@
import request from '@/config/axios'
export interface ImManagerFaceUserItemVO {
id: number
userId: number
userNickname?: string
url: string
name?: string
width?: number
height?: number
createTime?: Date
}
// 获得用户表情分页
export const getManagerFaceUserItemPage = (params: PageParam) => {
return request.get({ url: '/im/manager/face-user-item/page', params })
}
// 删除用户表情
export const deleteManagerFaceUserItem = (id: number) => {
return request.delete({ url: '/im/manager/face-user-item/delete', params: { id } })
}

View File

@ -1,23 +0,0 @@
import request from '@/config/axios'
export interface ImManagerFriendVO {
id: number
userId: number
userNickname?: string
friendUserId: number
friendNickname?: string
displayName?: string
addSource?: number
silent: boolean
pinned: boolean
blocked: boolean
status: number
addTime?: Date
deleteTime?: Date
createTime: Date
}
// 获得好友关系分页
export const getManagerFriendPage = (params: PageParam) => {
return request.get({ url: '/im/manager/friend/page', params })
}

View File

@ -1,21 +0,0 @@
import request from '@/config/axios'
export interface ImManagerFriendRequestVO {
id: number
fromUserId: number
fromNickname?: string
toUserId: number
toNickname?: string
applyContent?: string
displayName?: string
addSource?: number
handleResult: number
handleContent?: string
handleTime?: Date
createTime: Date
}
// 获得好友申请分页
export const getManagerFriendRequestPage = (params: PageParam) => {
return request.get({ url: '/im/manager/friend-request/page', params })
}

View File

@ -1,62 +0,0 @@
import request from '@/config/axios'
export interface ImManagerGroupVO {
id: number
name: string
avatar?: string
notice?: string
ownerUserId: number
ownerNickname?: string
memberCount?: number
status: number
banned: boolean
mutedAll?: boolean // 是否全群禁言
bannedReason?: string
bannedTime?: Date
dissolvedTime?: Date
createTime: Date
}
export interface ImManagerGroupMemberVO {
userId: number
nickname?: string
avatar?: string
displayUserName?: string
groupRemark?: string
silent?: boolean
status: number
role?: number // 成员角色,参见 ImGroupMemberRole 枚举
joinTime?: Date
quitTime?: Date
muteEndTime?: Date // 禁言到期时间
}
// 获得群分页
export const getManagerGroupPage = (params: PageParam) => {
return request.get({ url: '/im/manager/group/page', params })
}
// 获得群详情
export const getManagerGroup = (id: number) => {
return request.get({ url: '/im/manager/group/get', params: { id } })
}
// 封禁群
export const banManagerGroup = (data: { id: number; reason: string }) => {
return request.put({ url: '/im/manager/group/ban', data })
}
// 解封群
export const unbanManagerGroup = (id: number) => {
return request.put({ url: '/im/manager/group/unban', params: { id } })
}
// 解散群
export const dissolveManagerGroup = (id: number) => {
return request.delete({ url: '/im/manager/group/dissolve', params: { id } })
}
// 获得群成员列表(含已退群成员,由前端按需过滤)
export const getManagerGroupMemberList = (groupId: number) => {
return request.get({ url: '/im/manager/group/member/list', params: { groupId } })
}

View File

@ -1,24 +0,0 @@
import request from '@/config/axios'
export interface ImManagerGroupRequestVO {
id: number
groupId: number
groupName?: string
userId: number
userNickname?: string
inviterUserId?: number
inviterNickname?: string
applyContent?: string
addSource?: number
handleResult: number
handleUserId?: number
handleNickname?: string
handleContent?: string
handleTime?: Date
createTime: Date
}
// 获得加群申请分页
export const getManagerGroupRequestPage = (params: PageParam) => {
return request.get({ url: '/im/manager/group-request/page', params })
}

View File

@ -1,29 +0,0 @@
import request from '@/config/axios'
export interface ImManagerGroupMessageVO {
id: number
clientMessageId?: string
groupId: number
groupName?: string
senderId: number
senderNickname?: string
type: number
content: string
status: number
atUserIds?: number[]
// 与 atUserIds 同长度;后端对找不到 / 已删除的成员返回 nullUI 用 `?.[idx] || userId` 回退到 userId 渲染
atUserNicknames?: (string | null)[]
receiptStatus: number
sendTime: Date
createTime: Date
}
// 获得群聊消息分页
export const getManagerGroupMessagePage = (params: PageParam) => {
return request.get({ url: '/im/manager/message/group/page', params })
}
// 获得群聊消息详情
export const getManagerGroupMessage = (id: number) => {
return request.get({ url: '/im/manager/message/group/get', params: { id } })
}

View File

@ -1,26 +0,0 @@
import request from '@/config/axios'
export interface ImManagerPrivateMessageVO {
id: number
clientMessageId?: string
senderId: number
senderNickname?: string
receiverId: number
receiverNickname?: string
type: number
content: string
status: number
receiptStatus: number
sendTime: Date
createTime: Date
}
// 获得私聊消息分页
export const getManagerPrivateMessagePage = (params: PageParam) => {
return request.get({ url: '/im/manager/message/private/page', params })
}
// 获得私聊消息详情
export const getManagerPrivateMessage = (id: number) => {
return request.get({ url: '/im/manager/message/private/get', params: { id } })
}

View File

@ -1,40 +0,0 @@
import request from '@/config/axios'
export interface ImManagerRtcCallVO {
id: number
room: string
conversationType: number
mediaType: number
inviterUserId: number
inviterNickname?: string
groupId?: number
groupName?: string
status: number
endReason?: number
startTime: Date
acceptTime?: Date
endTime?: Date
createTime: Date
}
export interface ImManagerRtcParticipantVO {
id: number
callId: number
userId: number
userNickname?: string
role: number
status: number
inviteTime: Date
acceptTime?: Date
leaveTime?: Date
}
// 获得通话记录分页
export const getManagerRtcCallPage = (params: PageParam) => {
return request.get({ url: '/im/manager/rtc/page', params })
}
// 获得通话参与者列表
export const getManagerRtcCallParticipantList = (id: number) => {
return request.get({ url: '/im/manager/rtc/participant-list', params: { id } })
}

View File

@ -1,43 +0,0 @@
import request from '@/config/axios'
export interface ImManagerSensitiveWordVO {
id: number
word: string
status: number
creator?: string
creatorName?: string
createTime?: Date
}
// 获得敏感词分页
export const getManagerSensitiveWordPage = (params: PageParam) => {
return request.get({ url: '/im/manager/sensitive-word/page', params })
}
// 获得敏感词详情
export const getManagerSensitiveWord = (id: number) => {
return request.get({ url: '/im/manager/sensitive-word/get', params: { id } })
}
// 新增敏感词
export const createManagerSensitiveWord = (data: ImManagerSensitiveWordVO) => {
return request.post({ url: '/im/manager/sensitive-word/create', data })
}
// 修改敏感词
export const updateManagerSensitiveWord = (data: ImManagerSensitiveWordVO) => {
return request.put({ url: '/im/manager/sensitive-word/update', data })
}
// 删除敏感词
export const deleteManagerSensitiveWord = (id: number) => {
return request.delete({ url: '/im/manager/sensitive-word/delete', params: { id } })
}
// 批量删除敏感词
export const deleteManagerSensitiveWordList = (ids: number[]) => {
return request.delete({
url: '/im/manager/sensitive-word/delete-list',
params: { ids: ids.join(',') }
})
}

View File

@ -1,76 +0,0 @@
import request from '@/config/axios'
export interface ImStatisticsOverviewVO {
totalUser: number
newUserToday: number
totalGroup: number
newGroupToday: number
activeUserDaily: number
activeUserWeekly: number
activeUserMonthly: number
privateMessageToday: number
groupMessageToday: number
privateMessageYesterday: number
groupMessageYesterday: number
}
export interface ImStatisticsTrendVO {
dates: string[]
series: Record<string, number[]>
}
export interface ImStatisticsMessageTypeVO {
type: number // 参见 ImContentTypeEnum 枚举类,由前端按 DICT_TYPE.IM_CONTENT_TYPE 翻译
value: number
}
export interface ImStatisticsGroupSizeVO {
range: string
count: number
}
export interface ImStatisticsTopSenderVO {
userId: number
nickname: string
messageCount: number
}
// 获得 KPI 概览
export const getStatisticsOverview = (): Promise<ImStatisticsOverviewVO> => {
return request.get<ImStatisticsOverviewVO>({ url: '/im/manager/statistics/overview' })
}
// 获得消息趋势(私聊 + 群聊双线)
export const getMessageTrend = (days: number): Promise<ImStatisticsTrendVO> => {
return request.get<ImStatisticsTrendVO>({
url: '/im/manager/statistics/message-trend',
params: { days }
})
}
// 获得用户趋势(新增注册 + 日活双线)
export const getUserTrend = (days: number): Promise<ImStatisticsTrendVO> => {
return request.get<ImStatisticsTrendVO>({
url: '/im/manager/statistics/user-trend',
params: { days }
})
}
// 获得内容类型分布(最近 30 天)
export const getMessageTypeDistribution = (): Promise<ImStatisticsMessageTypeVO[]> => {
return request.get<ImStatisticsMessageTypeVO[]>({
url: '/im/manager/statistics/message-type-distribution'
})
}
// 获得群规模分布
export const getGroupSizeDistribution = (): Promise<ImStatisticsGroupSizeVO[]> => {
return request.get<ImStatisticsGroupSizeVO[]>({
url: '/im/manager/statistics/group-size-distribution'
})
}
// 获得消息 TOP 发送者(最近 30 天)
export const getTopSenders = (): Promise<ImStatisticsTopSenderVO[]> => {
return request.get<ImStatisticsTopSenderVO[]>({ url: '/im/manager/statistics/top-senders' })
}

View File

@ -1,32 +0,0 @@
import request from '@/config/axios'
export interface ImChannelMessageRespVO {
id: number
clientMessageId?: string
channelId: number
materialId: number
type: number
content: string
receiptStatus?: number
sendTime: string
}
// 拉取当前用户应收的频道消息(离线增量);按 minId 游标分页
export const pullChannelMessageList = (
params: { minId: number; size?: number },
signal?: AbortSignal
) => {
return request.get<ImChannelMessageRespVO[]>({
url: '/im/channel/message/pull',
params,
signal
})
}
// 上报频道消息已读位置;切到频道会话或拉到新消息后调
export const readChannelMessages = (channelId: number, messageId: number) => {
return request.put({
url: '/im/channel/message/read',
params: { channelId, messageId }
})
}

View File

@ -1,76 +0,0 @@
import request from '@/config/axios'
// 群聊消息 Response VO
export interface ImGroupMessageRespVO {
id: number // 消息编号
clientMessageId: string // 客户端消息编号
senderId: number // 发送人编号
groupId: number // 群编号
type: number // 内容类型
content: string // 消息内容JSON 格式)
status: number // 消息状态
sendTime: string // 发送时间
atUserIds?: number[] // @ 目标用户编号列表
receiverUserIds?: number[] // 定向接收用户编号列表
receiptStatus?: number // 回执状态
readCount?: number // 已读人数(回执消息、且发送人为当前用户时有值)
}
// 群聊消息发送 Request VO
export interface ImGroupMessageSendReqVO {
clientMessageId: string // 客户端消息编号
groupId: number // 群编号
type: number // 内容类型
content: string // 消息内容JSON 格式)
atUserIds?: number[] // @ 目标用户编号列表
receipt?: boolean // 是否需要回执
}
// 群聊历史消息列表 Request VO
export interface ImGroupMessageListReqVO {
groupId: number | string // 群编号
maxId?: number | string // 起始消息编号(不含),为空则从最新消息开始
limit: number // 拉取数量1 ~ 200
}
// 发送群聊消息
export const sendGroupMessage = (data: ImGroupMessageSendReqVO) => {
return request.post<ImGroupMessageRespVO>({ url: '/im/message/group/send', data })
}
// 拉取群聊消息(增量)
export const pullGroupMessageList = (
params: { minId: number | string; size: number },
signal?: AbortSignal
) => {
return request.get<ImGroupMessageRespVO[]>({ url: '/im/message/group/pull', params, signal })
}
// 查询群聊历史消息
export const getGroupMessageList = (params: ImGroupMessageListReqVO) => {
return request.get<ImGroupMessageRespVO[]>({ url: '/im/message/group/list', params })
}
// 标记群聊消息已读
export const readGroupMessages = (groupId: number | string, messageId: number | string) => {
return request.put<boolean>({
url: '/im/message/group/read',
params: { groupId, messageId }
})
}
// 撤回群聊消息
export const recallGroupMessage = (id: number | string) => {
return request.delete<ImGroupMessageRespVO>({
url: '/im/message/group/recall',
params: { id }
})
}
// 获取群消息已读用户列表
export const getGroupReadUsers = (params: {
groupId: number | string
messageId: number | string
}) => {
return request.get<number[]>({ url: '/im/message/group/get-read-user-ids', params })
}

View File

@ -1,73 +0,0 @@
import request from '@/config/axios'
// 私聊消息 Response VO
export interface ImPrivateMessageRespVO {
id: number // 消息编号
clientMessageId: string // 客户端消息编号
senderId: number // 发送人编号
receiverId: number // 接收人编号
type: number // 内容类型
content: string // 消息内容JSON 格式)
status: number // 消息状态(正常 / 已撤回)
receiptStatus?: number // 回执状态(不需要 / 待完成 / 已完成),对齐 ImMessageReceiptStatus
sendTime: string // 发送时间
}
// 私聊消息发送 Request VO
export interface ImPrivateMessageSendReqVO {
clientMessageId: string // 客户端消息编号
receiverId: number // 接收人编号
type: number // 内容类型
content: string // 消息内容JSON 格式)
receipt?: boolean // 是否需要回执;不传后端默认 true普通私聊用户消息
}
// 私聊历史消息列表 Request VO
export interface ImPrivateMessageListReqVO {
receiverId: number | string // 接收人编号(对方)
maxId?: number | string // 起始消息编号(不含),为空则从最新消息开始
limit: number // 拉取数量1 ~ 200
}
// 发送私聊消息
export const sendPrivateMessage = (data: ImPrivateMessageSendReqVO) => {
return request.post<ImPrivateMessageRespVO>({ url: '/im/message/private/send', data })
}
// 拉取私聊消息(增量)
export const pullPrivateMessageList = (
params: { minId: number | string; size: number },
signal?: AbortSignal
) => {
return request.get<ImPrivateMessageRespVO[]>({ url: '/im/message/private/pull', params, signal })
}
// 查询私聊历史消息
export const getPrivateMessageList = (params: ImPrivateMessageListReqVO) => {
return request.get<ImPrivateMessageRespVO[]>({ url: '/im/message/private/list', params })
}
// 标记私聊消息已读
export const readPrivateMessages = (receiverId: number | string, messageId: number | string) => {
return request.put<boolean>({
url: '/im/message/private/read',
params: { receiverId, messageId }
})
}
// 查询对方已读到我发的最大消息 id多端 / 离线后用于补齐已读状态)
export const getPrivateMaxReadMessageId = (peerId: number | string, signal?: AbortSignal) => {
return request.get<number | null>({
url: '/im/message/private/max-read-message-id',
params: { peerId },
signal
})
}
// 撤回私聊消息
export const recallPrivateMessage = (id: number | string) => {
return request.delete<ImPrivateMessageRespVO>({
url: '/im/message/private/recall',
params: { id }
})
}

View File

@ -1,88 +0,0 @@
import request from '@/config/axios'
// 创建新通话请求 VO
export interface ImRtcCallCreateReqVO {
conversationType: number
mediaType: number
groupId?: number
inviteeIds: number[] // 被邀请的用户编号集合;私聊必传 1 个对端,群聊必传至少 1 人
}
// 通话中追加邀请请求 VO仅群通话可用
export interface ImRtcCallInviteReqVO {
room: string
inviteeIds: number[]
}
// 通话会话 VOcreate / join / accept / refreshToken 共用
export interface ImRtcCallRespVO {
room: string // 业务通话编号(同时作为 LiveKit 房间名)
livekitUrl: string
token?: string // ENDED 状态时为 null无需 connect LiveKit
conversationType: number
mediaType: number
status: number
endReason?: number // 结束原因;仅 status=ENDED 时有值
inviterId: number
groupId?: number
inviteeIds?: number[]
joinedUserIds?: number[]
}
// 群活跃通话查询响应;不含 token
export interface ImRtcGroupCallRespVO {
room: string
groupId: number
mediaType: number
inviterId: number
joinedUserIds?: number[]
inviteeIds?: number[]
}
// 创建新通话;私聊或群聊根据 conversationType 区分
export const createCall = (data: ImRtcCallCreateReqVO) => {
return request.post<ImRtcCallRespVO>({ url: '/im/rtc/create', data })
}
// 通话中追加邀请;仅群通话可用
export const inviteCall = (data: ImRtcCallInviteReqVO) => {
return request.post<boolean>({ url: '/im/rtc/invite', data })
}
// 加入已有群通话;用于胶囊条「加入」按钮
export const joinCall = (room: string) => {
return request.post<ImRtcCallRespVO>({ url: '/im/rtc/join', params: { room } })
}
// 接听通话
export const acceptCall = (room: string) => {
return request.post<ImRtcCallRespVO>({ url: '/im/rtc/accept', params: { room } })
}
// 拒绝通话
export const rejectCall = (room: string) => {
return request.post<boolean>({ url: '/im/rtc/reject', params: { room } })
}
// 取消邀请;主叫接通前调用
export const cancelCall = (room: string) => {
return request.post<boolean>({ url: '/im/rtc/cancel', params: { room } })
}
// 离开通话;接通后调用
export const leaveCall = (room: string) => {
return request.post<boolean>({ url: '/im/rtc/leave', params: { room } })
}
// 振铃超时检查RUNNING 端 timer 兜底,触发后端立即扫描该 room 的超时 INVITING接口静默
export const noAnswerCallCheck = (room: string) => {
return request.post<boolean>({ url: '/im/rtc/no-answer-call-check', params: { room } })
}
// 查询当前进行中的通话;目前仅群聊场景(胶囊条),返回 null 表示无活跃通话
export const getActiveCall = (groupId: number) => {
return request.get<ImRtcGroupCallRespVO | null>({
url: '/im/rtc/get-active-call',
params: { groupId }
})
}

View File

@ -20,45 +20,6 @@ export type CodegenTableVO = {
parentMenuId: number
}
export type CodegenTableSaveReqVO = CodegenTableVO & {
frontType?: number | null
genPath?: string
genType?: string
masterTableId?: number
subJoinColumnId?: number
subJoinMany?: boolean
treeParentColumnId?: number
treeNameColumnId?: number
}
export const createEmptyCodegenTableSaveReqVO = (): CodegenTableSaveReqVO => ({
id: 0,
tableId: 0,
isParentMenuIdValid: false,
dataSourceConfigId: 0,
scene: 0,
tableName: '',
tableComment: '',
remark: '',
moduleName: '',
businessName: '',
className: '',
classComment: '',
author: '',
createTime: new Date(),
updateTime: new Date(),
templateType: 0,
parentMenuId: 0,
frontType: null,
genPath: '',
genType: '',
masterTableId: undefined,
subJoinColumnId: undefined,
subJoinMany: undefined,
treeParentColumnId: undefined,
treeNameColumnId: undefined
})
export type CodegenColumnVO = {
id: number
tableId: number
@ -91,7 +52,7 @@ export type CodegenPreviewVO = {
}
export type CodegenUpdateReqVO = {
table: CodegenTableSaveReqVO
table: CodegenTableVO | any
columns: CodegenColumnVO[]
}
@ -107,7 +68,7 @@ export const getCodegenTablePage = (params: PageParam) => {
// 查询详情代码生成表定义
export const getCodegenTable = (id: number) => {
return request.get<CodegenUpdateReqVO>({ url: '/infra/codegen/detail?tableId=' + id })
return request.get({ url: '/infra/codegen/detail?tableId=' + id })
}
// 修改代码生成表定义

View File

@ -26,10 +26,7 @@ export const deleteDataSourceConfig = (id: number) => {
// 批量删除数据源配置
export const deleteDataSourceConfigList = (ids: number[]) => {
return request.delete({
url: '/infra/data-source-config/delete-list',
params: { ids: ids.join(',') }
})
return request.delete({ url: '/infra/data-source-config/delete-list', params: { ids: ids.join(',') } })
}
// 查询数据源配置详情

View File

@ -7,8 +7,8 @@ export interface Demo02CategoryVO {
}
// 查询示例分类列表
export const getDemo02CategoryList = async (params?: any) => {
return await request.get({ url: `/infra/demo02-category/list`, params })
export const getDemo02CategoryList = async () => {
return await request.get({ url: `/infra/demo02-category/list` })
}
// 查询示例分类详情

View File

@ -1,28 +1,29 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
/** 学生课程信息 */
export interface Demo03Course {
id?: number // 编号
studentId?: number // 学生编号
name?: string // 名字
score?: number // 分数
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
score?: number; // 分数
}
/** 学生班级信息 */
export interface Demo03Grade {
id?: number // 编号
studentId?: number // 学生编号
name?: string // 名字
teacher?: string // 班主任
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
teacher?: string; // 班主任
}
/** 学生信息 */
export interface Demo03Student {
id?: number // 编号
name?: string // 名字
sex?: number // 性别
birthday?: string | number // 出生日期
description?: string // 简介
id: number; // 编号
name?: string; // 名字
sex?: number; // 性别
birthday?: string | Dayjs; // 出生日期
description?: string; // 简介
}
// 学生 API
@ -54,9 +55,7 @@ export const Demo03StudentApi = {
/** 批量删除学生 */
deleteDemo03StudentList: async (ids: number[]) => {
return await request.delete({
url: `/infra/demo03-student-erp/delete-list?ids=${ids.join(',')}`
})
return await request.delete({ url: `/infra/demo03-student-erp/delete-list?ids=${ids.join(',')}` })
},
// 导出学生 Excel
@ -64,7 +63,7 @@ export const Demo03StudentApi = {
return await request.download({ url: `/infra/demo03-student-erp/export-excel`, params })
},
// ==================== 子表(学生课程) ====================
// ==================== 子表(学生课程) ====================
// 获得学生课程分页
getDemo03CoursePage: async (params) => {
@ -87,9 +86,7 @@ export const Demo03StudentApi = {
/** 批量删除学生课程 */
deleteDemo03CourseList: async (ids: number[]) => {
return await request.delete({
url: `/infra/demo03-student-erp/demo03-course/delete-list?ids=${ids.join(',')}`
})
return await request.delete({ url: `/infra/demo03-student-erp/demo03-course/delete-list?ids=${ids.join(',')}` })
},
// 获得学生课程
@ -97,7 +94,7 @@ export const Demo03StudentApi = {
return await request.get({ url: `/infra/demo03-student-erp/demo03-course/get?id=` + id })
},
// ==================== 子表(学生班级) ====================
// ==================== 子表(学生班级) ====================
// 获得学生班级分页
getDemo03GradePage: async (params) => {
@ -120,13 +117,11 @@ export const Demo03StudentApi = {
/** 批量删除学生班级 */
deleteDemo03GradeList: async (ids: number[]) => {
return await request.delete({
url: `/infra/demo03-student-erp/demo03-grade/delete-list?ids=${ids.join(',')}`
})
return await request.delete({ url: `/infra/demo03-student-erp/demo03-grade/delete-list?ids=${ids.join(',')}` })
},
// 获得学生班级
getDemo03Grade: async (id: number) => {
return await request.get({ url: `/infra/demo03-student-erp/demo03-grade/get?id=` + id })
}
},
}

View File

@ -1,28 +1,29 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
/** 学生课程信息 */
export interface Demo03Course {
id?: number // 编号
studentId?: number // 学生编号
name?: string // 名字
score?: number // 分数
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
score?: number; // 分数
}
/** 学生班级信息 */
export interface Demo03Grade {
id?: number // 编号
studentId?: number // 学生编号
name?: string // 名字
teacher?: string // 班主任
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
teacher?: string; // 班主任
}
/** 学生信息 */
export interface Demo03Student {
id?: number // 编号
name?: string // 名字
sex?: number // 性别
birthday?: string | number // 出生日期
description?: string // 简介
id: number; // 编号
name?: string; // 名字
sex?: number; // 性别
birthday?: string | Dayjs; // 出生日期
description?: string; // 简介
demo03courses?: Demo03Course[]
demo03grade?: Demo03Grade
}
@ -56,9 +57,7 @@ export const Demo03StudentApi = {
/** 批量删除学生 */
deleteDemo03StudentList: async (ids: number[]) => {
return await request.delete({
url: `/infra/demo03-student-inner/delete-list?ids=${ids.join(',')}`
})
return await request.delete({ url: `/infra/demo03-student-inner/delete-list?ids=${ids.join(',')}` })
},
// 导出学生 Excel
@ -66,21 +65,17 @@ export const Demo03StudentApi = {
return await request.download({ url: `/infra/demo03-student-inner/export-excel`, params })
},
// ==================== 子表(学生课程) ====================
// ==================== 子表(学生课程) ====================
// 获得学生课程列表
getDemo03CourseListByStudentId: async (studentId) => {
return await request.get({
url: `/infra/demo03-student-inner/demo03-course/list-by-student-id?studentId=` + studentId
})
return await request.get({ url: `/infra/demo03-student-inner/demo03-course/list-by-student-id?studentId=` + studentId })
},
// ==================== 子表(学生班级) ====================
// ==================== 子表(学生班级) ====================
// 获得学生班级
getDemo03GradeByStudentId: async (studentId) => {
return await request.get({
url: `/infra/demo03-student-inner/demo03-grade/get-by-student-id?studentId=` + studentId
})
}
return await request.get({ url: `/infra/demo03-student-inner/demo03-grade/get-by-student-id?studentId=` + studentId })
},
}

View File

@ -1,28 +1,29 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
/** 学生课程信息 */
export interface Demo03Course {
id?: number // 编号
studentId?: number // 学生编号
name?: string // 名字
score?: number // 分数
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
score?: number; // 分数
}
/** 学生班级信息 */
export interface Demo03Grade {
id?: number // 编号
studentId?: number // 学生编号
name?: string // 名字
teacher?: string // 班主任
id: number; // 编号
studentId?: number; // 学生编号
name?: string; // 名字
teacher?: string; // 班主任
}
/** 学生信息 */
export interface Demo03Student {
id?: number // 编号
name?: string // 名字
sex?: number // 性别
birthday?: string | number // 出生日期
description?: string // 简介
id: number; // 编号
name?: string; // 名字
sex?: number; // 性别
birthday?: string | Dayjs; // 出生日期
description?: string; // 简介
demo03courses?: Demo03Course[]
demo03grade?: Demo03Grade
}
@ -56,9 +57,7 @@ export const Demo03StudentApi = {
/** 批量删除学生 */
deleteDemo03StudentList: async (ids: number[]) => {
return await request.delete({
url: `/infra/demo03-student-normal/delete-list?ids=${ids.join(',')}`
})
return await request.delete({ url: `/infra/demo03-student-normal/delete-list?ids=${ids.join(',')}` })
},
// 导出学生 Excel
@ -66,21 +65,17 @@ export const Demo03StudentApi = {
return await request.download({ url: `/infra/demo03-student-normal/export-excel`, params })
},
// ==================== 子表(学生课程) ====================
// ==================== 子表(学生课程) ====================
// 获得学生课程列表
getDemo03CourseListByStudentId: async (studentId) => {
return await request.get({
url: `/infra/demo03-student-normal/demo03-course/list-by-student-id?studentId=` + studentId
})
return await request.get({ url: `/infra/demo03-student-normal/demo03-course/list-by-student-id?studentId=` + studentId })
},
// ==================== 子表(学生班级) ====================
// ==================== 子表(学生班级) ====================
// 获得学生班级
getDemo03GradeByStudentId: async (studentId) => {
return await request.get({
url: `/infra/demo03-student-normal/demo03-grade/get-by-student-id?studentId=` + studentId
})
}
return await request.get({ url: `/infra/demo03-student-normal/demo03-grade/get-by-student-id?studentId=` + studentId })
},
}

View File

@ -66,8 +66,3 @@ export const runJob = (id: number) => {
export const getJobNextTimes = (id: number) => {
return request.get({ url: '/infra/job/get_next_times?id=' + id })
}
// 同步定时任务到 Quartz
export const syncJob = () => {
return request.post({ url: '/infra/job/sync' })
}

View File

@ -6,8 +6,8 @@ export interface OtaTask {
name: string // 任务名称
description?: string // 任务描述
firmwareId?: number // 固件编号
status?: number // 任务状态
deviceScope: number // 升级范围
status: number // 任务状态
deviceScope?: number // 升级范围
deviceIds?: number[] // 指定设备ID列表当升级范围为指定设备时使用
deviceTotalCount?: number // 设备总共数量
deviceSuccessCount?: number // 设备成功数量

View File

@ -5,7 +5,6 @@ export interface IotSceneRule {
id?: number // 场景编号
name: string // 场景名称
description?: string // 场景描述
lastTriggerTime?: string // 最近触发时间
status: number // 场景状态0-开启1-关闭
triggers: Trigger[] // 触发器数组
actions: Action[] // 执行器数组

View File

@ -18,35 +18,47 @@ export interface ThingModelData {
service?: ThingModelService // 服务
}
/**
* ThingModelProperty
*/
export interface ThingModelProperty {
[key: string]: any
}
/**
* ThingModelEvent
*/
export interface ThingModelEvent {
[key: string]: any
}
/**
* ThingModelService
*/
export interface ThingModelService {
[key: string]: any
}
/** dataSpecs 数值型数据结构 */
export interface DataSpecsNumberData {
dataType: string // 数据类型,取值为 INT、FLOAT 或 DOUBLE
max?: string // 最大值,必须与 dataType 设置一致,且为 STRING 类型
min?: string // 最小值,必须与 dataType 设置一致,且为 STRING 类型
step?: string // 步长,必须与 dataType 设置一致,且为 STRING 类型
dataType: 'int' | 'float' | 'double' // 数据类型,取值为 INT、FLOAT 或 DOUBLE
max: string // 最大值,必须与 dataType 设置一致,且为 STRING 类型
min: string // 最小值,必须与 dataType 设置一致,且为 STRING 类型
step: string // 步长,必须与 dataType 设置一致,且为 STRING 类型
precise?: string // 精度,当 dataType 为 FLOAT 或 DOUBLE 时可选
defaultValue?: string // 默认值,可选
unit?: string // 单位的符号
unitName?: string // 单位的名称
unit: string // 单位的符号
unitName: string // 单位的名称
}
/** dataSpecs 枚举型数据结构 */
export interface DataSpecsEnumOrBoolData {
dataType: string
dataType: 'enum' | 'bool'
defaultValue?: string // 默认值,可选
name: string // 枚举项的名称
value: number | undefined // 枚举值
}
/** dataSpecs 通用数据结构 */
export type ThingModelDataSpecs =
| DataSpecsNumberData
| DataSpecsEnumOrBoolData
| ThingModelDateOrTextDataSpecs
| ThingModelArrayDataSpecs
| ThingModelStructDataSpecs
| Record<string, any>
/** 物模型TSL响应数据结构 */
export interface IotThingModelTSLResp {
productId: number
@ -64,9 +76,8 @@ export interface ThingModelProperty {
required?: boolean
dataType: string
description?: string
dataSpecs?: ThingModelDataSpecs
dataSpecsList?: ThingModelPropertyDataSpecs[]
value?: number
dataSpecs?: ThingModelProperty
dataSpecsList?: ThingModelProperty[]
}
/** 物模型事件 */
@ -99,8 +110,8 @@ export interface ThingModelParam {
direction: string
paraOrder?: number
dataType: string
dataSpecs?: ThingModelDataSpecs
dataSpecsList?: ThingModelPropertyDataSpecs[]
dataSpecs?: ThingModelProperty
dataSpecsList?: ThingModelProperty[]
}
/** 数值型数据规范 */
@ -131,26 +142,24 @@ export interface ThingModelDateOrTextDataSpecs {
/** 数组型数据规范 */
export interface ThingModelArrayDataSpecs {
dataType: string
size?: number
childDataType?: string
dataSpecsList?: ThingModelPropertyDataSpecs[]
dataType: 'array'
size: number
childDataType: string
dataSpecsList?: ThingModelProperty[]
}
/** 结构体型数据规范 */
export interface ThingModelStructDataSpecs {
dataType: string
identifier?: string
name?: string
accessMode?: string
dataType: 'struct'
identifier: string
name: string
accessMode: string
required?: boolean
childDataType?: string
dataSpecs?: ThingModelDataSpecs
dataSpecsList?: ThingModelPropertyDataSpecs[]
childDataType: string
dataSpecs?: ThingModelProperty
dataSpecsList?: ThingModelProperty[]
}
export type ThingModelPropertyDataSpecs = ThingModelProperty | DataSpecsEnumOrBoolData
// IoT 产品物模型 API
export const ThingModelApi = {
// 查询产品物模型分页

View File

@ -2,17 +2,11 @@ import request from '@/config/axios'
export interface Favorite {
id?: number
userId?: number // 用户编号
userId?: string // 用户编号
spuId?: number | null // 商品 SPU 编号
name?: string
picUrl?: string
price?: number
salesCount?: number
createTime?: Date
status?: number
}
// 获得 ProductFavorite 列表
export const getFavoritePage = (params: PageParam) => {
return request.get<PageResult<Favorite[]>>({ url: '/product/favorite/page', params })
return request.get({ url: '/product/favorite/page', params })
}

View File

@ -65,9 +65,9 @@ export const getSpuPage = (params: PageParam) => {
return request.get({ url: '/product/spu/page', params })
}
// 获得 Spu 列表 tabsCount(支持按 name/categoryId/createTime 筛选)
export const getTabsCount = (params?: any) => {
return request.get({ url: '/product/spu/get-count', params })
// 获得 Spu 列表 tabsCount
export const getTabsCount = () => {
return request.get({ url: '/product/spu/get-count' })
}
// 创建商品 Spu

View File

@ -5,8 +5,6 @@ export interface CombinationActivityVO {
id?: number
name?: string
spuId?: number
spuName?: string
picUrl?: string
totalLimitCount?: number
singleLimitCount?: number
startTime?: Date

View File

@ -10,10 +10,10 @@ export interface RewardActivityVO {
conditionType?: number
productScope?: number
rules: RewardRule[]
productScopeValues: number[] // 商品范围:值为品类编号列表、商品编号列表
// 如下仅用于表单,不提交
productCategoryIds: number[]
productSpuIds: number[]
productScopeValues?: number[] // 商品范围:值为品类编号列表、商品编号列表
productCategoryIds?: number[]
productSpuIds?: number[]
}
// 优惠规则

View File

@ -5,7 +5,6 @@ export interface SeckillActivityVO {
id?: number
spuId?: number
name?: string
picUrl?: string
status?: number
remark?: string
startTime?: Date

View File

@ -115,7 +115,5 @@ export const getOrderCountTrendComparison = (
/** 时间参数需要格式化, 确保接口能识别 */
const formatDateParam = (params: TradeTrendReqVO) => {
return {
times: [formatDate(params.times[0]), formatDate(params.times[1])]
} as TradeTrendReqVO
return { times: [formatDate(params.times[0]), formatDate(params.times[1])] } as TradeTrendReqVO
}

View File

@ -1,5 +1,4 @@
import request from '@/config/axios'
import type { OrderItemRespVO, OrderVO } from '@/api/mall/trade/order'
export interface TradeAfterSaleVO {
id?: number | null // 售后编号,主键自增
@ -33,21 +32,6 @@ export interface TradeAfterSaleVO {
receiveReason?: string // 收货备注
}
export interface TradeAfterSaleDetailVO extends TradeAfterSaleVO {
order: OrderVO
orderItem?: OrderItemRespVO
user?: {
id?: number
nickname?: string
}
logs: Array<{
id?: number
createTime?: Date
content?: string
userType?: number
}>
}
export interface ProductPropertiesVO {
propertyId?: number | null // 属性的编号
propertyName?: string // 属性的名称
@ -57,15 +41,12 @@ export interface ProductPropertiesVO {
// 获得交易售后分页
export const getAfterSalePage = async (params) => {
return await request.get<PageResult<TradeAfterSaleVO[]>>({
url: `/trade/after-sale/page`,
params
})
return await request.get({ url: `/trade/after-sale/page`, params })
}
// 获得交易售后详情
export const getAfterSale = async (id: any) => {
return await request.get<TradeAfterSaleDetailVO>({ url: `/trade/after-sale/get-detail?id=${id}` })
return await request.get({ url: `/trade/after-sale/get-detail?id=${id}` })
}
// 同意售后

View File

@ -20,15 +20,12 @@ export const createBrokerageUser = (data: any) => {
// 查询分销用户列表
export const getBrokerageUserPage = async (params: any) => {
return await request.get<PageResult<BrokerageUserVO[]>>({
url: `/trade/brokerage-user/page`,
params
})
return await request.get({ url: `/trade/brokerage-user/page`, params })
}
// 查询分销用户详情
export const getBrokerageUser = async (id: number) => {
return await request.get<BrokerageUserVO>({ url: `/trade/brokerage-user/get?id=` + id })
return await request.get({ url: `/trade/brokerage-user/get?id=` + id })
}
// 修改推广员

View File

@ -1,28 +1,20 @@
import request from '@/config/axios'
export interface ConfigVO {
id?: number | null
afterSaleRefundReasons: string[]
afterSaleReturnReasons: string[]
deliveryExpressFreeEnabled: boolean
deliveryExpressFreePrice: number
deliveryPickUpEnabled: boolean
brokerageEnabled: boolean
brokerageEnabledCondition?: number
brokerageBindMode?: number
brokeragePosterUrls: string[]
brokerageEnabledCondition: number
brokerageBindMode: number
brokeragePosterUrls: string
brokerageFirstPercent: number
brokerageSecondPercent: number
brokerageWithdrawMinPrice: number
brokerageWithdrawFeePercent: number
brokerageFrozenDays: number
brokerageWithdrawTypes: number[]
tencentLbsKey?: string
brokerageWithdrawTypes: string
}
// 查询交易中心配置详情
export const getTradeConfig = async () => {
return await request.get<ConfigVO>({ url: `/trade/config/get` })
return await request.get({ url: `/trade/config/get` })
}
// 保存交易中心配置

View File

@ -1,7 +1,7 @@
import request from '@/config/axios'
export interface DeliveryExpressVO {
id?: number
id: number
code: string
name: string
logo: string
@ -11,20 +11,17 @@ export interface DeliveryExpressVO {
// 查询快递公司列表
export const getDeliveryExpressPage = async (params: PageParam) => {
return await request.get<PageResult<DeliveryExpressVO[]>>({
url: '/trade/delivery/express/page',
params
})
return await request.get({ url: '/trade/delivery/express/page', params })
}
// 查询快递公司详情
export const getDeliveryExpress = async (id: number) => {
return await request.get<DeliveryExpressVO>({ url: '/trade/delivery/express/get?id=' + id })
return await request.get({ url: '/trade/delivery/express/get?id=' + id })
}
// 获得快递公司精简信息列表
export const getSimpleDeliveryExpressList = () => {
return request.get<DeliveryExpressVO[]>({ url: '/trade/delivery/express/list-all-simple' })
return request.get({ url: '/trade/delivery/express/list-all-simple' })
}
// 新增快递公司

View File

@ -1,12 +1,12 @@
import request from '@/config/axios'
export interface DeliveryExpressTemplateVO {
id?: number
id: number
name: string
chargeMode: number
sort: number
charges: ExpressTemplateChargeVO[]
frees: ExpressTemplateFreeVO[]
templateCharge: ExpressTemplateChargeVO[]
templateFree: ExpressTemplateFreeVO[]
}
export declare type ExpressTemplateChargeVO = {
@ -25,24 +25,17 @@ export declare type ExpressTemplateFreeVO = {
// 查询快递运费模板列表
export const getDeliveryExpressTemplatePage = async (params: PageParam) => {
return await request.get<PageResult<DeliveryExpressTemplateVO[]>>({
url: '/trade/delivery/express-template/page',
params
})
return await request.get({ url: '/trade/delivery/express-template/page', params })
}
// 查询快递运费模板详情
export const getDeliveryExpressTemplate = async (id: number) => {
return await request.get<DeliveryExpressTemplateVO>({
url: '/trade/delivery/express-template/get?id=' + id
})
return await request.get({ url: '/trade/delivery/express-template/get?id=' + id })
}
// 查询快递运费模板详情
export const getSimpleTemplateList = async () => {
return await request.get<DeliveryExpressTemplateVO[]>({
url: '/trade/delivery/express-template/list-all-simple'
})
return await request.get({ url: '/trade/delivery/express-template/list-all-simple' })
}
// 新增快递运费模板

View File

@ -1,48 +1,34 @@
import request from '@/config/axios'
import type { UserVO } from '@/api/system/user'
export interface DeliveryPickUpStoreVO {
id?: number
id: number
name: string
introduction: string
phone: string
areaId?: number
areaId: number
detailAddress: string
logo: string
openingTime?: string
closingTime?: string
latitude?: number
longitude?: number
openingTime: string
closingTime: string
latitude: number
longitude: number
status: number
verifyUserIds?: number[] // 绑定用户编号组数
verifyUsers?: UserVO[] // 绑定用户列表
}
export interface DeliveryPickUpStoreBindReqVO {
id: number
verifyUserIds: number[]
verifyUserIds: number[] // 绑定用户编号组数
}
// 查询自提门店列表
export const getDeliveryPickUpStorePage = async (params: any) => {
return await request.get<PageResult<DeliveryPickUpStoreVO[]>>({
url: '/trade/delivery/pick-up-store/page',
params
})
return await request.get({ url: '/trade/delivery/pick-up-store/page', params })
}
// 查询自提门店详情
export const getDeliveryPickUpStore = async (id: number) => {
return await request.get<DeliveryPickUpStoreVO>({
url: '/trade/delivery/pick-up-store/get?id=' + id
})
return await request.get({ url: '/trade/delivery/pick-up-store/get?id=' + id })
}
// 查询自提门店精简列表
export const getSimpleDeliveryPickUpStoreList = async () => {
return await request.get<DeliveryPickUpStoreVO[]>({
url: '/trade/delivery/pick-up-store/simple-list'
})
export const getSimpleDeliveryPickUpStoreList = async (): Promise<DeliveryPickUpStoreVO[]> => {
return await request.get({ url: '/trade/delivery/pick-up-store/simple-list' })
}
// 新增自提门店
@ -61,6 +47,6 @@ export const deleteDeliveryPickUpStore = async (id: number) => {
}
// 绑定自提店员
export const bindStoreStaffId = async (data: DeliveryPickUpStoreBindReqVO) => {
export const bindStoreStaffId = async (data: any) => {
return await request.post({ url: '/trade/delivery/pick-up-store/bind', data })
}

View File

@ -122,7 +122,7 @@ export interface TradeOrderSummaryRespVO {
// 查询交易订单列表
export const getOrderPage = async (params: any) => {
return await request.get<PageResult<OrderVO[]>>({ url: `/trade/order/page`, params })
return await request.get({ url: `/trade/order/page`, params })
}
// 查询交易订单统计
@ -132,14 +132,12 @@ export const getOrderSummary = async (params: any) => {
// 查询交易订单详情
export const getOrder = async (id: number | null) => {
return await request.get<OrderVO>({ url: `/trade/order/get-detail?id=` + id })
return await request.get({ url: `/trade/order/get-detail?id=` + id })
}
// 查询交易订单物流详情
export const getExpressTrackList = async (id: number | null) => {
return await request.get<Array<{ time?: Date | string; content?: string }>>({
url: `/trade/order/get-express-track-list?id=` + id
})
return await request.get({ url: `/trade/order/get-express-track-list?id=` + id })
}
export interface DeliveryVO {

View File

@ -1,8 +1,8 @@
import request from '@/config/axios'
export interface ConfigVO {
id?: number
pointTradeDeductEnable: boolean
id: number
pointTradeDeductEnable: number
pointTradeDeductUnitPrice: number
pointTradeDeductMaxPrice: number
pointTradeGivePoint: number
@ -10,7 +10,7 @@ export interface ConfigVO {
// 查询积分设置详情
export const getConfig = async () => {
return await request.get<ConfigVO>({ url: `/member/config/get` })
return await request.get({ url: `/member/config/get` })
}
// 新增修改积分设置

View File

@ -13,13 +13,10 @@ export interface ExperienceRecordVO {
// 查询会员经验记录列表
export const getExperienceRecordPage = async (params) => {
return await request.get<PageResult<ExperienceRecordVO[]>>({
url: `/member/experience-record/page`,
params
})
return await request.get({ url: `/member/experience-record/page`, params })
}
// 查询会员经验记录详情
export const getExperienceRecord = async (id: number) => {
return await request.get<ExperienceRecordVO>({ url: `/member/experience-record/get?id=` + id })
return await request.get({ url: `/member/experience-record/get?id=` + id })
}

View File

@ -1,51 +1,36 @@
import request from '@/config/axios'
export interface UserVO {
id?: number
avatar?: string
birthday?: number
createTime?: number
loginDate?: number
loginIp?: string
mark?: string
mobile?: string
email?: string
password?: string
name?: string
nickname?: string
registerIp?: string
sex?: number
status?: number
areaId?: number
areaName?: string
tagIds?: number[]
groupId?: number
levelId?: number
levelName?: string | null
point?: number | null
totalPoint?: number | null
experience?: number | null
}
export interface UserLevelUpdateReqVO {
id: number
levelId: number
reason: string
}
export interface UserPointUpdateReqVO {
id: number
point: number
avatar: string | undefined
birthday: number | undefined
createTime: number | undefined
loginDate: number | undefined
loginIp: string
mark: string
mobile: string
email: string | undefined
name: string | undefined
nickname: string | undefined
registerIp: string
sex: number
status: number
areaId: number | undefined
areaName: string | undefined
levelName: string | null
point: number | undefined | null
totalPoint: number | undefined | null
experience: number | null | undefined
}
// 查询会员用户列表
export const getUserPage = async (params) => {
return await request.get<PageResult<UserVO[]>>({ url: `/member/user/page`, params })
return await request.get({ url: `/member/user/page`, params })
}
// 查询会员用户详情
export const getUser = async (id: number) => {
return await request.get<UserVO>({ url: `/member/user/get?id=` + id })
return await request.get({ url: `/member/user/get?id=` + id })
}
// 修改会员用户
@ -54,11 +39,11 @@ export const updateUser = async (data: UserVO) => {
}
// 修改会员用户等级
export const updateUserLevel = async (data: UserLevelUpdateReqVO) => {
export const updateUserLevel = async (data: any) => {
return await request.put({ url: `/member/user/update-level`, data })
}
// 修改会员用户积分
export const updateUserPoint = async (data: UserPointUpdateReqVO) => {
export const updateUserPoint = async (data: any) => {
return await request.put({ url: `/member/user/update-point`, data })
}

View File

@ -2,14 +2,14 @@ import request from '@/config/axios'
// MES 物料产品分类 VO
export interface MdItemTypeVO {
id?: number // 分类编号
parentId?: number // 父分类编号
code?: string // 分类编码
name?: string // 分类名称
id: number // 分类编号
parentId: number // 父分类编号
code: string // 分类编码
name: string // 分类名称
itemOrProduct: string // 物料/产品标识
sort: number // 显示排序
status: number // 状态
remark?: string // 备注
remark: string // 备注
}
// MES 物料产品分类 API

View File

@ -2,14 +2,14 @@ import request from '@/config/axios'
// MES 计量单位 VO
export interface MdUnitMeasureVO {
id?: number // 单位编号
code?: string // 单位编码
name?: string // 单位名称
id: number // 单位编号
code: string // 单位编码
name: string // 单位名称
primaryFlag: boolean // 是否主单位
primaryId?: number // 主单位编号
changeRate?: number // 与主单位换算比例
primaryId: number // 主单位编号
changeRate: number // 与主单位换算比例
status: number // 状态
remark?: string // 备注
remark: string // 备注
}
// MES 计量单位 API

View File

@ -13,20 +13,6 @@ export interface WmSnGroupVO {
createTime?: Date
}
export interface WmSnVO {
id?: number
uuid?: string
code?: string
itemId?: number
itemCode?: string
itemName?: string
specification?: string
unitName?: string
batchCode?: string
workOrderId?: number
createTime?: Date
}
export interface WmSnGenerateVO {
itemId?: number
batchCode?: string
@ -44,11 +30,6 @@ export const getSnGroupPage = async (params: any) => {
return await request.get({ url: `/mes/wm/sn/group-page`, params })
}
// 获得批次 SN 码明细列表
export const getSnListByUuid = async (uuid: string) => {
return await request.get({ url: `/mes/wm/sn/list-by-uuid`, params: { uuid } })
}
// 批量删除 SN 码(按批次 UUID
export const deleteSnBatch = async (uuid: string) => {
return await request.delete({ url: `/mes/wm/sn/delete-batch`, params: { uuid } })

View File

@ -7,11 +7,6 @@ export interface TagVO {
createTime: Date
}
export interface SimpleTagVO {
tagId: number
name: string
}
// 创建公众号标签
export const createTag = (data: TagVO) => {
return request.post({
@ -52,7 +47,7 @@ export const getTagPage = (query: PageParam) => {
// 获取公众号标签精简信息列表
export const getSimpleTagList = () => {
return request.get<SimpleTagVO[]>({
return request.get({
url: '/mp/tag/list-all-simple'
})
}

View File

@ -62,7 +62,7 @@ export const deleteApp = (id: number) => {
// 获得支付应用列表
export const getAppList = () => {
return request.get<AppVO[]>({
return request.get({
url: '/pay/app/list'
})
}

View File

@ -1,43 +1,15 @@
import request from '@/config/axios'
export interface NotifyLogVO {
id?: number
status?: number
notifyTimes?: number
lastExecuteTime?: Date
createTime?: Date
response?: string
}
export interface NotifyTaskVO {
id?: number
appId?: number
appName?: string
merchantOrderId?: string
merchantRefundId?: string
merchantTransferId?: string
dataId?: number
type?: number
status?: number
notifyTimes?: number
maxNotifyTimes?: number
lastExecuteTime?: Date
nextNotifyTime?: Date
createTime?: Date
updateTime?: Date
logs?: NotifyLogVO[]
}
// 获得支付通知明细
export const getNotifyTaskDetail = (id: number) => {
return request.get<NotifyTaskVO>({
export const getNotifyTaskDetail = (id) => {
return request.get({
url: '/pay/notify/get-detail?id=' + id
})
}
// 获得支付通知分页
export const getNotifyTaskPage = (query: any) => {
return request.get<PageResult<NotifyTaskVO[]>>({
export const getNotifyTaskPage = (query) => {
return request.get({
url: '/pay/notify/page',
params: query
})

View File

@ -12,7 +12,6 @@ export interface OrderVO {
notifyUrl: string
notifyStatus: number
amount: number
price: number
channelFeeRate: number
channelFeeAmount: number
status: number
@ -29,43 +28,64 @@ export interface OrderVO {
createTime: Date
}
export interface OrderDetailVO {
merchantOrderId?: string
no?: string
export interface OrderPageReqVO extends PageParam {
merchantId?: number
appId?: number
appName?: string
status?: number
price?: number
refundPrice?: number
channelFeePrice?: number
channelFeeRate?: number
successTime?: Date
expireTime?: Date
createTime?: Date
updateTime?: Date
channelId?: number
channelCode?: string
merchantOrderId?: string
subject?: string
body?: string
channelCode?: string
userIp?: string
channelOrderNo?: string
channelUserId?: string
notifyUrl?: string
extension?: {
channelNotifyData?: string
}
notifyStatus?: number
amount?: number
channelFeeRate?: number
channelFeeAmount?: number
status?: number
expireTime?: Date[]
successTime?: Date[]
notifyTime?: Date[]
successExtensionId?: number
refundStatus?: number
refundTimes?: number
channelUserId?: string
channelOrderNo?: string
createTime?: Date[]
}
export interface OrderExportReqVO {
merchantId?: number
appId?: number
channelId?: number
channelCode?: string
merchantOrderId?: string
subject?: string
body?: string
notifyUrl?: string
notifyStatus?: number
amount?: number
channelFeeRate?: number
channelFeeAmount?: number
status?: number
expireTime?: Date[]
successTime?: Date[]
notifyTime?: Date[]
successExtensionId?: number
refundStatus?: number
refundTimes?: number
channelUserId?: string
channelOrderNo?: string
createTime?: Date[]
}
// 查询列表支付订单
export const getOrderPage = async (params: any) => {
return await request.get<PageResult<OrderDetailVO[]>>({
url: '/pay/order/page',
params
})
export const getOrderPage = async (params: OrderPageReqVO) => {
return await request.get({ url: '/pay/order/page', params })
}
// 查询详情支付订单
export const getOrder = async (id: number, sync?: boolean) => {
return await request.get<OrderVO>({
return await request.get({
url: '/pay/order/get',
params: {
id,
@ -76,7 +96,7 @@ export const getOrder = async (id: number, sync?: boolean) => {
// 获得支付订单的明细
export const getOrderDetail = async (id: number) => {
return await request.get<OrderDetailVO>({ url: '/pay/order/get-detail?id=' + id })
return await request.get({ url: '/pay/order/get-detail?id=' + id })
}
// 提交支付订单
@ -85,6 +105,6 @@ export const submitOrder = async (data: any) => {
}
// 导出支付订单
export const exportOrder = async (params: any) => {
export const exportOrder = async (params: OrderExportReqVO) => {
return await request.download({ url: '/pay/order/export-excel', params })
}

View File

@ -29,36 +29,70 @@ export interface RefundVO {
createTime: Date
}
export interface RefundDetailVO {
merchantRefundId?: string
channelRefundNo?: string
merchantOrderId?: string
channelOrderNo?: string
export interface RefundPageReqVO extends PageParam {
merchantId?: number
appId?: number
appName?: string
payPrice?: number
refundPrice?: number
status?: number
successTime?: Date
createTime?: Date
updateTime?: Date
channelId?: number
channelCode?: string
orderId?: string
tradeNo?: string
merchantOrderId?: string
merchantRefundNo?: string
notifyUrl?: string
notifyStatus?: number
status?: number
type?: number
payAmount?: number
refundAmount?: number
reason?: string
userIp?: string
notifyUrl?: string
channelOrderNo?: string
channelRefundNo?: string
channelErrorCode?: string
channelErrorMsg?: string
channelNotifyData?: string
channelExtras?: string
expireTime?: Date[]
successTime?: Date[]
notifyTime?: Date[]
createTime?: Date[]
}
export interface PayRefundExportReqVO {
merchantId?: number
appId?: number
channelId?: number
channelCode?: string
orderId?: string
tradeNo?: string
merchantOrderId?: string
merchantRefundNo?: string
notifyUrl?: string
notifyStatus?: number
status?: number
type?: number
payAmount?: number
refundAmount?: number
reason?: string
userIp?: string
channelOrderNo?: string
channelRefundNo?: string
channelErrorCode?: string
channelErrorMsg?: string
channelExtras?: string
expireTime?: Date[]
successTime?: Date[]
notifyTime?: Date[]
createTime?: Date[]
}
// 查询列表退款订单
export const getRefundPage = (params: any) => {
return request.get<PageResult<RefundDetailVO[]>>({ url: '/pay/refund/page', params })
export const getRefundPage = (params: RefundPageReqVO) => {
return request.get({ url: '/pay/refund/page', params })
}
// 查询详情退款订单
export const getRefund = (id: number) => {
return request.get<RefundDetailVO>({ url: '/pay/refund/get?id=' + id })
return request.get({ url: '/pay/refund/get?id=' + id })
}
// 新增退款订单
@ -77,6 +111,6 @@ export const deleteRefund = (id: number) => {
}
// 导出退款订单
export const exportRefund = (params: any) => {
export const exportRefund = (params: PayRefundExportReqVO) => {
return request.download({ url: '/pay/refund/export-excel', params })
}

View File

@ -1,42 +1,16 @@
import request from '@/config/axios'
export interface TransferVO {
id?: number
no?: string
appId?: number
appName?: string
channelId?: number
channelCode?: string
merchantTransferId?: string
type?: string
status?: number
successTime?: Date
price?: number
subject?: string
userName?: string
userAccount?: string
accountNo?: string
channelTransferNo?: string
userIp?: string
notifyUrl?: string
channelNotifyData?: string
createTime?: Date
}
// 查询转账单列表
export const getTransferPage = async (params: any) => {
return await request.get<PageResult<TransferVO[]>>({
url: `/pay/transfer/page`,
params
})
export const getTransferPage = async (params: PageParam) => {
return await request.get({ url: `/pay/transfer/page`, params })
}
// 查询转账单详情
export const getTransfer = async (id: number) => {
return await request.get<TransferVO>({ url: '/pay/transfer/get?id=' + id })
return await request.get({ url: '/pay/transfer/get?id=' + id })
}
// 导出转账单
export const exportTransfer = async (params: any) => {
export const exportTransfer = async (params: PageParam) => {
return await request.download({ url: '/pay/transfer/export-excel', params })
}

View File

@ -16,12 +16,6 @@ export interface WalletVO {
freezePrice: number
}
/** 修改会员钱包余额 Request VO */
export interface WalletBalanceUpdateReqVO {
userId: number
balance: number
}
/** 查询用户钱包详情 */
export const getWallet = async (params: PayWalletUserReqVO) => {
return await request.get<WalletVO>({ url: `/pay/wallet/get`, params })
@ -33,6 +27,6 @@ export const getWalletPage = async (params: any) => {
}
/** 修改会员钱包余额 */
export const updateWalletBalance = async (data: WalletBalanceUpdateReqVO) => {
export const updateWalletBalance = async (data: any) => {
return await request.put({ url: `/pay/wallet/update-balance`, data })
}

View File

@ -10,7 +10,6 @@ export interface DeptVO {
phone: string
email: string
createTime: Date
children?: DeptVO[]
}
// 查询部门(精简)列表

View File

@ -1,8 +1,8 @@
import request from '@/config/axios'
export interface DictDataVO {
id?: number
sort?: number
id: number
sort: number
label: string
value: string
dictType: string
@ -10,7 +10,7 @@ export interface DictDataVO {
colorType: string
cssClass: string
remark: string
createTime?: Date
createTime: Date
}
// 查询字典数据(精简)列表

View File

@ -1,12 +1,12 @@
import request from '@/config/axios'
export interface DictTypeVO {
id?: number
id: number
name: string
type: string
status: number
remark: string
createTime?: Date
createTime: Date
}
// 查询字典(精简)列表

View File

@ -1,7 +1,7 @@
import request from '@/config/axios'
export interface MailAccountVO {
id?: number
id: number
mail: string
username: string
password: string
@ -38,10 +38,7 @@ export const deleteMailAccount = async (id: number) => {
// 批量删除邮箱账号
export const deleteMailAccountList = async (ids: number[]) => {
return await request.delete({
url: '/system/mail-account/delete-list',
params: { ids: ids.join(',') }
})
return await request.delete({ url: '/system/mail-account/delete-list', params: { ids: ids.join(',') } })
}
// 获得邮箱账号精简列表

View File

@ -48,8 +48,5 @@ export const deleteOAuth2Client = (id: number) => {
// 批量删除 OAuth2 客户端
export const deleteOAuth2ClientList = (ids: number[]) => {
return request.delete({
url: '/system/oauth2-client/delete-list',
params: { ids: ids.join(',') }
})
return request.delete({ url: '/system/oauth2-client/delete-list', params: { ids: ids.join(',') } })
}

View File

@ -39,10 +39,7 @@ export const deleteTenantPackage = (id: number) => {
// 批量删除租户套餐
export const deleteTenantPackageList = (ids: number[]) => {
return request.delete({
url: '/system/tenant-package/delete-list',
params: { ids: ids.join(',') }
})
return request.delete({ url: '/system/tenant-package/delete-list', params: { ids: ids.join(',') } })
}
// 获取租户套餐精简信息列表

View File

@ -5,7 +5,6 @@ export interface UserVO {
username: string
nickname: string
deptId: number
deptName?: string
postIds: string[]
email: string
mobile: string
@ -16,24 +15,7 @@ export interface UserVO {
remark: string
loginDate: Date
createTime: Date
}
// 获取用户精简信息列表
export const getSimpleUserList = (): Promise<UserVO[]> => {
return request.get({ url: '/system/user/simple-list' })
}
// 按用户编号查询用户精简信息(点头像弹名片)
export const getSimpleUser = (id: number | string) => {
return request.get<UserVO>({ url: '/system/user/get-simple', params: { id } })
}
// 按昵称模糊搜索用户(加好友)
export const getSimpleUserListByNickname = (nickname: string) => {
return request.get<UserVO[]>({
url: '/system/user/list-by-nickname',
params: { nickname }
})
disabled?: boolean
}
// 查询用户管理列表
@ -98,3 +80,8 @@ export const updateUserStatus = (id: number, status: number) => {
}
return request.put({ url: '/system/user/update-status', data: data })
}
// 获取用户精简信息列表
export const getSimpleUserList = (): Promise<UserVO[]> => {
return request.get({ url: '/system/user/simple-list' })
}

Binary file not shown.

View File

@ -7,7 +7,6 @@ import { useWindowSize } from '@vueuse/core'
import { useAppStore } from '@/store/modules/app'
import { setCssVar } from '@/utils'
import { useDesign } from '@/hooks/web/useDesign'
import { normalizeLayout } from '@/utils/layout'
const { variables } = useDesign()
@ -34,9 +33,7 @@ watch(
!appStore.getMobile ? appStore.setMobile(true) : undefined
setCssVar('--left-menu-min-width', '0')
appStore.setCollapse(true)
normalizeLayout(appStore.getLayout) !== 'sidebar-nav'
? appStore.setLayout('sidebar-nav')
: undefined
appStore.getLayout !== 'classic' ? appStore.setLayout('classic') : undefined
} else {
appStore.getMobile ? appStore.setMobile(false) : undefined
setCssVar('--left-menu-min-width', '64px')

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