'初始化项目'

This commit is contained in:
xta147 2023-11-26 01:28:14 +08:00
parent b49d61f44c
commit 562168a558
1933 changed files with 259241 additions and 0 deletions

View File

@ -0,0 +1,12 @@
root = true
[*.{js,ts,vue}]
charset = utf-8 # 设置文件字符集为 utf-8
end_of_line = lf # 控制换行类型(lf | cr | crlf)
insert_final_newline = true # 始终在文件末尾插入一个新行
indent_style = space # 缩进风格tab | space
indent_size = 2 # 缩进大小
max_line_length = 100 # 最大行长度
[*.md] # 仅 md 文件适用以下规则
max_line_length = off # 关闭最大行长度限制
trim_trailing_whitespace = false # 关闭末尾空格修剪

View File

@ -0,0 +1,14 @@
# 项目本地运行端口号
VITE_PORT=80
# open 运行 npm run dev 时自动打开浏览器
VITE_OPEN=true
# 租户开关
VITE_APP_TENANT_ENABLE=false
# 验证码的开关
VITE_APP_CAPTCHA_ENABLE=false

View File

@ -0,0 +1,32 @@
# 生产环境
NODE_ENV=production
VITE_DEV=false
# 标题
VITE_APP_TITLE=丹麦后台
# 请求路径
VITE_BASE_URL='https://backend.dabackend.site'
# 上传路径
VITE_UPLOAD_URL='/admin-api/infra/file/upload'
# 接口前缀
VITE_API_BASEPATH=
# 接口地址
VITE_API_URL=/admin-api
# 是否删除debugger
VITE_DROP_DEBUGGER=true
# 是否删除console.log
VITE_DROP_CONSOLE=true
# 是否sourcemap
VITE_SOURCEMAP=false
# 打包路径
VITE_BASE_PATH=/
# 输出路径
VITE_OUT_DIR=dist-da

View File

@ -0,0 +1,19 @@
# 本地开发环境
NODE_ENV=development
VITE_APP_TITLE=LUALAIR
VITE_DEV=true
# 请求路径
VITE_BASE_URL='http://localhost:48080'
# 上传路径
VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload'
# 接口前缀
VITE_API_BASEPATH=/dev-api
# 接口地址
VITE_API_URL=/admin-api
# 打包路径
VITE_BASE_PATH=/

View File

@ -0,0 +1,32 @@
# 生产环境
NODE_ENV=production
VITE_DEV=false
# 标题
VITE_APP_TITLE=成都演示后台
# 请求路径
VITE_BASE_URL='https://backend.22y.fun'
# 上传路径
VITE_UPLOAD_URL='/admin-api/infra/file/upload'
# 接口前缀
VITE_API_BASEPATH=
# 接口地址
VITE_API_URL=/admin-api
# 是否删除debugger
VITE_DROP_DEBUGGER=true
# 是否删除console.log
VITE_DROP_CONSOLE=true
# 是否sourcemap
VITE_SOURCEMAP=false
# 打包路径
VITE_BASE_PATH=/
# 输出路径
VITE_OUT_DIR=dist-da

View File

@ -0,0 +1,31 @@
# 开发环境
NODE_ENV=development
VITE_DEV=false
VITE_APP_TITLE=成都演示后台
# 请求路径
VITE_BASE_URL='http://127.0.0.1:48080'
# 上传路径
VITE_UPLOAD_URL='/admin-api/infra/file/upload'
# 接口前缀
VITE_API_BASEPATH=/dev-api
# 接口地址
VITE_API_URL=/admin-api
# 打包路径
VITE_BASE_PATH=/
# 是否删除debugger
VITE_DROP_DEBUGGER=true
# 是否删除console.log
VITE_DROP_CONSOLE=false
# 是否sourcemap
VITE_SOURCEMAP=false
# 输出路径
VITE_OUT_DIR=dist

View File

@ -0,0 +1,32 @@
# 生产环境
NODE_ENV=production
VITE_DEV=false
# 标题
VITE_APP_TITLE=印度后台
# 请求路径
VITE_BASE_URL='https://backend.inbackend.site'
# 上传路径
VITE_UPLOAD_URL='/admin-api/infra/file/upload'
# 接口前缀
VITE_API_BASEPATH=
# 接口地址
VITE_API_URL=/admin-api
# 是否删除debugger
VITE_DROP_DEBUGGER=true
# 是否删除console.log
VITE_DROP_CONSOLE=true
# 是否sourcemap
VITE_SOURCEMAP=false
# 打包路径
VITE_BASE_PATH=/
# 输出路径
VITE_OUT_DIR=dist-in

View File

@ -0,0 +1,32 @@
# 生产环境
NODE_ENV=production
VITE_DEV=false
# 标题
VITE_APP_TITLE=新西兰后台
# 请求路径
VITE_BASE_URL='https://backend.nzbackend.site'
# 上传路径
VITE_UPLOAD_URL='/admin-api/infra/file/upload'
# 接口前缀
VITE_API_BASEPATH=
# 接口地址
VITE_API_URL=/admin-api
# 是否删除debugger
VITE_DROP_DEBUGGER=true
# 是否删除console.log
VITE_DROP_CONSOLE=true
# 是否sourcemap
VITE_SOURCEMAP=false
# 打包路径
VITE_BASE_PATH=/
# 输出路径
VITE_OUT_DIR=dist-nz

View File

@ -0,0 +1,31 @@
# 生产环境
NODE_ENV=production
VITE_DEV=false
# 请求路径
VITE_BASE_URL='https://backend-us.order-sys.xyz'
# 上传路径
VITE_UPLOAD_URL='/admin-api/infra/file/upload'
# 接口前缀
VITE_API_BASEPATH=
# 接口地址
VITE_API_URL=/admin-api
# 是否删除debugger
VITE_DROP_DEBUGGER=true
# 是否删除console.log
VITE_DROP_CONSOLE=true
# 是否sourcemap
VITE_SOURCEMAP=false
# 打包路径
VITE_BASE_PATH=/
# 输出路径
VITE_OUT_DIR=dist-pro

View File

@ -0,0 +1,32 @@
# 生产环境
NODE_ENV=production
VITE_DEV=false
# 标题
VITE_APP_TITLE=葡萄牙后台
# 请求路径
VITE_BASE_URL='https://backend.ptbackend.site'
# 上传路径
VITE_UPLOAD_URL='/admin-api/infra/file/upload'
# 接口前缀
VITE_API_BASEPATH=
# 接口地址
VITE_API_URL=/admin-api
# 是否删除debugger
VITE_DROP_DEBUGGER=true
# 是否删除console.log
VITE_DROP_CONSOLE=true
# 是否sourcemap
VITE_SOURCEMAP=false
# 打包路径
VITE_BASE_PATH=/
# 输出路径
VITE_OUT_DIR=dist-pt

View File

@ -0,0 +1,32 @@
# 生产环境
NODE_ENV=production
VITE_DEV=false
# 标题
VITE_APP_TITLE=英国后台
# 请求路径
VITE_BASE_URL='https://backend.ukbackend.site'
# 上传路径
VITE_UPLOAD_URL='/admin-api/infra/file/upload'
# 接口前缀
VITE_API_BASEPATH=
# 接口地址
VITE_API_URL=/admin-api
# 是否删除debugger
VITE_DROP_DEBUGGER=true
# 是否删除console.log
VITE_DROP_CONSOLE=true
# 是否sourcemap
VITE_SOURCEMAP=false
# 打包路径
VITE_BASE_PATH=/
# 输出路径
VITE_OUT_DIR=dist-uk

View File

@ -0,0 +1,32 @@
# 生产环境
NODE_ENV=production
VITE_DEV=false
# 标题
VITE_APP_TITLE=美国后台
# 请求路径
VITE_BASE_URL='https://backend.usbackend.site'
# 上传路径
VITE_UPLOAD_URL='/admin-api/infra/file/upload'
# 接口前缀
VITE_API_BASEPATH=
# 接口地址
VITE_API_URL=/admin-api
# 是否删除debugger
VITE_DROP_DEBUGGER=true
# 是否删除console.log
VITE_DROP_CONSOLE=true
# 是否sourcemap
VITE_SOURCEMAP=false
# 打包路径
VITE_BASE_PATH=/
# 输出路径
VITE_OUT_DIR=dist-us

View File

@ -0,0 +1,8 @@
/build/
/config/
/dist/
/*.js
/test/unit/coverage/
/node_modules/*
/dist*
/src/main.ts

View File

@ -0,0 +1,259 @@
{
"globals": {
"EffectScope": true,
"ElMessage": true,
"ElMessageBox": true,
"ElTag": true,
"asyncComputed": true,
"autoResetRef": true,
"computed": true,
"computedAsync": true,
"computedEager": true,
"computedInject": true,
"computedWithControl": true,
"controlledComputed": true,
"controlledRef": true,
"createApp": true,
"createEventHook": true,
"createGlobalState": true,
"createInjectionState": true,
"createReactiveFn": true,
"createSharedComposable": true,
"createUnrefFn": true,
"customRef": true,
"debouncedRef": true,
"debouncedWatch": true,
"defineAsyncComponent": true,
"defineComponent": true,
"eagerComputed": true,
"effectScope": true,
"extendRef": true,
"getCurrentInstance": true,
"getCurrentScope": true,
"h": true,
"ignorableWatch": true,
"inject": true,
"isDefined": true,
"isProxy": true,
"isReactive": true,
"isReadonly": true,
"isRef": true,
"makeDestructurable": true,
"markRaw": true,
"nextTick": true,
"onActivated": true,
"onBeforeMount": true,
"onBeforeUnmount": true,
"onBeforeUpdate": true,
"onClickOutside": true,
"onDeactivated": true,
"onErrorCaptured": true,
"onKeyStroke": true,
"onLongPress": true,
"onMounted": true,
"onRenderTracked": true,
"onRenderTriggered": true,
"onScopeDispose": true,
"onServerPrefetch": true,
"onStartTyping": true,
"onUnmounted": true,
"onUpdated": true,
"pausableWatch": true,
"provide": true,
"reactify": true,
"reactifyObject": true,
"reactive": true,
"reactiveComputed": true,
"reactiveOmit": true,
"reactivePick": true,
"readonly": true,
"ref": true,
"refAutoReset": true,
"refDebounced": true,
"refDefault": true,
"refThrottled": true,
"refWithControl": true,
"resolveComponent": true,
"resolveRef": true,
"resolveUnref": true,
"shallowReactive": true,
"shallowReadonly": true,
"shallowRef": true,
"syncRef": true,
"syncRefs": true,
"templateRef": true,
"throttledRef": true,
"throttledWatch": true,
"toRaw": true,
"toReactive": true,
"toRef": true,
"toRefs": true,
"triggerRef": true,
"tryOnBeforeMount": true,
"tryOnBeforeUnmount": true,
"tryOnMounted": true,
"tryOnScopeDispose": true,
"tryOnUnmounted": true,
"unref": true,
"unrefElement": true,
"until": true,
"useActiveElement": true,
"useArrayEvery": true,
"useArrayFilter": true,
"useArrayFind": true,
"useArrayFindIndex": true,
"useArrayJoin": true,
"useArrayMap": true,
"useArrayReduce": true,
"useArraySome": true,
"useAsyncQueue": true,
"useAsyncState": true,
"useAttrs": true,
"useBase64": true,
"useBattery": true,
"useBluetooth": true,
"useBreakpoints": true,
"useBroadcastChannel": true,
"useBrowserLocation": true,
"useCached": true,
"useClipboard": true,
"useColorMode": true,
"useConfirmDialog": true,
"useCounter": true,
"useCssModule": true,
"useCssVar": true,
"useCssVars": true,
"useCurrentElement": true,
"useCycleList": true,
"useDark": true,
"useDateFormat": true,
"useDebounce": true,
"useDebounceFn": true,
"useDebouncedRefHistory": true,
"useDeviceMotion": true,
"useDeviceOrientation": true,
"useDevicePixelRatio": true,
"useDevicesList": true,
"useDisplayMedia": true,
"useDocumentVisibility": true,
"useDraggable": true,
"useDropZone": true,
"useElementBounding": true,
"useElementByPoint": true,
"useElementHover": true,
"useElementSize": true,
"useElementVisibility": true,
"useEventBus": true,
"useEventListener": true,
"useEventSource": true,
"useEyeDropper": true,
"useFavicon": true,
"useFetch": true,
"useFileDialog": true,
"useFileSystemAccess": true,
"useFocus": true,
"useFocusWithin": true,
"useFps": true,
"useFullscreen": true,
"useGamepad": true,
"useGeolocation": true,
"useIdle": true,
"useImage": true,
"useInfiniteScroll": true,
"useIntersectionObserver": true,
"useInterval": true,
"useIntervalFn": true,
"useKeyModifier": true,
"useLastChanged": true,
"useLocalStorage": true,
"useMagicKeys": true,
"useManualRefHistory": true,
"useMediaControls": true,
"useMediaQuery": true,
"useMemoize": true,
"useMemory": true,
"useMounted": true,
"useMouse": true,
"useMouseInElement": true,
"useMousePressed": true,
"useMutationObserver": true,
"useNavigatorLanguage": true,
"useNetwork": true,
"useNow": true,
"useObjectUrl": true,
"useOffsetPagination": true,
"useOnline": true,
"usePageLeave": true,
"useParallax": true,
"usePermission": true,
"usePointer": true,
"usePointerSwipe": true,
"usePreferredColorScheme": true,
"usePreferredDark": true,
"usePreferredLanguages": true,
"useRafFn": true,
"useRefHistory": true,
"useResizeObserver": true,
"useRoute": true,
"useRouter": true,
"useScreenOrientation": true,
"useScreenSafeArea": true,
"useScriptTag": true,
"useScroll": true,
"useScrollLock": true,
"useSessionStorage": true,
"useShare": true,
"useSlots": true,
"useSpeechRecognition": true,
"useSpeechSynthesis": true,
"useStepper": true,
"useStorage": true,
"useStorageAsync": true,
"useStyleTag": true,
"useSupported": true,
"useSwipe": true,
"useTemplateRefsList": true,
"useTextDirection": true,
"useTextSelection": true,
"useTextareaAutosize": true,
"useThrottle": true,
"useThrottleFn": true,
"useThrottledRefHistory": true,
"useTimeAgo": true,
"useTimeout": true,
"useTimeoutFn": true,
"useTimeoutPoll": true,
"useTimestamp": true,
"useTitle": true,
"useToggle": true,
"useTransition": true,
"useUrlSearchParams": true,
"useUserMedia": true,
"useVModel": true,
"useVModels": true,
"useVibrate": true,
"useVirtualList": true,
"useWakeLock": true,
"useWebNotification": true,
"useWebSocket": true,
"useWebWorker": true,
"useWebWorkerFn": true,
"useWindowFocus": true,
"useWindowScroll": true,
"useWindowSize": true,
"watch": true,
"watchArray": true,
"watchAtMost": true,
"watchDebounced": true,
"watchEffect": true,
"watchIgnorable": true,
"watchOnce": true,
"watchPausable": true,
"watchPostEffect": true,
"watchSyncEffect": true,
"watchThrottled": true,
"watchTriggerable": true,
"watchWithFilter": true,
"whenever": true
}
}

View File

@ -0,0 +1,71 @@
// @ts-check
const { defineConfig } = require('eslint-define-config')
module.exports = defineConfig({
root: true,
env: {
browser: true,
node: true,
es6: true
},
parser: 'vue-eslint-parser',
plugins: ['vue'],
parserOptions: {
parser: '@typescript-eslint/parser',
ecmaVersion: 2020,
sourceType: 'module',
jsxPragma: 'React',
ecmaFeatures: {
jsx: true
}
},
extends: [
'plugin:vue/vue3-recommended',
'plugin:@typescript-eslint/recommended',
'prettier',
'plugin:prettier/recommended'
],
rules: {
'vue/script-setup-uses-vars': 'error',
'vue/no-reserved-component-names': 'off',
'vue/no-setup-props-destructure': 'off',
'@typescript-eslint/ban-ts-ignore': 'off',
'@typescript-eslint/explicit-function-return-type': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-var-requires': 'off',
'@typescript-eslint/no-empty-function': 'off',
'vue/custom-event-name-casing': 'off',
'no-use-before-define': 'off',
'@typescript-eslint/no-use-before-define': 'off',
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/ban-types': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'no-unused-vars': 'off',
'space-before-function-paren': 'off',
'vue/attributes-order': 'off',
'vue/one-component-per-file': 'off',
'vue/html-closing-bracket-newline': 'off',
'vue/max-attributes-per-line': 'off',
'vue/multiline-html-element-content-newline': 'off',
'vue/singleline-html-element-content-newline': 'off',
'vue/attribute-hyphenation': 'off',
'vue/require-default-prop': 'off',
'vue/require-explicit-emits': 'off',
'vue/html-self-closing': [
'error',
{
html: {
void: 'always',
normal: 'never',
component: 'always'
},
svg: 'always',
math: 'always'
}
],
'vue/multi-word-component-names': 'off',
'vue/no-v-html': 'off'
}
})

12
grailed-ui-admin-vue3/.gitignore vendored Normal file
View File

@ -0,0 +1,12 @@
node_modules
.DS_Store
dist
dist-ssr
*.local
/dist*
*-lock.*
pnpm-debug
auto-*.d.ts
.idea
.history
dist*

View File

@ -0,0 +1,11 @@
/node_modules/**
/dist/
/dist*
/public/*
/docs/*
/vite.config.ts
/src/types/env.d.ts
/src/types/auto-components.d.ts
/src/types/auto-imports.d.ts
/docs/**/*
CHANGELOG

View File

@ -0,0 +1,6 @@
/dist/*
/public/*
public/*
/dist*
/src/types/env.d.ts
/docs/**/*

View File

@ -0,0 +1,19 @@
{
"recommendations": [
"christian-kohler.path-intellisense",
"vscode-icons-team.vscode-icons",
"davidanson.vscode-markdownlint",
"stylelint.vscode-stylelint",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"mrmlnc.vscode-less",
"lokalise.i18n-ally",
"redhat.vscode-yaml",
"csstools.postcss",
"mikestead.dotenv",
"eamodio.gitlens",
"antfu.iconify",
"antfu.unocss",
"Vue.volar"
]
}

View File

