初始化项目,自 v1.7.1 版本开始
12
.editorconfig
Normal 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 # 关闭末尾空格修剪
|
15
.env
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# 标题
|
||||||
|
VITE_APP_TITLE=芋道管理系统
|
||||||
|
|
||||||
|
# 项目本地运行端口号
|
||||||
|
VITE_PORT=80
|
||||||
|
|
||||||
|
# open 运行 npm run dev 时自动打开浏览器
|
||||||
|
VITE_OPEN=true
|
||||||
|
|
||||||
|
# 租户开关
|
||||||
|
VITE_APP_TENANT_ENABLE=true
|
||||||
|
|
||||||
|
# 验证码的开关
|
||||||
|
VITE_APP_CAPTCHA_ENABLE=true
|
||||||
|
|
19
.env.base
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# 本地开发环境
|
||||||
|
NODE_ENV=development
|
||||||
|
|
||||||
|
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=/
|
31
.env.dev
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# 开发环境
|
||||||
|
NODE_ENV=production
|
||||||
|
|
||||||
|
VITE_DEV=false
|
||||||
|
|
||||||
|
# 请求路径
|
||||||
|
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=/dist-dev/
|
||||||
|
|
||||||
|
# 是否删除debugger
|
||||||
|
VITE_DROP_DEBUGGER=false
|
||||||
|
|
||||||
|
# 是否删除console.log
|
||||||
|
VITE_DROP_CONSOLE=false
|
||||||
|
|
||||||
|
# 是否sourcemap
|
||||||
|
VITE_SOURCEMAP=true
|
||||||
|
|
||||||
|
# 输出路径
|
||||||
|
VITE_OUT_DIR=dist-dev
|
31
.env.pro
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# 生产环境
|
||||||
|
NODE_ENV=production
|
||||||
|
|
||||||
|
VITE_DEV=false
|
||||||
|
|
||||||
|
# 请求路径
|
||||||
|
VITE_BASE_URL='http://localhost:48080'
|
||||||
|
|
||||||
|
# 上传路径
|
||||||
|
VITE_UPLOAD_URL='http://localhost:48080/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
|
31
.env.test
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# 测试环境
|
||||||
|
NODE_ENV=production
|
||||||
|
|
||||||
|
VITE_DEV=false
|
||||||
|
|
||||||
|
# 请求路径
|
||||||
|
VITE_BASE_URL='http://localhost:48080'
|
||||||
|
|
||||||
|
# 上传路径
|
||||||
|
VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload'
|
||||||
|
|
||||||
|
# 接口前缀
|
||||||
|
VITE_API_BASEPATH=
|
||||||
|
|
||||||
|
# 接口地址
|
||||||
|
VITE_API_URL=/admin-api
|
||||||
|
|
||||||
|
# 是否删除debugger
|
||||||
|
VITE_DROP_DEBUGGER=false
|
||||||
|
|
||||||
|
# 是否删除console.log
|
||||||
|
VITE_DROP_CONSOLE=false
|
||||||
|
|
||||||
|
# 是否sourcemap
|
||||||
|
VITE_SOURCEMAP=true
|
||||||
|
|
||||||
|
# 打包路径
|
||||||
|
VITE_BASE_PATH=/dist-test/
|
||||||
|
|
||||||
|
# 输出路径
|
||||||
|
VITE_OUT_DIR=dist-test
|
8
.eslintignore
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/build/
|
||||||
|
/config/
|
||||||
|
/dist/
|
||||||
|
/*.js
|
||||||
|
/test/unit/coverage/
|
||||||
|
/node_modules/*
|
||||||
|
/dist*
|
||||||
|
/src/main.ts
|
259
.eslintrc-auto-import.json
Normal 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
|
||||||
|
}
|
||||||
|
}
|
69
.eslintrc.js
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
// @ts-check
|
||||||
|
const { defineConfig } = require('eslint-define-config')
|
||||||
|
module.exports = defineConfig({
|
||||||
|
root: true,
|
||||||
|
env: {
|
||||||
|
browser: true,
|
||||||
|
node: true,
|
||||||
|
es6: true
|
||||||
|
},
|
||||||
|
parser: 'vue-eslint-parser',
|
||||||
|
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',
|
||||||
|
'./.eslintrc-auto-import.json'
|
||||||
|
],
|
||||||
|
rules: {
|
||||||
|
'vue/script-setup-uses-vars': 'error',
|
||||||
|
'vue/no-reserved-component-names': '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': 'error',
|
||||||
|
'no-unused-vars': 'error',
|
||||||
|
'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'
|
||||||
|
}
|
||||||
|
})
|
8
.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
node_modules
|
||||||
|
.DS_Store
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
*.local
|
||||||
|
/dist*
|
||||||
|
*-lock.*
|
||||||
|
pnpm-debug
|
9
.prettierignore
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
/node_modules/**
|
||||||
|
/dist/
|
||||||
|
/dist*
|
||||||
|
/public/*
|
||||||
|
/docs/*
|
||||||
|
/vite.config.ts
|
||||||
|
/src/types/env.d.ts
|
||||||
|
/docs/**/*
|
||||||
|
CHANGELOG
|
6
.stylelintignore
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
/dist/*
|
||||||
|
/public/*
|
||||||
|
public/*
|
||||||
|
/dist*
|
||||||
|
/src/types/env.d.ts
|
||||||
|
/docs/**/*
|
15
.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"voorjaar.windicss-intellisense",
|
||||||
|
"vscode-icons-team.vscode-icons",
|
||||||
|
"davidanson.vscode-markdownlint",
|
||||||
|
"stylelint.vscode-stylelint",
|
||||||
|
"dbaeumer.vscode-eslint",
|
||||||
|
"esbenp.prettier-vscode",
|
||||||
|
"vue.volar",
|
||||||
|
"lokalise.i18n-ally",
|
||||||
|
"mikestead.dotenv",
|
||||||
|
"eamodio.gitlens",
|
||||||
|
"antfu.iconify"
|
||||||
|
]
|
||||||
|
}
|
44
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
"typescript.tsdk": "node_modules/typescript/lib",
|
||||||
|
"prettier.enable": true,
|
||||||
|
"editor.formatOnType": true,
|
||||||
|
"editor.formatOnSave": true,
|
||||||
|
"editor.formatOnPaste": true,
|
||||||
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.fixAll.eslint": true
|
||||||
|
},
|
||||||
|
"[vue]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[javascript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[typescript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[json]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[jsonc]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[html]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[css]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[scss]": {
|
||||||
|
"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": "en",
|
||||||
|
"i18n-ally.displayLanguage": "zh-CN",
|
||||||
|
"i18n-ally.enabledFrameworks": ["vue", "react"],
|
||||||
|
"god.tsconfig": "./tsconfig.json",
|
||||||
|
"vue-i18n.i18nPaths": "src/locales"
|
||||||
|
}
|
21
LICENSE
Normal 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.
|
36
README.en.md
@ -1,36 +0,0 @@
|
|||||||
# yudao-ui-admin-vue3
|
|
||||||
|
|
||||||
#### Description
|
|
||||||
芋道管理后台,基于 Vue3 + Element Plus 实现,支持 RBAC 动态权限、数据权限、SaaS 多租户、Flowable 工作流、三方登录、支付、短信、商城等功能。
|
|
||||||
|
|
||||||
#### Software Architecture
|
|
||||||
Software architecture description
|
|
||||||
|
|
||||||
#### Installation
|
|
||||||
|
|
||||||
1. xxxx
|
|
||||||
2. xxxx
|
|
||||||
3. xxxx
|
|
||||||
|
|
||||||
#### Instructions
|
|
||||||
|
|
||||||
1. xxxx
|
|
||||||
2. xxxx
|
|
||||||
3. xxxx
|
|
||||||
|
|
||||||
#### Contribution
|
|
||||||
|
|
||||||
1. Fork the repository
|
|
||||||
2. Create Feat_xxx branch
|
|
||||||
3. Commit your code
|
|
||||||
4. Create Pull Request
|
|
||||||
|
|
||||||
|
|
||||||
#### Gitee Feature
|
|
||||||
|
|
||||||
1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
|
|
||||||
2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
|
|
||||||
3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
|
|
||||||
4. The most valuable open source project [GVP](https://gitee.com/gvp)
|
|
||||||
5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
|
|
||||||
6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
|
|
244
README.md
@ -1,37 +1,231 @@
|
|||||||
# yudao-ui-admin-vue3
|
**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!!**
|
||||||
|
|
||||||
#### 介绍
|
**「我喜欢写代码,乐此不疲」**
|
||||||
芋道管理后台,基于 Vue3 + Element Plus 实现,支持 RBAC 动态权限、数据权限、SaaS 多租户、Flowable 工作流、三方登录、支付、短信、商城等功能。
|
**「我喜欢做开源,以此为乐」**
|
||||||
|
|
||||||
#### 软件架构
|
我 🐶 在上海艰苦奋斗,早中晚在 top3 大厂认真搬砖,夜里为开源做贡献。
|
||||||
软件架构说明
|
|
||||||
|
|
||||||
|
如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。
|
||||||
|
|
||||||
#### 安装教程
|
## 🐶 新手必读
|
||||||
|
|
||||||
1. xxxx
|
* 演示地址:<http://dashboard.yudao.iocoder.cn>
|
||||||
2. xxxx
|
* 启动文档:<https://doc.iocoder.cn/quick-start/>
|
||||||
3. xxxx
|
* 视频教程:<https://doc.iocoder.cn/video/>
|
||||||
|
|
||||||
#### 使用说明
|
## 🐯 平台简介
|
||||||
|
|
||||||
1. xxxx
|
**芋道**,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。
|
||||||
2. xxxx
|
|
||||||
3. xxxx
|
|
||||||
|
|
||||||
#### 参与贡献
|
基于 [vue-element-plus-admin](https://gitee.com/kailong110120130/vue-element-plus-admin) 实现,使用 Element Plus 免费开源的中后台模版,具备如下特性:
|
||||||
|
|
||||||
1. Fork 本仓库
|
TODO
|
||||||
2. 新建 Feat_xxx 分支
|
|
||||||
3. 提交代码
|
|
||||||
4. 新建 Pull Request
|
|
||||||
|
|
||||||
|
* 最新技术栈:使用 Vue3、Vite4 等前端前沿技术开发
|
||||||
|
* TypeScript: 应用程序级 JavaScript 的语言
|
||||||
|
* 主题: 可配置的主题
|
||||||
|
* 国际化:内置完善的国际化方案
|
||||||
|
* 权限:内置完善的动态路由权限生成方案
|
||||||
|
* 组件:二次封装了多个常用的组件
|
||||||
|
* 示例:内置丰富的示例
|
||||||
|
|
||||||
#### 特技
|
## 技术栈
|
||||||
|
|
||||||
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
|
| 框架 | 说明 | 版本 |
|
||||||
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
|
|----------------------------------------------------------------------|------------------|--------|
|
||||||
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
|
| [Vue](https://staging-cn.vuejs.org/) | vue 框架 | 3.2.47 |
|
||||||
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
|
| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 4.1.1 |
|
||||||
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
|
| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.2.29 |
|
||||||
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
|
| [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 4.9.5 |
|
||||||
|
| [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.0.30 |
|
||||||
|
| [vueuse](https://vueuse.org/) | 常用工具集 | 9.12.0 |
|
||||||
|
| [vxe-table](https://vxetable.cn/) | vue 最强表单 | 4.3.9 |
|
||||||
|
| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.2.2 |
|
||||||
|
| [vue-router](https://router.vuejs.org/) | vue 路由 | 4.1.6 |
|
||||||
|
| [windicss](https://cn.windicss.org/) | 下一代工具优先的 CSS 框架 | 3.5.6 |
|
||||||
|
| [iconify](https://icon-sets.iconify.design/) | 在线图标库 | 3.0.1 |
|
||||||
|
| [wangeditor](https://www.wangeditor.com/) | 富文本编辑器 | 5.1.23 |
|
||||||
|
|
||||||
|
## 开发工具
|
||||||
|
|
||||||
|
推荐 VS Code 开发,配合插件如下:
|
||||||
|
|
||||||
|
| 插件名 | 功能 |
|
||||||
|
|-------------------------------|--------------------------|
|
||||||
|
| TypeScript Vue Plugin (Volar) | 用于 TypeScript 的 Vue 插件 |
|
||||||
|
| Vue Language Features (Volar) | Vue3.0 语法支持 |
|
||||||
|
| WindiCSS IntelliSense | 自动完成、语法突出显示、代码折叠和构建等高级功能 |
|
||||||
|
| 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 加载 |
|
||||||
|
| ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 |
|
||||||
|
| 🚀 | 文件服务 | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、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) |
|
||||||
|
98
build/vite/index.ts
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
import { resolve } from 'path'
|
||||||
|
import Vue from '@vitejs/plugin-vue'
|
||||||
|
import VueJsx from '@vitejs/plugin-vue-jsx'
|
||||||
|
import WindiCSS from 'vite-plugin-windicss'
|
||||||
|
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'
|
||||||
|
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 vueSetupExtend from 'vite-plugin-vue-setup-extend'
|
||||||
|
import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
|
||||||
|
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
|
||||||
|
export function createVitePlugins(VITE_APP_TITLE: string) {
|
||||||
|
const root = process.cwd()
|
||||||
|
// 路径查找
|
||||||
|
function pathResolve(dir: string) {
|
||||||
|
return resolve(root, '.', dir)
|
||||||
|
}
|
||||||
|
return [
|
||||||
|
Vue(),
|
||||||
|
VueJsx(),
|
||||||
|
WindiCSS(),
|
||||||
|
progress(),
|
||||||
|
PurgeIcons(),
|
||||||
|
vueSetupExtend(),
|
||||||
|
ElementPlus(),
|
||||||
|
AutoImport({
|
||||||
|
include: [
|
||||||
|
/\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
|
||||||
|
/\.vue$/,
|
||||||
|
/\.vue\?vue/, // .vue
|
||||||
|
/\.md$/ // .md
|
||||||
|
],
|
||||||
|
imports: [
|
||||||
|
'vue',
|
||||||
|
'vue-router',
|
||||||
|
{
|
||||||
|
'@/hooks/web/useI18n': ['useI18n'],
|
||||||
|
'@/hooks/web/useXTable': ['useXTable'],
|
||||||
|
'@/hooks/web/useMessage': ['useMessage'],
|
||||||
|
'@/hooks/web/useVxeCrudSchemas': ['useVxeCrudSchemas'],
|
||||||
|
'@/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/**/*.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({
|
||||||
|
title: VITE_APP_TITLE
|
||||||
|
})
|
||||||
|
]
|
||||||
|
}
|
68
build/vite/optimize.ts
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
const include = [
|
||||||
|
'qs',
|
||||||
|
'url',
|
||||||
|
'vue',
|
||||||
|
'sass',
|
||||||
|
'mitt',
|
||||||
|
'axios',
|
||||||
|
'pinia',
|
||||||
|
'dayjs',
|
||||||
|
'qrcode',
|
||||||
|
'windicss',
|
||||||
|
'vue-router',
|
||||||
|
'vue-types',
|
||||||
|
'vue-i18n',
|
||||||
|
'xe-utils',
|
||||||
|
'crypto-js',
|
||||||
|
'cropperjs',
|
||||||
|
'lodash-es',
|
||||||
|
'vxe-table',
|
||||||
|
'nprogress',
|
||||||
|
'animate.css',
|
||||||
|
'vxe-table/es/style',
|
||||||
|
'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/form/style/index',
|
||||||
|
'element-plus/es/components/radio-group/style/index',
|
||||||
|
'element-plus/es/components/radio/style/index',
|
||||||
|
'element-plus/es/components/checkbox/style/index',
|
||||||
|
'element-plus/es/components/checkbox-group/style/index',
|
||||||
|
'element-plus/es/components/switch/style/index',
|
||||||
|
'element-plus/es/components/time-picker/style/index',
|
||||||
|
'element-plus/es/components/date-picker/style/index',
|
||||||
|
'element-plus/es/components/col/style/index',
|
||||||
|
'element-plus/es/components/form-item/style/index',
|
||||||
|
'element-plus/es/components/alert/style/index',
|
||||||
|
'element-plus/es/components/breadcrumb/style/index',
|
||||||
|
'element-plus/es/components/select/style/index',
|
||||||
|
'element-plus/es/components/input/style/index',
|
||||||
|
'element-plus/es/components/breadcrumb-item/style/index',
|
||||||
|
'element-plus/es/components/tag/style/index',
|
||||||
|
'element-plus/es/components/pagination/style/index',
|
||||||
|
'element-plus/es/components/table/style/index',
|
||||||
|
'element-plus/es/components/table-column/style/index',
|
||||||
|
'element-plus/es/components/card/style/index',
|
||||||
|
'element-plus/es/components/row/style/index',
|
||||||
|
'element-plus/es/components/button/style/index',
|
||||||
|
'element-plus/es/components/menu/style/index',
|
||||||
|
'element-plus/es/components/sub-menu/style/index',
|
||||||
|
'element-plus/es/components/menu-item/style/index',
|
||||||
|
'element-plus/es/components/option/style/index'
|
||||||
|
]
|
||||||
|
|
||||||
|
const exclude = ['@iconify/json']
|
||||||
|
|
||||||
|
export { include, exclude }
|
151
index.html
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" href="/favicon.ico" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<meta
|
||||||
|
name="keywords"
|
||||||
|
content="芋道管理系统 基于 vue3 + CompositionAPI + typescript + vite3 + element plus 的后台开源免费管理系统!"
|
||||||
|
/>
|
||||||
|
<meta
|
||||||
|
name="description"
|
||||||
|
content="芋道管理系统 基于 vue3 + CompositionAPI + typescript + vite3 + element plus 的后台开源免费管理系统!"
|
||||||
|
/>
|
||||||
|
<title><%= 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-title">
|
||||||
|
<img src="/logo.gif" class="app-loading-logo" alt="Logo" />
|
||||||
|
<div class="app-loading-title"><%= title %></div>
|
||||||
|
</div>
|
||||||
|
<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>
|
137
package.json
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
{
|
||||||
|
"name": "yudao-ui-admin-vue3",
|
||||||
|
"version": "1.7.0-snapshot.1922",
|
||||||
|
"description": "基于vue3、vite4、element-plus、typesScript",
|
||||||
|
"author": "xingyu",
|
||||||
|
"private": false,
|
||||||
|
"scripts": {
|
||||||
|
"i": "pnpm install",
|
||||||
|
"dev": "vite --mode base",
|
||||||
|
"ts:check": "vue-tsc --noEmit",
|
||||||
|
"build:pro": "vite build --mode pro",
|
||||||
|
"build:dev": "vite build --mode dev",
|
||||||
|
"build:test": "npm run ts:check && vite build --mode test",
|
||||||
|
"serve:pro": "vite preview --mode pro",
|
||||||
|
"serve:dev": "vite preview --mode dev",
|
||||||
|
"serve:test": "vite preview --mode test",
|
||||||
|
"npm:check": "npx npm-check-updates",
|
||||||
|
"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 ",
|
||||||
|
"lint:pretty": "pretty-quick --staged"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@form-create/designer": "^3.1.0",
|
||||||
|
"@form-create/element-ui": "^3.1.17",
|
||||||
|
"@iconify/iconify": "^3.1.0",
|
||||||
|
"@vueuse/core": "^9.12.0",
|
||||||
|
"@wangeditor/editor": "^5.1.23",
|
||||||
|
"@wangeditor/editor-for-vue": "^5.1.10",
|
||||||
|
"@zxcvbn-ts/core": "^2.2.1",
|
||||||
|
"animate.css": "^4.1.1",
|
||||||
|
"axios": "^1.3.2",
|
||||||
|
"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.7",
|
||||||
|
"diagram-js": "^11.6.0",
|
||||||
|
"echarts": "^5.4.1",
|
||||||
|
"echarts-wordcloud": "^2.1.0",
|
||||||
|
"element-plus": "2.2.29",
|
||||||
|
"fast-xml-parser": "^4.0.13",
|
||||||
|
"highlight.js": "^11.7.0",
|
||||||
|
"intro.js": "^6.0.0",
|
||||||
|
"jsencrypt": "^3.3.1",
|
||||||
|
"lodash-es": "^4.17.21",
|
||||||
|
"min-dash": "^4.0.0",
|
||||||
|
"mitt": "^3.0.0",
|
||||||
|
"nprogress": "^0.2.0",
|
||||||
|
"pinia": "^2.0.30",
|
||||||
|
"qrcode": "^1.5.1",
|
||||||
|
"qs": "^6.11.0",
|
||||||
|
"steady-xml": "^0.1.0",
|
||||||
|
"url": "^0.11.0",
|
||||||
|
"vue": "3.2.47",
|
||||||
|
"vue-i18n": "9.2.2",
|
||||||
|
"vue-router": "^4.1.6",
|
||||||
|
"vue-types": "^5.0.2",
|
||||||
|
"vuedraggable": "^4.1.0",
|
||||||
|
"vxe-table": "^4.3.9",
|
||||||
|
"web-storage-cache": "^1.1.1",
|
||||||
|
"xe-utils": "^3.5.7",
|
||||||
|
"xml-js": "^1.6.11"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@commitlint/cli": "^17.4.2",
|
||||||
|
"@commitlint/config-conventional": "^17.4.2",
|
||||||
|
"@iconify/json": "^2.2.19",
|
||||||
|
"@intlify/unplugin-vue-i18n": "^0.8.2",
|
||||||
|
"@purge-icons/generated": "^0.9.0",
|
||||||
|
"@types/intro.js": "^5.1.0",
|
||||||
|
"@types/lodash-es": "^4.17.6",
|
||||||
|
"@types/node": "^18.13.0",
|
||||||
|
"@types/nprogress": "^0.2.0",
|
||||||
|
"@types/qrcode": "^1.5.0",
|
||||||
|
"@types/qs": "^6.9.7",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^5.51.0",
|
||||||
|
"@typescript-eslint/parser": "^5.51.0",
|
||||||
|
"@vitejs/plugin-legacy": "^4.0.1",
|
||||||
|
"@vitejs/plugin-vue": "^4.0.0",
|
||||||
|
"@vitejs/plugin-vue-jsx": "^3.0.0",
|
||||||
|
"autoprefixer": "^10.4.13",
|
||||||
|
"bpmn-js": "^8.9.0",
|
||||||
|
"bpmn-js-properties-panel": "^0.46.0",
|
||||||
|
"consola": "^2.15.3",
|
||||||
|
"eslint": "^8.33.0",
|
||||||
|
"eslint-config-prettier": "^8.6.0",
|
||||||
|
"eslint-define-config": "^1.15.0",
|
||||||
|
"eslint-plugin-prettier": "^4.2.1",
|
||||||
|
"eslint-plugin-vue": "^9.9.0",
|
||||||
|
"lint-staged": "^13.1.1",
|
||||||
|
"postcss": "^8.4.21",
|
||||||
|
"postcss-html": "^1.5.0",
|
||||||
|
"postcss-scss": "^4.0.6",
|
||||||
|
"prettier": "^2.8.4",
|
||||||
|
"rimraf": "^4.1.2",
|
||||||
|
"rollup": "^3.14.0",
|
||||||
|
"sass": "^1.58.0",
|
||||||
|
"stylelint": "^14.16.1",
|
||||||
|
"stylelint-config-html": "^1.1.0",
|
||||||
|
"stylelint-config-prettier": "^9.0.4",
|
||||||
|
"stylelint-config-recommended": "^9.0.0",
|
||||||
|
"stylelint-config-standard": "^29.0.0",
|
||||||
|
"stylelint-order": "^6.0.1",
|
||||||
|
"terser": "^5.16.3",
|
||||||
|
"typescript": "4.9.5",
|
||||||
|
"unplugin-auto-import": "^0.14.2",
|
||||||
|
"unplugin-element-plus": "^0.6.0",
|
||||||
|
"unplugin-vue-components": "^0.23.0",
|
||||||
|
"vite": "4.1.1",
|
||||||
|
"vite-plugin-compression": "^0.5.1",
|
||||||
|
"vite-plugin-ejs": "^1.6.4",
|
||||||
|
"vite-plugin-eslint": "^1.8.1",
|
||||||
|
"vite-plugin-progress": "^0.0.6",
|
||||||
|
"vite-plugin-purge-icons": "^0.9.2",
|
||||||
|
"vite-plugin-svg-icons": "^2.0.1",
|
||||||
|
"vite-plugin-vue-setup-extend": "^0.4.0",
|
||||||
|
"vite-plugin-windicss": "^1.8.10",
|
||||||
|
"vue-tsc": "^1.0.24",
|
||||||
|
"windicss": "^3.5.6"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.0.0"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://gitee.com/zhijiantianya/ruoyi-vue-pro"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://gitee.com/zhijiantianya/ruoyi-vue-pro/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://gitee.com/zhijiantianya/ruoyi-vue-pro"
|
||||||
|
}
|
5
postcss.config.js
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
module.exports = {
|
||||||
|
plugins: {
|
||||||
|
autoprefixer: {}
|
||||||
|
}
|
||||||
|
}
|
22
prettier.config.js
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
module.exports = {
|
||||||
|
printWidth: 100, // 每行代码长度(默认80)
|
||||||
|
tabWidth: 2, // 每个tab相当于多少个空格(默认2)ab进行缩进(默认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
|
||||||
|
}
|
BIN
public/favicon.ico
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
public/logo.gif
Normal file
After Width: | Height: | Size: 6.2 KiB |
49
src/App.vue
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
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'
|
||||||
|
|
||||||
|
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` : ''" />
|
||||||
|
</ConfigGlobal>
|
||||||
|
</template>
|
||||||
|
<style lang="scss">
|
||||||
|
$prefix-cls: #{$namespace}-app;
|
||||||
|
.size {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
padding: 0 !important;
|
||||||
|
margin: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
@extend .size;
|
||||||
|
|
||||||
|
#app {
|
||||||
|
@extend .size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.#{$prefix-cls}-grey-mode {
|
||||||
|
filter: grayscale(100%);
|
||||||
|
}
|
||||||
|
</style>
|
8
src/api/bpm/activity/index.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export const getActivityList = async (params) => {
|
||||||
|
return await request.get({
|
||||||
|
url: '/bpm/activity/list',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
21
src/api/bpm/definition/index.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export const getProcessDefinitionBpmnXMLApi = async (id: number) => {
|
||||||
|
return await request.get({
|
||||||
|
url: '/bpm/process-definition/get-bpmn-xml?id=' + id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getProcessDefinitionPageApi = async (params) => {
|
||||||
|
return await request.get({
|
||||||
|
url: '/bpm/process-definition/page',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getProcessDefinitionListApi = async (params) => {
|
||||||
|
return await request.get({
|
||||||
|
url: '/bpm/process-definition/list',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
56
src/api/bpm/form/index.ts
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export type FormVO = {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
conf: string
|
||||||
|
fields: string[]
|
||||||
|
status: number
|
||||||
|
remark: string
|
||||||
|
createTime: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建工作流的表单定义
|
||||||
|
export const createFormApi = async (data: FormVO) => {
|
||||||
|
return await request.post({
|
||||||
|
url: '/bpm/form/create',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新工作流的表单定义
|
||||||
|
export const updateFormApi = async (data: FormVO) => {
|
||||||
|
return await request.put({
|
||||||
|
url: '/bpm/form/update',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除工作流的表单定义
|
||||||
|
export const deleteFormApi = async (id: number) => {
|
||||||
|
return await request.delete({
|
||||||
|
url: '/bpm/form/delete?id=' + id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得工作流的表单定义
|
||||||
|
export const getFormApi = async (id: number) => {
|
||||||
|
return await request.get({
|
||||||
|
url: '/bpm/form/get?id=' + id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得工作流的表单定义分页
|
||||||
|
export const getFormPageApi = async (params) => {
|
||||||
|
return await request.get({
|
||||||
|
url: '/bpm/form/page',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得动态表单的精简列表
|
||||||
|
export const getSimpleFormsApi = async () => {
|
||||||
|
return await request.get({
|
||||||
|
url: '/bpm/form/list-all-simple'
|
||||||
|
})
|
||||||
|
}
|
27
src/api/bpm/leave/index.ts
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export type LeaveVO = {
|
||||||
|
id: number
|
||||||
|
result: number
|
||||||
|
type: number
|
||||||
|
reason: string
|
||||||
|
processInstanceId: string
|
||||||
|
startTime: string
|
||||||
|
endTime: string
|
||||||
|
createTime: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建请假申请
|
||||||
|
export const createLeaveApi = async (data: LeaveVO) => {
|
||||||
|
return await request.post({ url: '/bpm/oa/leave/create', data: data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得请假申请
|
||||||
|
export const getLeaveApi = async (id: number) => {
|
||||||
|
return await request.get({ url: '/bpm/oa/leave/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得请假申请分页
|
||||||
|
export const getLeavePageApi = async (params) => {
|
||||||
|
return await request.get({ url: '/bpm/oa/leave/page', params })
|
||||||
|
}
|
59
src/api/bpm/model/index.ts
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export type ProcessDefinitionVO = {
|
||||||
|
id: string
|
||||||
|
version: number
|
||||||
|
deploymentTIme: string
|
||||||
|
suspensionState: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ModelVO = {
|
||||||
|
id: number
|
||||||
|
formName: string
|
||||||
|
key: string
|
||||||
|
name: string
|
||||||
|
description: string
|
||||||
|
category: string
|
||||||
|
formType: number
|
||||||
|
formId: number
|
||||||
|
formCustomCreatePath: string
|
||||||
|
formCustomViewPath: string
|
||||||
|
processDefinition: ProcessDefinitionVO
|
||||||
|
status: number
|
||||||
|
remark: string
|
||||||
|
createTime: string
|
||||||
|
bpmnXml: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getModelPageApi = async (params) => {
|
||||||
|
return await request.get({ url: '/bpm/model/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getModelApi = async (id: number) => {
|
||||||
|
return await request.get({ url: '/bpm/model/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const updateModelApi = async (data: ModelVO) => {
|
||||||
|
return await request.put({ url: '/bpm/model/update', data: data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 任务状态修改
|
||||||
|
export const updateModelStateApi = async (id: number, state: number) => {
|
||||||
|
const data = {
|
||||||
|
id: id,
|
||||||
|
state: state
|
||||||
|
}
|
||||||
|
return await request.put({ url: '/bpm/model/update-state', data: data })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const createModelApi = async (data: ModelVO) => {
|
||||||
|
return await request.post({ url: '/bpm/model/create', data: data })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const deleteModelApi = async (id: number) => {
|
||||||
|
return await request.delete({ url: '/bpm/model/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const deployModelApi = async (id: number) => {
|
||||||
|
return await request.post({ url: '/bpm/model/deploy?id=' + id })
|
||||||
|
}
|
40
src/api/bpm/processInstance/index.ts
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export type Task = {
|
||||||
|
id: string
|
||||||
|
name: string
|
||||||
|
}
|
||||||
|
export type ProcessInstanceVO = {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
processDefinitionId: string
|
||||||
|
category: string
|
||||||
|
result: number
|
||||||
|
tasks: Task[]
|
||||||
|
fields: string[]
|
||||||
|
status: number
|
||||||
|
remark: string
|
||||||
|
businessKey: string
|
||||||
|
createTime: string
|
||||||
|
endTime: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getMyProcessInstancePageApi = async (params) => {
|
||||||
|
return await request.get({ url: '/bpm/process-instance/my-page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const createProcessInstanceApi = async (data) => {
|
||||||
|
return await request.post({ url: '/bpm/process-instance/create', data: data })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const cancelProcessInstanceApi = async (id: number, reason: string) => {
|
||||||
|
const data = {
|
||||||
|
id: id,
|
||||||
|
reason: reason
|
||||||
|
}
|
||||||
|
return await request.delete({ url: '/bpm/process-instance/cancel', data: data })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getProcessInstanceApi = async (id: number) => {
|
||||||
|
return await request.get({ url: '/bpm/process-instance/get?id=' + id })
|
||||||
|
}
|
34
src/api/bpm/task/index.ts
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export const getTodoTaskPage = async (params) => {
|
||||||
|
return await request.get({ url: '/bpm/task/todo-page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getDoneTaskPage = async (params) => {
|
||||||
|
return await request.get({ url: '/bpm/task/done-page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const completeTask = async (data) => {
|
||||||
|
return await request.put({ url: '/bpm/task/complete', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const approveTask = async (data) => {
|
||||||
|
return await request.put({ url: '/bpm/task/approve', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const rejectTask = async (data) => {
|
||||||
|
return await request.put({ url: '/bpm/task/reject', data })
|
||||||
|
}
|
||||||
|
export const backTask = async (data) => {
|
||||||
|
return await request.put({ url: '/bpm/task/back', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const updateTaskAssignee = async (data) => {
|
||||||
|
return await request.put({ url: '/bpm/task/update-assignee', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getTaskListByProcessInstanceId = async (processInstanceId) => {
|
||||||
|
return await request.get({
|
||||||
|
url: '/bpm/task/list-by-process-instance-id?processInstanceId=' + processInstanceId
|
||||||
|
})
|
||||||
|
}
|
29
src/api/bpm/taskAssignRule/index.ts
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export type TaskAssignVO = {
|
||||||
|
id: number
|
||||||
|
modelId: string
|
||||||
|
processDefinitionId: string
|
||||||
|
taskDefinitionKey: string
|
||||||
|
taskDefinitionName: string
|
||||||
|
options: string[]
|
||||||
|
type: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export const getTaskAssignRuleList = async (params) => {
|
||||||
|
return await request.get({ url: '/bpm/task-assign-rule/list', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const createTaskAssignRule = async (data: TaskAssignVO) => {
|
||||||
|
return await request.post({
|
||||||
|
url: '/bpm/task-assign-rule/create',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const updateTaskAssignRule = async (data: TaskAssignVO) => {
|
||||||
|
return await request.put({
|
||||||
|
url: '/bpm/task-assign-rule/update',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
47
src/api/bpm/userGroup/index.ts
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export type UserGroupVO = {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
description: string
|
||||||
|
memberUserIds: number[]
|
||||||
|
status: number
|
||||||
|
remark: string
|
||||||
|
createTime: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建用户组
|
||||||
|
export const createUserGroupApi = async (data: UserGroupVO) => {
|
||||||
|
return await request.post({
|
||||||
|
url: '/bpm/user-group/create',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新用户组
|
||||||
|
export const updateUserGroupApi = async (data: UserGroupVO) => {
|
||||||
|
return await request.put({
|
||||||
|
url: '/bpm/user-group/update',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除用户组
|
||||||
|
export const deleteUserGroupApi = async (id: number) => {
|
||||||
|
return await request.delete({ url: '/bpm/user-group/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得用户组
|
||||||
|
export const getUserGroupApi = async (id: number) => {
|
||||||
|
return await request.get({ url: '/bpm/user-group/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得用户组分页
|
||||||
|
export const getUserGroupPageApi = async (params) => {
|
||||||
|
return await request.get({ url: '/bpm/user-group/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取用户组精简信息列表
|
||||||
|
export const listSimpleUserGroupsApi = async () => {
|
||||||
|
return await request.get({ url: '/bpm/user-group/list-all-simple' })
|
||||||
|
}
|
50
src/api/infra/apiAccessLog/index.ts
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ApiAccessLogPageReqVO extends PageParam {
|
||||||
|
userId?: number
|
||||||
|
userType?: number
|
||||||
|
applicationName?: string
|
||||||
|
requestUrl?: string
|
||||||
|
beginTime?: Date[]
|
||||||
|
duration?: number
|
||||||
|
resultCode?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ApiAccessLogExportReqVO {
|
||||||
|
userId?: number
|
||||||
|
userType?: number
|
||||||
|
applicationName?: string
|
||||||
|
requestUrl?: string
|
||||||
|
beginTime?: Date[]
|
||||||
|
duration?: number
|
||||||
|
resultCode?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询列表API 访问日志
|
||||||
|
export const getApiAccessLogPageApi = (params: ApiAccessLogPageReqVO) => {
|
||||||
|
return request.get({ url: '/infra/api-access-log/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出API 访问日志
|
||||||
|
export const exportApiAccessLogApi = (params: ApiAccessLogExportReqVO) => {
|
||||||
|
return request.download({ url: '/infra/api-access-log/export-excel', params })
|
||||||
|
}
|
66
src/api/infra/apiErrorLog/index.ts
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ApiErrorLogPageReqVO extends PageParam {
|
||||||
|
userId?: number
|
||||||
|
userType?: number
|
||||||
|
applicationName?: string
|
||||||
|
requestUrl?: string
|
||||||
|
exceptionTime?: Date[]
|
||||||
|
processStatus: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ApiErrorLogExportReqVO {
|
||||||
|
userId?: number
|
||||||
|
userType?: number
|
||||||
|
applicationName?: string
|
||||||
|
requestUrl?: string
|
||||||
|
exceptionTime?: Date[]
|
||||||
|
processStatus: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询列表API 访问日志
|
||||||
|
export const getApiErrorLogPageApi = (params: ApiErrorLogPageReqVO) => {
|
||||||
|
return request.get({ url: '/infra/api-error-log/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新 API 错误日志的处理状态
|
||||||
|
export const updateApiErrorLogPageApi = (id: number, processStatus: number) => {
|
||||||
|
return request.put({
|
||||||
|
url: '/infra/api-error-log/update-status?id=' + id + '&processStatus=' + processStatus
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出API 访问日志
|
||||||
|
export const exportApiErrorLogApi = (params: ApiErrorLogExportReqVO) => {
|
||||||
|
return request.download({
|
||||||
|
url: '/infra/api-error-log/export-excel',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
57
src/api/infra/codegen/index.ts
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
import type { CodegenUpdateReqVO, CodegenCreateListReqVO } from './types'
|
||||||
|
|
||||||
|
// 查询列表代码生成表定义
|
||||||
|
export const getCodegenTablePageApi = (params) => {
|
||||||
|
return request.get({ url: '/infra/codegen/table/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询详情代码生成表定义
|
||||||
|
export const getCodegenTableApi = (id: number) => {
|
||||||
|
return request.get({ url: '/infra/codegen/detail?tableId=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增代码生成表定义
|
||||||
|
export const createCodegenTableApi = (data: CodegenCreateListReqVO) => {
|
||||||
|
return request.post({ url: '/infra/codegen/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改代码生成表定义
|
||||||
|
export const updateCodegenTableApi = (data: CodegenUpdateReqVO) => {
|
||||||
|
return request.put({ url: '/infra/codegen/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 基于数据库的表结构,同步数据库的表和字段定义
|
||||||
|
export const syncCodegenFromDBApi = (id: number) => {
|
||||||
|
return request.put({ url: '/infra/codegen/sync-from-db?tableId=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 基于 SQL 建表语句,同步数据库的表和字段定义
|
||||||
|
export const syncCodegenFromSQLApi = (id: number, sql: string) => {
|
||||||
|
return request.put({ url: '/infra/codegen/sync-from-sql?tableId=' + id + '&sql=' + sql })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 预览生成代码
|
||||||
|
export const previewCodegenApi = (id: number) => {
|
||||||
|
return request.get({ url: '/infra/codegen/preview?tableId=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 下载生成代码
|
||||||
|
export const downloadCodegenApi = (id: number) => {
|
||||||
|
return request.download({ url: '/infra/codegen/download?tableId=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得表定义
|
||||||
|
export const getSchemaTableListApi = (params) => {
|
||||||
|
return request.get({ url: '/infra/codegen/db/table/list', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 基于数据库的表结构,创建代码生成器的表定义
|
||||||
|
export const createCodegenListApi = (data) => {
|
||||||
|
return request.post({ url: '/infra/codegen/create-list', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除代码生成表定义
|
||||||
|
export const deleteCodegenTableApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/infra/codegen/delete?tableId=' + id })
|
||||||
|
}
|
61
src/api/infra/codegen/types.ts
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
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
|
||||||
|
columns: CodegenColumnVO[]
|
||||||
|
}
|
||||||
|
export type CodegenCreateListReqVO = {
|
||||||
|
dataSourceConfigId: number
|
||||||
|
tableNames: string[]
|
||||||
|
}
|
62
src/api/infra/config/index.ts
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface ConfigVO {
|
||||||
|
id: number
|
||||||
|
category: string
|
||||||
|
name: string
|
||||||
|
key: string
|
||||||
|
value: string
|
||||||
|
type: number
|
||||||
|
visible: boolean
|
||||||
|
remark: string
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ConfigPageReqVO extends PageParam {
|
||||||
|
name?: string
|
||||||
|
key?: string
|
||||||
|
type?: number
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ConfigExportReqVO {
|
||||||
|
name?: string
|
||||||
|
key?: string
|
||||||
|
type?: number
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询参数列表
|
||||||
|
export const getConfigPageApi = (params: ConfigPageReqVO) => {
|
||||||
|
return request.get({ url: '/infra/config/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询参数详情
|
||||||
|
export const getConfigApi = (id: number) => {
|
||||||
|
return request.get({ url: '/infra/config/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据参数键名查询参数值
|
||||||
|
export const getConfigKeyApi = (configKey: string) => {
|
||||||
|
return request.get({ url: '/infra/config/get-value-by-key?key=' + configKey })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增参数
|
||||||
|
export const createConfigApi = (data: ConfigVO) => {
|
||||||
|
return request.post({ url: '/infra/config/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改参数
|
||||||
|
export const updateConfigApi = (data: ConfigVO) => {
|
||||||
|
return request.put({ url: '/infra/config/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除参数
|
||||||
|
export const deleteConfigApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/infra/config/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出参数
|
||||||
|
export const exportConfigApi = (params: ConfigExportReqVO) => {
|
||||||
|
return request.download({ url: '/infra/config/export', params })
|
||||||
|
}
|
35
src/api/infra/dataSourceConfig/index.ts
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface DataSourceConfigVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
url: string
|
||||||
|
username: string
|
||||||
|
password: string
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询数据源配置列表
|
||||||
|
export const getDataSourceConfigListApi = () => {
|
||||||
|
return request.get({ url: '/infra/data-source-config/list' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询数据源配置详情
|
||||||
|
export const getDataSourceConfigApi = (id: number) => {
|
||||||
|
return request.get({ url: '/infra/data-source-config/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增数据源配置
|
||||||
|
export const createDataSourceConfigApi = (data: DataSourceConfigVO) => {
|
||||||
|
return request.post({ url: '/infra/data-source-config/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改数据源配置
|
||||||
|
export const updateDataSourceConfigApi = (data: DataSourceConfigVO) => {
|
||||||
|
return request.put({ url: '/infra/data-source-config/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除数据源配置
|
||||||
|
export const deleteDataSourceConfigApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/infra/data-source-config/delete?id=' + id })
|
||||||
|
}
|
16
src/api/infra/dbDoc/index.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// 导出Html
|
||||||
|
export const exportHtmlApi = () => {
|
||||||
|
return request.download({ url: '/infra/db-doc/export-html' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出Word
|
||||||
|
export const exportWordApi = () => {
|
||||||
|
return request.download({ url: '/infra/db-doc/export-word' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出Markdown
|
||||||
|
export const exportMarkdownApi = () => {
|
||||||
|
return request.download({ url: '/infra/db-doc/export-markdown' })
|
||||||
|
}
|
66
src/api/infra/fileConfig/index.ts
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
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: number
|
||||||
|
master: boolean
|
||||||
|
visible: boolean
|
||||||
|
config: FileClientConfig
|
||||||
|
remark: string
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FileConfigPageReqVO extends PageParam {
|
||||||
|
name?: string
|
||||||
|
storage?: number
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询文件配置列表
|
||||||
|
export const getFileConfigPageApi = (params: FileConfigPageReqVO) => {
|
||||||
|
return request.get({ url: '/infra/file-config/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询文件配置详情
|
||||||
|
export const getFileConfigApi = (id: number) => {
|
||||||
|
return request.get({ url: '/infra/file-config/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新文件配置为主配置
|
||||||
|
export const updateFileConfigMasterApi = (id: number) => {
|
||||||
|
return request.put({ url: '/infra/file-config/update-master?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增文件配置
|
||||||
|
export const createFileConfigApi = (data: FileConfigVO) => {
|
||||||
|
return request.post({ url: '/infra/file-config/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改文件配置
|
||||||
|
export const updateFileConfigApi = (data: FileConfigVO) => {
|
||||||
|
return request.put({ url: '/infra/file-config/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除文件配置
|
||||||
|
export const deleteFileConfigApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/infra/file-config/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 测试文件配置
|
||||||
|
export const testFileConfigApi = (id: number) => {
|
||||||
|
return request.get({ url: '/infra/file-config/test?id=' + id })
|
||||||
|
}
|
28
src/api/infra/fileList/index.ts
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface FileVO {
|
||||||
|
id: number
|
||||||
|
configId: number
|
||||||
|
path: string
|
||||||
|
name: string
|
||||||
|
url: string
|
||||||
|
size: string
|
||||||
|
type: string
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface FilePageReqVO extends PageParam {
|
||||||
|
path?: string
|
||||||
|
type?: string
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询文件列表
|
||||||
|
export const getFilePageApi = (params: FilePageReqVO) => {
|
||||||
|
return request.get({ url: '/infra/file/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除文件
|
||||||
|
export const deleteFileApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/infra/file/delete?id=' + id })
|
||||||
|
}
|
75
src/api/infra/job/index.ts
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
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 interface JobPageReqVO extends PageParam {
|
||||||
|
name?: string
|
||||||
|
status?: number
|
||||||
|
handlerName?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface JobExportReqVO {
|
||||||
|
name?: string
|
||||||
|
status?: number
|
||||||
|
handlerName?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 任务列表
|
||||||
|
export const getJobPageApi = (params: JobPageReqVO) => {
|
||||||
|
return request.get({ url: '/infra/job/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 任务详情
|
||||||
|
export const getJobApi = (id: number) => {
|
||||||
|
return request.get({ url: '/infra/job/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增任务
|
||||||
|
export const createJobApi = (data: JobVO) => {
|
||||||
|
return request.post({ url: '/infra/job/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改定时任务调度
|
||||||
|
export const updateJobApi = (data: JobVO) => {
|
||||||
|
return request.put({ url: '/infra/job/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除定时任务调度
|
||||||
|
export const deleteJobApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/infra/job/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出定时任务调度
|
||||||
|
export const exportJobApi = (params: JobExportReqVO) => {
|
||||||
|
return request.download({ url: '/infra/job/export-excel', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 任务状态修改
|
||||||
|
export const updateJobStatusApi = (id: number, status: number) => {
|
||||||
|
const params = {
|
||||||
|
id,
|
||||||
|
status
|
||||||
|
}
|
||||||
|
return request.put({ url: '/infra/job/update-status', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 定时任务立即执行一次
|
||||||
|
export const runJobApi = (id: number) => {
|
||||||
|
return request.put({ url: '/infra/job/trigger?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得定时任务的下 n 次执行时间
|
||||||
|
export const getJobNextTimesApi = (id: number) => {
|
||||||
|
return request.get({ url: '/infra/job/get_next_times?id=' + id })
|
||||||
|
}
|
49
src/api/infra/jobLog/index.ts
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
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 interface JobLogPageReqVO extends PageParam {
|
||||||
|
jobId?: number
|
||||||
|
handlerName?: string
|
||||||
|
beginTime?: string
|
||||||
|
endTime?: string
|
||||||
|
status?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface JobLogExportReqVO {
|
||||||
|
jobId?: number
|
||||||
|
handlerName?: string
|
||||||
|
beginTime?: string
|
||||||
|
endTime?: string
|
||||||
|
status?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 任务日志列表
|
||||||
|
export const getJobLogPageApi = (params: JobLogPageReqVO) => {
|
||||||
|
return request.get({ url: '/infra/job-log/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 任务日志详情
|
||||||
|
export const getJobLogApi = (id: number) => {
|
||||||
|
return request.get({ url: '/infra/job-log/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出定时任务日志
|
||||||
|
export const exportJobLogApi = (params: JobLogExportReqVO) => {
|
||||||
|
return request.download({
|
||||||
|
url: '/infra/job-log/export-excel',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
41
src/api/infra/redis/index.ts
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取redis 监控信息
|
||||||
|
*/
|
||||||
|
export const getCacheApi = () => {
|
||||||
|
return request.get({ url: '/infra/redis/get-monitor-info' })
|
||||||
|
}
|
||||||
|
// 获取模块
|
||||||
|
export const getKeyDefineListApi = () => {
|
||||||
|
return request.get({ url: '/infra/redis/get-key-define-list' })
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 获取redis key列表
|
||||||
|
*/
|
||||||
|
export const getKeyListApi = (keyTemplate: string) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/infra/redis/get-key-list',
|
||||||
|
params: {
|
||||||
|
keyTemplate
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取缓存内容
|
||||||
|
export const getKeyValueApi = (key: string) => {
|
||||||
|
return request.get({ url: '/infra/redis/get-key-value?key=' + key })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据键名删除缓存
|
||||||
|
export const deleteKeyApi = (key: string) => {
|
||||||
|
return request.delete({ url: '/infra/redis/delete-key?key=' + key })
|
||||||
|
}
|
||||||
|
|
||||||
|
export const deleteKeysApi = (keyTemplate: string) => {
|
||||||
|
return request.delete({
|
||||||
|
url: '/infra/redis/delete-keys?',
|
||||||
|
params: {
|
||||||
|
keyTemplate
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
185
src/api/infra/redis/types.ts
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RedisKeyInfo {
|
||||||
|
keyTemplate: string
|
||||||
|
keyType: string
|
||||||
|
valueType: string
|
||||||
|
timeoutType: number
|
||||||
|
timeout: number
|
||||||
|
memo: string
|
||||||
|
}
|
73
src/api/login/index.ts
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
import { getRefreshToken } from '@/utils/auth'
|
||||||
|
import type { UserLoginVO } from './types'
|
||||||
|
|
||||||
|
export interface CodeImgResult {
|
||||||
|
captchaOnOff: boolean
|
||||||
|
img: string
|
||||||
|
uuid: string
|
||||||
|
}
|
||||||
|
export interface SmsCodeVO {
|
||||||
|
mobile: string
|
||||||
|
scene: number
|
||||||
|
}
|
||||||
|
export interface SmsLoginVO {
|
||||||
|
mobile: string
|
||||||
|
code: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 登录
|
||||||
|
export const loginApi = (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 getTenantIdByNameApi = (name: string) => {
|
||||||
|
return request.get({ url: '/system/tenant/get-id-by-name?name=' + name })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 登出
|
||||||
|
export const loginOutApi = () => {
|
||||||
|
return request.post({ url: '/system/auth/logout' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取用户权限信息
|
||||||
|
export const getInfoApi = () => {
|
||||||
|
return request.get({ url: '/system/auth/get-permission-info' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 路由
|
||||||
|
export const getAsyncRoutesApi = () => {
|
||||||
|
return request.get({ url: '/system/auth/list-menus' })
|
||||||
|
}
|
||||||
|
|
||||||
|
//获取登录验证码
|
||||||
|
export const sendSmsCodeApi = (data: SmsCodeVO) => {
|
||||||
|
return request.post({ url: '/system/auth/send-sms-code', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 短信验证码登录
|
||||||
|
export const smsLoginApi = (data: SmsLoginVO) => {
|
||||||
|
return request.post({ url: '/system/auth/sms-login', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 社交授权的跳转
|
||||||
|
export const socialAuthRedirectApi = (type: number, redirectUri: string) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 获取验证图片 以及token
|
||||||
|
export const getCodeApi = (data) => {
|
||||||
|
return request.postOriginal({ url: 'system/captcha/get', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 滑动或者点选验证
|
||||||
|
export const reqCheckApi = (data) => {
|
||||||
|
return request.postOriginal({ url: 'system/captcha/check', data })
|
||||||
|
}
|
42
src/api/login/types.ts
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
export type UserInfoVO = {
|
||||||
|
permissions: []
|
||||||
|
roles: []
|
||||||
|
user: {
|
||||||
|
avatar: string
|
||||||
|
id: number
|
||||||
|
nickname: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export type TentantNameVO = {
|
||||||
|
name: string
|
||||||
|
}
|
41
src/api/mp/account/index.ts
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// 创建公众号账号
|
||||||
|
export const createAccount = async (data) => {
|
||||||
|
return await request.post({ url: '/mp/account/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新公众号账号
|
||||||
|
export const updateAccount = async (data) => {
|
||||||
|
return request.put({ url: '/mp/account/update', data: data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除公众号账号
|
||||||
|
export const deleteAccount = async (id) => {
|
||||||
|
return request.delete({ url: '/mp/account/delete?id=' + id, method: 'delete' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得公众号账号
|
||||||
|
export const getAccount = async (id) => {
|
||||||
|
return request.get({ url: '/mp/account/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得公众号账号分页
|
||||||
|
export const getAccountPage = async (query) => {
|
||||||
|
return request.get({ url: '/mp/account/page', params: query })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取公众号账号精简信息列表
|
||||||
|
export const getSimpleAccounts = async () => {
|
||||||
|
return request.get({ url: '/mp/account/list-all-simple' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成公众号二维码
|
||||||
|
export const generateAccountQrCode = async (id) => {
|
||||||
|
return request.put({ url: '/mp/account/generate-qr-code?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清空公众号 API 配额
|
||||||
|
export const clearAccountQuota = async (id) => {
|
||||||
|
return request.put({ url: '/mp/account/clear-quota?id=' + id })
|
||||||
|
}
|
39
src/api/mp/autoReply/index.ts
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// 创建公众号的自动回复
|
||||||
|
export const createAutoReply = (data) => {
|
||||||
|
return request.post({
|
||||||
|
url: '/mp/auto-reply/create',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新公众号的自动回复
|
||||||
|
export const updateAutoReply = (data) => {
|
||||||
|
return request.put({
|
||||||
|
url: '/mp/auto-reply/update',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除公众号的自动回复
|
||||||
|
export const deleteAutoReply = (id) => {
|
||||||
|
return request.delete({
|
||||||
|
url: '/mp/auto-reply/delete?id=' + id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得公众号的自动回复
|
||||||
|
export const getAutoReply = (id) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/mp/auto-reply/get?id=' + id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得公众号的自动回复分页
|
||||||
|
export const getAutoReplyPage = (query) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/mp/auto-reply/page',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
35
src/api/mp/draft/index.ts
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// 获得公众号草稿分页
|
||||||
|
export const getDraftPage = (query) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/mp/draft/page',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建公众号草稿
|
||||||
|
export const createDraft = (accountId, articles) => {
|
||||||
|
return request.post({
|
||||||
|
url: '/mp/draft/create?accountId=' + accountId,
|
||||||
|
data: {
|
||||||
|
articles
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新公众号草稿
|
||||||
|
export const updateDraft = (accountId, mediaId, articles) => {
|
||||||
|
return request.put({
|
||||||
|
url: '/mp/draft/update?accountId=' + accountId + '&mediaId=' + mediaId,
|
||||||
|
method: 'put',
|
||||||
|
data: articles
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除公众号草稿
|
||||||
|
export const deleteDraft = (accountId, mediaId) => {
|
||||||
|
return request.delete({
|
||||||
|
url: '/mp/draft/delete?accountId=' + accountId + '&mediaId=' + mediaId
|
||||||
|
})
|
||||||
|
}
|
23
src/api/mp/freePublish/index.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// 获得公众号素材分页
|
||||||
|
export const getFreePublishPage = (query) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/mp/free-publish/page',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除公众号素材
|
||||||
|
export const deleteFreePublish = (accountId, articleId) => {
|
||||||
|
return request.delete({
|
||||||
|
url: '/mp/free-publish/delete?accountId=' + accountId + '&articleId=' + articleId
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发布公众号素材
|
||||||
|
export const submitFreePublish = (accountId, mediaId) => {
|
||||||
|
return request.post({
|
||||||
|
url: '/mp/free-publish/submit?accountId=' + accountId + '&mediaId=' + mediaId
|
||||||
|
})
|
||||||
|
}
|
16
src/api/mp/material/index.ts
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// 获得公众号素材分页
|
||||||
|
export const getMaterialPage = (query) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/mp/material/page',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除公众号永久素材
|
||||||
|
export const deletePermanentMaterial = (id) => {
|
||||||
|
return request.delete({
|
||||||
|
url: '/mp/material/delete-permanent?id=' + id
|
||||||
|
})
|
||||||
|
}
|
26
src/api/mp/menu/index.ts
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// 获得公众号菜单列表
|
||||||
|
export const getMenuList = (accountId) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/mp/menu/list?accountId=' + accountId
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 保存公众号菜单
|
||||||
|
export const saveMenu = (accountId, menus) => {
|
||||||
|
return request.post({
|
||||||
|
url: '/mp/menu/save',
|
||||||
|
data: {
|
||||||
|
accountId,
|
||||||
|
menus
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除公众号菜单
|
||||||
|
export const deleteMenu = (accountId) => {
|
||||||
|
return request.delete({
|
||||||
|
url: '/mp/menu/delete?accountId=' + accountId
|
||||||
|
})
|
||||||
|
}
|
17
src/api/mp/message/index.ts
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// 获得公众号消息分页
|
||||||
|
export const getMessagePage = (query) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/mp/message/page',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 给粉丝发送消息
|
||||||
|
export const sendMessage = (data) => {
|
||||||
|
return request.post({
|
||||||
|
url: '/mp/message/send',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
31
src/api/mp/mpuser/index.ts
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// 更新公众号粉丝
|
||||||
|
export const updateUser = (data) => {
|
||||||
|
return request.put({
|
||||||
|
url: '/mp/user/update',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得公众号粉丝
|
||||||
|
export const getUser = (id) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/mp/user/get?id=' + id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得公众号粉丝分页
|
||||||
|
export const getUserPage = (query) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/mp/user/page',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 同步公众号粉丝
|
||||||
|
export const syncUser = (accountId) => {
|
||||||
|
return request.post({
|
||||||
|
url: '/mp/tag/sync?accountId=' + accountId
|
||||||
|
})
|
||||||
|
}
|
33
src/api/mp/statistics/index.ts
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// 获取消息发送概况数据
|
||||||
|
export const getUpstreamMessage = (query) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/mp/statistics/upstream-message',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 用户增减数据
|
||||||
|
export const getUserSummary = (query) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/mp/statistics/user-summary',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得用户累计数据
|
||||||
|
export const getUserCumulate = (query) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/mp/statistics/user-cumulate',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得接口分析数据
|
||||||
|
export const getInterfaceSummary = (query) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/mp/statistics/interface-summary',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
53
src/api/mp/tag/index.ts
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// 创建公众号标签
|
||||||
|
export const createTag = (data) => {
|
||||||
|
return request.post({
|
||||||
|
url: '/mp/tag/create',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新公众号标签
|
||||||
|
export const updateTag = (data) => {
|
||||||
|
return request.put({
|
||||||
|
url: '/mp/tag/update',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除公众号标签
|
||||||
|
export const deleteTag = (id) => {
|
||||||
|
return request.delete({
|
||||||
|
url: '/mp/tag/delete?id=' + id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得公众号标签
|
||||||
|
export const getTag = (id) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/mp/tag/get?id=' + id
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得公众号标签分页
|
||||||
|
export const getTagPage = (query) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/mp/tag/page',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取公众号标签精简信息列表
|
||||||
|
export const getSimpleTags = () => {
|
||||||
|
return request.get({
|
||||||
|
url: '/mp/tag/list-all-simple'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 同步公众号标签
|
||||||
|
export const syncTag = (accountId) => {
|
||||||
|
return request.post({
|
||||||
|
url: '/mp/tag/sync?accountId=' + accountId
|
||||||
|
})
|
||||||
|
}
|
78
src/api/pay/app/index.ts
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface AppVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
status: number
|
||||||
|
remark: string
|
||||||
|
payNotifyUrl: string
|
||||||
|
refundNotifyUrl: string
|
||||||
|
merchantId: number
|
||||||
|
merchantName: string
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AppPageReqVO extends PageParam {
|
||||||
|
name?: string
|
||||||
|
status?: number
|
||||||
|
remark?: string
|
||||||
|
payNotifyUrl?: string
|
||||||
|
refundNotifyUrl?: string
|
||||||
|
merchantName?: string
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AppExportReqVO {
|
||||||
|
name?: string
|
||||||
|
status?: number
|
||||||
|
remark?: string
|
||||||
|
payNotifyUrl?: string
|
||||||
|
refundNotifyUrl?: string
|
||||||
|
merchantName?: string
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AppUpdateStatusReqVO {
|
||||||
|
id: number
|
||||||
|
status: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询列表支付应用
|
||||||
|
export const getAppPageApi = (params: AppPageReqVO) => {
|
||||||
|
return request.get({ url: '/pay/app/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询详情支付应用
|
||||||
|
export const getAppApi = (id: number) => {
|
||||||
|
return request.get({ url: '/pay/app/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增支付应用
|
||||||
|
export const createAppApi = (data: AppVO) => {
|
||||||
|
return request.post({ url: '/pay/app/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改支付应用
|
||||||
|
export const updateAppApi = (data: AppVO) => {
|
||||||
|
return request.put({ url: '/pay/app/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 支付应用信息状态修改
|
||||||
|
export const changeAppStatusApi = (data: AppUpdateStatusReqVO) => {
|
||||||
|
return request.put({ url: '/pay/app/update-status', data: data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除支付应用
|
||||||
|
export const deleteAppApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/pay/app/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出支付应用
|
||||||
|
export const exportAppApi = (params: AppExportReqVO) => {
|
||||||
|
return request.download({ url: '/pay/app/export-excel', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据商ID称搜索应用列表
|
||||||
|
export const getAppListByMerchantIdApi = (merchantId: number) => {
|
||||||
|
return request.get({ url: '/pay/app/list-merchant-id', params: { merchantId: merchantId } })
|
||||||
|
}
|
70
src/api/pay/channel/index.ts
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface ChannelVO {
|
||||||
|
id: number
|
||||||
|
code: string
|
||||||
|
config: string
|
||||||
|
status: number
|
||||||
|
remark: string
|
||||||
|
feeRate: number
|
||||||
|
merchantId: number
|
||||||
|
appId: number
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ChannelPageReqVO extends PageParam {
|
||||||
|
code?: string
|
||||||
|
status?: number
|
||||||
|
remark?: string
|
||||||
|
feeRate?: number
|
||||||
|
merchantId?: number
|
||||||
|
appId?: number
|
||||||
|
config?: string
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ChannelExportReqVO {
|
||||||
|
code?: string
|
||||||
|
status?: number
|
||||||
|
remark?: string
|
||||||
|
feeRate?: number
|
||||||
|
merchantId?: number
|
||||||
|
appId?: number
|
||||||
|
config?: string
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询列表支付渠道
|
||||||
|
export const getChannelPageApi = (params: ChannelPageReqVO) => {
|
||||||
|
return request.get({ url: '/pay/channel/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询详情支付渠道
|
||||||
|
export const getChannelApi = (merchantId: number, appId: string, code: string) => {
|
||||||
|
const params = {
|
||||||
|
merchantId: merchantId,
|
||||||
|
appId: appId,
|
||||||
|
code: code
|
||||||
|
}
|
||||||
|
return request.get({ url: '/pay/channel/get-channel', params: params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增支付渠道
|
||||||
|
export const createChannelApi = (data: ChannelVO) => {
|
||||||
|
return request.post({ url: '/pay/channel/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改支付渠道
|
||||||
|
export const updateChannelApi = (data: ChannelVO) => {
|
||||||
|
return request.put({ url: '/pay/channel/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除支付渠道
|
||||||
|
export const deleteChannelApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/pay/channel/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出支付渠道
|
||||||
|
export const exportChannelApi = (params: ChannelExportReqVO) => {
|
||||||
|
return request.download({ url: '/pay/channel/export-excel', params })
|
||||||
|
}
|
77
src/api/pay/merchant/index.ts
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface MerchantVO {
|
||||||
|
id: number
|
||||||
|
no: string
|
||||||
|
name: string
|
||||||
|
shortName: string
|
||||||
|
status: number
|
||||||
|
remark: string
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface MerchantPageReqVO extends PageParam {
|
||||||
|
no?: string
|
||||||
|
name?: string
|
||||||
|
shortName?: string
|
||||||
|
status?: number
|
||||||
|
remark?: string
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface MerchantExportReqVO {
|
||||||
|
no?: string
|
||||||
|
name?: string
|
||||||
|
shortName?: string
|
||||||
|
status?: number
|
||||||
|
remark?: string
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询列表支付商户
|
||||||
|
export const getMerchantPageApi = (params: MerchantPageReqVO) => {
|
||||||
|
return request.get({ url: '/pay/merchant/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询详情支付商户
|
||||||
|
export const getMerchantApi = (id: number) => {
|
||||||
|
return request.get({ url: '/pay/merchant/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据商户名称搜索商户列表
|
||||||
|
export const getMerchantListByNameApi = (name: string) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/pay/merchant/list-by-name?id=',
|
||||||
|
params: {
|
||||||
|
name: name
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增支付商户
|
||||||
|
export const createMerchantApi = (data: MerchantVO) => {
|
||||||
|
return request.post({ url: '/pay/merchant/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改支付商户
|
||||||
|
export const updateMerchantApi = (data: MerchantVO) => {
|
||||||
|
return request.put({ url: '/pay/merchant/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除支付商户
|
||||||
|
export const deleteMerchantApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/pay/merchant/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出支付商户
|
||||||
|
export const exportMerchantApi = (params: MerchantExportReqVO) => {
|
||||||
|
return request.download({ url: '/pay/merchant/export-excel', params })
|
||||||
|
}
|
||||||
|
// 支付商户状态修改
|
||||||
|
export const changeMerchantStatusApi = (id: number, status: number) => {
|
||||||
|
const data = {
|
||||||
|
id,
|
||||||
|
status
|
||||||
|
}
|
||||||
|
return request.put({ url: '/pay/merchant/update-status', data: data })
|
||||||
|
}
|
109
src/api/pay/order/index.ts
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface OrderVO {
|
||||||
|
id: number
|
||||||
|
merchantId: number
|
||||||
|
appId: number
|
||||||
|
channelId: number
|
||||||
|
channelCode: string
|
||||||
|
merchantOrderId: string
|
||||||
|
subject: string
|
||||||
|
body: string
|
||||||
|
notifyUrl: string
|
||||||
|
notifyStatus: number
|
||||||
|
amount: number
|
||||||
|
channelFeeRate: number
|
||||||
|
channelFeeAmount: number
|
||||||
|
status: number
|
||||||
|
userIp: string
|
||||||
|
expireTime: Date
|
||||||
|
successTime: Date
|
||||||
|
notifyTime: Date
|
||||||
|
successExtensionId: number
|
||||||
|
refundStatus: number
|
||||||
|
refundTimes: number
|
||||||
|
refundAmount: number
|
||||||
|
channelUserId: string
|
||||||
|
channelOrderNo: string
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OrderPageReqVO extends PageParam {
|
||||||
|
merchantId?: number
|
||||||
|
appId?: number
|
||||||
|
channelId?: number
|
||||||
|
channelCode?: string
|
||||||
|
merchantOrderId?: string
|
||||||
|
subject?: string
|
||||||
|
body?: string
|
||||||
|
notifyUrl?: string
|
||||||
|
notifyStatus?: number
|
||||||
|
amount?: number
|
||||||
|
channelFeeRate?: number
|
||||||
|
channelFeeAmount?: number
|
||||||
|
status?: number
|
||||||
|
expireTime?: Date[]
|
||||||
|
successTime?: Date[]
|
||||||
|
notifyTime?: Date[]
|
||||||
|
successExtensionId?: number
|
||||||
|
refundStatus?: number
|
||||||
|
refundTimes?: number
|
||||||
|
channelUserId?: string
|
||||||
|
channelOrderNo?: string
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OrderExportReqVO {
|
||||||
|
merchantId?: number
|
||||||
|
appId?: number
|
||||||
|
channelId?: number
|
||||||
|
channelCode?: string
|
||||||
|
merchantOrderId?: string
|
||||||
|
subject?: string
|
||||||
|
body?: string
|
||||||
|
notifyUrl?: string
|
||||||
|
notifyStatus?: number
|
||||||
|
amount?: number
|
||||||
|
channelFeeRate?: number
|
||||||
|
channelFeeAmount?: number
|
||||||
|
status?: number
|
||||||
|
expireTime?: Date[]
|
||||||
|
successTime?: Date[]
|
||||||
|
notifyTime?: Date[]
|
||||||
|
successExtensionId?: number
|
||||||
|
refundStatus?: number
|
||||||
|
refundTimes?: number
|
||||||
|
channelUserId?: string
|
||||||
|
channelOrderNo?: string
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询列表支付订单
|
||||||
|
export const getOrderPageApi = async (params: OrderPageReqVO) => {
|
||||||
|
return await request.get({ url: '/pay/order/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询详情支付订单
|
||||||
|
export const getOrderApi = async (id: number) => {
|
||||||
|
return await request.get({ url: '/pay/order/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增支付订单
|
||||||
|
export const createOrderApi = async (data: OrderVO) => {
|
||||||
|
return await request.post({ url: '/pay/order/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改支付订单
|
||||||
|
export const updateOrderApi = async (data: OrderVO) => {
|
||||||
|
return await request.put({ url: '/pay/order/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除支付订单
|
||||||
|
export const deleteOrderApi = async (id: number) => {
|
||||||
|
return await request.delete({ url: '/pay/order/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出支付订单
|
||||||
|
export const exportOrderApi = async (params: OrderExportReqVO) => {
|
||||||
|
return await request.download({ url: '/pay/order/export-excel', params })
|
||||||
|
}
|
116
src/api/pay/refund/index.ts
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface RefundVO {
|
||||||
|
id: number
|
||||||
|
merchantId: number
|
||||||
|
appId: number
|
||||||
|
channelId: number
|
||||||
|
channelCode: string
|
||||||
|
orderId: string
|
||||||
|
tradeNo: string
|
||||||
|
merchantOrderId: string
|
||||||
|
merchantRefundNo: string
|
||||||
|
notifyUrl: string
|
||||||
|
notifyStatus: number
|
||||||
|
status: number
|
||||||
|
type: number
|
||||||
|
payAmount: number
|
||||||
|
refundAmount: number
|
||||||
|
reason: string
|
||||||
|
userIp: string
|
||||||
|
channelOrderNo: string
|
||||||
|
channelRefundNo: string
|
||||||
|
channelErrorCode: string
|
||||||
|
channelErrorMsg: string
|
||||||
|
channelExtras: string
|
||||||
|
expireTime: Date
|
||||||
|
successTime: Date
|
||||||
|
notifyTime: Date
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RefundPageReqVO extends PageParam {
|
||||||
|
merchantId?: number
|
||||||
|
appId?: number
|
||||||
|
channelId?: number
|
||||||
|
channelCode?: string
|
||||||
|
orderId?: string
|
||||||
|
tradeNo?: string
|
||||||
|
merchantOrderId?: string
|
||||||
|
merchantRefundNo?: string
|
||||||
|
notifyUrl?: string
|
||||||
|
notifyStatus?: number
|
||||||
|
status?: number
|
||||||
|
type?: number
|
||||||
|
payAmount?: number
|
||||||
|
refundAmount?: number
|
||||||
|
reason?: string
|
||||||
|
userIp?: string
|
||||||
|
channelOrderNo?: string
|
||||||
|
channelRefundNo?: string
|
||||||
|
channelErrorCode?: string
|
||||||
|
channelErrorMsg?: string
|
||||||
|
channelExtras?: string
|
||||||
|
expireTime?: Date[]
|
||||||
|
successTime?: Date[]
|
||||||
|
notifyTime?: Date[]
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PayRefundExportReqVO {
|
||||||
|
merchantId?: number
|
||||||
|
appId?: number
|
||||||
|
channelId?: number
|
||||||
|
channelCode?: string
|
||||||
|
orderId?: string
|
||||||
|
tradeNo?: string
|
||||||
|
merchantOrderId?: string
|
||||||
|
merchantRefundNo?: string
|
||||||
|
notifyUrl?: string
|
||||||
|
notifyStatus?: number
|
||||||
|
status?: number
|
||||||
|
type?: number
|
||||||
|
payAmount?: number
|
||||||
|
refundAmount?: number
|
||||||
|
reason?: string
|
||||||
|
userIp?: string
|
||||||
|
channelOrderNo?: string
|
||||||
|
channelRefundNo?: string
|
||||||
|
channelErrorCode?: string
|
||||||
|
channelErrorMsg?: string
|
||||||
|
channelExtras?: string
|
||||||
|
expireTime?: Date[]
|
||||||
|
successTime?: Date[]
|
||||||
|
notifyTime?: Date[]
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询列表退款订单
|
||||||
|
export const getRefundPageApi = (params: RefundPageReqVO) => {
|
||||||
|
return request.get({ url: '/pay/refund/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询详情退款订单
|
||||||
|
export const getRefundApi = (id: number) => {
|
||||||
|
return request.get({ url: '/pay/refund/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增退款订单
|
||||||
|
export const createRefundApi = (data: RefundVO) => {
|
||||||
|
return request.post({ url: '/pay/refund/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改退款订单
|
||||||
|
export const updateRefundApi = (data: RefundVO) => {
|
||||||
|
return request.put({ url: '/pay/refund/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除退款订单
|
||||||
|
export const deleteRefundApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/pay/refund/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出退款订单
|
||||||
|
export const exportRefundApi = (params: PayRefundExportReqVO) => {
|
||||||
|
return request.download({ url: '/pay/refund/export-excel', params })
|
||||||
|
}
|
48
src/api/system/dept/index.ts
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface DeptVO {
|
||||||
|
id?: number
|
||||||
|
name: string
|
||||||
|
parentId: number
|
||||||
|
status: number
|
||||||
|
sort: number
|
||||||
|
leaderUserId: number
|
||||||
|
phone: string
|
||||||
|
email: string
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface DeptPageReqVO {
|
||||||
|
name?: string
|
||||||
|
status?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询部门(精简)列表
|
||||||
|
export const listSimpleDeptApi = async () => {
|
||||||
|
return await request.get({ url: '/system/dept/list-all-simple' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询部门列表
|
||||||
|
export const getDeptPageApi = async (params: DeptPageReqVO) => {
|
||||||
|
return await request.get({ url: '/system/dept/list', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询部门详情
|
||||||
|
export const getDeptApi = async (id: number) => {
|
||||||
|
return await request.get({ url: '/system/dept/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增部门
|
||||||
|
export const createDeptApi = async (data: DeptVO) => {
|
||||||
|
return await request.post({ url: '/system/dept/create', data: data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改部门
|
||||||
|
export const updateDeptApi = async (params: DeptVO) => {
|
||||||
|
return await request.put({ url: '/system/dept/update', data: params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除部门
|
||||||
|
export const deleteDeptApi = async (id: number) => {
|
||||||
|
return await request.delete({ url: '/system/dept/delete?id=' + id })
|
||||||
|
}
|
36
src/api/system/dict/dict.data.ts
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
import type { DictDataVO, DictDataPageReqVO, DictDataExportReqVO } from './types'
|
||||||
|
|
||||||
|
// 查询字典数据(精简)列表
|
||||||
|
export const listSimpleDictDataApi = () => {
|
||||||
|
return request.get({ url: '/system/dict-data/list-all-simple' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询字典数据列表
|
||||||
|
export const getDictDataPageApi = (params: DictDataPageReqVO) => {
|
||||||
|
return request.get({ url: '/system/dict-data/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询字典数据详情
|
||||||
|
export const getDictDataApi = (id: number) => {
|
||||||
|
return request.get({ url: '/system/dict-data/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增字典数据
|
||||||
|
export const createDictDataApi = (data: DictDataVO) => {
|
||||||
|
return request.post({ url: '/system/dict-data/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改字典数据
|
||||||
|
export const updateDictDataApi = (data: DictDataVO) => {
|
||||||
|
return request.put({ url: '/system/dict-data/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除字典数据
|
||||||
|
export const deleteDictDataApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/system/dict-data/delete?id=' + id })
|
||||||
|
}
|
||||||
|
// 导出字典类型数据
|
||||||
|
export const exportDictDataApi = (params: DictDataExportReqVO) => {
|
||||||
|
return request.get({ url: '/system/dict-data/export', params })
|
||||||
|
}
|
36
src/api/system/dict/dict.type.ts
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
import type { DictTypeVO, DictTypePageReqVO, DictTypeExportReqVO } from './types'
|
||||||
|
|
||||||
|
// 查询字典(精简)列表
|
||||||
|
export const listSimpleDictTypeApi = () => {
|
||||||
|
return request.get({ url: '/system/dict-type/list-all-simple' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询字典列表
|
||||||
|
export const getDictTypePageApi = (params: DictTypePageReqVO) => {
|
||||||
|
return request.get({ url: '/system/dict-type/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询字典详情
|
||||||
|
export const getDictTypeApi = (id: number) => {
|
||||||
|
return request.get({ url: '/system/dict-type/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增字典
|
||||||
|
export const createDictTypeApi = (data: DictTypeVO) => {
|
||||||
|
return request.post({ url: '/system/dict-type/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改字典
|
||||||
|
export const updateDictTypeApi = (data: DictTypeVO) => {
|
||||||
|
return request.put({ url: '/system/dict-type/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除字典
|
||||||
|
export const deleteDictTypeApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/system/dict-type/delete?id=' + id })
|
||||||
|
}
|
||||||
|
// 导出字典类型
|
||||||
|
export const exportDictTypeApi = (params: DictTypeExportReqVO) => {
|
||||||
|
return request.get({ url: '/system/dict-type/export', params })
|
||||||
|
}
|
46
src/api/system/dict/types.ts
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
export type DictTypeVO = {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
type: string
|
||||||
|
status: number
|
||||||
|
remark: string
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export type DictTypePageReqVO = {
|
||||||
|
name: string
|
||||||
|
type: string
|
||||||
|
status: number
|
||||||
|
createTime: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export type DictTypeExportReqVO = {
|
||||||
|
name: string
|
||||||
|
type: string
|
||||||
|
status: number
|
||||||
|
createTime: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export type DictDataVO = {
|
||||||
|
id: number
|
||||||
|
sort: number
|
||||||
|
label: string
|
||||||
|
value: string
|
||||||
|
dictType: string
|
||||||
|
status: number
|
||||||
|
colorType: string
|
||||||
|
cssClass: string
|
||||||
|
remark: string
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
export type DictDataPageReqVO = {
|
||||||
|
label: string
|
||||||
|
dictType: string
|
||||||
|
status: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export type DictDataExportReqVO = {
|
||||||
|
label: string
|
||||||
|
dictType: string
|
||||||
|
status: number
|
||||||
|
}
|
48
src/api/system/errorCode/index.ts
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface ErrorCodeVO {
|
||||||
|
id: number
|
||||||
|
type: number
|
||||||
|
applicationName: string
|
||||||
|
code: number
|
||||||
|
message: string
|
||||||
|
memo: string
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ErrorCodePageReqVO extends PageParam {
|
||||||
|
type?: number
|
||||||
|
applicationName?: string
|
||||||
|
code?: number
|
||||||
|
message?: string
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询错误码列表
|
||||||
|
export const getErrorCodePageApi = (params: ErrorCodePageReqVO) => {
|
||||||
|
return request.get({ url: '/system/error-code/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询错误码详情
|
||||||
|
export const getErrorCodeApi = (id: number) => {
|
||||||
|
return request.get({ url: '/system/error-code/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增错误码
|
||||||
|
export const createErrorCodeApi = (data: ErrorCodeVO) => {
|
||||||
|
return request.post({ url: '/system/error-code/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改错误码
|
||||||
|
export const updateErrorCodeApi = (data: ErrorCodeVO) => {
|
||||||
|
return request.put({ url: '/system/error-code/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除错误码
|
||||||
|
export const deleteErrorCodeApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/system/error-code/delete?id=' + id })
|
||||||
|
}
|
||||||
|
// 导出错误码
|
||||||
|
export const excelErrorCodeApi = (params: ErrorCodePageReqVO) => {
|
||||||
|
return request.download({ url: '/system/error-code/export-excel', params })
|
||||||
|
}
|
30
src/api/system/loginLog/index.ts
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface LoginLogVO {
|
||||||
|
id: number
|
||||||
|
logType: number
|
||||||
|
traceId: number
|
||||||
|
userId: number
|
||||||
|
userType: number
|
||||||
|
username: string
|
||||||
|
status: number
|
||||||
|
userIp: string
|
||||||
|
userAgent: string
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface LoginLogReqVO extends PageParam {
|
||||||
|
userIp?: string
|
||||||
|
username?: string
|
||||||
|
status?: boolean
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询登录日志列表
|
||||||
|
export const getLoginLogPageApi = (params: LoginLogReqVO) => {
|
||||||
|
return request.get({ url: '/system/login-log/page', params })
|
||||||
|
}
|
||||||
|
// 导出登录日志
|
||||||
|
export const exportLoginLogApi = (params: LoginLogReqVO) => {
|
||||||
|
return request.download({ url: '/system/login-log/export', params })
|
||||||
|
}
|
46
src/api/system/mail/account/index.ts
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface MailAccountVO {
|
||||||
|
id: number
|
||||||
|
mail: string
|
||||||
|
username: string
|
||||||
|
password: string
|
||||||
|
host: string
|
||||||
|
port: number
|
||||||
|
sslEnable: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface MailAccountPageReqVO extends PageParam {
|
||||||
|
mail?: string
|
||||||
|
username?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询邮箱账号列表
|
||||||
|
export const getMailAccountPageApi = async (params: MailAccountPageReqVO) => {
|
||||||
|
return await request.get({ url: '/system/mail-account/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询邮箱账号详情
|
||||||
|
export const getMailAccountApi = async (id: number) => {
|
||||||
|
return await request.get({ url: '/system/mail-account/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增邮箱账号
|
||||||
|
export const createMailAccountApi = async (data: MailAccountVO) => {
|
||||||
|
return await request.post({ url: '/system/mail-account/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改邮箱账号
|
||||||
|
export const updateMailAccountApi = async (data: MailAccountVO) => {
|
||||||
|
return await request.put({ url: '/system/mail-account/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除邮箱账号
|
||||||
|
export const deleteMailAccountApi = async (id: number) => {
|
||||||
|
return await request.delete({ url: '/system/mail-account/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得邮箱账号精简列表
|
||||||
|
export const getSimpleMailAccounts = async () => {
|
||||||
|
return request.get({ url: '/system/mail-account/list-all-simple' })
|
||||||
|
}
|
40
src/api/system/mail/log/index.ts
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface MailLogVO {
|
||||||
|
id: number
|
||||||
|
userId: number
|
||||||
|
userType: number
|
||||||
|
toMail: string
|
||||||
|
accountId: number
|
||||||
|
fromMail: string
|
||||||
|
templateId: number
|
||||||
|
templateCode: string
|
||||||
|
templateNickname: string
|
||||||
|
templateTitle: string
|
||||||
|
templateContent: string
|
||||||
|
templateParams: string
|
||||||
|
sendStatus: number
|
||||||
|
sendTime: Date
|
||||||
|
sendMessageId: string
|
||||||
|
sendException: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface MailLogPageReqVO extends PageParam {
|
||||||
|
userId?: number
|
||||||
|
userType?: number
|
||||||
|
toMail?: string
|
||||||
|
accountId?: number
|
||||||
|
templateId?: number
|
||||||
|
sendStatus?: number
|
||||||
|
sendTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询邮件日志列表
|
||||||
|
export const getMailLogPageApi = async (params: MailLogPageReqVO) => {
|
||||||
|
return await request.get({ url: '/system/mail-log/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询邮件日志详情
|
||||||
|
export const getMailLogApi = async (id: number) => {
|
||||||
|
return await request.get({ url: '/system/mail-log/get?id=' + id })
|
||||||
|
}
|
58
src/api/system/mail/template/index.ts
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface MailTemplateVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
code: string
|
||||||
|
accountId: number
|
||||||
|
nickname: string
|
||||||
|
title: string
|
||||||
|
content: string
|
||||||
|
params: string
|
||||||
|
status: number
|
||||||
|
remark: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface MailTemplatePageReqVO extends PageParam {
|
||||||
|
name?: string
|
||||||
|
code?: string
|
||||||
|
accountId?: number
|
||||||
|
status?: number
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface MailSendReqVO {
|
||||||
|
mail: string
|
||||||
|
templateCode: string
|
||||||
|
templateParams: Map<String, Object>
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询邮件模版列表
|
||||||
|
export const getMailTemplatePageApi = async (params: MailTemplatePageReqVO) => {
|
||||||
|
return await request.get({ url: '/system/mail-template/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询邮件模版详情
|
||||||
|
export const getMailTemplateApi = async (id: number) => {
|
||||||
|
return await request.get({ url: '/system/mail-template/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增邮件模版
|
||||||
|
export const createMailTemplateApi = async (data: MailTemplateVO) => {
|
||||||
|
return await request.post({ url: '/system/mail-template/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改邮件模版
|
||||||
|
export const updateMailTemplateApi = async (data: MailTemplateVO) => {
|
||||||
|
return await request.put({ url: '/system/mail-template/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除邮件模版
|
||||||
|
export const deleteMailTemplateApi = async (id: number) => {
|
||||||
|
return await request.delete({ url: '/system/mail-template/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送邮件
|
||||||
|
export const sendMailApi = (data: MailSendReqVO) => {
|
||||||
|
return request.post({ url: '/system/mail-template/send-mail', data })
|
||||||
|
}
|
54
src/api/system/menu/index.ts
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface MenuVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
permission: string
|
||||||
|
type: number
|
||||||
|
sort: number
|
||||||
|
parentId: number
|
||||||
|
path: string
|
||||||
|
icon: string
|
||||||
|
component: string
|
||||||
|
componentName?: string
|
||||||
|
status: number
|
||||||
|
visible: boolean
|
||||||
|
keepAlive: boolean
|
||||||
|
alwaysShow?: boolean
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface MenuPageReqVO {
|
||||||
|
name?: string
|
||||||
|
status?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询菜单(精简)列表
|
||||||
|
export const listSimpleMenusApi = () => {
|
||||||
|
return request.get({ url: '/system/menu/list-all-simple' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询菜单列表
|
||||||
|
export const getMenuListApi = (params: MenuPageReqVO) => {
|
||||||
|
return request.get({ url: '/system/menu/list', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取菜单详情
|
||||||
|
export const getMenuApi = (id: number) => {
|
||||||
|
return request.get({ url: '/system/menu/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增菜单
|
||||||
|
export const createMenuApi = (data: MenuVO) => {
|
||||||
|
return request.post({ url: '/system/menu/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改菜单
|
||||||
|
export const updateMenuApi = (data: MenuVO) => {
|
||||||
|
return request.put({ url: '/system/menu/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除菜单
|
||||||
|
export const deleteMenuApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/system/menu/delete?id=' + id })
|
||||||
|
}
|
42
src/api/system/notice/index.ts
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface NoticeVO {
|
||||||
|
id: number
|
||||||
|
title: string
|
||||||
|
type: number
|
||||||
|
content: string
|
||||||
|
status: number
|
||||||
|
remark: string
|
||||||
|
creator: string
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface NoticePageReqVO extends PageParam {
|
||||||
|
title?: string
|
||||||
|
status?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询公告列表
|
||||||
|
export const getNoticePageApi = (params: NoticePageReqVO) => {
|
||||||
|
return request.get({ url: '/system/notice/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询公告详情
|
||||||
|
export const getNoticeApi = (id: number) => {
|
||||||
|
return request.get({ url: '/system/notice/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增公告
|
||||||
|
export const createNoticeApi = (data: NoticeVO) => {
|
||||||
|
return request.post({ url: '/system/notice/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改公告
|
||||||
|
export const updateNoticeApi = (data: NoticeVO) => {
|
||||||
|
return request.put({ url: '/system/notice/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除公告
|
||||||
|
export const deleteNoticeApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/system/notice/delete?id=' + id })
|
||||||
|
}
|
66
src/api/system/notify/message/index.ts
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
import qs from 'qs'
|
||||||
|
|
||||||
|
export interface NotifyMessageVO {
|
||||||
|
id: number
|
||||||
|
userId: number
|
||||||
|
userType: number
|
||||||
|
templateId: number
|
||||||
|
templateCode: string
|
||||||
|
templateNickname: string
|
||||||
|
templateContent: string
|
||||||
|
templateType: number
|
||||||
|
templateParams: string
|
||||||
|
readStatus: boolean
|
||||||
|
readTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface NotifyMessagePageReqVO extends PageParam {
|
||||||
|
userId?: number
|
||||||
|
userType?: number
|
||||||
|
templateCode?: string
|
||||||
|
templateType?: number
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface NotifyMessageMyPageReqVO extends PageParam {
|
||||||
|
readStatus?: boolean
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询站内信消息列表
|
||||||
|
export const getNotifyMessagePageApi = async (params: NotifyMessagePageReqVO) => {
|
||||||
|
return await request.get({ url: '/system/notify-message/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询站内信消息详情
|
||||||
|
export const getNotifyMessageApi = async (id: number) => {
|
||||||
|
return await request.get({ url: '/system/notify-message/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得我的站内信分页
|
||||||
|
export const getMyNotifyMessagePage = async (params: NotifyMessageMyPageReqVO) => {
|
||||||
|
return await request.get({ url: '/system/notify-message/my-page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 批量标记已读
|
||||||
|
export const updateNotifyMessageRead = async (ids) => {
|
||||||
|
return await request.put({
|
||||||
|
url: '/system/notify-message/update-read?' + qs.stringify({ ids: ids }, { indices: false })
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 标记所有站内信为已读
|
||||||
|
export const updateAllNotifyMessageRead = async () => {
|
||||||
|
return await request.put({ url: '/system/notify-message/update-all-read' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取当前用户的最新站内信列表
|
||||||
|
export const getUnreadNotifyMessageListApi = async () => {
|
||||||
|
return await request.get({ url: '/system/notify-message/get-unread-list' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得当前用户的未读站内信数量
|
||||||
|
export const getUnreadNotifyMessageCountApi = async () => {
|
||||||
|
return await request.get({ url: '/system/notify-message/get-unread-count' })
|
||||||
|
}
|
55
src/api/system/notify/template/index.ts
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface NotifyTemplateVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
code: string
|
||||||
|
content: string
|
||||||
|
type: number
|
||||||
|
params: string
|
||||||
|
status: number
|
||||||
|
remark: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface NotifyTemplatePageReqVO extends PageParam {
|
||||||
|
name?: string
|
||||||
|
code?: string
|
||||||
|
status?: number
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface NotifySendReqVO {
|
||||||
|
userId: number
|
||||||
|
templateCode: string
|
||||||
|
templateParams: Map<String, Object>
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询站内信模板列表
|
||||||
|
export const getNotifyTemplatePageApi = async (params: NotifyTemplatePageReqVO) => {
|
||||||
|
return await request.get({ url: '/system/notify-template/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询站内信模板详情
|
||||||
|
export const getNotifyTemplateApi = async (id: number) => {
|
||||||
|
return await request.get({ url: '/system/notify-template/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增站内信模板
|
||||||
|
export const createNotifyTemplateApi = async (data: NotifyTemplateVO) => {
|
||||||
|
return await request.post({ url: '/system/notify-template/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改站内信模板
|
||||||
|
export const updateNotifyTemplateApi = async (data: NotifyTemplateVO) => {
|
||||||
|
return await request.put({ url: '/system/notify-template/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除站内信模板
|
||||||
|
export const deleteNotifyTemplateApi = async (id: number) => {
|
||||||
|
return await request.delete({ url: '/system/notify-template/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送站内信
|
||||||
|
export const sendNotifyApi = (data: NotifySendReqVO) => {
|
||||||
|
return request.post({ url: '/system/notify-template/send-notify', data })
|
||||||
|
}
|
51
src/api/system/oauth2/client.ts
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface OAuth2ClientVO {
|
||||||
|
id: number
|
||||||
|
clientId: string
|
||||||
|
secret: string
|
||||||
|
name: string
|
||||||
|
logo: string
|
||||||
|
description: string
|
||||||
|
status: number
|
||||||
|
accessTokenValiditySeconds: number
|
||||||
|
refreshTokenValiditySeconds: number
|
||||||
|
redirectUris: string[]
|
||||||
|
autoApprove: boolean
|
||||||
|
authorizedGrantTypes: string[]
|
||||||
|
scopes: string[]
|
||||||
|
authorities: string[]
|
||||||
|
resourceIds: string[]
|
||||||
|
additionalInformation: string
|
||||||
|
isAdditionalInformationJson: boolean
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OAuth2ClientPageReqVO extends PageParam {
|
||||||
|
name?: string
|
||||||
|
status?: number
|
||||||
|
}
|
||||||
|
// 查询 OAuth2列表
|
||||||
|
export const getOAuth2ClientPageApi = (params: OAuth2ClientPageReqVO) => {
|
||||||
|
return request.get({ url: '/system/oauth2-client/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询 OAuth2详情
|
||||||
|
export const getOAuth2ClientApi = (id: number) => {
|
||||||
|
return request.get({ url: '/system/oauth2-client/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增 OAuth2
|
||||||
|
export const createOAuth2ClientApi = (data: OAuth2ClientVO) => {
|
||||||
|
return request.post({ url: '/system/oauth2-client/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改 OAuth2
|
||||||
|
export const updateOAuth2ClientApi = (data: OAuth2ClientVO) => {
|
||||||
|
return request.put({ url: '/system/oauth2-client/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除 OAuth2
|
||||||
|
export const deleteOAuth2ClientApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/system/oauth2-client/delete?id=' + id })
|
||||||
|
}
|
28
src/api/system/oauth2/token.ts
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface OAuth2TokenVO {
|
||||||
|
id: number
|
||||||
|
accessToken: string
|
||||||
|
refreshToken: string
|
||||||
|
userId: number
|
||||||
|
userType: number
|
||||||
|
clientId: string
|
||||||
|
createTime: Date
|
||||||
|
expiresTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OAuth2TokenPageReqVO extends PageParam {
|
||||||
|
userId?: number
|
||||||
|
userType?: number
|
||||||
|
clientId?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询 token列表
|
||||||
|
export const getAccessTokenPageApi = (params: OAuth2TokenPageReqVO) => {
|
||||||
|
return request.get({ url: '/system/oauth2-token/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除 token
|
||||||
|
export const deleteAccessTokenApi = (accessToken: number) => {
|
||||||
|
return request.delete({ url: '/system/oauth2-token/delete?accessToken=' + accessToken })
|
||||||
|
}
|
41
src/api/system/operatelog/index.ts
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export type OperateLogVO = {
|
||||||
|
id: number
|
||||||
|
userNickname: string
|
||||||
|
traceId: string
|
||||||
|
userId: number
|
||||||
|
module: string
|
||||||
|
name: string
|
||||||
|
type: number
|
||||||
|
content: string
|
||||||
|
exts: Map<String, Object>
|
||||||
|
requestMethod: string
|
||||||
|
requestUrl: string
|
||||||
|
userIp: string
|
||||||
|
userAgent: string
|
||||||
|
javaMethod: string
|
||||||
|
javaMethodArgs: string
|
||||||
|
startTime: Date
|
||||||
|
duration: number
|
||||||
|
resultCode: number
|
||||||
|
resultMsg: string
|
||||||
|
resultData: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OperateLogPageReqVO extends PageParam {
|
||||||
|
module?: string
|
||||||
|
userNickname?: string
|
||||||
|
type?: number
|
||||||
|
success?: boolean
|
||||||
|
startTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询操作日志列表
|
||||||
|
export const getOperateLogPageApi = (params: OperateLogPageReqVO) => {
|
||||||
|
return request.get({ url: '/system/operate-log/page', params })
|
||||||
|
}
|
||||||
|
// 导出操作日志
|
||||||
|
export const exportOperateLogApi = (params: OperateLogPageReqVO) => {
|
||||||
|
return request.download({ url: '/system/operate-log/export', params })
|
||||||
|
}
|
42
src/api/system/permission/index.ts
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface PermissionAssignUserRoleReqVO {
|
||||||
|
userId: number
|
||||||
|
roleIds: number[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PermissionAssignRoleMenuReqVO {
|
||||||
|
roleId: number
|
||||||
|
menuIds: number[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PermissionAssignRoleDataScopeReqVO {
|
||||||
|
roleId: number
|
||||||
|
dataScope: number
|
||||||
|
dataScopeDeptIds: number[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询角色拥有的菜单权限
|
||||||
|
export const listRoleMenusApi = async (roleId: number) => {
|
||||||
|
return await request.get({ url: '/system/permission/list-role-resources?roleId=' + roleId })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 赋予角色菜单权限
|
||||||
|
export const assignRoleMenuApi = async (data: PermissionAssignRoleMenuReqVO) => {
|
||||||
|
return await request.post({ url: '/system/permission/assign-role-menu', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 赋予角色数据权限
|
||||||
|
export const assignRoleDataScopeApi = async (data: PermissionAssignRoleDataScopeReqVO) => {
|
||||||
|
return await request.post({ url: '/system/permission/assign-role-data-scope', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询用户拥有的角色数组
|
||||||
|
export const listUserRolesApi = async (userId: number) => {
|
||||||
|
return await request.get({ url: '/system/permission/list-user-roles?userId=' + userId })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 赋予用户角色
|
||||||
|
export const aassignUserRoleApi = async (data: PermissionAssignUserRoleReqVO) => {
|
||||||
|
return await request.post({ url: '/system/permission/assign-user-role', data })
|
||||||
|
}
|
58
src/api/system/post/index.ts
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface PostVO {
|
||||||
|
id?: number
|
||||||
|
name: string
|
||||||
|
code: string
|
||||||
|
sort: number
|
||||||
|
status: number
|
||||||
|
remark: string
|
||||||
|
createTime?: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PostPageReqVO extends PageParam {
|
||||||
|
code?: string
|
||||||
|
name?: string
|
||||||
|
status?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PostExportReqVO {
|
||||||
|
code?: string
|
||||||
|
name?: string
|
||||||
|
status?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询岗位列表
|
||||||
|
export const getPostPageApi = async (params: PostPageReqVO) => {
|
||||||
|
return await request.get({ url: '/system/post/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取岗位精简信息列表
|
||||||
|
export const listSimplePostsApi = async () => {
|
||||||
|
return await request.get({ url: '/system/post/list-all-simple' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询岗位详情
|
||||||
|
export const getPostApi = async (id: number) => {
|
||||||
|
return await request.get({ url: '/system/post/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增岗位
|
||||||
|
export const createPostApi = async (data: PostVO) => {
|
||||||
|
return await request.post({ url: '/system/post/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改岗位
|
||||||
|
export const updatePostApi = async (data: PostVO) => {
|
||||||
|
return await request.put({ url: '/system/post/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除岗位
|
||||||
|
export const deletePostApi = async (id: number) => {
|
||||||
|
return await request.delete({ url: '/system/post/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出岗位
|
||||||
|
export const exportPostApi = async (params: PostExportReqVO) => {
|
||||||
|
return await request.download({ url: '/system/post/export', params })
|
||||||
|
}
|
58
src/api/system/role/index.ts
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface RoleVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
code: string
|
||||||
|
sort: number
|
||||||
|
status: number
|
||||||
|
type: number
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RolePageReqVO extends PageParam {
|
||||||
|
name?: string
|
||||||
|
code?: string
|
||||||
|
status?: number
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UpdateStatusReqVO {
|
||||||
|
id: number
|
||||||
|
status: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询角色列表
|
||||||
|
export const getRolePageApi = async (params: RolePageReqVO) => {
|
||||||
|
return await request.get({ url: '/system/role/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询角色(精简)列表
|
||||||
|
export const listSimpleRolesApi = async () => {
|
||||||
|
return await request.get({ url: '/system/role/list-all-simple' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询角色详情
|
||||||
|
export const getRoleApi = async (id: number) => {
|
||||||
|
return await request.get({ url: '/system/role/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增角色
|
||||||
|
export const createRoleApi = async (data: RoleVO) => {
|
||||||
|
return await request.post({ url: '/system/role/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改角色
|
||||||
|
export const updateRoleApi = async (data: RoleVO) => {
|
||||||
|
return await request.put({ url: '/system/role/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改角色状态
|
||||||
|
export const updateRoleStatusApi = async (data: UpdateStatusReqVO) => {
|
||||||
|
return await request.put({ url: '/system/role/update-status', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除角色
|
||||||
|
export const deleteRoleApi = async (id: number) => {
|
||||||
|
return await request.delete({ url: '/system/role/delete?id=' + id })
|
||||||
|
}
|
64
src/api/system/sensitiveWord/index.ts
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface SensitiveWordVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
status: number
|
||||||
|
description: string
|
||||||
|
tags: string[]
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SensitiveWordPageReqVO extends PageParam {
|
||||||
|
name?: string
|
||||||
|
tag?: string
|
||||||
|
status?: number
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SensitiveWordExportReqVO {
|
||||||
|
name?: string
|
||||||
|
tag?: string
|
||||||
|
status?: number
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询敏感词列表
|
||||||
|
export const getSensitiveWordPageApi = (params: SensitiveWordPageReqVO) => {
|
||||||
|
return request.get({ url: '/system/sensitive-word/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询敏感词详情
|
||||||
|
export const getSensitiveWordApi = (id: number) => {
|
||||||
|
return request.get({ url: '/system/sensitive-word/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增敏感词
|
||||||
|
export const createSensitiveWordApi = (data: SensitiveWordVO) => {
|
||||||
|
return request.post({ url: '/system/sensitive-word/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改敏感词
|
||||||
|
export const updateSensitiveWordApi = (data: SensitiveWordVO) => {
|
||||||
|
return request.put({ url: '/system/sensitive-word/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除敏感词
|
||||||
|
export const deleteSensitiveWordApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/system/sensitive-word/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出敏感词
|
||||||
|
export const exportSensitiveWordApi = (params: SensitiveWordExportReqVO) => {
|
||||||
|
return request.download({ url: '/system/sensitive-word/export-excel', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取所有敏感词的标签数组
|
||||||
|
export const getSensitiveWordTagsApi = () => {
|
||||||
|
return request.get({ url: '/system/sensitive-word/get-tags' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得文本所包含的不合法的敏感词数组
|
||||||
|
export const validateTextApi = (id: number) => {
|
||||||
|
return request.get({ url: '/system/sensitive-word/validate-text?' + id })
|
||||||
|
}
|
50
src/api/system/sms/smsChannel/index.ts
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface SmsChannelVO {
|
||||||
|
id: number
|
||||||
|
code: string
|
||||||
|
status: number
|
||||||
|
signature: string
|
||||||
|
remark: string
|
||||||
|
apiKey: string
|
||||||
|
apiSecret: string
|
||||||
|
callbackUrl: string
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SmsChannelPageReqVO extends PageParam {
|
||||||
|
signature?: string
|
||||||
|
code?: string
|
||||||
|
status?: number
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询短信渠道列表
|
||||||
|
export const getSmsChannelPageApi = (params: SmsChannelPageReqVO) => {
|
||||||
|
return request.get({ url: '/system/sms-channel/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得短信渠道精简列表
|
||||||
|
export function getSimpleSmsChannels() {
|
||||||
|
return request.get({ url: '/system/sms-channel/list-all-simple' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询短信渠道详情
|
||||||
|
export const getSmsChannelApi = (id: number) => {
|
||||||
|
return request.get({ url: '/system/sms-channel/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增短信渠道
|
||||||
|
export const createSmsChannelApi = (data: SmsChannelVO) => {
|
||||||
|
return request.post({ url: '/system/sms-channel/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改短信渠道
|
||||||
|
export const updateSmsChannelApi = (data: SmsChannelVO) => {
|
||||||
|
return request.put({ url: '/system/sms-channel/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除短信渠道
|
||||||
|
export const deleteSmsChannelApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/system/sms-channel/delete?id=' + id })
|
||||||
|
}
|
57
src/api/system/sms/smsLog/index.ts
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface SmsLogVO {
|
||||||
|
id: number
|
||||||
|
channelId: number
|
||||||
|
channelCode: string
|
||||||
|
templateId: number
|
||||||
|
templateCode: string
|
||||||
|
templateType: number
|
||||||
|
templateContent: string
|
||||||
|
templateParams: Map<string, object>
|
||||||
|
mobile: string
|
||||||
|
userId: number
|
||||||
|
userType: number
|
||||||
|
sendStatus: number
|
||||||
|
sendTime: Date
|
||||||
|
sendCode: number
|
||||||
|
sendMsg: string
|
||||||
|
apiSendCode: string
|
||||||
|
apiSendMsg: string
|
||||||
|
apiRequestId: string
|
||||||
|
apiSerialNo: string
|
||||||
|
receiveStatus: number
|
||||||
|
receiveTime: Date
|
||||||
|
apiReceiveCode: string
|
||||||
|
apiReceiveMsg: string
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SmsLogPageReqVO extends PageParam {
|
||||||
|
channelId?: number
|
||||||
|
templateId?: number
|
||||||
|
mobile?: string
|
||||||
|
sendStatus?: number
|
||||||
|
sendTime?: Date[]
|
||||||
|
receiveStatus?: number
|
||||||
|
receiveTime?: Date[]
|
||||||
|
}
|
||||||
|
export interface SmsLogExportReqVO {
|
||||||
|
channelId?: number
|
||||||
|
templateId?: number
|
||||||
|
mobile?: string
|
||||||
|
sendStatus?: number
|
||||||
|
sendTime?: Date[]
|
||||||
|
receiveStatus?: number
|
||||||
|
receiveTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询短信日志列表
|
||||||
|
export const getSmsLogPageApi = (params: SmsLogPageReqVO) => {
|
||||||
|
return request.get({ url: '/system/sms-log/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出短信日志
|
||||||
|
export const exportSmsLogApi = (params: SmsLogExportReqVO) => {
|
||||||
|
return request.download({ url: '/system/sms-log/export', params })
|
||||||
|
}
|
80
src/api/system/sms/smsTemplate/index.ts
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface SmsTemplateVO {
|
||||||
|
id: number
|
||||||
|
type: number
|
||||||
|
status: number
|
||||||
|
code: string
|
||||||
|
name: string
|
||||||
|
content: string
|
||||||
|
remark: string
|
||||||
|
apiTemplateId: string
|
||||||
|
channelId: number
|
||||||
|
channelCode: string
|
||||||
|
params: string[]
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SendSmsReqVO {
|
||||||
|
mobile: string
|
||||||
|
templateCode: string
|
||||||
|
templateParams: Map<String, Object>
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SmsTemplatePageReqVO {
|
||||||
|
type?: number
|
||||||
|
status?: number
|
||||||
|
code?: string
|
||||||
|
content?: string
|
||||||
|
apiTemplateId?: string
|
||||||
|
channelId?: number
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SmsTemplateExportReqVO {
|
||||||
|
type?: number
|
||||||
|
status?: number
|
||||||
|
code?: string
|
||||||
|
content?: string
|
||||||
|
apiTemplateId?: string
|
||||||
|
channelId?: number
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询短信模板列表
|
||||||
|
export const getSmsTemplatePageApi = (params: SmsTemplatePageReqVO) => {
|
||||||
|
return request.get({ url: '/system/sms-template/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询短信模板详情
|
||||||
|
export const getSmsTemplateApi = (id: number) => {
|
||||||
|
return request.get({ url: '/system/sms-template/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增短信模板
|
||||||
|
export const createSmsTemplateApi = (data: SmsTemplateVO) => {
|
||||||
|
return request.post({ url: '/system/sms-template/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改短信模板
|
||||||
|
export const updateSmsTemplateApi = (data: SmsTemplateVO) => {
|
||||||
|
return request.put({ url: '/system/sms-template/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除短信模板
|
||||||
|
export const deleteSmsTemplateApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/system/sms-template/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送短信
|
||||||
|
export const sendSmsApi = (data: SendSmsReqVO) => {
|
||||||
|
return request.post({ url: '/system/sms-template/send-sms', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出短信模板
|
||||||
|
export const exportPostApi = (params: SmsTemplateExportReqVO) => {
|
||||||
|
return request.download({
|
||||||
|
url: '/system/sms-template/export-excel',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
62
src/api/system/tenant/index.ts
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface TenantVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
contactName: string
|
||||||
|
contactMobile: string
|
||||||
|
status: number
|
||||||
|
domain: string
|
||||||
|
packageId: number
|
||||||
|
username: string
|
||||||
|
password: string
|
||||||
|
expireTime: Date
|
||||||
|
accountCount: number
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface TenantPageReqVO extends PageParam {
|
||||||
|
name?: string
|
||||||
|
contactName?: string
|
||||||
|
contactMobile?: string
|
||||||
|
status?: number
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface TenantExportReqVO {
|
||||||
|
name?: string
|
||||||
|
contactName?: string
|
||||||
|
contactMobile?: string
|
||||||
|
status?: number
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询租户列表
|
||||||
|
export const getTenantPageApi = (params: TenantPageReqVO) => {
|
||||||
|
return request.get({ url: '/system/tenant/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询租户详情
|
||||||
|
export const getTenantApi = (id: number) => {
|
||||||
|
return request.get({ url: '/system/tenant/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增租户
|
||||||
|
export const createTenantApi = (data: TenantVO) => {
|
||||||
|
return request.post({ url: '/system/tenant/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改租户
|
||||||
|
export const updateTenantApi = (data: TenantVO) => {
|
||||||
|
return request.put({ url: '/system/tenant/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除租户
|
||||||
|
export const deleteTenantApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/system/tenant/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出租户
|
||||||
|
export const exportTenantApi = (params: TenantExportReqVO) => {
|
||||||
|
return request.download({ url: '/system/tenant/export-excel', params })
|
||||||
|
}
|
49
src/api/system/tenantPackage/index.ts
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface TenantPackageVO {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
status: number
|
||||||
|
remark: string
|
||||||
|
creator: string
|
||||||
|
updater: string
|
||||||
|
updateTime: string
|
||||||
|
menuIds: number[]
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface TenantPackagePageReqVO extends PageParam {
|
||||||
|
name?: string
|
||||||
|
status?: number
|
||||||
|
remark?: string
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询租户套餐列表
|
||||||
|
export const getTenantPackageTypePageApi = (params: TenantPackagePageReqVO) => {
|
||||||
|
return request.get({ url: '/system/tenant-package/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获得租户
|
||||||
|
export const getTenantPackageApi = (id: number) => {
|
||||||
|
return request.get({ url: '/system/tenant-package/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增租户套餐
|
||||||
|
export const createTenantPackageTypeApi = (data: TenantPackageVO) => {
|
||||||
|
return request.post({ url: '/system/tenant-package/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改租户套餐
|
||||||
|
export const updateTenantPackageTypeApi = (data: TenantPackageVO) => {
|
||||||
|
return request.put({ url: '/system/tenant-package/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除租户套餐
|
||||||
|
export const deleteTenantPackageTypeApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/system/tenant-package/delete?id=' + id })
|
||||||
|
}
|
||||||
|
// 获取租户套餐精简信息列表
|
||||||
|
export const getTenantPackageList = () => {
|
||||||
|
return request.get({ url: '/system/tenant-package/get-simple-list' })
|
||||||
|
}
|
91
src/api/system/user/index.ts
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface UserVO {
|
||||||
|
id: number
|
||||||
|
username: string
|
||||||
|
nickname: string
|
||||||
|
deptId: number
|
||||||
|
postIds: string[]
|
||||||
|
email: string
|
||||||
|
mobile: string
|
||||||
|
sex: number
|
||||||
|
avatar: string
|
||||||
|
loginIp: string
|
||||||
|
status: number
|
||||||
|
remark: string
|
||||||
|
loginDate: Date
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UserPageReqVO extends PageParam {
|
||||||
|
deptId?: number
|
||||||
|
username?: string
|
||||||
|
mobile?: string
|
||||||
|
status?: number
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UserExportReqVO {
|
||||||
|
code?: string
|
||||||
|
name?: string
|
||||||
|
status?: number
|
||||||
|
createTime?: Date[]
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询用户管理列表
|
||||||
|
export const getUserPageApi = (params: UserPageReqVO) => {
|
||||||
|
return request.get({ url: '/system/user/page', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询用户详情
|
||||||
|
export const getUserApi = (id: number) => {
|
||||||
|
return request.get({ url: '/system/user/get?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增用户
|
||||||
|
export const createUserApi = (data: UserVO) => {
|
||||||
|
return request.post({ url: '/system/user/create', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改用户
|
||||||
|
export const updateUserApi = (data: UserVO) => {
|
||||||
|
return request.put({ url: '/system/user/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除用户
|
||||||
|
export const deleteUserApi = (id: number) => {
|
||||||
|
return request.delete({ url: '/system/user/delete?id=' + id })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出用户
|
||||||
|
export const exportUserApi = (params: UserExportReqVO) => {
|
||||||
|
return request.download({ url: '/system/user/export', params })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 下载用户导入模板
|
||||||
|
export const importUserTemplateApi = () => {
|
||||||
|
return request.download({ url: '/system/user/get-import-template' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 用户密码重置
|
||||||
|
export const resetUserPwdApi = (id: number, password: string) => {
|
||||||
|
const data = {
|
||||||
|
id,
|
||||||
|
password
|
||||||
|
}
|
||||||
|
return request.put({ url: '/system/user/update-password', data: data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 用户状态修改
|
||||||
|
export const updateUserStatusApi = (id: number, status: number) => {
|
||||||
|
const data = {
|
||||||
|
id,
|
||||||
|
status
|
||||||
|
}
|
||||||
|
return request.put({ url: '/system/user/update-status', data: data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取用户精简信息列表
|
||||||
|
export const getListSimpleUsersApi = () => {
|
||||||
|
return request.get({ url: '/system/user/list-all-simple' })
|
||||||
|
}
|
77
src/api/system/user/profile.ts
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
export interface ProfileDept {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
}
|
||||||
|
export interface ProfileRole {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
}
|
||||||
|
export interface ProfilePost {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
}
|
||||||
|
export interface SocialUser {
|
||||||
|
id: number
|
||||||
|
type: number
|
||||||
|
openid: string
|
||||||
|
token: string
|
||||||
|
rawTokenInfo: string
|
||||||
|
nickname: string
|
||||||
|
avatar: string
|
||||||
|
rawUserInfo: string
|
||||||
|
code: string
|
||||||
|
state: string
|
||||||
|
}
|
||||||
|
export interface ProfileVO {
|
||||||
|
id: number
|
||||||
|
username: string
|
||||||
|
nickname: string
|
||||||
|
dept: ProfileDept
|
||||||
|
roles: ProfileRole[]
|
||||||
|
posts: ProfilePost[]
|
||||||
|
socialUsers: SocialUser[]
|
||||||
|
email: string
|
||||||
|
mobile: string
|
||||||
|
sex: number
|
||||||
|
avatar: string
|
||||||
|
status: number
|
||||||
|
remark: string
|
||||||
|
loginIp: string
|
||||||
|
loginDate: Date
|
||||||
|
createTime: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface UserProfileUpdateReqVO {
|
||||||
|
nickname: string
|
||||||
|
email: string
|
||||||
|
mobile: string
|
||||||
|
sex: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询用户个人信息
|
||||||
|
export const getUserProfileApi = () => {
|
||||||
|
return request.get({ url: '/system/user/profile/get' })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改用户个人信息
|
||||||
|
export const updateUserProfileApi = (data: UserProfileUpdateReqVO) => {
|
||||||
|
return request.put({ url: '/system/user/profile/update', data })
|
||||||
|
}
|
||||||
|
|
||||||
|
// 用户密码重置
|
||||||
|
export const updateUserPwdApi = (oldPassword: string, newPassword: string) => {
|
||||||
|
return request.put({
|
||||||
|
url: '/system/user/profile/update-password',
|
||||||
|
data: {
|
||||||
|
oldPassword: oldPassword,
|
||||||
|
newPassword: newPassword
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 用户头像上传
|
||||||
|
export const uploadAvatarApi = (data) => {
|
||||||
|
return request.upload({ url: '/system/user/profile/update-avatar', data: data })
|
||||||
|
}
|
31
src/api/system/user/socialUser.ts
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// 社交绑定,使用 code 授权码
|
||||||
|
export const socialBind = (type, code, state) => {
|
||||||
|
return request.post({
|
||||||
|
url: '/system/social-user/bind',
|
||||||
|
data: {
|
||||||
|
type,
|
||||||
|
code,
|
||||||
|
state
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 取消社交绑定
|
||||||
|
export const socialUnbind = (type, openid) => {
|
||||||
|
return request.delete({
|
||||||
|
url: '/system/social-user/unbind',
|
||||||
|
data: {
|
||||||
|
type,
|
||||||
|
openid
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 社交授权的跳转
|
||||||
|
export const socialAuthRedirect = (type, redirectUri) => {
|
||||||
|
return request.get({
|
||||||
|
url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri
|
||||||
|
})
|
||||||
|
}
|
BIN
src/assets/imgs/avatar.gif
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
src/assets/imgs/avatar.jpg
Normal file
After Width: | Height: | Size: 6.1 KiB |
BIN
src/assets/imgs/logo.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
1
src/assets/svgs/403.svg
Normal file
After Width: | Height: | Size: 13 KiB |
1
src/assets/svgs/404.svg
Normal file
After Width: | Height: | Size: 13 KiB |
1
src/assets/svgs/500.svg
Normal file
After Width: | Height: | Size: 19 KiB |
1
src/assets/svgs/icon.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M115.147.062a13 13 0 014.94.945c1.55.63 2.907 1.526 4.069 2.688a13.148 13.148 0 012.761 4.069c.678 1.55 1.017 3.245 1.017 5.086v102.3c0 3.681-1.187 6.733-3.56 9.155-2.373 2.422-5.352 3.633-8.937 3.633H12.992c-3.875 0-7-1.26-9.373-3.779-2.373-2.518-3.56-5.667-3.56-9.445V12.704c0-3.39 1.163-6.345 3.488-8.863C5.872 1.32 8.972.062 12.847.062h102.3zM81.434 109.047c1.744 0 3.003-.412 3.778-1.235.775-.824 1.163-1.914 1.163-3.27 0-1.26-.388-2.325-1.163-3.197-.775-.872-2.034-1.307-3.778-1.307H72.57c.097-.194.145-.485.145-.872V27.09h9.01c1.743 0 2.954-.436 3.633-1.308.678-.872 1.017-1.938 1.017-3.197 0-1.26-.34-2.325-1.017-3.197-.679-.872-1.89-1.308-3.633-1.308H46.268c-1.743 0-2.954.436-3.632 1.308-.678.872-1.018 1.938-1.018 3.197 0 1.26.34 2.325 1.018 3.197.678.872 1.889 1.308 3.632 1.308h8.138v72.075c0 .193.024.339.073.436.048.096.072.242.072.436H46.56c-1.744 0-3.003.435-3.778 1.307-.775.872-1.163 1.938-1.163 3.197 0 1.356.388 2.446 1.163 3.27.775.823 2.034 1.235 3.778 1.235h34.875z"/></svg>
|
After Width: | Height: | Size: 1.0 KiB |