@ -0,0 +1,16 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "msedge",
"request": "launch",
"name": "Launch Edge against 47.250.38.157",
"url": "http://47.250.38.157",
"webRoot": "${workspaceFolder}/src",
"sourceMaps": true
}
]
}

View File

@ -0,0 +1,167 @@
{
"typescript.tsdk": "./node_modules/typescript/lib",
"volar.tsPlugin": true,
"volar.tsPluginStatus": false,
"npm.packageManager": "pnpm",
"editor.tabSize": 2,
"prettier.printWidth": 100, //
"editor.defaultFormatter": "esbenp.prettier-vscode",
"files.eol": "\n",
"search.exclude": {
"**/node_modules": true,
"**/*.log": true,
"**/*.log*": true,
"**/bower_components": true,
"**/dist": true,
"**/elehukouben": true,
"**/.git": true,
"**/.gitignore": true,
"**/.svn": true,
"**/.DS_Store": true,
"**/.idea": true,
"**/.vscode": false,
"**/yarn.lock": true,
"**/tmp": true,
"out": true,
"dist": true,
"node_modules": true,
"CHANGELOG.md": true,
"examples": true,
"res": true,
"screenshots": true,
"yarn-error.log": true,
"**/.yarn": true
},
"files.exclude": {
"**/.cache": true,
"**/.editorconfig": true,
"**/.eslintcache": true,
"**/bower_components": true,
"**/.idea": true,
"**/tmp": true,
"**/.git": true,
"**/.svn": true,
"**/.hg": true,
"**/CVS": true,
"**/.DS_Store": true
},
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/.git/subtree-cache/**": true,
"**/.vscode/**": true,
"**/node_modules/**": true,
"**/tmp/**": true,
"**/bower_components/**": true,
"**/dist/**": true,
"**/yarn.lock": true
},
"stylelint.enable": true,
"stylelint.validate": ["css", "less", "postcss", "scss", "vue", "sass"],
"path-intellisense.mappings": {
"@/": "${workspaceRoot}/src"
},
"[javascriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
},
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[css]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
},
"[less]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[scss]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[markdown]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"[vue]": {
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true,
"source.fixAll.stylelint": true
},
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"i18n-ally.localesPaths": ["src/locales"],
"i18n-ally.keystyle": "nested",
"i18n-ally.sortKeys": true,
"i18n-ally.namespace": true,
"i18n-ally.enabledParsers": ["ts"],
"i18n-ally.sourceLanguage": "zh-CN",
"i18n-ally.displayLanguage": "zh-CN",
"i18n-ally.enabledFrameworks": ["vue", "react"],
"cSpell.words": [
"brotli",
"browserslist",
"codemirror",
"commitlint",
"cropperjs",
"echarts",
"esnext",
"esno",
"iconify",
"INTLIFY",
"lintstagedrc",
"logicflow",
"nprogress",
"Permi",
"pinia",
"pnpm",
"qrcode",
"sider",
"sortablejs",
"stylelint",
"unocss",
"unplugin",
"videojs",
"vitejs",
"vueuse",
"wangeditor",
"xingyu",
"yudao",
"zxcvbn"
],
"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
}
],
//
"explorer.fileNesting.enabled": true,
"explorer.fileNesting.expand": false,
"explorer.fileNesting.patterns": {
"*.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"
},
"terminal.integrated.scrollback": 10000
}

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021-present Archer
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,235 @@
**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!**
**「我喜欢写代码,乐此不疲」**
**「我喜欢做开源,以此为乐」**
我 🐶 在上海艰苦奋斗,早中晚在 top3 大厂认真搬砖,夜里为开源做贡献。
如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。
## 🐶 新手必读
* nodejs > 16.0.0 && pnpm > 8.6.0 (强制使用pnpm)
* 演示地址【Vue3 + element-plus】<http://dashboard-vue3.yudao.iocoder.cn>
* 演示地址【Vue3 + vben(ant-design-vue)】:<http://dashboard-vben.yudao.iocoder.cn>
* 演示地址【Vue2 + element-ui】<http://dashboard.yudao.iocoder.cn>
* 启动文档:<https://doc.iocoder.cn/quick-start/>
* 视频教程:<https://doc.iocoder.cn/video/>
## 🐯 平台简介
**芋道**,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。
* 采用 [vue-element-plus-admin](https://gitee.com/kailong110120130/vue-element-plus-admin) 实现
* 改换 saas自动引入等功能
* 使用 Element Plus 免费开源的中后台模版,具备如下特性:
![首页](public/home.png)
* **最新技术栈**:使用 Vue3、Vite4 等前端前沿技术开发
* **TypeScript**: 应用程序级 JavaScript 的语言
* **主题**: 可配置的主题
* **国际化**:内置完善的国际化方案
* **权限**:内置完善的动态路由权限生成方案
* **组件**:二次封装了多个常用的组件
* **示例**:内置丰富的示例
## 技术栈
| 框架 | 说明 | 版本 |
|----------------------------------------------------------------------|------------------|--------|
| [Vue](https://staging-cn.vuejs.org/) | Vue 框架 | 3.3.4 |
| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.4.8 |
| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.3.9 |
| [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 5.1.6 |
| [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.1.6 |
| [vueuse](https://vueuse.org/) | 常用工具集 | 10.3.0 |
| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.2.2 |
| [vue-router](https://router.vuejs.org/) | Vue 路由 | 4.2.4 |
| [unocss](https://uno.antfu.me/) | 原子 css | 0.54.1 |
| [iconify](https://icon-sets.iconify.design/) | 在线图标库 | 3.1.1 |
| [wangeditor](https://www.wangeditor.com/) | 富文本编辑器 | 5.1.23 |
## 开发工具
推荐 VS Code 开发,配合插件如下:
| 插件名 | 功能 |
|-------------------------------|--------------------------|
| TypeScript Vue Plugin (Volar) | 用于 TypeScript 的 Vue 插件 |
| Vue Language Features (Volar) | Vue3.0 语法支持 |
| unocss | unocss for vscode |
| Iconify IntelliSense | Iconify 预览和搜索 |
| i18n Ally | 国际化智能提示 |
| Stylelint | Css 格式化 |
| Prettier | 代码格式化 |
| ESLint | 脚本代码检查 |
| DotENV | env 文件高亮 |
## 内置功能
系统内置多种多种业务功能,可以用于快速你的业务系统:
* 系统功能
* 基础设施
* 工作流程
* 支付系统
* 会员中心
* 数据报表
* 商城系统
* 微信公众号
### 系统功能
| | 功能 | 描述 |
|-----|-------|---------------------------------|
| | 用户管理 | 用户是系统操作者,该功能主要完成系统用户配置 |
| ⭐️ | 在线用户 | 当前系统中活跃用户状态监控,支持手动踢下线 |
| | 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分 |
| | 菜单管理 | 配置系统菜单、操作权限、按钮权限标识等,本地缓存提供性能 |
| | 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限 |
| | 岗位管理 | 配置系统用户所属担任职务 |
| 🚀 | 租户管理 | 配置系统租户,支持 SaaS 场景下的多租户功能 |
| 🚀 | 租户套餐 | 配置租户套餐,自定每个租户的菜单、操作、按钮的权限 |
| | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 |
| 🚀 | 短信管理 | 短信渠道、短息模板、短信日志,对接阿里云、腾讯云等主流短信平台 |
| 🚀 | 邮件管理 | 邮箱账号、邮件模版、邮件发送日志,支持所有邮件平台 |
| 🚀 | 站内信 | 系统内的消息通知,提供站内信模版、站内信消息 |
| 🚀 | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 |
| ⭐️ | 登录日志 | 系统登录日志记录查询,包含登录异常 |
| 🚀 | 错误码管理 | 系统所有错误码的管理,可在线修改错误提示,无需重启服务 |
| | 通知公告 | 系统通知公告信息发布维护 |
| 🚀 | 敏感词 | 配置系统敏感词,支持标签分组 |
| 🚀 | 应用管理 | 管理 SSO 单点登录的应用,支持多种 OAuth2 授权方式 |
| 🚀 | 地区管理 | 展示省份、城市、区镇等城市信息,支持 IP 对应城市 |
### 工作流程
| | 功能 | 描述 |
|-----|-------|----------------------------------------|
| 🚀 | 流程模型 | 配置工作流的流程模型,支持文件导入与在线设计流程图,提供 7 种任务分配规则 |
| 🚀 | 流程表单 | 拖动表单元素生成相应的工作流表单,覆盖 Element UI 所有的表单组件 |
| 🚀 | 用户分组 | 自定义用户分组,可用于工作流的审批分组 |
| 🚀 | 我的流程 | 查看我发起的工作流程,支持新建、取消流程等操作,高亮流程图、审批时间线 |
| 🚀 | 待办任务 | 查看自己【未】审批的工作任务,支持通过、不通过、转发、委派、退回等操作 |
| 🚀 | 已办任务 | 查看自己【已】审批的工作任务,未来会支持回退操作 |
| 🚀 | OA 请假 | 作为业务自定义接入工作流的使用示例,只需创建请求对应的工作流程,即可进行审批 |
### 支付系统
| | 功能 | 描述 |
|-----|------|---------------------------|
| 🚀 | 商户信息 | 管理商户信息,支持 Saas 场景下的多商户功能 |
| 🚀 | 应用信息 | 配置商户的应用信息,对接支付宝、微信等多个支付渠道 |
| 🚀 | 支付订单 | 查看用户发起的支付宝、微信等的【支付】订单 |
| 🚀 | 退款订单 | 查看用户发起的支付宝、微信等的【退款】订单 |
ps核心功能已经实现正在对接微信小程序中...
### 基础设施
| | 功能 | 描述 |
|-----|----------|----------------------------------------------|
| 🚀 | 代码生成 | 前后端代码的生成Java、Vue、SQL、单元测试支持 CRUD 下载 |
| 🚀 | 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档 |
| 🚀 | 数据库文档 | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式 |
| | 表单构建 | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件 |
| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 |
| ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 |
| 🚀 | 文件服务 | 支持将文件存储到 S3MinIO、阿里云、腾讯云、七牛云、本地、FTP、数据库等 |
| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 |
| | MySQL 监控 | 监视当前系统数据库连接池状态可进行分析SQL找出系统性能瓶颈 |
| | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 |
| 🚀 | 消息队列 | 基于 Redis 实现消息队列Stream 提供集群消费Pub/Sub 提供广播消费 |
| 🚀 | Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 |
| 🚀 | 链路追踪 | 接入 SkyWalking 组件,实现链路追踪 |
| 🚀 | 日志中心 | 接入 SkyWalking 组件,实现日志中心 |
| 🚀 | 分布式锁 | 基于 Redis 实现分布式锁,满足并发场景 |
| 🚀 | 幂等组件 | 基于 Redis 实现幂等组件,解决重复请求问题 |
| 🚀 | 服务保障 | 基于 Resilience4j 实现服务的稳定性,包括限流、熔断等功能 |
| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 |
| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 |
### 数据报表
| | 功能 | 描述 |
|-----|-------|--------------------|
| 🚀 | 报表设计器 | 支持数据报表、图形报表、打印设计等 |
| 🚀 | 大屏设计器 | 拖拽生成数据大屏,内置几十种图表组件 |
### 微信公众号
| | 功能 | 描述 |
|-----|--------|-------------------------------|
| 🚀 | 账号管理 | 配置接入的微信公众号,可支持多个公众号 |
| 🚀 | 数据统计 | 统计公众号的用户增减、累计用户、消息概况、接口分析等数据 |
| 🚀 | 粉丝管理 | 查看已关注、取关的粉丝列表,可对粉丝进行同步、打标签等操作 |
| 🚀 | 消息管理 | 查看粉丝发送的消息列表,可主动回复粉丝消息 |
| 🚀 | 自动回复 | 自动回复粉丝发送的消息,支持关注回复、消息回复、关键字回复 |
| 🚀 | 标签管理 | 对公众号的标签进行创建、查询、修改、删除等操作 |
| 🚀 | 菜单管理 | 自定义公众号的菜单,也可以从公众号同步菜单 |
| 🚀 | 素材管理 | 管理公众号的图片、语音、视频等素材,支持在线播放语音、视频 |
| 🚀 | 图文草稿箱 | 新增常用的图文素材到草稿箱,可发布到公众号 |
| 🚀 | 图文发表记录 | 查看已发布成功的图文素材,支持删除操作 |
### 商城系统
建设中...
![功能图](http://static.iocoder.cn/mall%20%E5%8A%9F%E8%83%BD%E5%9B%BE-min.png)
![GIF 图-耐心等待](https://raw.githubusercontent.com/YunaiV/Blog/master/Mall/onemall-admin-min.gif)
![GIF 图-耐心等待](https://raw.githubusercontent.com/YunaiV/Blog/master/Mall/onemall-h5-min.gif)
## 🐷 演示图
### 系统功能
| 模块 | biu | biu | biu |
|------------|--------------------------------------------------------------------|------------------------------------------------------------------|------------------------------------------------------------------|
| 登录 & 首页 | ![登录](https://static.iocoder.cn/images/ruoyi-vue-pro/登录.jpg?imageView2/2/format/webp/w/1280) | ![首页](https://static.iocoder.cn/images/ruoyi-vue-pro/首页.jpg?imageView2/2/format/webp/w/1280) | ![个人中心](https://static.iocoder.cn/images/ruoyi-vue-pro/个人中心.jpg?imageView2/2/format/webp/w/1280) |
| 用户 & 应用 | ![用户管理](https://static.iocoder.cn/images/ruoyi-vue-pro/用户管理.jpg?imageView2/2/format/webp/w/1280) | ![令牌管理](https://static.iocoder.cn/images/ruoyi-vue-pro/令牌管理.jpg?imageView2/2/format/webp/w/1280) | ![应用管理](https://static.iocoder.cn/images/ruoyi-vue-pro/应用管理.jpg?imageView2/2/format/webp/w/1280) |
| 租户 & 套餐 | ![租户管理](https://static.iocoder.cn/images/ruoyi-vue-pro/租户管理.jpg?imageView2/2/format/webp/w/1280) | ![租户套餐](https://static.iocoder.cn/images/ruoyi-vue-pro/租户套餐.png) | - |
| 部门 & 岗位 | ![部门管理](https://static.iocoder.cn/images/ruoyi-vue-pro/部门管理.jpg?imageView2/2/format/webp/w/1280) | ![岗位管理](https://static.iocoder.cn/images/ruoyi-vue-pro/岗位管理.jpg?imageView2/2/format/webp/w/1280) | - |
| 菜单 & 角色 | ![菜单管理](https://static.iocoder.cn/images/ruoyi-vue-pro/菜单管理.jpg?imageView2/2/format/webp/w/1280) | ![角色管理](https://static.iocoder.cn/images/ruoyi-vue-pro/角色管理.jpg?imageView2/2/format/webp/w/1280) | - |
| 审计日志 | ![操作日志](https://static.iocoder.cn/images/ruoyi-vue-pro/操作日志.jpg?imageView2/2/format/webp/w/1280) | ![登录日志](https://static.iocoder.cn/images/ruoyi-vue-pro/登录日志.jpg?imageView2/2/format/webp/w/1280) | - |
| 短信 | ![短信渠道](https://static.iocoder.cn/images/ruoyi-vue-pro/短信渠道.jpg?imageView2/2/format/webp/w/1280) | ![短信模板](https://static.iocoder.cn/images/ruoyi-vue-pro/短信模板.jpg?imageView2/2/format/webp/w/1280) | ![短信日志](https://static.iocoder.cn/images/ruoyi-vue-pro/短信日志.jpg?imageView2/2/format/webp/w/1280) |
| 字典 & 敏感词 | ![字典类型](https://static.iocoder.cn/images/ruoyi-vue-pro/字典类型.jpg?imageView2/2/format/webp/w/1280) | ![字典数据](https://static.iocoder.cn/images/ruoyi-vue-pro/字典数据.jpg?imageView2/2/format/webp/w/1280) | ![敏感词](https://static.iocoder.cn/images/ruoyi-vue-pro/敏感词.jpg?imageView2/2/format/webp/w/1280) |
| 错误码 & 通知 | ![错误码管理](https://static.iocoder.cn/images/ruoyi-vue-pro/错误码管理.jpg?imageView2/2/format/webp/w/1280) | ![通知公告](https://static.iocoder.cn/images/ruoyi-vue-pro/通知公告.jpg?imageView2/2/format/webp/w/1280) | - |
### 工作流程
| 模块 | biu | biu | biu |
|---------|------------------------------------------------------------------------|------------------------------------------------------------------------|------------------------------------------------------------------------|
| 流程模型 | ![流程模型-列表](https://static.iocoder.cn/images/ruoyi-vue-pro/流程模型-列表.jpg?imageView2/2/format/webp/w/1280) | ![流程模型-设计](https://static.iocoder.cn/images/ruoyi-vue-pro/流程模型-设计.jpg?imageView2/2/format/webp/w/1280) | ![流程模型-定义](https://static.iocoder.cn/images/ruoyi-vue-pro/流程模型-定义.jpg?imageView2/2/format/webp/w/1280) |
| 表单 & 分组 | ![流程表单](https://static.iocoder.cn/images/ruoyi-vue-pro/流程表单.jpg?imageView2/2/format/webp/w/1280) | ![用户分组](https://static.iocoder.cn/images/ruoyi-vue-pro/用户分组.jpg?imageView2/2/format/webp/w/1280) | - |
| 我的流程 | ![我的流程-列表](https://static.iocoder.cn/images/ruoyi-vue-pro/我的流程-列表.jpg?imageView2/2/format/webp/w/1280) | ![我的流程-发起](https://static.iocoder.cn/images/ruoyi-vue-pro/我的流程-发起.jpg?imageView2/2/format/webp/w/1280) | ![我的流程-详情](https://static.iocoder.cn/images/ruoyi-vue-pro/我的流程-详情.jpg?imageView2/2/format/webp/w/1280) |
| 待办 & 已办 | ![任务列表-审批](https://static.iocoder.cn/images/ruoyi-vue-pro/任务列表-审批.jpg?imageView2/2/format/webp/w/1280) | ![任务列表-待办](https://static.iocoder.cn/images/ruoyi-vue-pro/任务列表-待办.jpg?imageView2/2/format/webp/w/1280) | ![任务列表-已办](https://static.iocoder.cn/images/ruoyi-vue-pro/任务列表-已办.jpg?imageView2/2/format/webp/w/1280) |
| OA 请假 | ![OA请假-列表](https://static.iocoder.cn/images/ruoyi-vue-pro/OA请假-列表.jpg?imageView2/2/format/webp/w/1280) | ![OA请假-发起](https://static.iocoder.cn/images/ruoyi-vue-pro/OA请假-发起.jpg?imageView2/2/format/webp/w/1280) | ![OA请假-详情](https://static.iocoder.cn/images/ruoyi-vue-pro/OA请假-详情.jpg?imageView2/2/format/webp/w/1280) |
### 基础设施
| 模块 | biu | biu | biu |
|---------------|----------------------------------------------------------------------|--------------------------------------------------------------------|------------------------------------------------------------------|
| 代码生成 | ![代码生成](https://static.iocoder.cn/images/ruoyi-vue-pro/代码生成.jpg?imageView2/2/format/webp/w/1280) | ![生成效果](https://static.iocoder.cn/images/ruoyi-vue-pro/生成效果.jpg?imageView2/2/format/webp/w/1280) | - |
| 文档 | ![系统接口](https://static.iocoder.cn/images/ruoyi-vue-pro/系统接口.jpg?imageView2/2/format/webp/w/1280) | ![数据库文档](https://static.iocoder.cn/images/ruoyi-vue-pro/数据库文档.jpg?imageView2/2/format/webp/w/1280) | - |
| 文件 & 配置 | ![文件配置](https://static.iocoder.cn/images/ruoyi-vue-pro/文件配置.jpg?imageView2/2/format/webp/w/1280) | ![文件管理](https://static.iocoder.cn/images/ruoyi-vue-pro/文件管理2.jpg?imageView2/2/format/webp/w/1280) | ![配置管理](https://static.iocoder.cn/images/ruoyi-vue-pro/配置管理.jpg?imageView2/2/format/webp/w/1280) |
| 定时任务 | ![定时任务](https://static.iocoder.cn/images/ruoyi-vue-pro/定时任务.jpg?imageView2/2/format/webp/w/1280) | ![任务日志](https://static.iocoder.cn/images/ruoyi-vue-pro/任务日志.jpg?imageView2/2/format/webp/w/1280) | - |
| API 日志 | ![访问日志](https://static.iocoder.cn/images/ruoyi-vue-pro/访问日志.jpg?imageView2/2/format/webp/w/1280) | ![错误日志](https://static.iocoder.cn/images/ruoyi-vue-pro/错误日志.jpg?imageView2/2/format/webp/w/1280) | - |
| MySQL & Redis | ![MySQL](https://static.iocoder.cn/images/ruoyi-vue-pro/MySQL.jpg?imageView2/2/format/webp/w/1280) | ![Redis](https://static.iocoder.cn/images/ruoyi-vue-pro/Redis.jpg?imageView2/2/format/webp/w/1280) | - |
| 监控平台 | ![Java监控](https://static.iocoder.cn/images/ruoyi-vue-pro/Java监控.jpg?imageView2/2/format/webp/w/1280) | ![链路追踪](https://static.iocoder.cn/images/ruoyi-vue-pro/链路追踪.jpg?imageView2/2/format/webp/w/1280) | ![日志中心](https://static.iocoder.cn/images/ruoyi-vue-pro/日志中心.jpg?imageView2/2/format/webp/w/1280) |
### 支付系统
| 模块 | biu | biu | biu |
|---------|------------------------------------------------------------------|------------------------------------------------------------------------|------------------------------------------------------------------------|
| 商家 & 应用 | ![商户信息](https://static.iocoder.cn/images/ruoyi-vue-pro/商户信息.jpg?imageView2/2/format/webp/w/1280) | ![应用信息-列表](https://static.iocoder.cn/images/ruoyi-vue-pro/应用信息-列表.jpg?imageView2/2/format/webp/w/1280) | ![应用信息-编辑](https://static.iocoder.cn/images/ruoyi-vue-pro/应用信息-编辑.jpg?imageView2/2/format/webp/w/1280) |
| 支付 & 退款 | ![支付订单](https://static.iocoder.cn/images/ruoyi-vue-pro/支付订单.jpg?imageView2/2/format/webp/w/1280) | ![退款订单](https://static.iocoder.cn/images/ruoyi-vue-pro/退款订单.jpg?imageView2/2/format/webp/w/1280) | --- |
### 数据报表
| 模块 | biu | biu | biu |
|-------|--------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------|
| 报表设计器 | ![数据报表](https://static.iocoder.cn/images/ruoyi-vue-pro/报表设计器-数据报表.jpg?imageView2/2/format/webp/w/1280) | ![图形报表](https://static.iocoder.cn/images/ruoyi-vue-pro/报表设计器-图形报表.jpg?imageView2/2/format/webp/w/1280) | ![报表设计器-打印设计](https://static.iocoder.cn/images/ruoyi-vue-pro/报表设计器-打印设计.jpg?imageView2/2/format/webp/w/1280) |
| 大屏设计器 | ![大屏列表](https://static.iocoder.cn/images/ruoyi-vue-pro/大屏设计器-列表.jpg?imageView2/2/format/webp/w/1280) | ![大屏预览](https://static.iocoder.cn/images/ruoyi-vue-pro/大屏设计器-预览.jpg?imageView2/2/format/webp/w/1280) | ![大屏编辑](https://static.iocoder.cn/images/ruoyi-vue-pro/大屏设计器-编辑.jpg?imageView2/2/format/webp/w/1280) |

View File

@ -0,0 +1,108 @@
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-eslint'
import PurgeIcons from 'vite-plugin-purge-icons'
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'
import UnoCSS from 'unocss/vite'
export function createVitePlugins() {
const root = process.cwd()
// 路径查找
function pathResolve(dir: string) {
return resolve(root, '.', dir)
}
return [
Vue(),
VueJsx(),
UnoCSS(),
progress(),
PurgeIcons(),
ElementPlus({}),
AutoImport({
include: [
/\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
/\.vue$/,
/\.vue\?vue/, // .vue
/\.md$/ // .md
],
imports: [
'vue',
'vue-router',
// 可额外添加需要 autoImport 的组件
{
'@/hooks/web/useI18n': ['useI18n'],
'@/hooks/web/useMessage': ['useMessage'],
'@/hooks/web/useTable': ['useTable'],
'@/hooks/web/useCrudSchemas': ['useCrudSchemas'],
'@/utils/formRules': ['required'],
'@/utils/dict': ['DICT_TYPE']
}
],
dts: 'src/types/auto-imports.d.ts',
resolvers: [ElementPlusResolver()],
eslintrc: {
enabled: false, // Default `false`
filepath: './.eslintrc-auto-import.json', // Default `./.eslintrc-auto-import.json`
globalsPropValue: true // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')
}
}),
Components({
// 要搜索组件的目录的相对路径
dirs: ['src/components'],
// 组件的有效文件扩展名
extensions: ['vue', 'md'],
// 搜索子目录
deep: true,
include: [/\.vue$/, /\.vue\?vue/],
// 生成自定义 `auto-components.d.ts` 全局声明
dts: 'src/types/auto-components.d.ts',
// 自定义组件的解析器
resolvers: [ElementPlusResolver()],
exclude: [/[\\/]node_modules[\\/]/]
}),
EslintPlugin({
cache: false,
include: ['src/**/*.tsx'] // 检查的文件
// 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]',
svgoOptions: true
}),
viteCompression({
verbose: true, // 是否在控制台输出压缩结果
disable: false, // 是否禁用
threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
algorithm: 'gzip', // 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
ext: '.gz', // 生成的压缩包后缀
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}`
})
]
}

View File

@ -0,0 +1,110 @@
const include = [
'qs',
'url',
'vue',
'sass',
'mitt',
'axios',
'pinia',
'dayjs',
'qrcode',
'unocss',
'vue-router',
'vue-types',
'vue-i18n',
'crypto-js',
'cropperjs',
'lodash-es',
'nprogress',
'web-storage-cache',
'@iconify/iconify',
'@vueuse/core',
'@zxcvbn-ts/core',
'echarts/core',
'echarts/charts',
'echarts/components',
'echarts/renderers',
'echarts-wordcloud',
'@wangeditor/editor',
'@wangeditor/editor-for-vue',
'element-plus',
'element-plus/es',
'element-plus/es/locale/lang/zh-cn',
'element-plus/es/locale/lang/en',
'element-plus/es/components/backtop/style/css',
'element-plus/es/components/form/style/css',
'element-plus/es/components/radio-group/style/css',
'element-plus/es/components/radio/style/css',
'element-plus/es/components/checkbox/style/css',
'element-plus/es/components/checkbox-group/style/css',
'element-plus/es/components/switch/style/css',
'element-plus/es/components/time-picker/style/css',
'element-plus/es/components/date-picker/style/css',
'element-plus/es/components/descriptions/style/css',
'element-plus/es/components/descriptions-item/style/css',
'element-plus/es/components/link/style/css',
'element-plus/es/components/tooltip/style/css',
'element-plus/es/components/drawer/style/css',
'element-plus/es/components/dialog/style/css',
'element-plus/es/components/checkbox-button/style/css',
'element-plus/es/components/option-group/style/css',
'element-plus/es/components/radio-button/style/css',
'element-plus/es/components/cascader/style/css',
'element-plus/es/components/color-picker/style/css',
'element-plus/es/components/input-number/style/css',
'element-plus/es/components/rate/style/css',
'element-plus/es/components/select-v2/style/css',
'element-plus/es/components/tree-select/style/css',
'element-plus/es/components/slider/style/css',
'element-plus/es/components/time-select/style/css',
'element-plus/es/components/autocomplete/style/css',
'element-plus/es/components/image-viewer/style/css',
'element-plus/es/components/upload/style/css',
'element-plus/es/components/col/style/css',
'element-plus/es/components/form-item/style/css',
'element-plus/es/components/alert/style/css',
'element-plus/es/components/breadcrumb/style/css',
'element-plus/es/components/select/style/css',
'element-plus/es/components/input/style/css',
'element-plus/es/components/breadcrumb-item/style/css',
'element-plus/es/components/tag/style/css',
'element-plus/es/components/pagination/style/css',
'element-plus/es/components/table/style/css',
'element-plus/es/components/table-v2/style/css',
'element-plus/es/components/table-column/style/css',
'element-plus/es/components/card/style/css',
'element-plus/es/components/row/style/css',
'element-plus/es/components/button/style/css',
'element-plus/es/components/menu/style/css',
'element-plus/es/components/sub-menu/style/css',
'element-plus/es/components/menu-item/style/css',
'element-plus/es/components/option/style/css',
'element-plus/es/components/dropdown/style/css',
'element-plus/es/components/dropdown-menu/style/css',
'element-plus/es/components/dropdown-item/style/css',
'element-plus/es/components/skeleton/style/css',
'element-plus/es/components/skeleton/style/css',
'element-plus/es/components/backtop/style/css',
'element-plus/es/components/menu/style/css',
'element-plus/es/components/sub-menu/style/css',
'element-plus/es/components/menu-item/style/css',
'element-plus/es/components/dropdown/style/css',
'element-plus/es/components/tree/style/css',
'element-plus/es/components/dropdown-menu/style/css',
'element-plus/es/components/dropdown-item/style/css',
'element-plus/es/components/badge/style/css',
'element-plus/es/components/breadcrumb/style/css',
'element-plus/es/components/breadcrumb-item/style/css',
'element-plus/es/components/image/style/css',
'element-plus/es/components/collapse-transition/style/css',
'element-plus/es/components/timeline/style/css',
'element-plus/es/components/timeline-item/style/css',
'element-plus/es/components/collapse/style/css',
'element-plus/es/components/collapse-item/style/css',
'element-plus/es/components/button-group/style/css',
'element-plus/es/components/text/style/css'
]
const exclude = ['@iconify/json']
export { include, exclude }

View File

@ -0,0 +1,147 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/logo2.png" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta
name="keywords"
content=""
/>
<meta
name="description"
content=""
/>
<title>%VITE_APP_TITLE%</title>
</head>
<body>
<div id="app">
<style>
.app-loading {
display: flex;
width: 100%;
height: 100%;
justify-content: center;
align-items: center;
flex-direction: column;
background: #f0f2f5;
}
.app-loading .app-loading-wrap {
position: absolute;
top: 50%;
left: 50%;
display: flex;
-webkit-transform: translate3d(-50%, -50%, 0);
transform: translate3d(-50%, -50%, 0);
justify-content: center;
align-items: center;
flex-direction: column;
}
.app-loading .app-loading-title {
margin-bottom: 30px;
font-size: 20px;
font-weight: bold;
text-align: center;
}
.app-loading .app-loading-logo {
width: 100px;
margin: 0 auto 15px auto;
}
.app-loading .app-loading-item {
position: relative;
display: inline-block;
width: 60px;
height: 60px;
vertical-align: middle;
border-radius: 50%;
}
.app-loading .app-loading-outter {
position: absolute;
width: 100%;
height: 100%;
border: 4px solid #2d8cf0;
border-bottom: 0;
border-left-color: transparent;
border-radius: 50%;
animation: loader-outter 1s cubic-bezier(0.42, 0.61, 0.58, 0.41) infinite;
}
.app-loading .app-loading-inner {
position: absolute;
top: calc(50% - 20px);
left: calc(50% - 20px);
width: 40px;
height: 40px;
border: 4px solid #87bdff;
border-right: 0;
border-top-color: transparent;
border-radius: 50%;
animation: loader-inner 1s cubic-bezier(0.42, 0.61, 0.58, 0.41) infinite;
}
@-webkit-keyframes loader-outter {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes loader-outter {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@-webkit-keyframes loader-inner {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(-360deg);
transform: rotate(-360deg);
}
}
@keyframes loader-inner {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(-360deg);
transform: rotate(-360deg);
}
}
</style>
<div class="app-loading">
<div class="app-loading-wrap">
<div class="app-loading-item">
<div class="app-loading-outter"></div>
<div class="app-loading-inner"></div>
</div>
</div>
</div>
</div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

View File

@ -0,0 +1,152 @@
{
"name": "grailed-ui-admin-vue3",
"version": "1.8.0-snapshot",
"description": "基于vue3、vite4、element-plus、typesScript",
"author": "xingyu",
"private": false,
"scripts": {
"i": "pnpm install",
"dev": "vite --mode base",
"front": "vite --mode front",
"ts:check": "vue-tsc --noEmit",
"build:pro": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode pro",
"build:da": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode da",
"build:us": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode us",
"build:uk": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode uk",
"build:pt": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode pt",
"build:nz": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode nz",
"build:in": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode in",
"build:dev": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode dev",
"build:base": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode base",
"build:stage": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode stage",
"build:static": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode static",
"build:front": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode front",
"serve:pro": "vite preview --mode pro",
"serve:dev": "vite preview --mode dev",
"preview": "pnpm build:base && vite preview",
"clean": "npx rimraf node_modules",
"clean:cache": "npx rimraf node_modules/.cache",
"lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src",
"lint:format": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"",
"lint:style": "stylelint --fix \"**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/",
"lint:lint-staged": "lint-staged -c "
},
"dependencies": {
"@element-plus/icons-vue": "^2.1.0",
"@form-create/designer": "^3.1.0",
"@form-create/element-ui": "^3.1.17",
"@iconify/iconify": "^3.1.1",
"@stomp/stompjs": "^7.0.0",
"@videojs-player/vue": "^1.0.0",
"@vueuse/core": "^10.3.0",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.10",
"@zxcvbn-ts/core": "^3.0.3",
"animate.css": "^4.1.1",
"axios": "^1.4.0",
"benz-amr-recorder": "^1.1.5",
"bpmn-js-token-simulation": "^0.10.0",
"camunda-bpmn-moddle": "^7.0.1",
"cropperjs": "^1.5.13",
"crypto-js": "^4.1.1",
"dayjs": "^1.11.9",
"diagram-js": "^11.6.0",
"echarts": "^5.4.3",
"echarts-wordcloud": "^2.1.0",
"element-plus": "2.3.9",
"fast-xml-parser": "^4.2.7",
"highlight.js": "^11.8.0",
"intro.js": "^7.0.1",
"jsencrypt": "^3.3.2",
"lodash-es": "^4.17.21",
"min-dash": "^4.1.1",
"mitt": "^3.0.1",
"nprogress": "^0.2.0",
"pinia": "^2.1.6",
"qrcode": "^1.5.3",
"qs": "^6.11.2",
"steady-xml": "^0.1.0",
"url": "^0.11.1",
"video.js": "^7.21.5",
"vue": "3.3.4",
"vue-dompurify-html": "^4.1.4",
"vue-i18n": "9.2.2",
"vue-router": "^4.2.4",
"vue-types": "^5.1.1",
"vuedraggable": "^4.1.0",
"web-storage-cache": "^1.1.1",
"xml-js": "^1.6.11"
},
"devDependencies": {
"@commitlint/cli": "^17.6.7",
"@commitlint/config-conventional": "^17.6.7",
"@iconify/json": "^2.2.98",
"@intlify/unplugin-vue-i18n": "^0.12.2",
"@purge-icons/generated": "^0.9.0",
"@types/intro.js": "^5.1.1",
"@types/lodash-es": "^4.17.8",
"@types/node": "^20.4.0",
"@types/nprogress": "^0.2.0",
"@types/qrcode": "^1.5.1",
"@types/qs": "^6.9.7",
"@typescript-eslint/eslint-plugin": "^6.2.1",
"@typescript-eslint/parser": "^6.2.1",
"@unocss/transformer-variant-group": "^0.54.1",
"@vitejs/plugin-legacy": "^4.1.1",
"@vitejs/plugin-vue": "^4.2.3",
"@vitejs/plugin-vue-jsx": "^3.0.1",
"@vue-macros/volar": "^0.13.2",
"autoprefixer": "^10.4.14",
"bpmn-js": "^8.9.0",
"bpmn-js-properties-panel": "^0.46.0",
"consola": "^3.2.3",
"eslint": "^8.46.0",
"eslint-config-prettier": "^8.10.0",
"eslint-define-config": "^1.22.0",
"eslint-plugin-prettier": "^5.0.0",
"eslint-plugin-vue": "^9.16.1",
"lint-staged": "^13.2.3",
"postcss": "^8.4.27",
"postcss-html": "^1.5.0",
"postcss-scss": "^4.0.6",
"prettier": "^3.0.1",
"rimraf": "^5.0.1",
"rollup": "^3.27.2",
"sass": "^1.64.2",
"stylelint": "^15.10.2",
"stylelint-config-html": "^1.1.0",
"stylelint-config-recommended": "^13.0.0",
"stylelint-config-standard": "^34.0.0",
"stylelint-order": "^6.0.3",
"terser": "^5.19.2",
"typescript": "5.1.6",
"unocss": "^0.54.1",
"unplugin-auto-import": "^0.16.6",
"unplugin-element-plus": "^0.8.0",
"unplugin-vue-components": "^0.25.1",
"vite": "4.4.8",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-ejs": "^1.6.4",
"vite-plugin-eslint": "^1.8.1",
"vite-plugin-progress": "^0.0.7",
"vite-plugin-purge-icons": "^0.9.2",
"vite-plugin-svg-icons": "^2.0.1",
"vite-plugin-top-level-await": "^1.3.1",
"vue-eslint-parser": "^9.3.1",
"vue-tsc": "^1.8.8"
},
"license": "MIT",
"repository": {
"type": "git",
"url": "git+https://gitee.com/yudaocode/yudao-ui-admin-vue3"
},
"bugs": {
"url": "https://gitee.com/yudaocode/yudao-ui-admin-vue3/issues"
},
"homepage": "https://gitee.com/yudaocode/yudao-ui-admin-vue3",
"packageManager": "pnpm@8.6.0",
"engines": {
"node": ">= 16.0.0",
"pnpm": ">=8.6.0"
}
}

View File

@ -0,0 +1,5 @@
module.exports = {
plugins: {
autoprefixer: {}
}
}

View File

@ -0,0 +1,22 @@
module.exports = {
printWidth: 100, // 每行代码长度默认80
tabWidth: 2, // 每个tab相当于多少个空格默认2ab进行缩进默认false
useTabs: false, // 是否使用tab
semi: false, // 声明结尾使用分号(默认true)
vueIndentScriptAndStyle: false,
singleQuote: true, // 使用单引号默认false
quoteProps: 'as-needed',
bracketSpacing: true, // 对象字面量的大括号间使用空格默认true
trailingComma: 'none', // 多行使用拖尾逗号默认none
jsxSingleQuote: false,
// 箭头函数参数括号 默认avoid 可选 avoid| always
// avoid 能省略括号的时候就省略 例如x => x
// always 总是有括号
arrowParens: 'always',
insertPragma: false,
requirePragma: false,
proseWrap: 'never',
htmlWhitespaceSensitivity: 'strict',
endOfLine: 'auto',
rangeStart: 0
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -0,0 +1,57 @@
<script lang="ts" setup>
import { isDark } from '@/utils/is'
import { useAppStore } from '@/store/modules/app'
import { useDesign } from '@/hooks/web/useDesign'
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
import routerSearch from '@/components/RouterSearch/index.vue'
defineOptions({ name: 'APP' })
const { getPrefixCls } = useDesign()
const prefixCls = getPrefixCls('app')
const appStore = useAppStore()
const currentSize = computed(() => appStore.getCurrentSize)
const greyMode = computed(() => appStore.getGreyMode)
const { wsCache } = useCache()
//
const setDefaultTheme = () => {
let isDarkTheme = wsCache.get(CACHE_KEY.IS_DARK)
if (isDarkTheme === null) {
isDarkTheme = isDark()
}
appStore.setIsDark(isDarkTheme)
}
setDefaultTheme()
</script>
<template>
<ConfigGlobal :size="currentSize">
<RouterView :class="greyMode ? `${prefixCls}-grey-mode` : ''" />
<routerSearch />
</ConfigGlobal>
</template>
<style lang="scss">
$prefix-cls: #{$namespace}-app;
.size {
width: 100%;
height: 100%;
}
html,
body {
@extend .size;
padding: 0 !important;
margin: 0;
overflow: hidden;
#app {
@extend .size;
}
}
.#{$prefix-cls}-grey-mode {
filter: grayscale(100%);
}
</style>

View File

@ -0,0 +1,30 @@
import request from '@/config/axios'
export interface ApiAccessLogVO {
id: number
traceId: string
userId: number
userType: number
applicationName: string
requestMethod: string
requestParams: string
requestUrl: string
userIp: string
userAgent: string
beginTime: Date
endTIme: Date
duration: number
resultCode: number
resultMsg: string
createTime: Date
}
// 查询列表API 访问日志
export const getApiAccessLogPage = (params: PageParam) => {
return request.get({ url: '/infra/api-access-log/page', params })
}
// 导出API 访问日志
export const exportApiAccessLog = (params) => {
return request.download({ url: '/infra/api-access-log/export-excel', params })
}

View File

@ -0,0 +1,48 @@
import request from '@/config/axios'
export interface ApiErrorLogVO {
id: number
traceId: string
userId: number
userType: number
applicationName: string
requestMethod: string
requestParams: string
requestUrl: string
userIp: string
userAgent: string
exceptionTime: Date
exceptionName: string
exceptionMessage: string
exceptionRootCauseMessage: string
exceptionStackTrace: string
exceptionClassName: string
exceptionFileName: string
exceptionMethodName: string
exceptionLineNumber: number
processUserId: number
processStatus: number
processTime: Date
resultCode: number
createTime: Date
}
// 查询列表API 访问日志
export const getApiErrorLogPage = (params: PageParam) => {
return request.get({ url: '/infra/api-error-log/page', params })
}
// 更新 API 错误日志的处理状态
export const updateApiErrorLogPage = (id: number, processStatus: number) => {
return request.put({
url: '/infra/api-error-log/update-status?id=' + id + '&processStatus=' + processStatus
})
}
// 导出API 访问日志
export const exportApiErrorLog = (params) => {
return request.download({
url: '/infra/api-error-log/export-excel',
params
})
}

View File

@ -0,0 +1,123 @@
import request from '@/config/axios'
export type CodegenTableVO = {
id: number
tableId: number
isParentMenuIdValid: boolean
dataSourceConfigId: number
scene: number
tableName: string
tableComment: string
remark: string
moduleName: string
businessName: string
className: string
classComment: string
author: string
createTime: Date
updateTime: Date
templateType: number
parentMenuId: number
}
export type CodegenColumnVO = {
id: number
tableId: number
columnName: string
dataType: string
columnComment: string
nullable: number
primaryKey: number
autoIncrement: string
ordinalPosition: number
javaType: string
javaField: string
dictType: string
example: string
createOperation: number
updateOperation: number
listOperation: number
listOperationCondition: string
listOperationResult: number
htmlType: string
}
export type DatabaseTableVO = {
name: string
comment: string
}
export type CodegenDetailVO = {
table: CodegenTableVO
columns: CodegenColumnVO[]
}
export type CodegenPreviewVO = {
filePath: string
code: string
}
export type CodegenUpdateReqVO = {
table: CodegenTableVO | any
columns: CodegenColumnVO[]
}
export type CodegenCreateListReqVO = {
dataSourceConfigId: number
tableNames: string[]
}
// 查询列表代码生成表定义
export const getCodegenTablePage = (params: PageParam) => {
return request.get({ url: '/infra/codegen/table/page', params })
}
// 查询详情代码生成表定义
export const getCodegenTable = (id: number) => {
return request.get({ url: '/infra/codegen/detail?tableId=' + id })
}
// 新增代码生成表定义
export const createCodegenTable = (data: CodegenCreateListReqVO) => {
return request.post({ url: '/infra/codegen/create', data })
}
// 修改代码生成表定义
export const updateCodegenTable = (data: CodegenUpdateReqVO) => {
return request.put({ url: '/infra/codegen/update', data })
}
// 基于数据库的表结构,同步数据库的表和字段定义
export const syncCodegenFromDB = (id: number) => {
return request.put({ url: '/infra/codegen/sync-from-db?tableId=' + id })
}
// 基于 SQL 建表语句,同步数据库的表和字段定义
export const syncCodegenFromSQL = (id: number, sql: string) => {
return request.put({ url: '/infra/codegen/sync-from-sql?tableId=' + id + '&sql=' + sql })
}
// 预览生成代码
export const previewCodegen = (id: number) => {
return request.get({ url: '/infra/codegen/preview?tableId=' + id })
}
// 下载生成代码
export const downloadCodegen = (id: number) => {
return request.download({ url: '/infra/codegen/download?tableId=' + id })
}
// 获得表定义
export const getSchemaTableList = (params) => {
return request.get({ url: '/infra/codegen/db/table/list', params })
}
// 基于数据库的表结构,创建代码生成器的表定义
export const createCodegenList = (data) => {
return request.post({ url: '/infra/codegen/create-list', data })
}
// 删除代码生成表定义
export const deleteCodegenTable = (id: number) => {
return request.delete({ url: '/infra/codegen/delete?tableId=' + id })
}

View File

@ -0,0 +1,60 @@
import request from '@/config/axios'
export interface ConfigVO {
id: number | undefined
category: string
name: string
key: string
value: string
type: number
visible: boolean
remark: string
createTime: Date
}
// 查询参数列表
export const getConfigPage = (params: PageParam) => {
return request.get({ url: '/infra/config/page', params })
}
// 查询参数详情
export const getConfig = (id: number) => {
return request.get({ url: '/infra/config/get?id=' + id })
}
// 根据参数键名查询参数值
export const getConfigKey = (configKey: string) => {
return request.get({ url: '/infra/config/get-value-by-key?key=' + configKey })
}
// 新增参数
export const createConfig = (data: ConfigVO) => {
return request.post({ url: '/infra/config/create', data })
}
// 修改参数
export const updateConfig = (data: ConfigVO) => {
return request.put({ url: '/infra/config/update', data })
}
// 删除参数
export const deleteConfig = (id: number) => {
return request.delete({ url: '/infra/config/delete?id=' + id })
}
// 导出参数
export const exportConfig = (params) => {
return request.download({ url: '/infra/config/export', params })
}
export const batchCreateSiteConfig = (data: any) => {
return request.post({ url: '/infra/config/site-config', data })
}
export const batchCreateTaskConfig = (data: any) => {
return request.post({ url: '/infra/config/task-config', data })
}
export const batchCreateFinanceConfig = (data: any) => {
return request.post({ url: '/infra/config/finance-config', data })
}

View File

@ -0,0 +1,35 @@
import request from '@/config/axios'
export interface DataSourceConfigVO {
id: number | undefined
name: string
url: string
username: string
password: string
createTime?: Date
}
// 新增数据源配置
export const createDataSourceConfig = (data: DataSourceConfigVO) => {
return request.post({ url: '/infra/data-source-config/create', data })
}
// 修改数据源配置
export const updateDataSourceConfig = (data: DataSourceConfigVO) => {
return request.put({ url: '/infra/data-source-config/update', data })
}
// 删除数据源配置
export const deleteDataSourceConfig = (id: number) => {
return request.delete({ url: '/infra/data-source-config/delete?id=' + id })
}
// 查询数据源配置详情
export const getDataSourceConfig = (id: number) => {
return request.get({ url: '/infra/data-source-config/get?id=' + id })
}
// 查询数据源配置列表
export const getDataSourceConfigList = () => {
return request.get({ url: '/infra/data-source-config/list' })
}

View File

@ -0,0 +1,16 @@
import request from '@/config/axios'
// 导出Html
export const exportHtml = () => {
return request.download({ url: '/infra/db-doc/export-html' })
}
// 导出Word
export const exportWord = () => {
return request.download({ url: '/infra/db-doc/export-word' })
}
// 导出Markdown
export const exportMarkdown = () => {
return request.download({ url: '/infra/db-doc/export-markdown' })
}

View File

@ -0,0 +1,17 @@
import request from '@/config/axios'
export interface FilePageReqVO extends PageParam {
path?: string
type?: string
createTime?: Date[]
}
// 查询文件列表
export const getFilePage = (params: FilePageReqVO) => {
return request.get({ url: '/infra/file/page', params })
}
// 删除文件
export const deleteFile = (id: number) => {
return request.delete({ url: '/infra/file/delete?id=' + id })
}

View File

@ -0,0 +1,61 @@
import request from '@/config/axios'
export interface FileClientConfig {
basePath: string
host?: string
port?: number
username?: string
password?: string
mode?: string
endpoint?: string
bucket?: string
accessKey?: string
accessSecret?: string
domain: string
}
export interface FileConfigVO {
id: number
name: string
storage: any
master: boolean
visible: boolean
config: FileClientConfig
remark: string
createTime: Date
}
// 查询文件配置列表
export const getFileConfigPage = (params: PageParam) => {
return request.get({ url: '/infra/file-config/page', params })
}
// 查询文件配置详情
export const getFileConfig = (id: number) => {
return request.get({ url: '/infra/file-config/get?id=' + id })
}
// 更新文件配置为主配置
export const updateFileConfigMaster = (id: number) => {
return request.put({ url: '/infra/file-config/update-master?id=' + id })
}
// 新增文件配置
export const createFileConfig = (data: FileConfigVO) => {
return request.post({ url: '/infra/file-config/create', data })
}
// 修改文件配置
export const updateFileConfig = (data: FileConfigVO) => {
return request.put({ url: '/infra/file-config/update', data })
}
// 删除文件配置
export const deleteFileConfig = (id: number) => {
return request.delete({ url: '/infra/file-config/delete?id=' + id })
}
// 测试文件配置
export const testFileConfig = (id: number) => {
return request.get({ url: '/infra/file-config/test?id=' + id })
}

View File

@ -0,0 +1,63 @@
import request from '@/config/axios'
export interface JobVO {
id: number
name: string
status: number
handlerName: string
handlerParam: string
cronExpression: string
retryCount: number
retryInterval: number
monitorTimeout: number
createTime: Date
}
// 任务列表
export const getJobPage = (params: PageParam) => {
return request.get({ url: '/infra/job/page', params })
}
// 任务详情
export const getJob = (id: number) => {
return request.get({ url: '/infra/job/get?id=' + id })
}
// 新增任务
export const createJob = (data: JobVO) => {
return request.post({ url: '/infra/job/create', data })
}
// 修改定时任务调度
export const updateJob = (data: JobVO) => {
return request.put({ url: '/infra/job/update', data })
}
// 删除定时任务调度
export const deleteJob = (id: number) => {
return request.delete({ url: '/infra/job/delete?id=' + id })
}
// 导出定时任务调度
export const exportJob = (params) => {
return request.download({ url: '/infra/job/export-excel', params })
}
// 任务状态修改
export const updateJobStatus = (id: number, status: number) => {
const params = {
id,
status
}
return request.put({ url: '/infra/job/update-status', params })
}
// 定时任务立即执行一次
export const runJob = (id: number) => {
return request.put({ url: '/infra/job/trigger?id=' + id })
}
// 获得定时任务的下 n 次执行时间
export const getJobNextTimes = (id: number) => {
return request.get({ url: '/infra/job/get_next_times?id=' + id })
}

View File

@ -0,0 +1,33 @@
import request from '@/config/axios'
export interface JobLogVO {
id: number
jobId: number
handlerName: string
handlerParam: string
cronExpression: string
executeIndex: string
beginTime: string
endTime: string
duration: string
status: number
createTime: string
}
// 任务日志列表
export const getJobLogPage = (params: PageParam) => {
return request.get({ url: '/infra/job-log/page', params })
}
// 任务日志详情
export const getJobLog = (id: number) => {
return request.get({ url: '/infra/job-log/get?id=' + id })
}
// 导出定时任务日志
export const exportJobLog = (params) => {
return request.download({
url: '/infra/job-log/export-excel',
params
})
}

View File

@ -0,0 +1,8 @@
import request from '@/config/axios'
/**
* redis
*/
export const getCache = () => {
return request.get({ url: '/infra/redis/get-monitor-info' })
}

View File

@ -0,0 +1,176 @@
export interface RedisMonitorInfoVO {
info: RedisInfoVO
dbSize: number
commandStats: RedisCommandStatsVO[]
}
export interface RedisInfoVO {
io_threaded_reads_processed: string
tracking_clients: string
uptime_in_seconds: string
cluster_connections: string
current_cow_size: string
maxmemory_human: string
aof_last_cow_size: string
master_replid2: string
mem_replication_backlog: string
aof_rewrite_scheduled: string
total_net_input_bytes: string
rss_overhead_ratio: string
hz: string
current_cow_size_age: string
redis_build_id: string
errorstat_BUSYGROUP: string
aof_last_bgrewrite_status: string
multiplexing_api: string
client_recent_max_output_buffer: string
allocator_resident: string
mem_fragmentation_bytes: string
aof_current_size: string
repl_backlog_first_byte_offset: string
tracking_total_prefixes: string
redis_mode: string
redis_git_dirty: string
aof_delayed_fsync: string
allocator_rss_bytes: string
repl_backlog_histlen: string
io_threads_active: string
rss_overhead_bytes: string
total_system_memory: string
loading: string
evicted_keys: string
maxclients: string
cluster_enabled: string
redis_version: string
repl_backlog_active: string
mem_aof_buffer: string
allocator_frag_bytes: string
io_threaded_writes_processed: string
instantaneous_ops_per_sec: string
used_memory_human: string
total_error_replies: string
role: string
maxmemory: string
used_memory_lua: string
rdb_current_bgsave_time_sec: string
used_memory_startup: string
used_cpu_sys_main_thread: string
lazyfree_pending_objects: string
aof_pending_bio_fsync: string
used_memory_dataset_perc: string
allocator_frag_ratio: string
arch_bits: string
used_cpu_user_main_thread: string
mem_clients_normal: string
expired_time_cap_reached_count: string
unexpected_error_replies: string
mem_fragmentation_ratio: string
aof_last_rewrite_time_sec: string
master_replid: string
aof_rewrite_in_progress: string
lru_clock: string
maxmemory_policy: string
run_id: string
latest_fork_usec: string
tracking_total_items: string
total_commands_processed: string
expired_keys: string
errorstat_ERR: string
used_memory: string
module_fork_in_progress: string
errorstat_WRONGPASS: string
aof_buffer_length: string
dump_payload_sanitizations: string
mem_clients_slaves: string
keyspace_misses: string
server_time_usec: string
executable: string
lazyfreed_objects: string
db0: string
used_memory_peak_human: string
keyspace_hits: string
rdb_last_cow_size: string
aof_pending_rewrite: string
used_memory_overhead: string
active_defrag_hits: string
tcp_port: string
uptime_in_days: string
used_memory_peak_perc: string
current_save_keys_processed: string
blocked_clients: string
total_reads_processed: string
expire_cycle_cpu_milliseconds: string
sync_partial_err: string
used_memory_scripts_human: string
aof_current_rewrite_time_sec: string
aof_enabled: string
process_supervised: string
master_repl_offset: string
used_memory_dataset: string
used_cpu_user: string
rdb_last_bgsave_status: string
tracking_total_keys: string
atomicvar_api: string
allocator_rss_ratio: string
client_recent_max_input_buffer: string
clients_in_timeout_table: string
aof_last_write_status: string
mem_allocator: string
used_memory_scripts: string
used_memory_peak: string
process_id: string
master_failover_state: string
errorstat_NOAUTH: string
used_cpu_sys: string
repl_backlog_size: string
connected_slaves: string
current_save_keys_total: string
gcc_version: string
total_system_memory_human: string
sync_full: string
connected_clients: string
module_fork_last_cow_size: string
total_writes_processed: string
allocator_active: string
total_net_output_bytes: string
pubsub_channels: string
current_fork_perc: string
active_defrag_key_hits: string
rdb_changes_since_last_save: string
instantaneous_input_kbps: string
used_memory_rss_human: string
configured_hz: string
expired_stale_perc: string
active_defrag_misses: string
used_cpu_sys_children: string
number_of_cached_scripts: string
sync_partial_ok: string
used_memory_lua_human: string
rdb_last_save_time: string
pubsub_patterns: string
slave_expires_tracked_keys: string
redis_git_sha1: string
used_memory_rss: string
rdb_last_bgsave_time_sec: string
os: string
mem_not_counted_for_evict: string
active_defrag_running: string
rejected_connections: string
aof_rewrite_buffer_length: string
total_forks: string
active_defrag_key_misses: string
allocator_allocated: string
aof_base_size: string
instantaneous_output_kbps: string
second_repl_offset: string
rdb_bgsave_in_progress: string
used_cpu_user_children: string
total_connections_received: string
migrate_cached_sockets: string
}
export interface RedisCommandStatsVO {
command: string
calls: number
usec: number
}

View File

@ -0,0 +1,64 @@
import request from '@/config/axios'
import { getRefreshToken } from '@/utils/auth'
import type { UserLoginVO } from './types'
export interface SmsCodeVO {
mobile: string
scene: number
}
export interface SmsLoginVO {
mobile: string
code: string
}
// 登录
export const login = (data: UserLoginVO) => {
return request.post({ url: '/system/auth/login', data })
}
// 刷新访问令牌
export const refreshToken = () => {
return request.post({ url: '/system/auth/refresh-token?refreshToken=' + getRefreshToken() })
}
// 使用租户名,获得租户编号
export const getTenantIdByName = (name: string) => {
return request.get({ url: '/system/tenant/get-id-by-name?name=' + name })
}
// 登出
export const loginOut = () => {
return request.post({ url: '/system/auth/logout' })
}
// 获取用户权限信息
export const getInfo = () => {
return request.get({ url: '/system/auth/get-permission-info' })
}
//获取登录验证码
export const sendSmsCode = (data: SmsCodeVO) => {
return request.post({ url: '/system/auth/send-sms-code', data })
}
// 短信验证码登录
export const smsLogin = (data: SmsLoginVO) => {
return request.post({ url: '/system/auth/sms-login', data })
}
// 社交授权的跳转
export const socialAuthRedirect = (type: number, redirectUri: string) => {
return request.get({
url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri
})
}
// 获取验证图片以及 token
export const getCode = (data) => {
return request.postOriginal({ url: 'system/captcha/get', data })
}
// 滑动或者点选验证
export const reqCheck = (data) => {
return request.postOriginal({ url: 'system/captcha/check', data })
}

View File

@ -0,0 +1,41 @@
import request from '@/config/axios'
// 获得授权信息
export const getAuthorize = (clientId: string) => {
return request.get({ url: '/system/oauth2/authorize?clientId=' + clientId })
}
// 发起授权
export const authorize = (
responseType: string,
clientId: string,
redirectUri: string,
state: string,
autoApprove: boolean,
checkedScopes: string[],
uncheckedScopes: string[]
) => {
// 构建 scopes
const scopes = {}
for (const scope of checkedScopes) {
scopes[scope] = true
}
for (const scope of uncheckedScopes) {
scopes[scope] = false
}
// 发起请求
return request.post({
url: '/system/oauth2/authorize',
headers: {
'Content-type': 'application/x-www-form-urlencoded'
},
params: {
response_type: responseType,
client_id: clientId,
redirect_uri: redirectUri,
state: state,
auto_approve: autoApprove,
scope: JSON.stringify(scopes)
}
})
}

View File

@ -0,0 +1,28 @@
export type UserLoginVO = {
username: string
password: string
captchaVerification: string
}
export type TokenType = {
id: number // 编号
accessToken: string // 访问令牌
refreshToken: string // 刷新令牌
userId: number // 用户编号
userType: number //用户类型
clientId: string //客户端编号
expiresTime: number //过期时间
}
export type UserVO = {
id: number
username: string
nickname: string
deptId: number
email: string
mobile: string
sex: number
avatar: string
loginIp: string
loginDate: string
}

View File

@ -0,0 +1,61 @@
import request from '@/config/axios'
/**
*
*/
export interface BrandVO {
/**
*
*/
id?: number
/**
*
*/
name: string
/**
*
*/
picUrl: string
/**
*
*/
sort?: number
/**
*
*/
description?: string
/**
*
*/
status: number
}
// 创建商品品牌
export const createBrand = (data: BrandVO) => {
return request.post({ url: '/product/brand/create', data })
}
// 更新商品品牌
export const updateBrand = (data: BrandVO) => {
return request.put({ url: '/product/brand/update', data })
}
// 删除商品品牌
export const deleteBrand = (id: number) => {
return request.delete({ url: `/product/brand/delete?id=${id}` })
}
// 获得商品品牌
export const getBrand = (id: number) => {
return request.get({ url: `/product/brand/get?id=${id}` })
}
// 获得商品品牌列表
export const getBrandParam = (params: PageParam) => {
return request.get({ url: '/product/brand/page', params })
}
// 获得商品品牌精简信息列表
export const getSimpleBrandList = () => {
return request.get({ url: '/product/brand/list-all-simple' })
}

View File

@ -0,0 +1,60 @@
import request from '@/config/axios'
/**
*
*/
export interface CategoryVO {
/**
*
*/
id?: number
/**
*
*/
parentId?: number
/**
*
*/
name: string
/**
*
*/
picUrl: string
/**
* PC
*/
bigPicUrl?: string
/**
*
*/
sort: number
/**
*
*/
status: number
}
// 创建商品分类
export const createCategory = (data: CategoryVO) => {
return request.post({ url: '/product/category/create', data })
}
// 更新商品分类
export const updateCategory = (data: CategoryVO) => {
return request.put({ url: '/product/category/update', data })
}
// 删除商品分类
export const deleteCategory = (id: number) => {
return request.delete({ url: `/product/category/delete?id=${id}` })
}
// 获得商品分类
export const getCategory = (id: number) => {
return request.get({ url: `/product/category/get?id=${id}` })
}
// 获得商品分类列表
export const getCategoryList = (params: any) => {
return request.get({ url: '/product/category/list', params })
}

View File

@ -0,0 +1,103 @@
import request from '@/config/axios'
/**
*
*/
export interface PropertyVO {
id?: number
/** 名称 */
name: string
/** 备注 */
remark?: string
}
/**
*
*/
export interface PropertyValueVO {
id?: number
/** 属性项的编号 */
propertyId?: number
/** 名称 */
name: string
/** 备注 */
remark?: string
}
/**
*
*/
export interface PropertyValueDetailVO {
/** 属性项的编号 */
propertyId: number // 属性的编号
/** 属性的名称 */
propertyName: string
/** 属性值的编号 */
valueId: number
/** 属性值的名称 */
valueName: string
}
// ------------------------ 属性项 -------------------
// 创建属性项
export const createProperty = (data: PropertyVO) => {
return request.post({ url: '/product/property/create', data })
}
// 更新属性项
export const updateProperty = (data: PropertyVO) => {
return request.put({ url: '/product/property/update', data })
}
// 删除属性项
export const deleteProperty = (id: number) => {
return request.delete({ url: `/product/property/delete?id=${id}` })
}
// 获得属性项
export const getProperty = (id: number): Promise<PropertyVO> => {
return request.get({ url: `/product/property/get?id=${id}` })
}
// 获得属性项分页
export const getPropertyPage = (params: PageParam) => {
return request.get({ url: '/product/property/page', params })
}
// 获得属性项列表
export const getPropertyList = (params: any) => {
return request.get({ url: '/product/property/list', params })
}
// 获得属性项列表
export const getPropertyListAndValue = (data: any) => {
return request.post({ url: '/product/property/get-value-list', data })
}
// ------------------------ 属性值 -------------------
// 获得属性值分页
export const getPropertyValuePage = (params: PageParam & any) => {
return request.get({ url: '/product/property/value/page', params })
}
// 获得属性值
export const getPropertyValue = (id: number): Promise<PropertyValueVO> => {
return request.get({ url: `/product/property/value/get?id=${id}` })
}
// 创建属性值
export const createPropertyValue = (data: PropertyValueVO) => {
return request.post({ url: '/product/property/value/create', data })
}
// 更新属性值
export const updatePropertyValue = (data: PropertyValueVO) => {
return request.put({ url: '/product/property/value/update', data })
}
// 删除属性值
export const deletePropertyValue = (id: number) => {
return request.delete({ url: `/product/property/value/delete?id=${id}` })
}

View File

@ -0,0 +1,107 @@
import request from '@/config/axios'
export interface Property {
propertyId?: number // 属性编号
propertyName?: string // 属性名称
valueId?: number // 属性值编号
valueName?: string // 属性值名称
}
export interface Sku {
id?: number // 商品 SKU 编号
spuId?: number // SPU 编号
properties?: Property[] // 属性数组
price?: number // 商品价格
marketPrice?: number // 市场价
costPrice?: number // 成本价
barCode?: string // 商品条码
picUrl?: string // 图片地址
stock?: number // 库存
weight?: number // 商品重量单位kg 千克
volume?: number // 商品体积单位m^3 平米
subCommissionFirstPrice?: number // 一级分销的佣金
subCommissionSecondPrice?: number // 二级分销的佣金
salesCount?: number // 商品销量
}
export interface Spu {
id?: number
name?: string // 商品名称
categoryId?: number | null // 商品分类
keyword?: string // 关键字
unit?: number | null // 单位
picUrl?: string // 商品封面图
sliderPicUrls?: string[] // 商品轮播图
introduction?: string // 商品简介
deliveryTemplateId?: number | null // 运费模版
brandId?: number | null // 商品品牌编号
specType?: boolean // 商品规格
subCommissionType?: boolean // 分销类型
skus?: Sku[] // sku数组
description?: string // 商品详情
sort?: number // 商品排序
giveIntegral?: number // 赠送积分
virtualSalesCount?: number // 虚拟销量
recommendHot?: boolean // 是否热卖
recommendBenefit?: boolean // 是否优惠
recommendBest?: boolean // 是否精品
recommendNew?: boolean // 是否新品
recommendGood?: boolean // 是否优品
price?: number // 商品价格
salesCount?: number // 商品销量
marketPrice?: number // 市场价
costPrice?: number // 成本价
stock?: number // 商品库存
createTime?: Date // 商品创建时间
status?: number // 商品状态
}
// 获得 Spu 列表
export const getSpuPage = (params: PageParam) => {
return request.get({ url: '/product/spu/page', params })
}
// 获得 Spu 列表 tabsCount
export const getTabsCount = () => {
return request.get({ url: '/product/spu/get-count' })
}
// 创建商品 Spu
export const createSpu = (data: Spu) => {
return request.post({ url: '/product/spu/create', data })
}
// 更新商品 Spu
export const updateSpu = (data: Spu) => {
return request.put({ url: '/product/spu/update', data })
}
// 更新商品 Spu status
export const updateStatus = (data: { id: number; status: number }) => {
return request.put({ url: '/product/spu/update-status', data })
}
// 获得商品 Spu
export const getSpu = (id: number) => {
return request.get({ url: `/product/spu/get-detail?id=${id}` })
}
// 获得商品 Spu 详情列表
export const getSpuDetailList = (ids: number[]) => {
return request.get({ url: `/product/spu/list?spuIds=${ids}` })
}
// 删除商品 Spu
export const deleteSpu = (id: number) => {
return request.delete({ url: `/product/spu/delete?id=${id}` })
}
// 导出商品 Spu Excel
export const exportSpu = async (params) => {
return await request.download({ url: '/product/spu/export', params })
}
// 获得商品 SPU 精简列表
export const getSpuSimpleList = async () => {
return request.get({ url: '/product/spu/get-simple-list' })
}

View File

@ -0,0 +1,61 @@
import request from '@/config/axios'
import { Sku, Spu } from '@/api/mall/product/spu'
export interface CombinationActivityVO {
id?: number
name?: string
spuId?: number
totalLimitCount?: number
singleLimitCount?: number
startTime?: Date
endTime?: Date
userSize?: number
totalNum?: number
successNum?: number
orderUserCount?: number
virtualGroup?: number
status?: number
limitDuration?: number
products: CombinationProductVO[]
}
// 拼团活动所需属性
export interface CombinationProductVO {
spuId: number
skuId: number
activePrice: number // 拼团价格
}
// 扩展 Sku 配置
export type SkuExtension = Sku & {
productConfig: CombinationProductVO
}
export interface SpuExtension extends Spu {
skus: SkuExtension[] // 重写类型
}
// 查询拼团活动列表
export const getCombinationActivityPage = async (params) => {
return await request.get({ url: '/promotion/combination-activity/page', params })
}
// 查询拼团活动详情
export const getCombinationActivity = async (id: number) => {
return await request.get({ url: '/promotion/combination-activity/get?id=' + id })
}
// 新增拼团活动
export const createCombinationActivity = async (data: CombinationActivityVO) => {
return await request.post({ url: '/promotion/combination-activity/create', data })
}
// 修改拼团活动
export const updateCombinationActivity = async (data: CombinationActivityVO) => {
return await request.put({ url: '/promotion/combination-activity/update', data })
}
// 删除拼团活动
export const deleteCombinationActivity = async (id: number) => {
return await request.delete({ url: '/promotion/combination-activity/delete?id=' + id })
}

View File

@ -0,0 +1,18 @@
import request from '@/config/axios'
// TODO @dhb52vo 缺少
// 删除优惠劵
export const deleteCoupon = async (id: number) => {
return request.delete({
url: `/promotion/coupon/delete?id=${id}`
})
}
// 获得优惠劵分页
export const getCouponPage = async (params: PageParam) => {
return request.get({
url: '/promotion/coupon/page',
params: params
})
}

View File

@ -0,0 +1,83 @@
import request from '@/config/axios'
export interface CouponTemplateVO {
id: number
name: string
status: number
totalCount: number
takeLimitCount: number
takeType: number
usePrice: number
productScope: number
productSpuIds: string
validityType: number
validStartTime: Date
validEndTime: Date
fixedStartTerm: number
fixedEndTerm: number
discountType: number
discountPercent: number
discountPrice: number
discountLimitPrice: number
takeCount: number
useCount: number
}
// 创建优惠劵模板
export function createCouponTemplate(data: CouponTemplateVO) {
return request.post({
url: '/promotion/coupon-template/create',
data: data
})
}
// 更新优惠劵模板
export function updateCouponTemplate(data: CouponTemplateVO) {
return request.put({
url: '/promotion/coupon-template/update',
data: data
})
}
// 更新优惠劵模板的状态
export function updateCouponTemplateStatus(id: number, status: [0, 1]) {
const data = {
id,
status
}
return request.put({
url: '/promotion/coupon-template/update-status',
data: data
})
}
// 删除优惠劵模板
export function deleteCouponTemplate(id: number) {
return request.delete({
url: '/promotion/coupon-template/delete?id=' + id
})
}
// 获得优惠劵模板
export function getCouponTemplate(id: number) {
return request.get({
url: '/promotion/coupon-template/get?id=' + id
})
}
// 获得优惠劵模板分页
export function getCouponTemplatePage(params: PageParam) {
return request.get({
url: '/promotion/coupon-template/page',
params: params
})
}
// 导出优惠劵模板 Excel
export function exportCouponTemplateExcel(params: PageParam) {
return request.get({
url: '/promotion/coupon-template/export-excel',
params: params,
responseType: 'blob'
})
}

View File

@ -0,0 +1,63 @@
import request from '@/config/axios'
import { Sku, Spu } from '@/api/mall/product/spu'
export interface SeckillActivityVO {
id?: number
spuId?: number
name?: string
status?: number
remark?: string
startTime?: Date
endTime?: Date
sort?: number
configIds?: string
orderCount?: number
userCount?: number
totalPrice?: number
totalLimitCount?: number
singleLimitCount?: number
stock?: number
totalStock?: number
products?: SeckillProductVO[]
}
// 秒杀活动所需属性
export interface SeckillProductVO {
skuId: number
seckillPrice: number
stock: number
}
// 扩展 Sku 配置
export type SkuExtension = Sku & {
productConfig: SeckillProductVO
}
export interface SpuExtension extends Spu {
skus: SkuExtension[] // 重写类型
}
// 查询秒杀活动列表
export const getSeckillActivityPage = async (params) => {
return await request.get({ url: '/promotion/seckill-activity/page', params })
}
// 查询秒杀活动详情
export const getSeckillActivity = async (id: number) => {
return await request.get({ url: '/promotion/seckill-activity/get?id=' + id })
}
// 新增秒杀活动
export const createSeckillActivity = async (data: SeckillActivityVO) => {
return await request.post({ url: '/promotion/seckill-activity/create', data })
}
// 修改秒杀活动
export const updateSeckillActivity = async (data: SeckillActivityVO) => {
return await request.put({ url: '/promotion/seckill-activity/update', data })
}
// 删除秒杀活动
export const deleteSeckillActivity = async (id: number) => {
return await request.delete({ url: '/promotion/seckill-activity/delete?id=' + id })
}

View File

@ -0,0 +1,49 @@
import request from '@/config/axios'
export interface SeckillConfigVO {
id: number
name: string
startTime: string
endTime: string
sliderPicUrls: string[]
status: number
}
// 查询秒杀时段配置列表
export const getSeckillConfigPage = async (params) => {
return await request.get({ url: '/promotion/seckill-config/page', params })
}
// 查询秒杀时段配置详情
export const getSeckillConfig = async (id: number) => {
return await request.get({ url: '/promotion/seckill-config/get?id=' + id })
}
// 获得所有开启状态的秒杀时段精简列表
export const getListAllSimple = async () => {
return await request.get({ url: '/promotion/seckill-config/list-all-simple' })
}
// 新增秒杀时段配置
export const createSeckillConfig = async (data: SeckillConfigVO) => {
return await request.post({ url: '/promotion/seckill-config/create', data })
}
// 修改秒杀时段配置
export const updateSeckillConfig = async (data: SeckillConfigVO) => {
return await request.put({ url: '/promotion/seckill-config/update', data })
}
// 修改时段配置状态
export const updateSeckillConfigStatus = (id: number, status: number) => {
const data = {
id,
status
}
return request.put({ url: '/promotion/seckill-config/update-status', data: data })
}
// 删除秒杀时段配置
export const deleteSeckillConfig = async (id: number) => {
return await request.delete({ url: '/promotion/seckill-config/delete?id=' + id })
}

View File

@ -0,0 +1,40 @@
import request from '@/config/axios'
export interface DeliveryExpressVO {
id: number
code: string
name: string
logo: string
sort: number
status: number
}
// 查询快递公司列表
export const getDeliveryExpressPage = async (params: PageParam) => {
return await request.get({ url: '/trade/delivery/express/page', params })
}
// 查询快递公司详情
export const getDeliveryExpress = async (id: number) => {
return await request.get({ url: '/trade/delivery/express/get?id=' + id })
}
// 新增快递公司
export const createDeliveryExpress = async (data: DeliveryExpressVO) => {
return await request.post({ url: '/trade/delivery/express/create', data })
}
// 修改快递公司
export const updateDeliveryExpress = async (data: DeliveryExpressVO) => {
return await request.put({ url: '/trade/delivery/express/update', data })
}
// 删除快递公司
export const deleteDeliveryExpress = async (id: number) => {
return await request.delete({ url: '/trade/delivery/express/delete?id=' + id })
}
// 导出快递公司 Excel
export const exportDeliveryExpressApi = async (params) => {
return await request.download({ url: '/trade/delivery/express/export-excel', params })
}

View File

@ -0,0 +1,54 @@
import request from '@/config/axios'
export interface DeliveryExpressTemplateVO {
id: number
name: string
chargeMode: number
sort: number
templateCharge: ExpressTemplateChargeVO[]
templateFree: ExpressTemplateFreeVO[]
}
export declare type ExpressTemplateChargeVO = {
areaIds: number[]
startCount: number
startPrice: number
extraCount: number
extraPrice: number
}
export declare type ExpressTemplateFreeVO = {
areaIds: number[]
freeCount: number
freePrice: number
}
// 查询快递运费模板列表
export const getDeliveryExpressTemplatePage = async (params: PageParam) => {
return await request.get({ url: '/trade/delivery/express-template/page', params })
}
// 查询快递运费模板详情
export const getDeliveryExpressTemplate = async (id: number) => {
return await request.get({ url: '/trade/delivery/express-template/get?id=' + id })
}
// 查询快递运费模板详情
export const getSimpleTemplateList = async () => {
return await request.get({ url: '/trade/delivery/express-template/list-all-simple' })
}
// 新增快递运费模板
export const createDeliveryExpressTemplate = async (data: DeliveryExpressTemplateVO) => {
return await request.post({ url: '/trade/delivery/express-template/create', data })
}
// 修改快递运费模板
export const updateDeliveryExpressTemplate = async (data: DeliveryExpressTemplateVO) => {
return await request.put({ url: '/trade/delivery/express-template/update', data })
}
// 删除快递运费模板
export const deleteDeliveryExpressTemplate = async (id: number) => {
return await request.delete({ url: '/trade/delivery/express-template/delete?id=' + id })
}

View File

@ -0,0 +1,46 @@
import request from '@/config/axios'
export interface DeliveryPickUpStoreVO {
id: number
name: string
introduction: string
phone: string
areaId: number
detailAddress: string
logo: string
openingTime: string
closingTime: string
latitude: number
longitude: number
status: number
}
// 查询自提门店列表
export const getDeliveryPickUpStorePage = async (params: DeliveryPickUpStorePageReqVO) => {
return await request.get({ url: '/trade/delivery/pick-up-store/page', params })
}
// 查询自提门店详情
export const getDeliveryPickUpStore = async (id: number) => {
return await request.get({ url: '/trade/delivery/pick-up-store/get?id=' + id })
}
// 新增自提门店
export const createDeliveryPickUpStore = async (data: DeliveryPickUpStoreVO) => {
return await request.post({ url: '/trade/delivery/pick-up-store/create', data })
}
// 修改自提门店
export const updateDeliveryPickUpStore = async (data: DeliveryPickUpStoreVO) => {
return await request.put({ url: '/trade/delivery/pick-up-store/update', data })
}
// 删除自提门店
export const deleteDeliveryPickUpStore = async (id: number) => {
return await request.delete({ url: '/trade/delivery/pick-up-store/delete?id=' + id })
}
// 导出自提门店 Excel
export const exportDeliveryPickUpStoreApi = async (params) => {
return await request.download({ url: '/trade/delivery/pick-up-store/export-excel', params })
}

View File

@ -0,0 +1,12 @@
import request from '@/config/axios'
// 获得交易订单分页
// TODO @xiaobai改成 getOrderPage
export const getOrderList = (params: PageParam) => {
return request.get({ url: '/trade/order/page', params })
}
// 获得交易订单详情
export const getOrderDetail = (id: number) => {
return request.get({ url: '/trade/order/get-detail?id=' + id })
}

View File

@ -0,0 +1,228 @@
// TODO @xiaobai这个放到 order/index.ts 里哈
// TODO @xiaobai注释放到变量后面这样简洁一点
// TODO @xiaobai这个改成 TradeOrderRespVO
export interface TradeOrderPageItemRespVO {
// 订单编号
id?: number
// 订单流水号
no?: string
// 下单时间
createTime?: Date
// 订单类型
type?: number
// 订单来源
terminal?: number
// 用户编号
userId?: number
// 用户 IP
userIp?: string
// 用户备注
userRemark?: string
// 订单状态
status?: number
// 购买的商品数量
productCount?: number
// 订单完成时间
finishTime?: Date
// 订单取消时间
cancelTime?: Date
// 取消类型
cancelType?: number
// 商家备注
remark?: string
// 支付订单编号
payOrderId: number
// 是否已支付
payed?: boolean
// 付款时间
payTime?: Date
// 支付渠道
payChannelCode?: string
// 商品原价(总)
originalPrice?: number
// 订单原价(总)
orderPrice?: number
// 订单优惠(总)
discountPrice?: number
// 运费金额
deliveryPrice?: number
// 订单调价(总)
adjustPrice?: number
// 应付金额(总)
payPrice?: number
// 配送模板编号
deliveryTemplateId?: number
// 发货物流公司编号
logisticsId?: number
// 发货物流单号
logisticsNo?: string
// 发货状态
deliveryStatus?: number
// 发货时间
deliveryTime?: Date
// 收货时间
receiveTime?: Date
// 收件人名称
receiverName?: string
// 收件人手机
receiverMobile?: string
// 收件人地区编号
receiverAreaId?: number
// 收件人邮编
receiverPostCode?: number
// 收件人详细地址
receiverDetailAddress?: string
// 售后状态
afterSaleStatus?: number
// 退款金额
refundPrice?: number
// 优惠劵编号
couponId?: number
// 优惠劵减免金额
couponPrice?: number
// 积分抵扣的金额
pointPrice?: number
//收件人地区名字
receiverAreaName?: string
// 订单项列表
items?: TradeOrderItemBaseVO[]
//用户信息
user?: MemberUserRespDTO
}
// TODO @xiaobai这个改成 TradeOrderItemRespVO
/**
* Base VO VO 使
* VO Swagger
*/
export interface TradeOrderItemBaseVO {
// ========== 订单项基本信息 ==========
/**
*
*/
id?: number
/**
*
*/
userId?: number
/**
*
*/
orderId?: number
// ========== 商品基本信息 ==========
/**
* SPU
*/
spuId?: number
/**
* SPU
*/
spuName?: string
/**
* SKU
*/
skuId?: number
/**
*
*/
picUrl?: string
/**
*
*/
count?: number
// ========== 价格 + 支付基本信息 ==========
/**
*
*/
originalPrice?: number
/**
*
*/
originalUnitPrice?: number
/**
*
*/
discountPrice?: number
/**
*
*/
payPrice?: number
/**
*
*/
orderPartPrice?: number
/**
*
*/
orderDividePrice?: number
// ========== 营销基本信息 ==========
// TODO 芋艿:在捉摸一下
// ========== 售后基本信息 ==========
/**
*
*/
afterSaleStatus?: number
//属性数组
properties?: ProductPropertyValueDetailRespVO[]
}
/**
* - Response VO
*/
export interface ProductPropertyValueDetailRespVO {
/**
*
*/
propertyId?: number
/**
*
*/
propertyName?: string
/**
*
*/
valueId?: number
/**
*
*/
valueName?: string
}
/**
*
*/
export interface TradeOrderPageReqVO {
pageNo: number
pageSize: number
no?: string
userId?: string
userNickname?: string
userMobile?: string
receiverName?: string
receiverMobile?: string
terminal?: string
type?: number
status?: number
payChannelCode?: string
createTime?: [Date, Date]
spuName?: string
itemCount?: string
all?: string
}
//用户信息
export interface MemberUserRespDTO {
id?: number
nickname?: string
status?: number
avatar?: string
mobile?: string
}
//订单详情选中type
export interface SelectType {
queryParams: TradeOrderPageReqVO
selectTotal: number //选中的数量
selectAllFlag: boolean //全选标识
selectData: Map<number, Set<string>> //存放涉及选中得页面以及每页选中得数据订单号 全选时根据条件查询 排除取消的list订单
unSelectList: Set<string> //登记取消的list 全选标识为true 时登记单独取消的list再次选中时排除 全选标识为false 时清空list
}

View File

@ -0,0 +1,54 @@
import request from '@/config/axios'
export interface BalanceAccountVO {
userId: number
balance: number
freezeBalance: number
password: string
status: number
}
// 查询会员账户列表
export const getBalanceAccountPage = async (params) => {
return await request.get({ url: `/member/balance-account/page`, params })
}
// 查询会员账户详情
export const getBalanceAccount = async (id: number) => {
return await request.get({ url: `/member/balance-account/get?id=` + id })
}
// 新增会员账户
export const createBalanceAccount = async (data: BalanceAccountVO) => {
return await request.post({ url: `/member/balance-account/create`, data })
}
// 修改会员账户
export const updateBalanceAccount = async (data: BalanceAccountVO) => {
return await request.put({ url: `/member/balance-account/update`, data })
}
// 删除会员账户
export const deleteBalanceAccount = async (id: number) => {
return await request.delete({ url: `/member/balance-account/delete?id=` + id })
}
// 导出会员账户 Excel
export const exportBalanceAccount = async (params) => {
return await request.download({ url: `/member/balance-account/export-excel`, params })
}
// 查询会员账户by userId
export const getBalanceAccountByUseId = async (params) => {
return await request.get({ url: `/member/balance-account/get/${params.userId}` })
}
// 修改账户余额
export const updateBalanceAccountByUser = async (data: any) => {
return await request.post({ url: `/member/balance-account/update-balance`, data })
}
// 修改取款密码
export const updateBalanceAccountPassword = async (data: any) => {
return await request.put({ url: `/member/balance-account/update-password`, data })
}

View File

@ -0,0 +1,42 @@
import request from '@/config/axios'
export interface BalanceRecordVO {
id: number
userId: number
beforeAmount: number
amount: number
afterAmount: number
type: string
flow: string
description: string
}
// 查询余额日志列表
export const getBalanceRecordPage = async (params) => {
return await request.get({ url: `/member/balance-record/page`, params })
}
// 查询余额日志详情
export const getBalanceRecord = async (id: number) => {
return await request.get({ url: `/member/balance-record/get?id=` + id })
}
// 新增余额日志
export const createBalanceRecord = async (data: BalanceRecordVO) => {
return await request.post({ url: `/member/balance-record/create`, data })
}
// 修改余额日志
export const updateBalanceRecord = async (data: BalanceRecordVO) => {
return await request.put({ url: `/member/balance-record/update`, data })
}
// 删除余额日志
export const deleteBalanceRecord = async (id: number) => {
return await request.delete({ url: `/member/balance-record/delete?id=` + id })
}
// 导出余额日志 Excel
export const exportBalanceRecord = async (params) => {
return await request.download({ url: `/member/balance-record/export-excel`, params })
}

View File

@ -0,0 +1,46 @@
import request from '@/config/axios'
export interface BankWithdrawalDetailVO {
id: number
withdrawalId: number
bankName: string
bankCountry: string
accountName: string
accountNumber: string
iban: string
swiftBicCode: string
bankAddress: string
branchName: string
branchAddress: string
bankFee: number
}
// 查询银行卡提现详情列表
export const getBankWithdrawalDetailPage = async (params) => {
return await request.get({ url: `/member/bank-withdrawal-detail/page`, params })
}
// 查询银行卡提现详情详情
export const getBankWithdrawalDetail = async (id: number) => {
return await request.get({ url: `/member/bank-withdrawal-detail/get?id=` + id })
}
// 新增银行卡提现详情
export const createBankWithdrawalDetail = async (data: BankWithdrawalDetailVO) => {
return await request.post({ url: `/member/bank-withdrawal-detail/create`, data })
}
// 修改银行卡提现详情
export const updateBankWithdrawalDetail = async (data: BankWithdrawalDetailVO) => {
return await request.put({ url: `/member/bank-withdrawal-detail/update`, data })
}
// 删除银行卡提现详情
export const deleteBankWithdrawalDetail = async (id: number) => {
return await request.delete({ url: `/member/bank-withdrawal-detail/delete?id=` + id })
}
// 导出银行卡提现详情 Excel
export const exportBankWithdrawalDetail = async (params) => {
return await request.download({ url: `/member/bank-withdrawal-detail/export-excel`, params })
}

View File

@ -0,0 +1,40 @@
import request from '@/config/axios'
export interface BrandVO {
id: number
name: string
picUrl: string
description: string
sort: number
status: number
}
// 查询商品品牌列表
export const getBrandPage = async (params) => {
return await request.get({ url: `/member/brand/page`, params })
}
// 查询商品品牌详情
export const getBrand = async (id: number) => {
return await request.get({ url: `/member/brand/get?id=` + id })
}
// 新增商品品牌
export const createBrand = async (data: BrandVO) => {
return await request.post({ url: `/member/brand/create`, data })
}
// 修改商品品牌
export const updateBrand = async (data: BrandVO) => {
return await request.put({ url: `/member/brand/update`, data })
}
// 删除商品品牌
export const deleteBrand = async (id: number) => {
return await request.delete({ url: `/member/brand/delete?id=` + id })
}
// 导出商品品牌 Excel
export const exportBrand = async (params) => {
return await request.download({ url: `/member/brand/export-excel`, params })
}

View File

@ -0,0 +1,41 @@
import request from '@/config/axios'
export interface CategoryVO {
id: number
parentId: number
name: string
picUrl: string
bigPicUrl: string
sort: number
status: number
}
// 查询商品分类列表
export const getCategoryPage = async (params) => {
return await request.get({ url: `/member/category/page`, params })
}
// 查询商品分类详情
export const getCategory = async (id: number) => {
return await request.get({ url: `/member/category/get?id=` + id })
}
// 新增商品分类
export const createCategory = async (data: CategoryVO) => {
return await request.post({ url: `/member/category/create`, data })
}
// 修改商品分类
export const updateCategory = async (data: CategoryVO) => {
return await request.put({ url: `/member/category/update`, data })
}
// 删除商品分类
export const deleteCategory = async (id: number) => {
return await request.delete({ url: `/member/category/delete?id=` + id })
}
// 导出商品分类 Excel
export const exportCategory = async (params) => {
return await request.download({ url: `/member/category/export-excel`, params })
}

View File

@ -0,0 +1,43 @@
import request from '@/config/axios'
export interface ChannelVO {
accountCode: string
accountName: string
bankName: string
bankCountry: string
iban: string
bankAddress: string
branchName: string
branchAddress: string
configId: number
}
// 查询渠道列列表
export const getChannelPage = async (params) => {
return await request.get({ url: `/member/channel/page`, params })
}
// 查询渠道列详情
export const getChannel = async (id: number) => {
return await request.get({ url: `/member/channel/get?id=` + id })
}
// 新增渠道列
export const createChannel = async (data: ChannelVO) => {
return await request.post({ url: `/member/channel/create`, data })
}
// 修改渠道列
export const updateChannel = async (data: ChannelVO) => {
return await request.put({ url: `/member/channel/update`, data })
}
// 删除渠道列
export const deleteChannel = async (id: number) => {
return await request.delete({ url: `/member/channel/delete?id=` + id })
}
// 导出渠道列 Excel
export const exportChannel = async (params) => {
return await request.download({ url: `/member/channel/export-excel`, params })
}

View File

@ -0,0 +1,40 @@
import request from '@/config/axios'
export interface ChannelConfigVO {
id: number
channelName: string
channelType: number
iconLink: string
scenario: number
status: number
}
// 查询渠道配置列表
export const getChannelConfigPage = async (params) => {
return await request.get({ url: `/member/channel-config/page`, params })
}
// 查询渠道配置详情
export const getChannelConfig = async (id: number) => {
return await request.get({ url: `/member/channel-config/get?id=` + id })
}
// 新增渠道配置
export const createChannelConfig = async (data: ChannelConfigVO) => {
return await request.post({ url: `/member/channel-config/create`, data })
}
// 修改渠道配置
export const updateChannelConfig = async (data: ChannelConfigVO) => {
return await request.put({ url: `/member/channel-config/update`, data })
}
// 删除渠道配置
export const deleteChannelConfig = async (id: number) => {
return await request.delete({ url: `/member/channel-config/delete?id=` + id })
}
// 导出渠道配置 Excel
export const exportChannelConfig = async (params) => {
return await request.download({ url: `/member/channel-config/export-excel`, params })
}

View File

@ -0,0 +1,39 @@
import request from '@/config/axios'
export interface CheckInVO {
id: number
userId : number
checkInMonth: number
checkInDate: string
receivedReward: string
}
// 查询用户签到列表
export const getCheckInPage = async (params) => {
return await request.get({ url: `/member/check-in/page`, params })
}
// 查询用户签到详情
export const getCheckIn = async (id: number) => {
return await request.get({ url: `/member/check-in/get?id=` + id })
}
// 新增用户签到
export const createCheckIn = async (data: CheckInVO) => {
return await request.post({ url: `/member/check-in/create`, data })
}
// 修改用户签到
export const updateCheckIn = async (data: CheckInVO) => {
return await request.put({ url: `/member/check-in/update`, data })
}
// 删除用户签到
export const deleteCheckIn = async (id: number) => {
return await request.delete({ url: `/member/check-in/delete?id=` + id })
}
// 导出用户签到 Excel
export const exportCheckIn = async (params) => {
return await request.download({ url: `/member/check-in/export-excel`, params })
}

View File

@ -0,0 +1,46 @@
import request from '@/config/axios'
export interface CombinationConfigVO {
id: number
userId: number
comboSequence: number
executeStatus: number
multiplier: number
deleteStatus: number
description: string
}
// 查询连单设置列表
export const getCombinationConfigPage = async (params) => {
return await request.get({ url: `/member/combination-config/page`, params })
}
// 查询连单设置详情
export const getCombinationConfig = async (id: number) => {
return await request.get({ url: `/member/combination-config/get?id=` + id })
}
// 新增连单设置
export const createCombinationConfig = async (data: any) => {
return await request.post({ url: `/member/combination-config/create`, data })
}
// 修改连单设置
export const updateCombinationConfig = async (data: CombinationConfigVO) => {
return await request.put({ url: `/member/combination-config/update`, data })
}
// 删除连单设置
export const deleteCombinationConfig = async (id: number) => {
return await request.delete({ url: `/member/combination-config/delete?id=` + id })
}
// 导出连单设置 Excel
export const exportCombinationConfig = async (params) => {
return await request.download({ url: `/member/combination-config/export-excel`, params })
}
// 修改执行状态
export const updateCombinationExecuteStatus = async (data: any) => {
return await request.put({ url: `/member/combination-config/execute-status`, data })
}

View File

@ -0,0 +1,42 @@
import request from '@/config/axios'
export interface CombinationRecordVO {
id: number
combinationId: number
productId: number
unitPrice: number
totalPrice: number
quantity: number
executeStatus: number
submitTime: Date
}
// 查询连单记录列表
export const getCombinationRecordPage = async (params) => {
return await request.get({ url: `/member/combination-record/page`, params })
}
// 查询连单记录详情
export const getCombinationRecord = async (id: number) => {
return await request.get({ url: `/member/combination-record/get?id=` + id })
}
// 新增连单记录
export const createCombinationRecord = async (data: CombinationRecordVO) => {
return await request.post({ url: `/member/combination-record/create`, data })
}
// 修改连单记录
export const updateCombinationRecord = async (data: CombinationRecordVO) => {
return await request.put({ url: `/member/combination-record/update`, data })
}
// 删除连单记录
export const deleteCombinationRecord = async (id: number) => {
return await request.delete({ url: `/member/combination-record/delete?id=` + id })
}
// 导出连单记录 Excel
export const exportCombinationRecord = async (params) => {
return await request.download({ url: `/member/combination-record/export-excel`, params })
}

View File

@ -0,0 +1,42 @@
import request from '@/config/axios'
export interface CombinationReocrdVO {
id: number
combinationId: number
productId: number
unitPrice: number
totalPrice: number
quantity: number
executeStatus: number
submitTime: Date
}
// 查询连单记录列表
export const getCombinationReocrdPage = async (params) => {
return await request.get({ url: `/member/combination-reocrd/page`, params })
}
// 查询连单记录详情
export const getCombinationReocrd = async (id: number) => {
return await request.get({ url: `/member/combination-reocrd/get?id=` + id })
}
// 新增连单记录
export const createCombinationReocrd = async (data: CombinationReocrdVO) => {
return await request.post({ url: `/member/combination-reocrd/create`, data })
}
// 修改连单记录
export const updateCombinationReocrd = async (data: CombinationReocrdVO) => {
return await request.put({ url: `/member/combination-reocrd/update`, data })
}
// 删除连单记录
export const deleteCombinationReocrd = async (id: number) => {
return await request.delete({ url: `/member/combination-reocrd/delete?id=` + id })
}
// 导出连单记录 Excel
export const exportCombinationReocrd = async (params) => {
return await request.download({ url: `/member/combination-reocrd/export-excel`, params })
}

View File

@ -0,0 +1,40 @@
import request from '@/config/axios'
export interface ContentCarouseVO {
id: number
carouseName: string
link: string
sort: number
linkTo: string
status: number
}
// 查询轮播图列表
export const getContentCarousePage = async (params) => {
return await request.get({ url: `/member/content-carouse/page`, params })
}
// 查询轮播图详情
export const getContentCarouse = async (id: number) => {
return await request.get({ url: `/member/content-carouse/get?id=` + id })
}
// 新增轮播图
export const createContentCarouse = async (data: ContentCarouseVO) => {
return await request.post({ url: `/member/content-carouse/create`, data })
}
// 修改轮播图
export const updateContentCarouse = async (data: ContentCarouseVO) => {
return await request.put({ url: `/member/content-carouse/update`, data })
}
// 删除轮播图
export const deleteContentCarouse = async (id: number) => {
return await request.delete({ url: `/member/content-carouse/delete?id=` + id })
}
// 导出轮播图 Excel
export const exportContentCarouse = async (params) => {
return await request.download({ url: `/member/content-carouse/export-excel`, params })
}

View File

@ -0,0 +1,38 @@
import request from '@/config/axios'
export interface ContinuousSignInConfigVO {
id: number
continuousDays: number
rewardAmount : number
comment: string
}
// 查询连续签到配置列表
export const getContinuousSignInConfigPage = async (params) => {
return await request.get({ url: `/member/continuous-sign-in-config/page`, params })
}
// 查询连续签到配置详情
export const getContinuousSignInConfig = async (id: number) => {
return await request.get({ url: `/member/continuous-sign-in-config/get?id=` + id })
}
// 新增连续签到配置
export const createContinuousSignInConfig = async (data: ContinuousSignInConfigVO) => {
return await request.post({ url: `/member/continuous-sign-in-config/create`, data })
}
// 修改连续签到配置
export const updateContinuousSignInConfig = async (data: ContinuousSignInConfigVO) => {
return await request.put({ url: `/member/continuous-sign-in-config/update`, data })
}
// 删除连续签到配置
export const deleteContinuousSignInConfig = async (id: number) => {
return await request.delete({ url: `/member/continuous-sign-in-config/delete?id=` + id })
}
// 导出连续签到配置 Excel
export const exportContinuousSignInConfig = async (params) => {
return await request.download({ url: `/member/continuous-sign-in-config/export-excel`, params })
}

View File

@ -0,0 +1,41 @@
import request from '@/config/axios'
export interface CountriesVO {
id: number
cnName: string
enName: string
localName: string
countryCode: string
phoneCode: string
flagIcon: string
}
// 查询国家列列表
export const getCountriesPage = async (params) => {
return await request.get({ url: `/member/countries/page`, params })
}
// 查询国家列详情
export const getCountries = async (id: number) => {
return await request.get({ url: `/member/countries/get?id=` + id })
}
// 新增国家列
export const createCountries = async (data: CountriesVO) => {
return await request.post({ url: `/member/countries/create`, data })
}
// 修改国家列
export const updateCountries = async (data: CountriesVO) => {
return await request.put({ url: `/member/countries/update`, data })
}
// 删除国家列
export const deleteCountries = async (id: number) => {
return await request.delete({ url: `/member/countries/delete?id=` + id })
}
// 导出国家列 Excel
export const exportCountries = async (params) => {
return await request.download({ url: `/member/countries/export-excel`, params })
}

View File

@ -0,0 +1,42 @@
import request from '@/config/axios'
export interface CryptoWithdrawalDetailVO {
id: number
withdrawalId: number
cryptoType : string
network: string
cryptoAddress: string
cryptoTag: string
transactionHash: string
networkFee: string
}
// 查询数字货币提现详情列表
export const getCryptoWithdrawalDetailPage = async (params) => {
return await request.get({ url: `/member/crypto-withdrawal-detail/page`, params })
}
// 查询数字货币提现详情详情
export const getCryptoWithdrawalDetail = async (id: number) => {
return await request.get({ url: `/member/crypto-withdrawal-detail/get?id=` + id })
}
// 新增数字货币提现详情
export const createCryptoWithdrawalDetail = async (data: CryptoWithdrawalDetailVO) => {
return await request.post({ url: `/member/crypto-withdrawal-detail/create`, data })
}
// 修改数字货币提现详情
export const updateCryptoWithdrawalDetail = async (data: CryptoWithdrawalDetailVO) => {
return await request.put({ url: `/member/crypto-withdrawal-detail/update`, data })
}
// 删除数字货币提现详情
export const deleteCryptoWithdrawalDetail = async (id: number) => {
return await request.delete({ url: `/member/crypto-withdrawal-detail/delete?id=` + id })
}
// 导出数字货币提现详情 Excel
export const exportCryptoWithdrawalDetail = async (params) => {
return await request.download({ url: `/member/crypto-withdrawal-detail/export-excel`, params })
}

View File

@ -0,0 +1,38 @@
import request from '@/config/axios'
export interface CumulativeSignInConfigVO {
id: number
totalDays: number
rewardAmount : number
comment: string
}
// 查询累计签到配置列表
export const getCumulativeSignInConfigPage = async (params) => {
return await request.get({ url: `/member/cumulative-sign-in-config/page`, params })
}
// 查询累计签到配置详情
export const getCumulativeSignInConfig = async (id: number) => {
return await request.get({ url: `/member/cumulative-sign-in-config/get?id=` + id })
}
// 新增累计签到配置
export const createCumulativeSignInConfig = async (data: CumulativeSignInConfigVO) => {
return await request.post({ url: `/member/cumulative-sign-in-config/create`, data })
}
// 修改累计签到配置
export const updateCumulativeSignInConfig = async (data: CumulativeSignInConfigVO) => {
return await request.put({ url: `/member/cumulative-sign-in-config/update`, data })
}
// 删除累计签到配置
export const deleteCumulativeSignInConfig = async (id: number) => {
return await request.delete({ url: `/member/cumulative-sign-in-config/delete?id=` + id })
}
// 导出累计签到配置 Excel
export const exportCumulativeSignInConfig = async (params) => {
return await request.download({ url: `/member/cumulative-sign-in-config/export-excel`, params })
}

View File

@ -0,0 +1,44 @@
import request from '@/config/axios'
export interface CustomTaskVO {
id: number
userId: number
taskLimit: number
updateCount: number
effectDate: Date
description: string
}
// 查询任务单数列表
export const getCustomTaskPage = async (params) => {
return await request.get({ url: `/member/custom-task/page`, params })
}
// 查询任务单数详情
export const getCustomTask = async (id: number) => {
return await request.get({ url: `/member/custom-task/get?id=` + id })
}
// 新增任务单数
export const createCustomTask = async (data: CustomTaskVO) => {
return await request.post({ url: `/member/custom-task/create`, data })
}
// 修改任务单数
export const updateCustomTask = async (data: CustomTaskVO) => {
return await request.put({ url: `/member/custom-task/update`, data })
}
// 删除任务单数
export const deleteCustomTask = async (id: number) => {
return await request.delete({ url: `/member/custom-task/delete?id=` + id })
}
// 导出任务单数 Excel
export const exportCustomTask = async (params) => {
return await request.download({ url: `/member/custom-task/export-excel`, params })
}
export const getCustomTaskByUserId = async (params) => {
return await request.get({ url: `/member/custom-task/user`, params })
}

View File

@ -0,0 +1,38 @@
import request from '@/config/axios'
export interface DailySignInConfigVO {
id: number
dayOfMonth: number
rewardAmount : number
comment: string
}
// 查询每日签到配置列表
export const getDailySignInConfigPage = async (params) => {
return await request.get({ url: `/member/daily-sign-in-config/page`, params })
}
// 查询每日签到配置详情
export const getDailySignInConfig = async (id: number) => {
return await request.get({ url: `/member/daily-sign-in-config/get?id=` + id })
}
// 新增每日签到配置
export const createDailySignInConfig = async (data: DailySignInConfigVO) => {
return await request.post({ url: `/member/daily-sign-in-config/create`, data })
}
// 修改每日签到配置
export const updateDailySignInConfig = async (data: DailySignInConfigVO) => {
return await request.put({ url: `/member/daily-sign-in-config/update`, data })
}
// 删除每日签到配置
export const deleteDailySignInConfig = async (id: number) => {
return await request.delete({ url: `/member/daily-sign-in-config/delete?id=` + id })
}
// 导出每日签到配置 Excel
export const exportDailySignInConfig = async (params) => {
return await request.download({ url: `/member/daily-sign-in-config/export-excel`, params })
}

View File

@ -0,0 +1,47 @@
import request from '@/config/axios'
export interface H5PagesVO {
id: number
country: string
language: string
name: string
logo: string
favicon: string
title: string
description: string
keywords: string
themeColor: string
font: string
cssUrl: string
jsUrl: string
}
// 查询H5配置列表
export const getH5PagesPage = async (params) => {
return await request.get({ url: `/member/H5-pages/page`, params })
}
// 查询H5配置详情
export const getH5Pages = async (id: number) => {
return await request.get({ url: `/member/H5-pages/get` })
}
// 新增H5配置
export const createH5Pages = async (data: H5PagesVO) => {
return await request.post({ url: `/member/H5-pages/create`, data })
}
// 修改H5配置
export const updateH5Pages = async (data: H5PagesVO) => {
return await request.put({ url: `/member/H5-pages/update`, data })
}
// 删除H5配置
export const deleteH5Pages = async (id: number) => {
return await request.delete({ url: `/member/H5-pages/delete?id=` + id })
}
// 导出H5配置 Excel
export const exportH5Pages = async (params) => {
return await request.download({ url: `/member/H5-pages/export-excel`, params })
}

View File

@ -0,0 +1,44 @@
import request from '@/config/axios'
export interface LevelConfigVO {
id: number
level: number
displayName: string
taskLimit: number
commissionRate: number
minimumWithdrawalAmount: number
price: number
teamMembers: number
activeTeamMembers: number
description: string
}
// 查询会员级别列表
export const getLevelConfigPage = async (params) => {
return await request.get({ url: `/member/level-config/page`, params })
}
// 查询会员级别详情
export const getLevelConfig = async (id: number) => {
return await request.get({ url: `/member/level-config/get?id=` + id })
}
// 新增会员级别
export const createLevelConfig = async (data: LevelConfigVO) => {
return await request.post({ url: `/member/level-config/create`, data })
}
// 修改会员级别
export const updateLevelConfig = async (data: LevelConfigVO) => {
return await request.put({ url: `/member/level-config/update`, data })
}
// 删除会员级别
export const deleteLevelConfig = async (id: number) => {
return await request.delete({ url: `/member/level-config/delete?id=` + id })
}
// 导出会员级别 Excel
export const exportLevelConfig = async (params) => {
return await request.download({ url: `/member/level-config/export-excel`, params })
}

View File

@ -0,0 +1,39 @@
import request from '@/config/axios'
export interface MessageSessionVO {
id: number
userId: number
sessionId: string
connectedAt: Date
lastActivityAt: Date
}
// 查询用户记录列表
export const getMessageSessionPage = async (params) => {
return await request.get({ url: `/member/message-session/page`, params })
}
// 查询用户记录详情
export const getMessageSession = async (id: number) => {
return await request.get({ url: `/member/message-session/get?id=` + id })
}
// 新增用户记录
export const createMessageSession = async (data: MessageSessionVO) => {
return await request.post({ url: `/member/message-session/create`, data })
}
// 修改用户记录
export const updateMessageSession = async (data: MessageSessionVO) => {
return await request.put({ url: `/member/message-session/update`, data })
}
// 删除用户记录
export const deleteMessageSession = async (id: number) => {
return await request.delete({ url: `/member/message-session/delete?id=` + id })
}
// 导出用户记录 Excel
export const exportMessageSession = async (params) => {
return await request.download({ url: `/member/message-session/export-excel`, params })
}

View File

@ -0,0 +1,65 @@
import request from '@/config/axios'
export interface PayOrderVO {
id: number
merchantId: number
channelId: number
channelCode: string
merchantOrderId: string
subject: string
body: string
notifyUrl: string
notifyStatus: number
amount: number
channelFeeRate: object
channelFeeAmount: number
status: number
userIp: string
expireTime: Date
successTime: Date
notifyTime: Date
successExtensionId: number
refundStatus: number
refundTimes: number
refundAmount: number
channelUserId: string
channelOrderNo: string
}
// 查询支付订单列表
export const getPayOrderPage = async (params) => {
return await request.get({ url: `/member/pay-order/page`, params })
}
// 查询支付订单详情
export const getPayOrder = async (id: number) => {
return await request.get({ url: `/member/pay-order/get?id=` + id })
}
// 新增支付订单
export const createPayOrder = async (data: PayOrderVO) => {
return await request.post({ url: `/member/pay-order/create`, data })
}
// 修改支付订单
export const updatePayOrder = async (data: PayOrderVO) => {
return await request.put({ url: `/member/pay-order/update`, data })
}
// 删除支付订单
export const deletePayOrder = async (id: number) => {
return await request.delete({ url: `/member/pay-order/delete?id=` + id })
}
// 导出支付订单Excel
export const exportPayOrder = async (params) => {
return await request.download({ url: `/member/pay-order/export-excel`, params })
}
// 审批支付订单
export const approvePayOrder = async (data: any) => {
return await request.post({ url: `/member/pay-order/approve`, data })
}

View File

@ -0,0 +1,47 @@
import request from '@/config/axios'
export interface PayOrderExtensionVO {
id: number
no: string
orderId: number
channelId: number
accountCode: string
userIp: string
status: number
channelExtras: string
channelNotifyData: string
accountName: string
}
// 查询支付订单列表
export const getPayOrderExtensionPage = async (params) => {
return await request.get({ url: `/member/pay-order-extension/page`, params })
}
// 查询支付订单详情
export const getPayOrderExtension = async (id: number) => {
return await request.get({ url: `/member/pay-order-extension/get?id=` + id })
}
// 新增支付订单
export const createPayOrderExtension = async (data: PayOrderExtensionVO) => {
return await request.post({ url: `/member/pay-order-extension/create`, data })
}
// 修改支付订单
export const updatePayOrderExtension = async (data: PayOrderExtensionVO) => {
return await request.put({ url: `/member/pay-order-extension/update`, data })
}
// 删除支付订单
export const deletePayOrderExtension = async (id: number) => {
return await request.delete({ url: `/member/pay-order-extension/delete?id=` + id })
}
// 导出支付订单Excel
export const exportPayOrderExtension = async (params) => {
return await request.download({ url: `/member/pay-order-extension/export-excel`, params })
}

View File

@ -0,0 +1,54 @@
import request from '@/config/axios'
export interface ProductVO {
id: number
name: string
keyword: string
introduction: string
description: string
categoryId: number
brandId: number
picUrl: string
sliderPicUrls: object
videoUrl: string
unit: number
sort: number
status: number
price: number
stock: number
}
// 查询商品信息列表
export const getProductPage = async (params) => {
return await request.get({ url: `/member/product/page`, params })
}
// 查询商品信息详情
export const getProduct = async (id: number) => {
return await request.get({ url: `/member/product/get?id=` + id })
}
// 新增商品信息
export const createProduct = async (data: ProductVO) => {
return await request.post({ url: `/member/product/create`, data })
}
// 修改商品信息
export const updateProduct = async (data: ProductVO) => {
return await request.put({ url: `/member/product/update`, data })
}
// 删除商品信息
export const deleteProduct = async (id: number) => {
return await request.delete({ url: `/member/product/delete?id=` + id })
}
// 导出商品信息 Excel
export const exportProduct = async (params) => {
return await request.download({ url: `/member/product/export-excel`, params })
}
// 根据输入价格查询一个商品
export const getProductByPrice = async (data: any) => {
return await request.post({ url: `/member/product/get-by-price`, data})
}

View File

@ -0,0 +1,40 @@
import request from '@/config/axios'
export interface SignInRecordVO {
id: number
userId: number
signInDate: string
signInMonth: string
rewardIssued: number
reward: number
}
// 查询用户签到记录列表
export const getSignInRecordPage = async (params) => {
return await request.get({ url: `/member/sign-in-record/page`, params })
}
// 查询用户签到记录详情
export const getSignInRecord = async (id: number) => {
return await request.get({ url: `/member/sign-in-record/get?id=` + id })
}
// 新增用户签到记录
export const createSignInRecord = async (data: SignInRecordVO) => {
return await request.post({ url: `/member/sign-in-record/create`, data })
}
// 修改用户签到记录
export const updateSignInRecord = async (data: SignInRecordVO) => {
return await request.put({ url: `/member/sign-in-record/update`, data })
}
// 删除用户签到记录
export const deleteSignInRecord = async (id: number) => {
return await request.delete({ url: `/member/sign-in-record/delete?id=` + id })
}
// 导出用户签到记录 Excel
export const exportSignInRecord = async (params) => {
return await request.download({ url: `/member/sign-in-record/export-excel`, params })
}

View File

@ -0,0 +1,37 @@
import request from '@/config/axios'
export interface TagRelationsVO {
id: number
memberId: number
tagId: number
}
// 查询会员标签列表
export const getTagRelationsPage = async (params) => {
return await request.get({ url: `/member/tag-relations/page`, params })
}
// 查询会员标签详情
export const getTagRelations = async (id: number) => {
return await request.get({ url: `/member/tag-relations/get?id=` + id })
}
// 新增会员标签
export const createTagRelations = async (data: TagRelationsVO) => {
return await request.post({ url: `/member/tag-relations/create`, data })
}
// 修改会员标签
export const updateTagRelations = async (data: TagRelationsVO) => {
return await request.put({ url: `/member/tag-relations/update`, data })
}
// 删除会员标签
export const deleteTagRelations = async (id: number) => {
return await request.delete({ url: `/member/tag-relations/delete?id=` + id })
}
// 导出会员标签 Excel
export const exportTagRelations = async (params) => {
return await request.download({ url: `/member/tag-relations/export-excel`, params })
}

View File

@ -0,0 +1,38 @@
import request from '@/config/axios'
export interface TagsVO {
id: number
tagName: string
textColor: string
bgColor: string
}
// 查询标签管理列表
export const getTagsPage = async (params) => {
return await request.get({ url: `/member/tags/page`, params })
}
// 查询标签管理详情
export const getTags = async (id: number) => {
return await request.get({ url: `/member/tags/get?id=` + id })
}
// 新增标签管理
export const createTags = async (data: TagsVO) => {
return await request.post({ url: `/member/tags/create`, data })
}
// 修改标签管理
export const updateTags = async (data: TagsVO) => {
return await request.put({ url: `/member/tags/update`, data })
}
// 删除标签管理
export const deleteTags = async (id: number) => {
return await request.delete({ url: `/member/tags/delete?id=` + id })
}
// 导出标签管理 Excel
export const exportTags = async (params) => {
return await request.download({ url: `/member/tags/export-excel`, params })
}

View File

@ -0,0 +1,50 @@
import request from '@/config/axios'
export interface TaskCommentVO {
id: number
userId: number
userNickname: string
userAvatar: string
anonymous: boolean
taskRecordId: number
productId: number
productName: string
visible: boolean
scores: number
content: string
picUrls: object
replyStatus: boolean
replyUserId: number
replyContent: string
replyTime: Date
}
// 查询任务评论列表
export const getTaskCommentPage = async (params) => {
return await request.get({ url: `/member/task-comment/page`, params })
}
// 查询任务评论详情
export const getTaskComment = async (id: number) => {
return await request.get({ url: `/member/task-comment/get?id=` + id })
}
// 新增任务评论
export const createTaskComment = async (data: TaskCommentVO) => {
return await request.post({ url: `/member/task-comment/create`, data })
}
// 修改任务评论
export const updateTaskComment = async (data: TaskCommentVO) => {
return await request.put({ url: `/member/task-comment/update`, data })
}
// 删除任务评论
export const deleteTaskComment = async (id: number) => {
return await request.delete({ url: `/member/task-comment/delete?id=` + id })
}
// 导出任务评论 Excel
export const exportTaskComment = async (params) => {
return await request.download({ url: `/member/task-comment/export-excel`, params })
}

View File

@ -0,0 +1,48 @@
import request from '@/config/axios'
export interface TaskRecordVO {
id: number
orderNo: string
userId: number
quantity: number
productId: number
unitPrice: number
totalPrice: number
combination: number
taskSequence: number
status: number
orderTime: Date
submitTime: Date
starRating: number
description: string
}
// 查询任务记录列表
export const getTaskRecordPage = async (params) => {
return await request.get({ url: `/member/task-record/page`, params })
}
// 查询任务记录详情
export const getTaskRecord = async (id: number) => {
return await request.get({ url: `/member/task-record/get?id=` + id })
}
// 新增任务记录
export const createTaskRecord = async (data: TaskRecordVO) => {
return await request.post({ url: `/member/task-record/create`, data })
}
// 修改任务记录
export const updateTaskRecord = async (data: TaskRecordVO) => {
return await request.put({ url: `/member/task-record/update`, data })
}
// 删除任务记录
export const deleteTaskRecord = async (id: number) => {
return await request.delete({ url: `/member/task-record/delete?id=` + id })
}
// 导出任务记录 Excel
export const exportTaskRecord = async (params) => {
return await request.download({ url: `/member/task-record/export-excel`, params })
}

View File

@ -0,0 +1,94 @@
import request from '@/config/axios'
export interface UserVO {
id: number
parentId: number
username: string
password: string
nickname: string
remark: string
email: string
mobile: string
countryCode: string
invitationCode: string
memberLevel: number
creditScore: number
userType: number
sex: number
avatar: string
status: number
loginIp: string
loginDate: Date
}
export interface UserUpdateVO {
id: number
nickname: string
remark: string
email: string
countryCode: string
sex: number
avatar: string
status: number
userType: number
}
// 查询会员信息列表
export const getUserPage = async (params) => {
return await request.get({ url: `/admin/member/user/page`, params })
}
// 查询会员信息详情
export const getUser = async (id: number) => {
return await request.get({ url: `/admin/member/user/get?id=` + id })
}
// 新增会员信息
export const createUser = async (data: UserVO) => {
return await request.post({ url: `/admin/member/user/create`, data })
}
// 修改会员信息
export const updateUser = async (data: UserUpdateVO) => {
return await request.put({ url: `/admin/member/user/update`, data })
}
// 删除会员信息
export const deleteUser = async (id: number) => {
return await request.delete({ url: `/admin/member/user/delete?id=` + id })
}
// 导出会员信息 Excel
export const exportUser = async (params) => {
return await request.download({ url: `/admin/member/user/export-excel`, params })
}
// 根据用户名查询会员信息
export const getUserByUsername = async (params) => {
return await request.get({ url: `/admin/member/user/get/` + params })
}
// 查询用户任务完成情况
export const getUserTaskInfo = async (params) => {
return await request.get({ url: `/admin/member/user/user-task-info`, params })
}
// 修改密码
export const updatePassword = async (data) => {
return await request.put({ url: `/admin/member/user/update-password`, data })
}
// 修改用户等级
export const updateUserLevel = async (data) => {
return await request.put({ url: `/admin/member/user/update-level`, data })
}
// 修改信誉分
export const updateCreditScore = async (data) => {
return await request.put({ url: `/admin/member/user/update-credit-score`, data })
}
// 计算余额
export const calcUserBalance = async (params: any) => {
return await request.get({ url: '/admin/member/user/calc-balance', params })
}

View File

@ -0,0 +1,45 @@
import request from '@/config/axios'
export interface UserBankVO {
id: number
userId: number
bankName: string
bankCountry: string
accountName: string
accountNumber: string
iban: string
swiftBicCode: string
bankAddress: string
branchName: string
branchAddress: string
}
// 查询会员银行卡列表
export const getUserBankPage = async (params) => {
return await request.get({ url: `/member/user-bank/page`, params })
}
// 查询会员银行卡详情
export const getUserBank = async (id: number) => {
return await request.get({ url: `/member/user-bank/get?id=` + id })
}
// 新增会员银行卡
export const createUserBank = async (data: UserBankVO) => {
return await request.post({ url: `/member/user-bank/create`, data })
}
// 修改会员银行卡
export const updateUserBank = async (data: UserBankVO) => {
return await request.put({ url: `/member/user-bank/update`, data })
}
// 删除会员银行卡
export const deleteUserBank = async (id: number) => {
return await request.delete({ url: `/member/user-bank/delete?id=` + id })
}
// 导出会员银行卡 Excel
export const exportUserBank = async (params) => {
return await request.download({ url: `/member/user-bank/export-excel`, params })
}

View File

@ -0,0 +1,44 @@
import request from '@/config/axios'
export interface UserCryptoVO {
id: number
userId: number
currencyType: string
address: string
label: string
primary: number
qrCode: string
cryptoTag: string
verified: number
network: string
}
// 查询会员数字货币地址列表
export const getUserCryptoPage = async (params) => {
return await request.get({ url: `/member/user-crypto/page`, params })
}
// 查询会员数字货币地址详情
export const getUserCrypto = async (id: number) => {
return await request.get({ url: `/member/user-crypto/get?id=` + id })
}
// 新增会员数字货币地址
export const createUserCrypto = async (data: UserCryptoVO) => {
return await request.post({ url: `/member/user-crypto/create`, data })
}
// 修改会员数字货币地址
export const updateUserCrypto = async (data: UserCryptoVO) => {
return await request.put({ url: `/member/user-crypto/update`, data })
}
// 删除会员数字货币地址
export const deleteUserCrypto = async (id: number) => {
return await request.delete({ url: `/member/user-crypto/delete?id=` + id })
}
// 导出会员数字货币地址 Excel
export const exportUserCrypto = async (params) => {
return await request.download({ url: `/member/user-crypto/export-excel`, params })
}

View File

@ -0,0 +1,45 @@
import request from '@/config/axios'
export interface UserExtensionVO {
id: number
userId: number
firstName: string
lastName: string
email: string
country: string
streetAddress: string
state: string
postalCode: string
language: string
userZone: string
}
// 查询用户信息扩展列表
export const getUserExtensionPage = async (params) => {
return await request.get({ url: `/member/user-extension/page`, params })
}
// 查询用户信息扩展详情
export const getUserExtension = async (id: number) => {
return await request.get({ url: `/member/user-extension/get?id=` + id })
}
// 新增用户信息扩展
export const createUserExtension = async (data: UserExtensionVO) => {
return await request.post({ url: `/member/user-extension/create`, data })
}
// 修改用户信息扩展
export const updateUserExtension = async (data: UserExtensionVO) => {
return await request.put({ url: `/member/user-extension/update`, data })
}
// 删除用户信息扩展
export const deleteUserExtension = async (id: number) => {
return await request.delete({ url: `/member/user-extension/delete?id=` + id })
}
// 导出用户信息扩展 Excel
export const exportUserExtension = async (params) => {
return await request.download({ url: `/member/user-extension/export-excel`, params })
}

View File

@ -0,0 +1,50 @@
import request from '@/config/axios'
export interface WithdrawalVO {
id: number
userId: number
withdrawalType: number
amount: number
currency: string
status: string
requestDate: Date
processedDate: Date
remark: string
fee: number
netAmount: number
}
// 查询提现记录列表
export const getWithdrawalPage = async (params) => {
return await request.get({ url: `/member/withdrawal/page`, params })
}
// 查询提现记录详情
export const getWithdrawal = async (id: number) => {
return await request.get({ url: `/member/withdrawal/get?id=` + id })
}
// 新增提现记录
export const createWithdrawal = async (data: WithdrawalVO) => {
return await request.post({ url: `/member/withdrawal/create`, data })
}
// 修改提现记录
export const updateWithdrawal = async (data: WithdrawalVO) => {
return await request.put({ url: `/member/withdrawal/update`, data })
}
// 修改提现记录
export const approveWithdrawal = async (data: WithdrawalVO) => {
return await request.put({ url: `/member/withdrawal/approve`, data })
}
// 删除提现记录
export const deleteWithdrawal = async (id: number) => {
return await request.delete({ url: `/member/withdrawal/delete?id=` + id })
}
// 导出提现记录 Excel
export const exportWithdrawal = async (params) => {
return await request.download({ url: `/member/withdrawal/export-excel`, params })
}

View File

@ -0,0 +1,37 @@
import request from '@/config/axios'
export interface BlacklistVO {
id: number
memberId: number
remark: string
}
// 查询黑名单列表
export const getBlacklistPage = async (params) => {
return await request.get({ url: `/message/blacklist/page`, params })
}
// 查询黑名单详情
export const getBlacklist = async (id: number) => {
return await request.get({ url: `/message/blacklist/get?id=` + id })
}
// 新增黑名单
export const createBlacklist = async (data: BlacklistVO) => {
return await request.post({ url: `/message/blacklist/create`, data })
}
// 修改黑名单
export const updateBlacklist = async (data: BlacklistVO) => {
return await request.put({ url: `/message/blacklist/update`, data })
}
// 删除黑名单
export const deleteBlacklist = async (id: number) => {
return await request.delete({ url: `/message/blacklist/delete?id=` + id })
}
// 导出黑名单 Excel
export const exportBlacklist = async (params) => {
return await request.download({ url: `/message/blacklist/export-excel`, params })
}

View File

@ -0,0 +1,44 @@
import request from '@/config/axios'
export interface ContentVO {
id: number
senderId: number
receiverId: number
content: string
type: number
translatedContent: string
language: string
translationLanguage: string
isRead: boolean
isRetracted: boolean
}
// 查询消息记录列表
export const getContentPage = async (params) => {
return await request.get({ url: `/message/content/page`, params })
}
// 查询消息记录详情
export const getContent = async (id: number) => {
return await request.get({ url: `/message/content/get?id=` + id })
}
// 新增消息记录
export const createContent = async (data: ContentVO) => {
return await request.post({ url: `/message/content/create`, data })
}
// 修改消息记录
export const updateContent = async (data: ContentVO) => {
return await request.put({ url: `/message/content/update`, data })
}
// 删除消息记录
export const deleteContent = async (id: number) => {
return await request.delete({ url: `/message/content/delete?id=` + id })
}
// 导出消息记录 Excel
export const exportContent = async (params) => {
return await request.download({ url: `/message/content/export-excel`, params })
}

View File

@ -0,0 +1,38 @@
import request from '@/config/axios'
export interface MemberRemarkVO {
id: number
memberId: number
nickName: string
remark: string
}
// 查询会员标记列表
export const getMemberRemarkPage = async (params) => {
return await request.get({ url: `/message/member-remark/page`, params })
}
// 查询会员标记详情
export const getMemberRemark = async (id: number) => {
return await request.get({ url: `/message/member-remark/get?id=` + id })
}
// 新增会员标记
export const createMemberRemark = async (data: MemberRemarkVO) => {
return await request.post({ url: `/message/member-remark/create`, data })
}
// 修改会员标记
export const updateMemberRemark = async (data: MemberRemarkVO) => {
return await request.put({ url: `/message/member-remark/update`, data })
}
// 删除会员标记
export const deleteMemberRemark = async (id: number) => {
return await request.delete({ url: `/message/member-remark/delete?id=` + id })
}
// 导出会员标记 Excel
export const exportMemberRemark = async (params) => {
return await request.download({ url: `/message/member-remark/export-excel`, params })
}

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