项目初始化
15
.editorconfig
Normal file
@@ -0,0 +1,15 @@
|
||||
# http://editorconfig.org
|
||||
root = true
|
||||
|
||||
# 表示所有文件适用
|
||||
[*]
|
||||
charset = utf-8 # 设置文件字符集为 utf-8
|
||||
end_of_line = lf # 控制换行类型(lf | cr | crlf)
|
||||
indent_style = space # 缩进风格(tab | space)
|
||||
indent_size = 2 # 缩进大小
|
||||
insert_final_newline = true # 始终在文件末尾插入一个新行
|
||||
|
||||
# 表示仅 md 文件适用以下规则
|
||||
[*.md]
|
||||
max_line_length = off # 关闭最大行长度限制
|
||||
trim_trailing_whitespace = false # 关闭末尾空格修剪
|
||||
19
.env.development
Normal file
@@ -0,0 +1,19 @@
|
||||
# 应用端口
|
||||
VITE_APP_PORT=3000
|
||||
# 项目名称
|
||||
VITE_APP_TITLE=vue3-element-admin
|
||||
# 代理前缀
|
||||
VITE_APP_BASE_API=/dev-api
|
||||
|
||||
# 生产环境配置
|
||||
VITE_APP_ENV = 'development'
|
||||
|
||||
# 接口地址
|
||||
# VITE_APP_API_URL=http://192.168.0.61:8007 # 本地
|
||||
VITE_APP_API_URL=http://26.151.107.60:8007 # 本地
|
||||
|
||||
# WebSocket 端点(不配置则关闭),线上 ws://api.youlai.tech/ws ,本地 ws://localhost:8989/ws
|
||||
VITE_APP_WS_ENDPOINT=
|
||||
|
||||
# 启用 Mock 服务
|
||||
VITE_MOCK_DEV_SERVER=false
|
||||
19
.env.production
Normal file
@@ -0,0 +1,19 @@
|
||||
# 应用端口
|
||||
VITE_APP_PORT=3000
|
||||
# 项目名称
|
||||
VITE_APP_TITLE=vue3-element-admin
|
||||
# 代理前缀
|
||||
VITE_APP_BASE_API=/dev-api
|
||||
|
||||
# 生产环境配置
|
||||
VITE_APP_ENV = 'production'
|
||||
|
||||
# 接口地址
|
||||
VITE_APP_API_URL=http://8.137.99.82:9000 # 线上
|
||||
# VITE_APP_API_URL=http://localhost:8989 # 本地
|
||||
|
||||
# WebSocket 端点(不配置则关闭),线上 ws://api.youlai.tech/ws ,本地 ws://localhost:8989/ws
|
||||
VITE_APP_WS_ENDPOINT=
|
||||
|
||||
# 启用 Mock 服务
|
||||
VITE_MOCK_DEV_SERVER=false
|
||||
316
.eslintrc-auto-import.json
Normal file
@@ -0,0 +1,316 @@
|
||||
{
|
||||
"globals": {
|
||||
"Component": true,
|
||||
"ComponentPublicInstance": true,
|
||||
"ComputedRef": true,
|
||||
"EffectScope": true,
|
||||
"ElMessage": true,
|
||||
"ElMessageBox": true,
|
||||
"ElNotification": true,
|
||||
"InjectionKey": true,
|
||||
"PropType": true,
|
||||
"Ref": true,
|
||||
"VNode": 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,
|
||||
"createReusableTemplate": true,
|
||||
"createSharedComposable": true,
|
||||
"createTemplatePromise": 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,
|
||||
"toValue": true,
|
||||
"triggerRef": true,
|
||||
"tryOnBeforeMount": true,
|
||||
"tryOnBeforeUnmount": true,
|
||||
"tryOnMounted": true,
|
||||
"tryOnScopeDispose": true,
|
||||
"tryOnUnmounted": true,
|
||||
"unref": true,
|
||||
"unrefElement": true,
|
||||
"until": true,
|
||||
"useActiveElement": true,
|
||||
"useAnimate": true,
|
||||
"useArrayDifference": true,
|
||||
"useArrayEvery": true,
|
||||
"useArrayFilter": true,
|
||||
"useArrayFind": true,
|
||||
"useArrayFindIndex": true,
|
||||
"useArrayFindLast": true,
|
||||
"useArrayIncludes": true,
|
||||
"useArrayJoin": true,
|
||||
"useArrayMap": true,
|
||||
"useArrayReduce": true,
|
||||
"useArraySome": true,
|
||||
"useArrayUnique": true,
|
||||
"useAsyncQueue": true,
|
||||
"useAsyncState": true,
|
||||
"useAttrs": true,
|
||||
"useBase64": true,
|
||||
"useBattery": true,
|
||||
"useBluetooth": true,
|
||||
"useBreakpoints": true,
|
||||
"useBroadcastChannel": true,
|
||||
"useBrowserLocation": true,
|
||||
"useCached": true,
|
||||
"useClipboard": true,
|
||||
"useCloned": 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,
|
||||
"useParentElement": true,
|
||||
"usePerformanceObserver": true,
|
||||
"usePermission": true,
|
||||
"usePointer": true,
|
||||
"usePointerLock": true,
|
||||
"usePointerSwipe": true,
|
||||
"usePreferredColorScheme": true,
|
||||
"usePreferredContrast": true,
|
||||
"usePreferredDark": true,
|
||||
"usePreferredLanguages": true,
|
||||
"usePreferredReducedMotion": true,
|
||||
"usePrevious": true,
|
||||
"useRafFn": true,
|
||||
"useRefHistory": true,
|
||||
"useResizeObserver": true,
|
||||
"useScreenOrientation": true,
|
||||
"useScreenSafeArea": true,
|
||||
"useScriptTag": true,
|
||||
"useScroll": true,
|
||||
"useScrollLock": true,
|
||||
"useSessionStorage": true,
|
||||
"useShare": true,
|
||||
"useSlots": true,
|
||||
"useSorted": 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,
|
||||
"useToNumber": true,
|
||||
"useToString": 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,
|
||||
"watchDeep": true,
|
||||
"watchEffect": true,
|
||||
"watchIgnorable": true,
|
||||
"watchImmediate": true,
|
||||
"watchOnce": true,
|
||||
"watchPausable": true,
|
||||
"watchPostEffect": true,
|
||||
"watchSyncEffect": true,
|
||||
"watchThrottled": true,
|
||||
"watchTriggerable": true,
|
||||
"watchWithFilter": true,
|
||||
"useRoute": true,
|
||||
"useRouter": true,
|
||||
"storeToRefs": true,
|
||||
"whenever": true,
|
||||
"DirectiveBinding": true,
|
||||
"ExtractDefaultPropTypes": true,
|
||||
"ExtractPropTypes": true,
|
||||
"ExtractPublicPropTypes": true,
|
||||
"MaybeRef": true,
|
||||
"MaybeRefOrGetter": true,
|
||||
"WritableComputedRef": true,
|
||||
"acceptHMRUpdate": true,
|
||||
"createPinia": true,
|
||||
"defineStore": true,
|
||||
"getActivePinia": true,
|
||||
"injectLocal": true,
|
||||
"mapActions": true,
|
||||
"mapGetters": true,
|
||||
"mapState": true,
|
||||
"mapStores": true,
|
||||
"mapWritableState": true,
|
||||
"onBeforeRouteLeave": true,
|
||||
"onBeforeRouteUpdate": true,
|
||||
"onWatcherCleanup": true,
|
||||
"provideLocal": true,
|
||||
"setActivePinia": true,
|
||||
"setMapStoreSuffix": true,
|
||||
"useClipboardItems": true,
|
||||
"useI18n": true,
|
||||
"useId": true,
|
||||
"useLink": true,
|
||||
"useModel": true,
|
||||
"useTemplateRef": true
|
||||
}
|
||||
}
|
||||
20
.gitignore
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
node_modules
|
||||
.DS_Store
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
.history
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.local
|
||||
|
||||
stats.html
|
||||
pnpm-lock.yaml
|
||||
package-lock.json
|
||||
.stylelintcache
|
||||
.eslintcache
|
||||
12
.prettierignore
Normal file
@@ -0,0 +1,12 @@
|
||||
dist
|
||||
node_modules
|
||||
public
|
||||
.husky
|
||||
.vscode
|
||||
.idea
|
||||
*.sh
|
||||
*.md
|
||||
|
||||
src/assets
|
||||
stats.html
|
||||
pnpm-lock.yaml
|
||||
41
.prettierrc.yaml
Normal file
@@ -0,0 +1,41 @@
|
||||
# 在单参数箭头函数中始终添加括号
|
||||
arrowParens: "always"
|
||||
# JSX 多行元素的闭合标签另起一行
|
||||
bracketSameLine: false
|
||||
# 对象字面量中的括号之间添加空格
|
||||
bracketSpacing: true
|
||||
# 自动格式化嵌入的代码(如 Markdown 和 HTML 内的代码)
|
||||
embeddedLanguageFormatting: "auto"
|
||||
# 忽略 HTML 空白敏感度,将空白视为非重要内容
|
||||
htmlWhitespaceSensitivity: "ignore"
|
||||
# 不插入 @prettier 的 pragma 注释
|
||||
insertPragma: false
|
||||
# 在 JSX 中使用双引号
|
||||
jsxSingleQuote: false
|
||||
# 每行代码的最大长度限制为 100 字符
|
||||
printWidth: 100
|
||||
# 在 Markdown 中保留原有的换行格式
|
||||
proseWrap: "preserve"
|
||||
# 仅在必要时添加对象属性的引号
|
||||
quoteProps: "as-needed"
|
||||
# 不要求文件开头插入 @prettier 的 pragma 注释
|
||||
requirePragma: false
|
||||
# 在语句末尾添加分号
|
||||
semi: false
|
||||
# 使用双引号而不是单引号
|
||||
singleQuote: true
|
||||
# 缩进使用 2 个空格
|
||||
tabWidth: 2
|
||||
# 在多行元素的末尾添加逗号(ES5 支持的对象、数组等)
|
||||
trailingComma: "none"
|
||||
# 使用空格而不是制表符缩进
|
||||
useTabs: false
|
||||
# Vue 文件中的 <script> 和 <style> 不增加额外的缩进
|
||||
vueIndentScriptAndStyle: false
|
||||
# 根据系统自动检测换行符
|
||||
endOfLine: "auto"
|
||||
# 对 HTML 文件应用特定格式化规则
|
||||
overrides:
|
||||
- files: "*.html"
|
||||
options:
|
||||
parser: "html"
|
||||
11
.stylelintignore
Normal file
@@ -0,0 +1,11 @@
|
||||
dist
|
||||
node_modules
|
||||
public
|
||||
.husky
|
||||
.vscode
|
||||
.idea
|
||||
*.sh
|
||||
*.md
|
||||
|
||||
src/assets
|
||||
stats.html
|
||||
38
.stylelintrc.cjs
Normal file
@@ -0,0 +1,38 @@
|
||||
module.exports = {
|
||||
extends: [
|
||||
"stylelint-config-recommended",
|
||||
"stylelint-config-recommended-scss",
|
||||
"stylelint-config-recommended-vue/scss",
|
||||
"stylelint-config-html/vue",
|
||||
"stylelint-config-recess-order",
|
||||
],
|
||||
|
||||
plugins: [
|
||||
"stylelint-prettier", // 统一代码风格,格式冲突时以 Prettier 规则为准
|
||||
],
|
||||
overrides: [
|
||||
{
|
||||
files: ["**/*.{vue,html}"],
|
||||
customSyntax: "postcss-html",
|
||||
},
|
||||
{
|
||||
files: ["**/*.{css,scss}"],
|
||||
customSyntax: "postcss-scss",
|
||||
},
|
||||
],
|
||||
rules: {
|
||||
"prettier/prettier": true, // 强制执行 Prettier 格式化规则(需配合 .prettierrc 配置文件)
|
||||
"no-empty-source": null, // 允许空的样式文件
|
||||
"declaration-property-value-no-unknown": null, // 允许非常规数值格式 ,如 height: calc(100% - 50)
|
||||
// 允许使用未知伪类
|
||||
"selector-pseudo-class-no-unknown": [
|
||||
true,
|
||||
{
|
||||
ignorePseudoClasses: ["global", "export", "deep"],
|
||||
},
|
||||
],
|
||||
// 允许使用未知伪元素
|
||||
"at-rule-no-unknown": null, // 禁用默认的未知 at-rule 检查
|
||||
"scss/at-rule-no-unknown": true, // 启用 SCSS 特定的 at-rule 检查
|
||||
},
|
||||
};
|
||||
71
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
{
|
||||
"typescript.tsdk": "./node_modules/typescript/lib",
|
||||
"npm.packageManager": "pnpm",
|
||||
"editor.tabSize": 2,
|
||||
"editor.formatOnSave": true,
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"editor.quickSuggestions": {
|
||||
"other": true,
|
||||
"comments": true,
|
||||
"strings": true
|
||||
},
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll": "explicit",
|
||||
"source.fixAll.eslint": "explicit",
|
||||
"source.fixAll.stylelint": "explicit"
|
||||
},
|
||||
"files.eol": "\n",
|
||||
"search.exclude": {
|
||||
"**/node_modules": true,
|
||||
"**/*.log": true,
|
||||
"**/*.log*": true,
|
||||
"**/bower_components": true,
|
||||
"**/dist": true,
|
||||
"**/elehukouben": true,
|
||||
"**/.git": true,
|
||||
"**/.gitignore": true,
|
||||
"**/.svn": true,
|
||||
"**/.DS_Store": true,
|
||||
"**/.idea": true,
|
||||
"**/.vscode": false,
|
||||
"**/yarn.lock": true,
|
||||
"**/tmp": true,
|
||||
"out": true,
|
||||
"dist": true,
|
||||
"node_modules": true,
|
||||
"CHANGELOG.md": true,
|
||||
"examples": true,
|
||||
"res": true,
|
||||
"screenshots": true,
|
||||
"yarn-error.log": true,
|
||||
"**/.yarn": true
|
||||
},
|
||||
"files.exclude": {
|
||||
"**/.cache": true,
|
||||
"**/.editorconfig": true,
|
||||
"**/.eslintcache": true,
|
||||
"**/bower_components": true,
|
||||
"**/.idea": true,
|
||||
"**/tmp": true,
|
||||
"**/.git": true,
|
||||
"**/.svn": true,
|
||||
"**/.hg": true,
|
||||
"**/CVS": true,
|
||||
"**/.DS_Store": true
|
||||
},
|
||||
"files.watcherExclude": {
|
||||
"**/.git/objects/**": true,
|
||||
"**/.git/subtree-cache/**": true,
|
||||
"**/.vscode/**": true,
|
||||
"**/node_modules/**": true,
|
||||
"**/tmp/**": true,
|
||||
"**/bower_components/**": true,
|
||||
"**/dist/**": true,
|
||||
"**/yarn.lock": true
|
||||
},
|
||||
"i18n-ally.localesPaths": [
|
||||
"src/lang/package"
|
||||
],
|
||||
"scss.lint.unknownAtRules": "ignore",
|
||||
"i18n-ally.keystyle": "nested"
|
||||
}
|
||||
23
.vscode/vue3.0.code-snippets
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"Vue3.0快速生成模板": {
|
||||
"scope": "vue",
|
||||
"prefix": "Vue3.0",
|
||||
"body": [
|
||||
"<template>",
|
||||
" <div>${1:test}</div>",
|
||||
"</template>",
|
||||
"",
|
||||
"<script lang=\"ts\">",
|
||||
"export default {",
|
||||
" setup() {",
|
||||
" return {};",
|
||||
" },",
|
||||
"};",
|
||||
"</script>",
|
||||
"",
|
||||
"<style lang=\"scss\" scoped></style>",
|
||||
""
|
||||
],
|
||||
"description": "Vue3.0"
|
||||
}
|
||||
}
|
||||
17
.vscode/vue3.2.code-snippets
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"Vue3.2+快速生成模板": {
|
||||
"scope": "vue",
|
||||
"prefix": "Vue3.2+",
|
||||
"body": [
|
||||
"<script setup lang=\"ts\"></script>",
|
||||
"",
|
||||
"<template>",
|
||||
" <div>${1:test}</div>",
|
||||
"</template>",
|
||||
"",
|
||||
"<style lang=\"scss\" scoped></style>",
|
||||
""
|
||||
],
|
||||
"description": "Vue3.2+"
|
||||
}
|
||||
}
|
||||
21
.vscode/vue3.3.code-snippets
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"Vue3.3+defineOptions快速生成模板": {
|
||||
"scope": "vue",
|
||||
"prefix": "Vue3.3+",
|
||||
"body": [
|
||||
"<script setup lang=\"ts\">",
|
||||
"defineOptions({",
|
||||
" name: \"\",",
|
||||
"});",
|
||||
"</script>",
|
||||
"",
|
||||
"<template>",
|
||||
" <div>${1:test}</div>",
|
||||
"</template>",
|
||||
"",
|
||||
"<style lang=\"scss\" scoped></style>",
|
||||
""
|
||||
],
|
||||
"description": "Vue3.3+defineOptions快速生成模板"
|
||||
}
|
||||
}
|
||||
386
CHANGELOG.md
Normal file
@@ -0,0 +1,386 @@
|
||||
|
||||
# 2.11.5 (2024/6/18)
|
||||
|
||||
## ✨ feat
|
||||
|
||||
- 支持后端文件导入([#142](https://github.com/youlaitech/vue3-element-admin/pull/142)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
|
||||
|
||||
## 🐛 fix
|
||||
- vue-dev-tools 插件导致菜单路由切换卡死,暂时关闭 ([28349e](https://github.com/youlaitech/vue3-element-admin/commit/28349efe147afab36531ba148eaac3a448fe6c71)) [@haoxianrui](https://github.com/haoxianrui)
|
||||
|
||||
|
||||
|
||||
# 2.11.4 (2024/6/16)
|
||||
|
||||
## ✨ feat
|
||||
|
||||
- 操作栏增加render配置参数([#138](https://github.com/youlaitech/vue3-element-admin/pull/140)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 左侧工具栏增加type配置参数([#141](https://github.com/youlaitech/vue3-element-admin/pull/141)) [@diamont1001](https://github.com/diamont1001)
|
||||
|
||||
## ♻️ refactor
|
||||
- 更换权限分配弹窗类型为 drawer 并添加父子联动开关([2d9193](https://github.com/youlaitech/vue3-element-admin/commit/2d9193c47fd224f01f82b9c0b2bbeb5e7cb33584)) [@haoxianrui](https://github.com/haoxianrui)
|
||||
|
||||
|
||||
|
||||
# 2.11.3 (2024/6/11)
|
||||
|
||||
## ✨ feat
|
||||
|
||||
- 支持默认工具栏的导入([#138](https://github.com/youlaitech/vue3-element-admin/pull/138)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 添加CURD导入示例([19e7bb](https://github.com/youlaitech/vue3-element-admin/commit/eab91effd6a01d5a3d9257249c8d06aa252b3bf8)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
|
||||
## ♻️ refactor
|
||||
- 修改导出全量数据选项文本([904fec](https://github.com/youlaitech/vue3-element-admin/commit/904fecad65217650482fcdbb10ffb7f3d27eb9ea)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
|
||||
## 🐛 fix
|
||||
- 菜单列表未适配el-icon导致图标不显示问题修复([e72b68](https://github.com/youlaitech/vue3-element-admin/commit/e72b68337562b5a7ea24ad55bbe00023e1266b40)) [@haoxianrui](https://github.com/haoxianrui)
|
||||
|
||||
# 2.11.2 (2024/6/8)
|
||||
|
||||
## ✨ feat
|
||||
|
||||
- 支持表格远程筛选([#131](https://github.com/youlaitech/vue3-element-admin/pull/131)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 支持标签输入框([#132](https://github.com/youlaitech/vue3-element-admin/pull/132)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 表单项支持tips配置([#133](https://github.com/youlaitech/vue3-element-admin/pull/133)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 前端导出支持全量数据([#134](https://github.com/youlaitech/vue3-element-admin/pull/134)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 支持选中数据导出([#135](https://github.com/youlaitech/vue3-element-admin/pull/135)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 表格默认工具栏的导出、搜索按钮增加权限点控制([883128](https://github.com/youlaitech/vue3-element-admin/commit/8831289b655f2cc086ecdababaa89f8d8a087c42)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 页签title支持动态设置([23876a](https://github.com/youlaitech/vue3-element-admin/commit/23876aa396143bf77cb5c86af8d6023d9ff6555a)) [@haoxianrui](https://github.com/haoxianrui)
|
||||
|
||||
## ♻️ refactor
|
||||
- 默认工具栏支持自定义([#136](https://github.com/youlaitech/vue3-element-admin/pull/136)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 未配置全量导出接口时选项隐藏([eab91ef](https://github.com/youlaitech/vue3-element-admin/commit/eab91effd6a01d5a3d9257249c8d06aa252b3bf8)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
|
||||
## 🐛 fix
|
||||
- 修复注销登出后redirect跳转路由参数丢失([5626017](https://github.com/youlaitech/vue3-element-admin/commit/562601736731afd20bb1a5140d856f6515720159)) [@haoxianrui](https://github.com/haoxianrui)
|
||||
|
||||
# 2.11.1 (2024/6/6)
|
||||
|
||||
## ✨ feat
|
||||
|
||||
- 增加pagination、request、parseData配置参数([#119](https://github.com/youlaitech/vue3-element-admin/pull/119)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 增加返回顶部功能([#120](https://github.com/youlaitech/vue3-element-admin/pull/120)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 支持前端导出([#126](https://github.com/youlaitech/vue3-element-admin/pull/126)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
|
||||
## ♻️ refactor
|
||||
- 重构布局样式(解决页面抖动问题)([#116](https://github.com/youlaitech/vue3-element-admin/pull/116)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 修改CURD示例编辑弹窗尺寸([#121](https://github.com/youlaitech/vue3-element-admin/pull/121)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 统一注册vue插件([#122](https://github.com/youlaitech/vue3-element-admin/pull/122)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 默认主题跟随系统([#128](https://github.com/youlaitech/vue3-element-admin/pull/128)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 增加"scss.lint.unknownAtRules": "ignore"代码,解决style中使用@apply提示unknow at rules@apply提示问题([Gitee#22](https://gitee.com/youlaiorg/vue3-element-admin/pulls/22)) [@zjsy521](https://gitee.com/zjsy521)
|
||||
|
||||
## 🐛 fix
|
||||
- 修复左侧布局移动端菜单弹出样式 ([#117](https://github.com/youlaitech/vue3-element-admin/pull/117)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
|
||||
- 修复编辑后未清空id再新增菜单覆盖的问题([0e78eeb](https://github.com/youlaitech/vue3-element-admin/commit/0e78eeb75008fa8e9732b1b4e7d7a1ea345c7a1b)) [@haoxianrui](https://github.com/haoxianrui)
|
||||
- 修复水印层级问题([#123](https://github.com/youlaitech/vue3-element-admin/pull/123)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 修复混合布局样式问题([#124](https://github.com/youlaitech/vue3-element-admin/pull/124)) [@cshaptx4869](https://github.com/cshaptx4869)
|
||||
- 修复关闭弹窗时没有clearValidate问题([#125](https://github.com/youlaitech/vue3-element-admin/pull/125)) [@andm31](https://github.com/andm31)
|
||||
|
||||
|
||||
|
||||
# 2.11.0 (2024/5/27)
|
||||
|
||||
## ✨ feat
|
||||
- 菜单添加路由参数设置(author by [haoxianrui](https://github.com/haoxianrui))
|
||||
- 增加列表选择组件(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 增加列表选择组件使用示例(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 增加defaultToolbar配置参数(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 表单弹窗支持drawer模式(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 表单项增加computed和watchEffect配置(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 支持switch属性修改(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 表单项增加文本类型支持(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 列表列增加show配置项(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 支持搜索表单显隐控制(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 支持input属性修改(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- search配置新增函数能力拓展(author by [xiudaozhe](https://github.com/xiudaozhe))
|
||||
- 表格新增列设置控制(author by [haoxianrui](https://github.com/haoxianrui))
|
||||
- 搜索添加展开和收缩(author by [haoxianrui](https://github.com/haoxianrui))
|
||||
- watch函数增加配置项参数返回(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
|
||||
## ♻️ refactor
|
||||
- 重构图标选择组件(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 重构列表选择组件默认样式 (author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 加强对话框表单组件和列表选择组件(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- routeMeta增加alwaysShow字段声明(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 分页组件增加溢出滚动效果(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 修正登录表单的Ref类型(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 点击表格刷新按钮不重置页码(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 筛选列超出一定高度滚动(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 优化加强initFn函数,表单项增加initFn函数(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 重构watch、computed、watchEffect调用(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 修改操作成功提示(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- PageSearch 改用card作为容器,样式改用unocss写法(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 优化首页 loading 动画效果author by [haoxianrui](https://github.com/haoxianrui))
|
||||
|
||||
|
||||
## 🐛 fix
|
||||
- 路由是否始终显示不限制只有顶级目录才有的配置,开放至菜单 (author by [haoxianrui](https://github.com/haoxianrui))
|
||||
- sockjs-client 报错 global is not defined 导致开发环境无法打开 WebSocket 页面问题修复 (author by [haoxianrui](https://github.com/haoxianrui))
|
||||
- 发送用户重启密码功能,最少为6位字符(小于6位登陆时不允许的问题) (author by [dreamnyj](https://gitee.com/dreamnyj))
|
||||
- 修复系统设置面板滚动条问题(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 修复表单插槽失效问题(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 修改tagsview刷新丢失query问题(author by [xiudaozhe](https://github.com/xiudaozhe))
|
||||
|
||||
## 📦️ build
|
||||
- 升级 NPM 包版本至最新 (author by [haoxianrui](https://github.com/haoxianrui))
|
||||
|
||||
## ⚙️ ci
|
||||
- 规整脚本执行命令(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
|
||||
|
||||
# 2.10.1 (2024/5/4)
|
||||
|
||||
## ♻️ refactor
|
||||
- 抽离CURD的使用部分代码为Hooks实现(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 修改CURD导入权限点标识名(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- cURD表单字段支持watch监听(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- cURD表单input支持number修饰(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- cURD表单组件支持checkbox多选框(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 优化axios响应数据TS类型提示(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 修改CURD表单组件自定义类型的attrs传值(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 同步重置密码按钮权限标识重命名(author by [haoxianrui](https://github.com/haoxianrui))
|
||||
- 重构API为静态方法实现模块化管理,并将types.ts重命名为model.ts用于存放接口模型定义(author by [haoxianrui](https://github.com/haoxianrui))
|
||||
|
||||
|
||||
## 🐛 fix
|
||||
- sockjs-client 报错 global is not defined 导致开发环境无法打开 WebSocket 页面问题修复 (author by [haoxianrui](https://github.com/haoxianrui))
|
||||
- 主题颜色设置覆盖暗黑模式下el-table行激活的背景色问题修复 (author by [haoxianrui](https://github.com/haoxianrui))
|
||||
- 修复因API接口调整而影响的调用页面的问题 (author by [haoxianrui](https://github.com/haoxianrui))
|
||||
|
||||
## 📦️ build
|
||||
- 升级 NPM 包版本至最新 (author by [haoxianrui](https://github.com/haoxianrui))
|
||||
|
||||
|
||||
# 2.10.0 (2024/4/26)
|
||||
## ✨ feat
|
||||
- 封装增删改查组件(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 集成 vite-plugin-vue-devtools 插件(author by [Tricker39](https://github.com/Tricker39))
|
||||
- 增加CURD配置化实现(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
|
||||
|
||||
# 2.9.3 (2024/04/14)
|
||||
## ✨ feat
|
||||
- 增加vue文件代码片段(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 菜单 hover 背景色添加值全局SCSS变量进行控制(author by [haoxianrui](https://github.com/haoxianrui))
|
||||
|
||||
## ♻️ refactor
|
||||
- 加强基础国际化(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 增加语言和布局大小枚举类型(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 增加侧边栏状态枚举类型(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 使用布局枚举替换字面量(author by [haoxianrui](https://github.com/haoxianrui))
|
||||
- 控制台使用静态数据循环渲染(author by [april](mailto:april@zen-game.cn))
|
||||
- 本地缓存的 token 变量重命名(author by [haoxianrui](https://github.com/haoxianrui))
|
||||
- 完善 Vite 环境变量类型声明(author by [haoxianrui](https://github.com/haoxianrui))
|
||||
|
||||
## 🐛 fix
|
||||
- 修复构建时提示iconComponent.name可能为undefined的报错 (author by [wangji1042](https://github.com/wangji1042))
|
||||
- 修复浏览器密码自动填充时可能存在的报错 (author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 修复eslint报错(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 移动端下点击左侧菜单节点后关闭侧边栏(author by [haoxianrui](https://github.com/haoxianrui))
|
||||
- 添加 size 类型断言修复类型报错(author by [haoxianrui](https://github.com/haoxianrui))
|
||||
|
||||
## 📦️ build
|
||||
- husky9.x版本适配 (author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 升级 npm 包版本至最新(author by [haoxianrui](https://github.com/haoxianrui))
|
||||
|
||||
# 2.9.2 (2024/03/05)
|
||||
## ✨ feat
|
||||
- vscode开发扩展推荐(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 完善基础增删改查Mock接口(author by [haoxianrui](https://github.com/haoxianrui))
|
||||
|
||||
## ♻️ refactor
|
||||
- 修改login密码框功能实现(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 弱化页面进入动画效果(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 取消推荐TypeScript Vue Plugin (author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 网站加载动画替换 (author by [haoxianrui](https://github.com/haoxianrui))
|
||||
- 优化主题和主题色监听,避免多个页面重复初始化 (author by [haoxianrui](https://github.com/haoxianrui))
|
||||
|
||||
## 🐛 fix
|
||||
- AppMain 高度在非固定头部不正确导致出现滚动条问题修复 (author by [haoxianrui](https://github.com/haoxianrui))
|
||||
- 修复混合模式开启固定Head时的样式问题 (author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 设置面板统一字体大小 (author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
|
||||
## 📦️build
|
||||
- 通过env配置控制mock服务 (author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 升级依赖包至最新版本 (author by [haoxianrui](https://github.com/haoxianrui))
|
||||
- 定义vite全局常量替换项目标题和版本 (author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
|
||||
# 2.9.1 (2024/02/28)
|
||||
## ♻️ refactor
|
||||
- 项目配置按钮移入navbar(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 优化user数据定义(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 统一设置栏的 SVG 图标风格
|
||||
|
||||
## 🐛 fix
|
||||
- 规整一些开发依赖(author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
- 修复登录页主题切换问题 (author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
|
||||
## 🚀 pref
|
||||
|
||||
- 压缩图片资源 (author by [cshaptx4869](https://github.com/cshaptx4869))
|
||||
|
||||
|
||||
# 2.9.0 (2024/02/25)
|
||||
|
||||
## ✨ feat
|
||||
- 引入 animate.css 动画库
|
||||
- 新增水印和配置
|
||||
- 动态路由菜单支持 element plus 的图标
|
||||
|
||||
## ♻️ refactor
|
||||
- Layout 布局重构和相关问题修复
|
||||
- sass 使用 @use 替代 @import 引入外部文件指令
|
||||
|
||||
## 🐛 fix
|
||||
- 修复管理页面部分弹窗无法打开问题
|
||||
- 主题颜色设置按钮 hover 等未变化问题修复
|
||||
|
||||
|
||||
# 2.8.1 (2024/01/10)
|
||||
|
||||
## ✨ feat
|
||||
- 替换 Mock 解决方案 vite-plugin-mock 为 vite-plugin-mock-dev-server 适配 Vite5
|
||||
|
||||
# 2.8.0 (2023/12/27)
|
||||
|
||||
## ⬆️ chore
|
||||
- 升级 Vite4 至 Vite5
|
||||
|
||||
# 2.7.1 (2023/12/12)
|
||||
|
||||
## ♻️ refactor
|
||||
- 将打包后的文件进行分类 (author by [ityangzhiwen](https://gitee.com/ityangzhiwen))
|
||||
|
||||
# 2.7.0 (2023/11/19)
|
||||
|
||||
## ♻️ refactor
|
||||
- 代码重构优化
|
||||
- 修改自动导入组件类型声明文件路径
|
||||
- 完善 typescript 类型
|
||||
|
||||
## 🐛 fix
|
||||
- 修复管理页面部分弹窗无法打开问题
|
||||
|
||||
|
||||
# 2.7.0 (2023/11/19)
|
||||
|
||||
## ♻️ refactor
|
||||
- 代码重构
|
||||
- 修改自动导入组件类型声明文件路径
|
||||
- 完善 typescript 类型
|
||||
|
||||
## 🐛 fix
|
||||
- 修复管理页面部分弹窗无法打开问题
|
||||
|
||||
|
||||
# 2.6.3 (2023/10/22)
|
||||
|
||||
## ✨ feat
|
||||
- 菜单管理新增目录只有一级子路由是否始终显示(alwaysShow)和路由页面是否缓存(keepAlive)的配置
|
||||
- 接口文档新增 swagger、knife4j
|
||||
- 引入和支持 tsx
|
||||
|
||||
## ♻️ refactor
|
||||
- 代码瘦身,整理并删除未使用的 svg
|
||||
- 控制台样式优化
|
||||
|
||||
## 🐛 fix
|
||||
- 菜单栏折叠和展开的图标暗黑模式显示问题修复
|
||||
|
||||
|
||||
# 2.6.2 (2023/10/11)
|
||||
|
||||
## 🐛 fix
|
||||
- 主题设置未持久化问题
|
||||
- UnoCSS 插件无智能提示
|
||||
|
||||
## ♻️ refactor
|
||||
- WebSocket 演示样式和代码优化
|
||||
- 用户管理代码重构
|
||||
|
||||
# 2.6.1 (2023/9/4)
|
||||
|
||||
## 🐛 fix
|
||||
- 导航顶部模式、混合模式样式在固定 Header 出现的样式问题修复
|
||||
- 固定 Header 没有持久化问题修复
|
||||
- 字典回显兼容 String 和 Number 类型
|
||||
|
||||
# 2.6.0 (2023/8/24)💥💥💥
|
||||
|
||||
## ✨ feat
|
||||
- 导航顶部模式、混合模式支持(author by [april-tong](https://april-tong.com/))
|
||||
- 平台文档(内嵌)(author by [april-tong](https://april-tong.com/))
|
||||
|
||||
# 2.5.0 (2023/8/8)
|
||||
|
||||
## ✨ feat
|
||||
- 新增 Mock(author by [ygcaicn](https://github.com/ygcaicn))
|
||||
- 图标 DEMO(author by [ygcaicn](https://github.com/ygcaicn))
|
||||
|
||||
## 🐛 fix
|
||||
- 字典支持 Number 类型
|
||||
|
||||
# 2.4.1 (2023/7/20)
|
||||
|
||||
## ✨ feat
|
||||
- 整合 vite-plugin-compression 插件打包优化(3.66MB → 1.58MB) (author by [april-tong](https://april-tong.com/))
|
||||
- 字典组件封装(author by [haoxr](https://juejin.cn/user/4187394044331261/posts))
|
||||
|
||||
## 🐛 fix
|
||||
- 分页组件hidden无效
|
||||
- 签名无法保存至后端
|
||||
- Git 提交 stylelint 校验部分机器报错
|
||||
|
||||
# 2.4.0 (2023/6/17)
|
||||
|
||||
## ✨ feat
|
||||
- 新增组件标签输入框(author by [april-tong](https://april-tong.com/))
|
||||
- 新增组件签名(author by [april-tong](https://april-tong.com/))
|
||||
- 新增组件表格(author by [april-tong](https://april-tong.com/))
|
||||
- Echarts 图表添加下载功能 author by [april-tong](https://april-tong.com/))
|
||||
|
||||
## ♻️ refactor
|
||||
- 限制包管理器为 pnpm 和 node 版本16+
|
||||
- 自定义组件自动导入配置
|
||||
- 搜索框样式写法优化
|
||||
|
||||
## 🐛 fix
|
||||
- 用户导入的部门回显成数字问题修复
|
||||
|
||||
## ⬆️ chore
|
||||
- element-plus 版本升级 2.3.5 → 2.3.6
|
||||
|
||||
# 2.3.1 (2023/5/21)
|
||||
|
||||
## 🔄 refactor
|
||||
- 组件示例文件名称优化
|
||||
|
||||
# 2.2.2 (2023/5/11)
|
||||
|
||||
## ✨ feat
|
||||
- 组件封装示例添加源码地址
|
||||
- 角色、菜单、部门、字段按钮添加权限控制
|
||||
|
||||
|
||||
# 2.3.0 (2023/5/12)
|
||||
|
||||
## ⬆️ chore
|
||||
- vue 版本升级 3.2.45 → 3.3.1 ([CHANGELOG](https://github.com/vuejs/core/blob/main/CHANGELOG.md))
|
||||
- vite 版本升级 4.3.1 → 4.3.5
|
||||
|
||||
## ♻️ refactor
|
||||
- 使用 vue 3.3 版本新特性 `defineOptions` 在 `setup` 定义组件名称,移除重复的 `script` 标签
|
||||
|
||||
# 2.2.2 (2023/5/11)
|
||||
|
||||
## ✨ feat
|
||||
- 用户新增提交添加 `vueUse` 的 `useDebounceFn` 函数实现按钮防抖节流
|
||||
|
||||
|
||||
# 2.2.1 (2023/4/25)
|
||||
|
||||
## 🐛 fix
|
||||
- 图标选择器组件使用 `onClickOutside` 未排除下拉弹出框元素导致无法输入搜索。
|
||||
|
||||
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2021-present 有来开源组织
|
||||
|
||||
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.
|
||||
11
README.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Vue 3 + Typescript + Vite
|
||||
|
||||
This template should help get you started developing with Vue 3 and Typescript in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
|
||||
|
||||
## Recommended IDE Setup
|
||||
|
||||
- [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.volar)
|
||||
|
||||
## Type Support For `.vue` Imports in TS
|
||||
|
||||
Since TypeScript cannot handle type information for `.vue` imports, they are shimmed to be a generic Vue component type by default. In most cases this is fine if you don't really care about component prop types outside of templates. However, if you wish to get actual prop types in `.vue` imports (for example to get props validation when using manual `h(...)` calls), you can enable Volar's `.vue` type support plugin by running `Volar: Switch TS Plugin on/off` from VSCode command palette.
|
||||
93
commitlint.config.cjs
Normal file
@@ -0,0 +1,93 @@
|
||||
module.exports = {
|
||||
// 继承的规则
|
||||
extends: ["@commitlint/config-conventional"],
|
||||
// 自定义规则
|
||||
rules: {
|
||||
// @see https://commitlint.js.org/#/reference-rules
|
||||
|
||||
// 提交类型枚举,git提交type必须是以下类型
|
||||
"type-enum": [
|
||||
2,
|
||||
"always",
|
||||
[
|
||||
"feat", // 新增功能
|
||||
"fix", // 修复缺陷
|
||||
"docs", // 文档变更
|
||||
"style", // 代码格式(不影响功能,例如空格、分号等格式修正)
|
||||
"refactor", // 代码重构(不包括 bug 修复、功能新增)
|
||||
"perf", // 性能优化
|
||||
"test", // 添加疏漏测试或已有测试改动
|
||||
"build", // 构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等)
|
||||
"ci", // 修改 CI 配置、脚本
|
||||
"revert", // 回滚 commit
|
||||
"chore", // 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)
|
||||
"wip", // 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)
|
||||
],
|
||||
],
|
||||
"subject-case": [0], // subject大小写不做校验
|
||||
},
|
||||
|
||||
prompt: {
|
||||
messages: {
|
||||
type: "选择你要提交的类型 :",
|
||||
scope: "选择一个提交范围(可选):",
|
||||
customScope: "请输入自定义的提交范围 :",
|
||||
subject: "填写简短精炼的变更描述 :\n",
|
||||
body: '填写更加详细的变更描述(可选)。使用 "|" 换行 :\n',
|
||||
breaking: '列举非兼容性重大的变更(可选)。使用 "|" 换行 :\n',
|
||||
footerPrefixesSelect: "选择关联issue前缀(可选):",
|
||||
customFooterPrefix: "输入自定义issue前缀 :",
|
||||
footer: "列举关联issue (可选) 例如: #31, #I3244 :\n",
|
||||
generatingByAI: "正在通过 AI 生成你的提交简短描述...",
|
||||
generatedSelectByAI: "选择一个 AI 生成的简短描述:",
|
||||
confirmCommit: "是否提交或修改commit ?",
|
||||
},
|
||||
// prettier-ignore
|
||||
types: [
|
||||
{ value: "feat", name: "特性: ✨ 新增功能", emoji: ":sparkles:" },
|
||||
{ value: "fix", name: "修复: 🐛 修复缺陷", emoji: ":bug:" },
|
||||
{ value: "docs", name: "文档: 📝 文档变更(更新README文件,或者注释)", emoji: ":memo:" },
|
||||
{ value: "style", name: "格式: 🌈 代码格式(空格、格式化、缺失的分号等)", emoji: ":lipstick:" },
|
||||
{ value: "refactor", name: "重构: 🔄 代码重构(不修复错误也不添加特性的代码更改)", emoji: ":recycle:" },
|
||||
{ value: "perf", name: "性能: 🚀 性能优化", emoji: ":zap:" },
|
||||
{ value: "test", name: "测试: 🧪 添加疏漏测试或已有测试改动", emoji: ":white_check_mark:"},
|
||||
{ value: "build", name: "构建: 📦️ 构建流程、外部依赖变更(如升级 npm 包、修改 vite 配置等)", emoji: ":package:"},
|
||||
{ value: "ci", name: "集成: ⚙️ 修改 CI 配置、脚本", emoji: ":ferris_wheel:"},
|
||||
{ value: "revert", name: "回退: ↩️ 回滚 commit",emoji: ":rewind:"},
|
||||
{ value: "chore", name: "其他: 🛠️ 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)", emoji: ":hammer:"},
|
||||
{ value: "wip", name: "开发中: 🚧 开发阶段临时提交", emoji: ":construction:"},
|
||||
],
|
||||
useEmoji: true,
|
||||
emojiAlign: "center",
|
||||
useAI: false,
|
||||
aiNumber: 1,
|
||||
themeColorCode: "",
|
||||
scopes: [],
|
||||
allowCustomScopes: true,
|
||||
allowEmptyScopes: true,
|
||||
customScopesAlign: "bottom",
|
||||
customScopesAlias: "custom",
|
||||
emptyScopesAlias: "empty",
|
||||
upperCaseSubject: false,
|
||||
markBreakingChangeMode: false,
|
||||
allowBreakingChanges: ["feat", "fix"],
|
||||
breaklineNumber: 100,
|
||||
breaklineChar: "|",
|
||||
skipQuestions: [],
|
||||
issuePrefixes: [{ value: "closed", name: "closed: ISSUES has been processed" }],
|
||||
customIssuePrefixAlign: "top",
|
||||
emptyIssuePrefixAlias: "skip",
|
||||
customIssuePrefixAlias: "custom",
|
||||
allowCustomIssuePrefix: true,
|
||||
allowEmptyIssuePrefix: true,
|
||||
confirmColorize: true,
|
||||
maxHeaderLength: Infinity,
|
||||
maxSubjectLength: Infinity,
|
||||
minSubjectLength: 0,
|
||||
scopeOverrides: undefined,
|
||||
defaultBody: "",
|
||||
defaultIssues: "",
|
||||
defaultScope: "",
|
||||
defaultSubject: "",
|
||||
},
|
||||
};
|
||||
238
eslint.config.ts
Normal file
@@ -0,0 +1,238 @@
|
||||
// https://eslint.org/docs/latest/use/configure/configuration-files-new
|
||||
|
||||
// 基础ESLint配置
|
||||
import eslint from '@eslint/js'
|
||||
import globals from 'globals'
|
||||
// TypeScript支持
|
||||
import * as typescriptEslint from 'typescript-eslint'
|
||||
// Vue支持
|
||||
import pluginVue from 'eslint-plugin-vue'
|
||||
import vueParser from 'vue-eslint-parser'
|
||||
// 代码风格与格式化
|
||||
import configPrettier from 'eslint-config-prettier'
|
||||
import prettierPlugin from 'eslint-plugin-prettier'
|
||||
|
||||
// 解析自动导入配置
|
||||
import fs from 'node:fs'
|
||||
let autoImportGlobals = {}
|
||||
try {
|
||||
autoImportGlobals =
|
||||
JSON.parse(fs.readFileSync('./.eslintrc-auto-import.json', 'utf-8')).globals || {}
|
||||
} catch (error) {
|
||||
// 文件不存在或解析错误时使用空对象
|
||||
console.warn('Could not load auto-import globals', error)
|
||||
}
|
||||
|
||||
// Element Plus组件
|
||||
const elementPlusComponents = {
|
||||
// Element Plus 组件添加为全局变量,避免 no-undef 报错
|
||||
ElInput: 'readonly',
|
||||
ElSelect: 'readonly',
|
||||
ElSwitch: 'readonly',
|
||||
ElCascader: 'readonly',
|
||||
ElInputNumber: 'readonly',
|
||||
ElTimePicker: 'readonly',
|
||||
ElTimeSelect: 'readonly',
|
||||
ElDatePicker: 'readonly',
|
||||
ElTreeSelect: 'readonly',
|
||||
ElText: 'readonly',
|
||||
ElRadioGroup: 'readonly',
|
||||
ElCheckboxGroup: 'readonly',
|
||||
ElOption: 'readonly',
|
||||
ElRadio: 'readonly',
|
||||
ElCheckbox: 'readonly',
|
||||
ElInputTag: 'readonly',
|
||||
ElForm: 'readonly',
|
||||
ElFormItem: 'readonly',
|
||||
ElTable: 'readonly',
|
||||
ElTableColumn: 'readonly',
|
||||
ElButton: 'readonly',
|
||||
ElDialog: 'readonly',
|
||||
ElPagination: 'readonly',
|
||||
ElMessage: 'readonly',
|
||||
ElMessageBox: 'readonly',
|
||||
ElNotification: 'readonly',
|
||||
ElTree: 'readonly'
|
||||
}
|
||||
|
||||
export default [
|
||||
// 忽略文件配置
|
||||
{
|
||||
ignores: [
|
||||
'**/node_modules/**',
|
||||
'**/dist/**',
|
||||
'**/*.min.*',
|
||||
'**/auto-imports.d.ts',
|
||||
'**/components.d.ts'
|
||||
]
|
||||
},
|
||||
|
||||
// 基础 JavaScript 配置
|
||||
eslint.configs.recommended,
|
||||
|
||||
// Vue 推荐配置
|
||||
...pluginVue.configs['flat/recommended'],
|
||||
|
||||
// TypeScript 推荐配置
|
||||
...typescriptEslint.configs.recommended,
|
||||
|
||||
// 全局配置
|
||||
{
|
||||
// 指定要检查的文件
|
||||
files: ['**/*.{js,mjs,cjs,ts,mts,cts,vue}'],
|
||||
languageOptions: {
|
||||
ecmaVersion: 'latest',
|
||||
sourceType: 'module',
|
||||
globals: {
|
||||
...globals.browser, // 浏览器环境全局变量
|
||||
...globals.node, // Node.js 环境全局变量
|
||||
...globals.es2022, // ES2022 全局对象
|
||||
...autoImportGlobals, // 自动导入的 API 函数
|
||||
...elementPlusComponents, // Element Plus 组件
|
||||
// 全局类型定义,解决 TypeScript 中定义但 ESLint 不识别的问题
|
||||
PageQuery: 'readonly',
|
||||
PageResult: 'readonly',
|
||||
OptionType: 'readonly',
|
||||
ApiResponse: 'readonly',
|
||||
ExcelResult: 'readonly',
|
||||
TagView: 'readonly',
|
||||
AppSettings: 'readonly',
|
||||
__APP_INFO__: 'readonly'
|
||||
}
|
||||
},
|
||||
plugins: {
|
||||
vue: pluginVue,
|
||||
'@typescript-eslint': typescriptEslint.plugin
|
||||
},
|
||||
rules: {
|
||||
// 基础规则
|
||||
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
||||
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
||||
// 添加这一行来强制使用单引号
|
||||
quotes: ['error', 'single'],
|
||||
semi: ['error', 'never'],
|
||||
'comma-dangle': ['error', 'never'],
|
||||
|
||||
// ES6+ 规则SEWDvv
|
||||
'prefer-const': 'error',
|
||||
'no-var': 'error',
|
||||
'object-shorthand': 'error',
|
||||
|
||||
// 最佳实践
|
||||
eqeqeq: 'off',
|
||||
'no-multi-spaces': 'error',
|
||||
'no-multiple-empty-lines': ['error', { max: 1, maxBOF: 0, maxEOF: 0 }],
|
||||
|
||||
// 禁用与 TypeScript 冲突的规则
|
||||
'no-unused-vars': 'off',
|
||||
'no-undef': 'off',
|
||||
'no-redeclare': 'off',
|
||||
'@typescript-eslint/ban-ts-comment': 'off'
|
||||
}
|
||||
},
|
||||
|
||||
// Vue 文件特定配置
|
||||
{
|
||||
files: ['**/*.vue'],
|
||||
languageOptions: {
|
||||
parser: vueParser,
|
||||
parserOptions: {
|
||||
ecmaVersion: 'latest',
|
||||
sourceType: 'module',
|
||||
parser: typescriptEslint.parser,
|
||||
extraFileExtensions: ['.vue'],
|
||||
tsconfigRootDir: __dirname
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
// Vue 规则
|
||||
'vue/multi-word-component-names': 'off',
|
||||
'vue/no-v-html': 'off',
|
||||
'vue/require-default-prop': 'off',
|
||||
'vue/require-explicit-emits': 'error',
|
||||
'vue/no-unused-vars': 'error',
|
||||
'vue/no-mutating-props': 'off',
|
||||
'vue/valid-v-for': 'warn',
|
||||
'vue/no-template-shadow': 'warn',
|
||||
'vue/return-in-computed-property': 'warn',
|
||||
'vue/block-order': [
|
||||
'error',
|
||||
{
|
||||
order: ['template', 'script', 'style']
|
||||
}
|
||||
],
|
||||
'vue/html-self-closing': [
|
||||
'error',
|
||||
{
|
||||
html: {
|
||||
void: 'always',
|
||||
normal: 'never',
|
||||
component: 'always'
|
||||
},
|
||||
svg: 'always',
|
||||
math: 'always'
|
||||
}
|
||||
],
|
||||
'vue/component-name-in-template-casing': ['error', 'PascalCase'],
|
||||
'@typescript-eslint/no-explicit-any': 'off'
|
||||
}
|
||||
},
|
||||
|
||||
// TypeScript 文件特定配置
|
||||
{
|
||||
files: ['**/*.{ts,tsx,mts,cts}'],
|
||||
languageOptions: {
|
||||
parser: typescriptEslint.parser,
|
||||
parserOptions: {
|
||||
ecmaVersion: 'latest',
|
||||
sourceType: 'module',
|
||||
project: './tsconfig.json',
|
||||
tsconfigRootDir: __dirname
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
// TypeScript 规则
|
||||
'@typescript-eslint/no-explicit-any': 'off', // 允许使用any类型,方便开发
|
||||
'@typescript-eslint/no-empty-function': 'off',
|
||||
'@typescript-eslint/no-empty-object-type': 'off',
|
||||
'@typescript-eslint/ban-ts-comment': 'off',
|
||||
'@typescript-eslint/no-non-null-assertion': 'off',
|
||||
'@typescript-eslint/no-unused-vars': 'warn', // 降级为警告
|
||||
'@typescript-eslint/no-unused-expressions': 'warn', // 降级为警告
|
||||
'@typescript-eslint/consistent-type-imports': 'off', // 关闭强制使用type import
|
||||
'@typescript-eslint/no-import-type-side-effects': 'error'
|
||||
}
|
||||
},
|
||||
|
||||
// .d.ts 文件配置
|
||||
{
|
||||
files: ['**/*.d.ts'],
|
||||
rules: {
|
||||
'@typescript-eslint/no-explicit-any': 'off',
|
||||
'@typescript-eslint/no-unused-vars': 'off'
|
||||
}
|
||||
},
|
||||
|
||||
// CURD 组件配置
|
||||
{
|
||||
files: ['**/components/CURD/**/*.{ts,vue}'],
|
||||
rules: {
|
||||
'no-unused-vars': 'off',
|
||||
'@typescript-eslint/no-unused-vars': 'off',
|
||||
'@typescript-eslint/no-explicit-any': 'off'
|
||||
}
|
||||
},
|
||||
|
||||
// Prettier 集成(必须放在最后)
|
||||
{
|
||||
plugins: {
|
||||
prettier: prettierPlugin // 将 Prettier 的输出作为 ESLint 的问题来报告
|
||||
},
|
||||
rules: {
|
||||
...configPrettier.rules,
|
||||
'prettier/prettier': ['error', {}, { usePrettierrc: true }],
|
||||
'arrow-body-style': 'off',
|
||||
'prefer-arrow-callback': 'off'
|
||||
}
|
||||
}
|
||||
]
|
||||
93
index.html
Normal file
@@ -0,0 +1,93 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" href="/logo.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="description" content="校准系统后台管理系统" />
|
||||
<meta
|
||||
name="keywords"
|
||||
content="vue,element-plus,typescript,vue-element-admin,vue3-element-admin"
|
||||
/>
|
||||
<title>校准系统后台管理系统</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app">
|
||||
<div class="loading-container">
|
||||
<div class="loading-spinner">
|
||||
<div class="loading-bar"></div>
|
||||
<div class="loading-bar"></div>
|
||||
<div class="loading-bar"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
|
||||
<style>
|
||||
html,
|
||||
body,
|
||||
#app {
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.loading-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 24px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.loading-spinner {
|
||||
display: flex;
|
||||
gap: 6px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.loading-bar {
|
||||
width: 4px;
|
||||
height: 24px;
|
||||
background-color: #498cff;
|
||||
border-radius: 2px;
|
||||
animation: loading-animation 1.2s ease-in-out infinite;
|
||||
}
|
||||
|
||||
.loading-bar:nth-child(1) {
|
||||
animation-delay: 0s;
|
||||
}
|
||||
|
||||
.loading-bar:nth-child(2) {
|
||||
animation-delay: 0.2s;
|
||||
}
|
||||
|
||||
.loading-bar:nth-child(3) {
|
||||
animation-delay: 0.4s;
|
||||
}
|
||||
|
||||
@keyframes loading-animation {
|
||||
0% {
|
||||
opacity: 0.3;
|
||||
transform: scaleY(0.5);
|
||||
}
|
||||
|
||||
50% {
|
||||
opacity: 1;
|
||||
transform: scaleY(1.2);
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 0.3;
|
||||
transform: scaleY(0.5);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</html>
|
||||
131
package.json
Normal file
@@ -0,0 +1,131 @@
|
||||
{
|
||||
"name": "jurs-zun",
|
||||
"description": "Vue3 + Vite + TypeScript + Element-Plus 的后台管理模板,vue-element-admin 的 Vue3 版本",
|
||||
"version": "3.4.2",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"dev:prod": "vite --mode production",
|
||||
"build": "vue-tsc --noEmit & vite build",
|
||||
"build:dev": "vue-tsc --noEmit & vite build --mode development",
|
||||
"build:prod": "vue-tsc --noEmit & vite build --mode production",
|
||||
"preview": "vite preview",
|
||||
"build-only": "vite build",
|
||||
"type-check": "vue-tsc --noEmit",
|
||||
"lint:eslint": "eslint --cache \"src/**/*.{vue,ts,js}\" --fix",
|
||||
"lint:prettier": "prettier --write \"**/*.{js,cjs,ts,json,css,scss,vue,html,md}\"",
|
||||
"lint:stylelint": "stylelint --cache \"**/*.{css,scss,vue}\" --fix",
|
||||
"lint:lint-staged": "lint-staged",
|
||||
"lint": "npm run lint:eslint && npm run lint:prettier && npm run lint:stylelint",
|
||||
"preinstall": "npx only-allow pnpm",
|
||||
"prepare": "husky",
|
||||
"commit": "git-cz"
|
||||
},
|
||||
"config": {
|
||||
"commitizen": {
|
||||
"path": "node_modules/cz-git"
|
||||
}
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{js,ts}": [
|
||||
"eslint --fix",
|
||||
"prettier --write"
|
||||
],
|
||||
"*.{cjs,json}": [
|
||||
"prettier --write"
|
||||
],
|
||||
"*.{vue,html}": [
|
||||
"eslint --fix",
|
||||
"prettier --write",
|
||||
"stylelint --fix"
|
||||
],
|
||||
"*.{scss,css}": [
|
||||
"stylelint --fix",
|
||||
"prettier --write"
|
||||
],
|
||||
"*.md": [
|
||||
"prettier --write"
|
||||
]
|
||||
},
|
||||
"dependencies": {
|
||||
"@element-plus/icons-vue": "^2.3.2",
|
||||
"@stomp/stompjs": "^7.2.1",
|
||||
"@vueuse/core": "^12.8.2",
|
||||
"@wangeditor-next/editor": "^5.6.47",
|
||||
"@wangeditor-next/editor-for-vue": "^5.1.14",
|
||||
"animate.css": "^4.1.1",
|
||||
"axios": "^1.13.2",
|
||||
"codemirror": "^5.65.20",
|
||||
"codemirror-editor-vue3": "^2.8.0",
|
||||
"default-passive-events": "^2.0.0",
|
||||
"echarts": "^6.0.0",
|
||||
"element-plus": "^2.11.8",
|
||||
"exceljs": "^4.4.0",
|
||||
"lodash-es": "^4.17.21",
|
||||
"nprogress": "^0.2.0",
|
||||
"path-browserify": "^1.0.1",
|
||||
"path-to-regexp": "^8.3.0",
|
||||
"pinia": "^3.0.4",
|
||||
"qs": "^6.14.0",
|
||||
"sortablejs": "^1.15.6",
|
||||
"vue": "^3.5.24",
|
||||
"vue-draggable-plus": "^0.6.0",
|
||||
"vue-i18n": "^11.1.12",
|
||||
"vue-router": "^4.6.3",
|
||||
"vxe-table": "~4.6.25"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^19.8.1",
|
||||
"@commitlint/config-conventional": "^19.8.1",
|
||||
"@eslint/js": "^9.39.1",
|
||||
"@iconify/utils": "^2.3.0",
|
||||
"@types/codemirror": "^5.60.17",
|
||||
"@types/lodash-es": "^4.17.12",
|
||||
"@types/node": "^24.10.1",
|
||||
"@types/nprogress": "^0.2.3",
|
||||
"@types/path-browserify": "^1.0.3",
|
||||
"@types/qs": "^6.14.0",
|
||||
"@types/sortablejs": "^1.15.9",
|
||||
"@typescript-eslint/eslint-plugin": "^8.46.4",
|
||||
"@typescript-eslint/parser": "^8.46.4",
|
||||
"@vitejs/plugin-vue": "^6.0.1",
|
||||
"autoprefixer": "^10.4.22",
|
||||
"commitizen": "^4.3.1",
|
||||
"cz-git": "^1.12.0",
|
||||
"eslint": "^9.39.1",
|
||||
"eslint-config-prettier": "^10.1.8",
|
||||
"eslint-plugin-prettier": "^5.5.4",
|
||||
"eslint-plugin-vue": "^10.5.1",
|
||||
"globals": "^15.15.0",
|
||||
"husky": "^9.1.7",
|
||||
"lint-staged": "^15.5.2",
|
||||
"postcss": "^8.5.6",
|
||||
"postcss-html": "^1.8.0",
|
||||
"postcss-scss": "^4.0.9",
|
||||
"prettier": "^3.6.2",
|
||||
"sass": "^1.94.0",
|
||||
"stylelint": "^16.25.0",
|
||||
"stylelint-config-html": "^1.1.0",
|
||||
"stylelint-config-recess-order": "^6.1.0",
|
||||
"stylelint-config-recommended": "^15.0.0",
|
||||
"stylelint-config-recommended-scss": "^14.1.0",
|
||||
"stylelint-config-recommended-vue": "^1.6.1",
|
||||
"stylelint-prettier": "^5.0.3",
|
||||
"terser": "^5.44.1",
|
||||
"typescript": "^5.9.3",
|
||||
"typescript-eslint": "^8.46.4",
|
||||
"unocss": "^66.5.6",
|
||||
"unplugin-auto-import": "^19.3.0",
|
||||
"unplugin-vue-components": "^28.8.0",
|
||||
"vite": "^7.2.2",
|
||||
"vite-plugin-mock-dev-server": "^2.0.2",
|
||||
"vue-eslint-parser": "^10.2.0",
|
||||
"vue-tsc": "^2.2.12"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^20.19.0 || >=22.12.0"
|
||||
},
|
||||
"repository": "https://gitee.com/youlaiorg/vue3-element-admin.git",
|
||||
"license": "MIT"
|
||||
}
|
||||
BIN
public/favicon.ico
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
public/img/logo.png
Normal file
|
After Width: | Height: | Size: 51 KiB |
17
src/App.vue
Normal file
@@ -0,0 +1,17 @@
|
||||
<template>
|
||||
<el-config-provider :locale="locale" :size="size">
|
||||
<!-- 开启水印 -->
|
||||
<router-view />
|
||||
</el-config-provider>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { useAppStore } from '@/store'
|
||||
// import { defaultSettings } from '@/settings';
|
||||
import { ComponentSize } from '@/enums'
|
||||
|
||||
const appStore = useAppStore()
|
||||
|
||||
const locale = computed(() => appStore.locale)
|
||||
const size = computed(() => appStore.size as ComponentSize)
|
||||
</script>
|
||||
65
src/api/BoosAccountManagement/index.ts
Normal file
@@ -0,0 +1,65 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* boos账号管理
|
||||
* */
|
||||
|
||||
// 查账号状态表(查所有)
|
||||
export const ApiAccounts = () => {
|
||||
return request({
|
||||
url: `/api/accounts`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 查询指定电脑的账号状态
|
||||
export const ApiAccountsId = (id: string) => {
|
||||
return request({
|
||||
url: `/api/accounts/${id}`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 绑定账号到电脑
|
||||
export const ApiAccountsAdd = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('browser_name', data.browser_name)
|
||||
formData.append('worker_id', data.worker_id)
|
||||
return request({
|
||||
url: `/api/accounts`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// // 编辑申请用印
|
||||
// export const BusinessEditApplication = (data: any) => {
|
||||
// const formData = new FormData()
|
||||
// formData.append('id', data.id)
|
||||
// formData.append('Printingpurpose', data.Printingpurpose)
|
||||
// formData.append('case_id', data.case_id)
|
||||
// formData.append('Reason', data.Reason)
|
||||
// formData.append('seal_number', data.seal_number)
|
||||
// formData.append('seal_type', data.seal_type)
|
||||
// if (isFile(data.file)) formData.append('file', data.file)
|
||||
// formData.append('approvers', data.approvers)
|
||||
// return request({
|
||||
// url: `/business/editApplication`,
|
||||
// method: 'post',
|
||||
// data: formData,
|
||||
// headers: {
|
||||
// 'Content-Type': 'multipart/form-data'
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
|
||||
// 删除指定账号
|
||||
export const ApiAccountsDelete = (id: string) => {
|
||||
return request({
|
||||
url: `/api/accounts/${id}`,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
67
src/api/TaskManagement/index.ts
Normal file
@@ -0,0 +1,67 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 任务管理
|
||||
* */
|
||||
|
||||
// 查询任务列表
|
||||
export const ApiTasks = () => {
|
||||
return request({
|
||||
url: `/api/tasks`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 查询指定任务的状态和结果
|
||||
export const ApiTasksTaskId = (task_id: string) => {
|
||||
return request({
|
||||
url: `/api/tasks/${task_id}`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 提交新任务
|
||||
export const ApiTasksAdd = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('task_type', data.task_type)
|
||||
formData.append('worker_id', data.worker_id)
|
||||
formData.append('account_name', data.account_name)
|
||||
formData.append('params', data.params)
|
||||
return request({
|
||||
url: `/api/tasks`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// // 编辑申请用印
|
||||
// export const BusinessEditApplication = (data: any) => {
|
||||
// const formData = new FormData()
|
||||
// formData.append('id', data.id)
|
||||
// formData.append('Printingpurpose', data.Printingpurpose)
|
||||
// formData.append('case_id', data.case_id)
|
||||
// formData.append('Reason', data.Reason)
|
||||
// formData.append('seal_number', data.seal_number)
|
||||
// formData.append('seal_type', data.seal_type)
|
||||
// if (isFile(data.file)) formData.append('file', data.file)
|
||||
// formData.append('approvers', data.approvers)
|
||||
// return request({
|
||||
// url: `/business/editApplication`,
|
||||
// method: 'post',
|
||||
// data: formData,
|
||||
// headers: {
|
||||
// 'Content-Type': 'multipart/form-data'
|
||||
// }
|
||||
// })
|
||||
// }
|
||||
//
|
||||
// // 删除指定账号
|
||||
// export const ApiAccountsDelete = (id: string) => {
|
||||
// return request({
|
||||
// url: `/api/accounts/${id}`,
|
||||
// method: 'delete'
|
||||
// })
|
||||
// }
|
||||
191
src/api/ai/index.ts
Normal file
@@ -0,0 +1,191 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* AI 命令请求参数
|
||||
*/
|
||||
export interface AiCommandRequest {
|
||||
/** 用户输入的自然语言命令 */
|
||||
command: string
|
||||
/** 当前页面路由(用于上下文) */
|
||||
currentRoute?: string
|
||||
/** 当前激活的组件名称 */
|
||||
currentComponent?: string
|
||||
/** 额外上下文信息 */
|
||||
context?: Record<string, any>
|
||||
}
|
||||
|
||||
/**
|
||||
* 函数调用参数
|
||||
*/
|
||||
export interface FunctionCall {
|
||||
/** 函数名称 */
|
||||
name: string
|
||||
/** 函数描述 */
|
||||
description?: string
|
||||
/** 参数对象 */
|
||||
arguments: Record<string, any>
|
||||
}
|
||||
|
||||
/**
|
||||
* AI 命令解析响应
|
||||
*/
|
||||
export interface AiCommandResponse {
|
||||
/** 解析日志ID(用于关联执行记录) */
|
||||
parseLogId?: string
|
||||
/** 是否成功解析 */
|
||||
success: boolean
|
||||
/** 解析后的函数调用列表 */
|
||||
functionCalls: FunctionCall[]
|
||||
/** AI 的理解和说明 */
|
||||
explanation?: string
|
||||
/** 置信度 (0-1) */
|
||||
confidence?: number
|
||||
/** 错误信息 */
|
||||
error?: string
|
||||
/** 原始 LLM 响应(用于调试) */
|
||||
rawResponse?: string
|
||||
}
|
||||
|
||||
/**
|
||||
* AI 命令执行请求
|
||||
*/
|
||||
export interface AiExecuteRequest {
|
||||
/** 关联的解析日志ID */
|
||||
parseLogId?: string
|
||||
/** 原始命令(用于审计) */
|
||||
originalCommand?: string
|
||||
/** 要执行的函数调用 */
|
||||
functionCall: FunctionCall
|
||||
/** 确认模式:auto=自动执行, manual=需要用户确认 */
|
||||
confirmMode?: 'auto' | 'manual'
|
||||
/** 用户确认标志 */
|
||||
userConfirmed?: boolean
|
||||
/** 幂等性令牌(防止重复执行) */
|
||||
idempotencyKey?: string
|
||||
/** 当前页面路由 */
|
||||
currentRoute?: string
|
||||
}
|
||||
|
||||
/**
|
||||
* AI 命令执行响应
|
||||
*/
|
||||
export interface AiExecuteResponse {
|
||||
/** 是否执行成功 */
|
||||
success: boolean
|
||||
/** 执行结果数据 */
|
||||
data?: any
|
||||
/** 执行结果说明 */
|
||||
message?: string
|
||||
/** 影响的记录数 */
|
||||
affectedRows?: number
|
||||
/** 错误信息 */
|
||||
error?: string
|
||||
/** 记录ID(用于追踪) */
|
||||
recordId?: string
|
||||
/** 需要用户确认 */
|
||||
requiresConfirmation?: boolean
|
||||
/** 确认提示信息 */
|
||||
confirmationPrompt?: string
|
||||
}
|
||||
|
||||
export interface AiCommandRecordPageQuery extends PageQuery {
|
||||
keywords?: string
|
||||
executeStatus?: string
|
||||
parseSuccess?: boolean
|
||||
userId?: number
|
||||
isDangerous?: boolean
|
||||
provider?: string
|
||||
model?: string
|
||||
functionName?: string
|
||||
createTime?: [string, string]
|
||||
}
|
||||
|
||||
export interface AiCommandRecordVO {
|
||||
id: string
|
||||
userId: number
|
||||
username: string
|
||||
originalCommand: string
|
||||
provider?: string
|
||||
model?: string
|
||||
parseSuccess?: boolean
|
||||
functionCalls?: string
|
||||
explanation?: string
|
||||
confidence?: number
|
||||
parseErrorMessage?: string
|
||||
inputTokens?: number
|
||||
outputTokens?: number
|
||||
totalTokens?: number
|
||||
parseTime?: number
|
||||
functionName?: string
|
||||
functionArguments?: string
|
||||
executeStatus?: string
|
||||
executeResult?: string
|
||||
executeErrorMessage?: string
|
||||
affectedRows?: number
|
||||
isDangerous?: boolean
|
||||
requiresConfirmation?: boolean
|
||||
userConfirmed?: boolean
|
||||
executionTime?: number
|
||||
ipAddress?: string
|
||||
userAgent?: string
|
||||
currentRoute?: string
|
||||
createTime?: string
|
||||
updateTime?: string
|
||||
remark?: string
|
||||
}
|
||||
|
||||
/**
|
||||
* AI 命令 API
|
||||
*/
|
||||
class AiCommandApi {
|
||||
/**
|
||||
* 解析自然语言命令
|
||||
*
|
||||
* @param data 命令请求参数
|
||||
* @returns 解析结果
|
||||
*/
|
||||
static parseCommand(data: AiCommandRequest): Promise<AiCommandResponse> {
|
||||
return request<any, AiCommandResponse>({
|
||||
url: '/api/v1/ai/command/parse',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行已解析的命令
|
||||
*
|
||||
* @param data 执行请求参数
|
||||
* @returns 执行结果数据(成功时返回,失败时抛出异常)
|
||||
*/
|
||||
static executeCommand(data: AiExecuteRequest): Promise<any> {
|
||||
return request<any, any>({
|
||||
url: '/api/v1/ai/command/execute',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取命令记录分页列表
|
||||
*/
|
||||
static getCommandRecordPage(queryParams: AiCommandRecordPageQuery) {
|
||||
return request<any, PageResult<AiCommandRecordVO[]>>({
|
||||
url: '/api/v1/ai/command/records',
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 撤销命令执行(如果支持)
|
||||
*/
|
||||
static rollbackCommand(recordId: string) {
|
||||
return request({
|
||||
url: `/api/v1/ai/command/rollback/${recordId}`,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export default AiCommandApi
|
||||
86
src/api/auth-api.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
const AUTH_BASE_URL = '/api/v1/auth'
|
||||
|
||||
const AuthAPI = {
|
||||
/** 登录接口*/
|
||||
login(data: LoginFormData) {
|
||||
const formData = new FormData()
|
||||
formData.append('username', 'admin')
|
||||
formData.append('password', data.password)
|
||||
formData.append('captchaKey', data.captchaKey)
|
||||
formData.append('captchaCode', data.captchaCode)
|
||||
return request<any, LoginResult>({
|
||||
url: `${AUTH_BASE_URL}/login`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
/** 刷新 token 接口*/
|
||||
refreshToken(refreshToken: string) {
|
||||
return request<any, LoginResult>({
|
||||
url: `${AUTH_BASE_URL}/refresh-token`,
|
||||
method: 'post',
|
||||
params: { refreshToken },
|
||||
headers: {
|
||||
Authorization: 'no-auth'
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
/** 退出登录接口 */
|
||||
logout() {
|
||||
return request({
|
||||
url: `${AUTH_BASE_URL}/logout`,
|
||||
method: 'delete'
|
||||
})
|
||||
},
|
||||
|
||||
/** 获取验证码接口*/
|
||||
getCaptcha() {
|
||||
return request<any, CaptchaInfo>({
|
||||
url: `${AUTH_BASE_URL}/captcha`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export default AuthAPI
|
||||
|
||||
/** 登录表单数据 */
|
||||
export interface LoginFormData {
|
||||
/** 用户名 */
|
||||
username: string
|
||||
/** 密码 */
|
||||
password: string
|
||||
/** 验证码缓存key */
|
||||
captchaKey: string
|
||||
/** 验证码 */
|
||||
captchaCode: string
|
||||
/** 记住我 */
|
||||
rememberMe: boolean
|
||||
}
|
||||
|
||||
/** 登录响应 */
|
||||
export interface LoginResult {
|
||||
/** 访问令牌 */
|
||||
accessToken: string
|
||||
/** 刷新令牌 */
|
||||
refreshToken: string
|
||||
/** 令牌类型 */
|
||||
tokenType: string
|
||||
/** 过期时间(秒) */
|
||||
expiresIn: number
|
||||
}
|
||||
|
||||
/** 验证码信息 */
|
||||
export interface CaptchaInfo {
|
||||
/** 验证码缓存key */
|
||||
captchaKey: string
|
||||
/** 验证码图片Base64字符串 */
|
||||
captchaBase64: string
|
||||
}
|
||||
74
src/api/calibration/accountAdjustmentApplication/index.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 调账申请
|
||||
* */
|
||||
|
||||
// 新增调账申请
|
||||
export const FinanceLoan = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('times', data.times)
|
||||
formData.append('case_id', data.case_id)
|
||||
formData.append('amount', data.amount)
|
||||
formData.append('situation', data.situation)
|
||||
return request({
|
||||
url: `/finance/loan`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑调账申请
|
||||
export const FinanceEditAccounts = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('times', data.times)
|
||||
formData.append('case_id', data.case_id)
|
||||
formData.append('amount', data.amount)
|
||||
formData.append('situation', data.situation)
|
||||
return request({
|
||||
url: `/finance/editAccounts`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 调账申请展示
|
||||
export const FinanceLoandisplay = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
if (data.times && data.times.length) {
|
||||
formData.append('times', data.times[0])
|
||||
formData.append('end_time', data.times[1])
|
||||
}
|
||||
formData.append('CustomerID', data.CustomerID)
|
||||
return request({
|
||||
url: `/finance/loandisplay`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除调账申请
|
||||
export const FinanceDeleteAccounts = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/finance/deleteAccounts`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
75
src/api/calibration/announcementManagement/index.ts
Normal file
@@ -0,0 +1,75 @@
|
||||
import request from '@/utils/request'
|
||||
import { isFile } from '@/utils/auxiliaryFunction'
|
||||
|
||||
/*
|
||||
* 公告管理
|
||||
* */
|
||||
|
||||
// 新增公告
|
||||
export const BusinessBulletin = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('title', data.title)
|
||||
formData.append('content', data.content)
|
||||
formData.append('file', data.file)
|
||||
formData.append('state', data.state)
|
||||
return request({
|
||||
url: `/business/bulletin`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑公告
|
||||
export const BusinessEditBulletin = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('title', data.title)
|
||||
formData.append('content', data.content)
|
||||
if (isFile(data.file)) formData.append('file', data.file)
|
||||
formData.append('state', data.state)
|
||||
return request({
|
||||
url: `/business/editBulletin`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 公告展示
|
||||
export const BusinessBulletindetail = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
// if (data.times && data.times.length) {
|
||||
// formData.append('times', data.times[0])
|
||||
// formData.append('end_time', data.times[1])
|
||||
// }
|
||||
// formData.append('unit', data.unit)
|
||||
return request({
|
||||
url: `/business/bulletindetail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除公告
|
||||
export const BusinessDeleteBulletin = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/business/deleteBulletin`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
82
src/api/calibration/applicationForSealApproval/index.ts
Normal file
@@ -0,0 +1,82 @@
|
||||
import request from '@/utils/request'
|
||||
import { isFile } from '@/utils/auxiliaryFunction'
|
||||
|
||||
/*
|
||||
* 申请用印
|
||||
* */
|
||||
|
||||
// 新增申请用印
|
||||
export const BusinessApplication = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('Printingpurpose', data.Printingpurpose)
|
||||
formData.append('case_id', data.case_id)
|
||||
formData.append('Reason', data.Reason)
|
||||
formData.append('seal_number', data.seal_number)
|
||||
formData.append('seal_type', data.seal_type)
|
||||
formData.append('file', data.file)
|
||||
formData.append('approvers', data.approvers)
|
||||
return request({
|
||||
url: `/business/application`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑申请用印
|
||||
export const BusinessEditApplication = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('Printingpurpose', data.Printingpurpose)
|
||||
formData.append('case_id', data.case_id)
|
||||
formData.append('Reason', data.Reason)
|
||||
formData.append('seal_number', data.seal_number)
|
||||
formData.append('seal_type', data.seal_type)
|
||||
if (isFile(data.file)) formData.append('file', data.file)
|
||||
formData.append('approvers', data.approvers)
|
||||
return request({
|
||||
url: `/business/editApplication`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 申请用印展示
|
||||
export const BusinessApplicationdetail = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
if (data.times && data.times.length) {
|
||||
formData.append('times', data.times[0])
|
||||
formData.append('end_time', data.times[1])
|
||||
}
|
||||
formData.append('seal_type', data.seal_type)
|
||||
formData.append('CaseNumber', data.CaseNumber)
|
||||
return request({
|
||||
url: `/business/applicationdetail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除申请用印
|
||||
export const BusinessDeleteApplication = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/business/deleteApplication`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
56
src/api/calibration/approval/index.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 审批
|
||||
* */
|
||||
|
||||
// 审批接口
|
||||
export const UserApprovalProcessing = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('type', data.type)
|
||||
formData.append('state', data.state)
|
||||
if (data.rejection_reason) formData.append('rejection_reason', data.rejection_reason)
|
||||
if (data.settlement_salary) formData.append('settlement_salary', data.settlement_salary)
|
||||
if (data.allocate) formData.append('allocate', data.allocate)
|
||||
return request({
|
||||
url: `/user/approval_processing`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 查询待办审核状态接口
|
||||
export const UserApprovalStatusCheck = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('type', data.type)
|
||||
return request({
|
||||
url: `/user/approval-status-check`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 审批分页接口
|
||||
export const UserRoxyexhibition = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
formData.append('type', data.type)
|
||||
formData.append('status', data.status)
|
||||
return request({
|
||||
url: `/user/roxyexhibition`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
78
src/api/calibration/bidRegistration/index.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
import request from '@/utils/request'
|
||||
import { isFile } from '@/utils/auxiliaryFunction'
|
||||
|
||||
/*
|
||||
* 投标登记
|
||||
* */
|
||||
|
||||
// 新增投标登记
|
||||
export const BusinessBid = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('BiddingUnit', data.BiddingUnit)
|
||||
formData.append('ProjectName', data.ProjectName)
|
||||
formData.append('times', data.times)
|
||||
formData.append('BiddingAnnouncement', data.BiddingAnnouncement)
|
||||
formData.append('approvers', data.approvers)
|
||||
return request({
|
||||
url: `/business/bid`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑投标登记
|
||||
export const BusinessEditBid = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('BiddingUnit', data.BiddingUnit)
|
||||
formData.append('ProjectName', data.ProjectName)
|
||||
formData.append('times', data.times)
|
||||
if (isFile(data.BiddingAnnouncement))
|
||||
formData.append('BiddingAnnouncement', data.BiddingAnnouncement)
|
||||
formData.append('approvers', data.approvers)
|
||||
return request({
|
||||
url: `/business/editBid`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 投标登记展示
|
||||
export const BusinessBiddetail = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
if (data.times && data.times.length) {
|
||||
formData.append('times', data.times[0])
|
||||
formData.append('end_time', data.times[1])
|
||||
}
|
||||
formData.append('client_username', data.client_username)
|
||||
return request({
|
||||
url: `/business/biddetail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除投标登记
|
||||
export const BusinessDeleteBid = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/business/deleteBid`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
128
src/api/calibration/caseLabel/index.ts
Normal file
@@ -0,0 +1,128 @@
|
||||
import request from '@/utils/request'
|
||||
import { isFile } from '@/utils/auxiliaryFunction'
|
||||
|
||||
/*
|
||||
* 标签管理
|
||||
* */
|
||||
|
||||
// 新增标签
|
||||
export const BusinessCaseTagCreate = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('name', data.name)
|
||||
formData.append('color', data.color)
|
||||
formData.append('description', data.description)
|
||||
return request({
|
||||
url: `/business/case-tag-create`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑标签
|
||||
export const BusinessCaseTagEdit = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('name', data.name)
|
||||
formData.append('color', data.color)
|
||||
formData.append('description', data.description)
|
||||
return request({
|
||||
url: `/business/case-tag-edit`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 标签下拉列表
|
||||
export const BusinessCaseTagDropdownList = () => {
|
||||
return request({
|
||||
url: `/business/case-tag-dropdown-list`,
|
||||
method: 'post',
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 标签列表查询
|
||||
export const BusinessCaseTagList = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
formData.append('name', data.name)
|
||||
return request({
|
||||
url: `/business/case-tag-list`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 标签详情查询
|
||||
export const BusinessCaseTagDetail = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/business/case-tag-detail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除标签
|
||||
export const BusinessCaseTagDelete = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/business/case-tag-delete`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 按标签筛选案件
|
||||
export const BusinessCaseListByTag = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('tag_ids', data.tag_ids)
|
||||
formData.append('page', data.page)
|
||||
formData.append('per_page', data.per_page)
|
||||
formData.append('times', data.times)
|
||||
formData.append('end_time', data.times)
|
||||
formData.append('type', data.type)
|
||||
return request({
|
||||
url: `/business/case-list-by-tag`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 案件设置标签接口
|
||||
export const BusinessSetCaseTags = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('case_id', data.case_id)
|
||||
formData.append('tag_ids', data.tag_ids)
|
||||
return request({
|
||||
url: `/business/set-case-tags`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
272
src/api/calibration/caseManagement/index.ts
Normal file
@@ -0,0 +1,272 @@
|
||||
import request from '@/utils/request'
|
||||
import { isFile } from '@/utils/auxiliaryFunction'
|
||||
|
||||
/*
|
||||
* 案件管理
|
||||
* */
|
||||
|
||||
// 新增案件
|
||||
export const BusinessCasemanagement = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('project_id', data.project_id)
|
||||
formData.append('times', data.times)
|
||||
if (isFile(data.AgencyContract)) formData.append('AgencyContract', data.AgencyContract)
|
||||
if (isFile(data.Contractreturn)) formData.append('Contractreturn', data.Contractreturn)
|
||||
if (isFile(data.Closingapplication))
|
||||
formData.append('Closingapplication', data.Closingapplication)
|
||||
formData.append('approvers', JSON.stringify(data.approvers))
|
||||
return request({
|
||||
url: `/business/casemanagement`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑案件管理信息
|
||||
export const BusinessEditCase = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('times', data.times)
|
||||
if (isFile(data.AgencyContract)) formData.append('AgencyContract', data.AgencyContract)
|
||||
if (isFile(data.Contractreturn)) formData.append('Contractreturn', data.Contractreturn)
|
||||
if (isFile(data.Closingapplication))
|
||||
formData.append('Closingapplication', data.Closingapplication)
|
||||
formData.append('ChangeRequest', data.ChangeRequest)
|
||||
formData.append('paymentcollection', data.paymentcollection)
|
||||
return request({
|
||||
url: `/business/editCase`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 案件分页查询
|
||||
export const BusinessCasemanagementdetail = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
if (data.times && data.times.length) {
|
||||
formData.append('times', data.times[0])
|
||||
formData.append('end_time', data.times[1])
|
||||
}
|
||||
formData.append('type', data.type)
|
||||
formData.append('contract_no', data.contract_no)
|
||||
formData.append('client_name', data.client_name)
|
||||
formData.append('party_name', data.party_name)
|
||||
if (data.tags && data.tags.length) formData.append('tags', JSON.stringify(data.tags))
|
||||
return request({
|
||||
url: `/business/casemanagementdetail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除案件管理
|
||||
export const BusinessDeleteCase = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/business/deleteCase`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 案件已收款(累加)
|
||||
export const BusinessAccumulate = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('user_id', data.user_id)
|
||||
formData.append('paymentcollection', data.paymentcollection)
|
||||
return request({
|
||||
url: `/business/accumulate`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 上传发票
|
||||
export const BusinessUploadinvoice = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('user_id', data.user_id)
|
||||
formData.append('amount', data.amount)
|
||||
formData.append('file', data.file)
|
||||
return request({
|
||||
url: `/business/uploadinvoice`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 发票详情
|
||||
export const BusinessInvoicedetail = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/business/invoicedetail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 案件日志
|
||||
export const BusinessLog = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('content', data.content)
|
||||
formData.append('file', data.file)
|
||||
formData.append('case_id', data.case_id)
|
||||
return request({
|
||||
url: `/business/log`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 案件日志导出Excel
|
||||
export const BusinessExportCaseLogExcel = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('case_id', data.case_id)
|
||||
return request({
|
||||
url: `/business/export-case-log-excel`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 案件日志分页查询
|
||||
export const BusinessLogdetail = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
formData.append('case_id', data.case_id)
|
||||
return request({
|
||||
url: `/business/logdetail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 案件材料更新
|
||||
export const BusinessCaseAttachmentUpdate = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('type', data.type)
|
||||
if (isFile(data.file)) formData.append('file', data.file)
|
||||
formData.append('case_id', data.case_id)
|
||||
if (data.Contractreturn) formData.append('Contractreturn', data.Contractreturn)
|
||||
if (data.approvers) formData.append('approvers', JSON.stringify(data.approvers))
|
||||
return request({
|
||||
url: `/business/case-attachment-update`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 创建案件下拉列表接口
|
||||
export const BusinessCaseDropdownList = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('state', data.state)
|
||||
return request({
|
||||
url: `/business/case-dropdown-list`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 创建申请变更
|
||||
export const BusinessCaseChangeRequestCreate = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('case_id', data.case_id)
|
||||
formData.append('contract_no', data.contract_no)
|
||||
formData.append('change_item', data.change_item)
|
||||
formData.append('change_reason', data.change_reason)
|
||||
formData.append('change_agreement', data.change_agreement)
|
||||
if (data.approvers) formData.append('approvers', JSON.stringify(data.approvers))
|
||||
return request({
|
||||
url: `/business/case-change-request-create`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 申请变更列表
|
||||
export const BusinessCaseChangeRequestList = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
formData.append('case_id', data.case_id)
|
||||
return request({
|
||||
url: `/business/case-change-request-list`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 申请变更详情
|
||||
export const ChangeRequestId = (change_request_id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('change_request_id', change_request_id)
|
||||
return request({
|
||||
url: `change_request_id`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 利益冲突检索接口
|
||||
export const BusinessConflictSearch = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('client_info', data.client_info)
|
||||
formData.append('party_info', data.party_info)
|
||||
return request({
|
||||
url: `/business/conflict-search`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
110
src/api/calibration/conflictOfInterestSearch/index.ts
Normal file
@@ -0,0 +1,110 @@
|
||||
import request from '@/utils/request'
|
||||
import { isFile } from '@/utils/auxiliaryFunction'
|
||||
|
||||
/*
|
||||
* 立项登记
|
||||
* */
|
||||
|
||||
// 新增立项登记
|
||||
export const BusinessProject = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('type', data.type.split(',')[0])
|
||||
formData.append('ContractNo', data.ContractNo)
|
||||
formData.append('times', data.times)
|
||||
formData.append('responsiblefor', data.responsiblefor)
|
||||
formData.append('charge', data.charge)
|
||||
formData.append('contract', data.contract)
|
||||
formData.append('client_info', data.client_info)
|
||||
formData.append('party_info', data.party_info)
|
||||
formData.append('description', data.description)
|
||||
if (data.approvers) formData.append('approvers', JSON.stringify(data.approvers))
|
||||
return request({
|
||||
url: `/business/project`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑立案登记
|
||||
export const BusinessEditproject = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('times', data.times)
|
||||
formData.append('responsiblefor', data.responsiblefor)
|
||||
formData.append('charge', data.charge)
|
||||
if (isFile(data.contract)) formData.append('contract', data.contract)
|
||||
return request({
|
||||
url: `/business/editproject`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 立案登记类型查询
|
||||
export const BusinessProjectquerytype = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('year', data.year)
|
||||
formData.append('type', data.type)
|
||||
return request({
|
||||
url: `/business/projectquerytype`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 立项登记展示
|
||||
export const BusinessProjectdetail = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
if (data.times && data.times.length) {
|
||||
formData.append('times', data.times[0])
|
||||
formData.append('end_time', data.times[1])
|
||||
}
|
||||
formData.append('client_username', data.client_username)
|
||||
return request({
|
||||
url: `/business/projectdetail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除立项接口
|
||||
export const BusinessDeleteProject = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/business/deleteProject`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 获取已通过审核的立项登记列表
|
||||
export const BusinessProjectDropdownList = (exclude_has_case: string = 'true') => {
|
||||
const formData = new FormData()
|
||||
formData.append('exclude_has_case', exclude_has_case)
|
||||
return request({
|
||||
url: `/business/project-dropdown-list`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
63
src/api/calibration/department/index.ts
Normal file
@@ -0,0 +1,63 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 部门管理
|
||||
* */
|
||||
|
||||
// 公司部门列表
|
||||
export const UserDepartment = (name: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('name', name)
|
||||
return request({
|
||||
url: `/user/department`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 添加部门
|
||||
export const UserAddDepartment = (name: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('name', name)
|
||||
return request({
|
||||
url: `/user/add_department`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除部门
|
||||
export const UserDeleteDepartment = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/user/delete_department`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 部门分页查询
|
||||
export const UserPersonlist = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('per_page', data.pageSize)
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('name', data.name)
|
||||
return request({
|
||||
url: `/user/personlist`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
72
src/api/calibration/departureFinancialRegistration/index.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 离职财务登记
|
||||
* */
|
||||
|
||||
// 新增离职财务登记
|
||||
export const FinanceUserDeparture = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('username', data.username)
|
||||
formData.append('Dateofdeparture', data.Dateofdeparture)
|
||||
formData.append('approvers', data.approvers)
|
||||
return request({
|
||||
url: `/finance/user-departure`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑离职登记信息
|
||||
export const FinanceEditUserDeparture = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('Dateofdeparture', data.Dateofdeparture)
|
||||
formData.append('approvers', data.approvers)
|
||||
return request({
|
||||
url: `/finance/editUserDeparture`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 查询离职登记列表
|
||||
export const FinanceUserDepartureDetail = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
if (data.times && data.times.length) {
|
||||
formData.append('times', data.times[0])
|
||||
formData.append('end_time', data.times[1])
|
||||
}
|
||||
formData.append('username', data.username)
|
||||
if (data.state) formData.append('state', data.state)
|
||||
return request({
|
||||
url: `/finance/user-departure-detail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除离职登记并恢复用户状态
|
||||
export const FinanceDeleteUserDeparture = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/finance/deleteUserDeparture`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
77
src/api/calibration/inventoryRegistration/index.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
import request from '@/utils/request'
|
||||
import { isFile } from '@/utils/auxiliaryFunction'
|
||||
|
||||
/*
|
||||
* 入库登记
|
||||
* */
|
||||
|
||||
// 新增入库登记
|
||||
export const BusinessWarehousing = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('unit', data.unit)
|
||||
formData.append('mark', data.mark)
|
||||
formData.append('lawyer', data.lawyer)
|
||||
formData.append('deadline', data.deadline)
|
||||
formData.append('contract', data.contract)
|
||||
return request({
|
||||
url: `/business/warehousing`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑入库登记
|
||||
export const BusinessEditWarehousing = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('unit', data.unit)
|
||||
formData.append('mark', data.mark)
|
||||
formData.append('lawyer', data.lawyer)
|
||||
formData.append('deadline', data.deadline)
|
||||
if (isFile(data.contract)) formData.append('contract', data.contract)
|
||||
return request({
|
||||
url: `/business/editWarehousing`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 入库登记 展示
|
||||
export const BusinessWarehousingdetail = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
if (data.times && data.times.length) {
|
||||
formData.append('times', data.times[0])
|
||||
formData.append('end_time', data.times[1])
|
||||
}
|
||||
formData.append('unit', data.unit)
|
||||
return request({
|
||||
url: `/business/warehousingdetail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除入库登记
|
||||
export const BusinessDeleteWarehousing = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/business/deleteWarehousing`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
81
src/api/calibration/invoiceApplication/index.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 开票申请
|
||||
* */
|
||||
|
||||
// 开发票申请
|
||||
export const FinanceIssueInvoice = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('case_id', data.case_id)
|
||||
formData.append('amount', data.amount)
|
||||
formData.append('type', data.type)
|
||||
formData.append('unit', data.unit)
|
||||
formData.append('number', data.number)
|
||||
formData.append('address_telephone', data.address_telephone)
|
||||
formData.append('bank', data.bank)
|
||||
return request({
|
||||
url: `/finance/issue-invoice`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑开票申请
|
||||
export const FinanceEditInvoice = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('case_id', data.case_id)
|
||||
formData.append('amount', data.amount)
|
||||
formData.append('type', data.type)
|
||||
formData.append('unit', data.unit)
|
||||
formData.append('number', data.number)
|
||||
formData.append('address_telephone', data.address_telephone)
|
||||
formData.append('bank', data.bank)
|
||||
return request({
|
||||
url: `/finance/editInvoice`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 开票分页查询
|
||||
export const FinanceIssueDetail = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
if (data.times && data.times.length) {
|
||||
formData.append('times', data.times[0])
|
||||
formData.append('end_time', data.times[1])
|
||||
}
|
||||
formData.append('unit', data.unit)
|
||||
formData.append('ContractNo', data.ContractNo)
|
||||
return request({
|
||||
url: `/finance/issue-Detail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除开票申请
|
||||
export const FinanceDeleteInvoice = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/finance/deleteInvoice`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
45
src/api/calibration/lawFirmStandardDocuments/index.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 律所标准文件
|
||||
* */
|
||||
|
||||
// 新增律所标准文件
|
||||
export const BusinessLawyerflie = (data: any) => {
|
||||
const formData = new FormData()
|
||||
// formData.append('title', data.title)
|
||||
formData.append('file', data.file)
|
||||
return request({
|
||||
url: `/business/Lawyerflie`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 律所标准文件展示
|
||||
export const BusinessLawdisplay = (data: any = {}) => {
|
||||
const formData = new FormData()
|
||||
if (data.title) formData.append('title', data.title)
|
||||
return request({
|
||||
url: `/business/lawdisplay`,
|
||||
method: 'post',
|
||||
data: formData
|
||||
})
|
||||
}
|
||||
|
||||
// 删除律所标准文件
|
||||
export const BusinessLwaDetail = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/business/LwaDetail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
85
src/api/calibration/lmportantScheduleManagement/index.ts
Normal file
@@ -0,0 +1,85 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 重要日程提示
|
||||
* */
|
||||
|
||||
// 新增重要日程提示
|
||||
export const BusinessSchedule = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('title', data.title)
|
||||
formData.append('tiems', data.tiems)
|
||||
formData.append('end_time', data.end_time)
|
||||
formData.append('remark', data.remark)
|
||||
return request({
|
||||
url: `/business/schedule`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑日程
|
||||
export const BusinessEditSchedule = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('title', data.title)
|
||||
formData.append('tiems', data.tiems)
|
||||
formData.append('end_time', data.end_time)
|
||||
formData.append('remark', data.remark)
|
||||
return request({
|
||||
url: `/business/editSchedule`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 日程展示
|
||||
export const BusinessScheduleDetail = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
if (data.title) formData.append('title', data.title)
|
||||
return request({
|
||||
url: `/business/ScheduleDetail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除日程
|
||||
export const BusinessDscheduledetail = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/business/scheduledetail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 完成代办
|
||||
export const BusinessHandleSchedule = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('state', data.state)
|
||||
return request({
|
||||
url: `/business/handleSchedule`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
40
src/api/calibration/login/index.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 登录
|
||||
* */
|
||||
|
||||
export const userLogin = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('username', data.username)
|
||||
formData.append('password', data.password)
|
||||
return request({
|
||||
url: `/api/auth/login`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 用户信息
|
||||
export const UserGetInfo = () => {
|
||||
return request({
|
||||
url: `/api/auth/get_info`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export const BusinessPropagandaEit = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('content', data.content)
|
||||
return request({
|
||||
url: `/business/PropagandaEit`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
54
src/api/calibration/onboardingRegistration/index.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 入职财务登记
|
||||
* */
|
||||
|
||||
// 入职财务
|
||||
export const FinanceUserRegister = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('username', data.username)
|
||||
formData.append('Dateofjoining', data.Dateofjoining)
|
||||
formData.append('salary', data.salary)
|
||||
if (data.approvers) formData.append('approvers', JSON.stringify(data.approvers))
|
||||
return request({
|
||||
url: `/finance/user-register`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 未入职财务登记查询接口
|
||||
export const FinanceUserRegisterDetail = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
return request({
|
||||
url: `/finance/user-register-detail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 已入职登记的用户
|
||||
export const FinanceRegisteredUserList = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
formData.append('username', '')
|
||||
formData.append('department', '')
|
||||
return request({
|
||||
url: `/finance/registered-user-list`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
84
src/api/calibration/paymentApplicationForm/index.ts
Normal file
@@ -0,0 +1,84 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 付款申请单
|
||||
* */
|
||||
|
||||
// 新增付款请单
|
||||
export const FinancePaymentRequest = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('payment_reason', data.payment_reason)
|
||||
formData.append('amount', data.amount)
|
||||
formData.append('times', data.times)
|
||||
formData.append('payee_name', data.payee_name)
|
||||
formData.append('payee_account', data.payee_account)
|
||||
formData.append('payee_bank', data.payee_bank)
|
||||
formData.append('payment_description', data.payment_description)
|
||||
formData.append('approvers', data.approvers)
|
||||
formData.append('applicant', data.applicant)
|
||||
return request({
|
||||
url: `/finance/payment-request`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑付款申请
|
||||
export const FinanceEditPayment = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('payment_reason', data.payment_reason)
|
||||
formData.append('amount', data.amount)
|
||||
formData.append('times', data.times)
|
||||
formData.append('payee_name', data.payee_name)
|
||||
formData.append('payee_account', data.payee_account)
|
||||
formData.append('payee_bank', data.payee_bank)
|
||||
formData.append('payment_description', data.payment_description)
|
||||
formData.append('approvers', data.approvers)
|
||||
formData.append('applicant', data.applicant)
|
||||
return request({
|
||||
url: `/finance/editPayment`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 付款申请展示
|
||||
export const FinancePaymentDisplay = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
if (data.times && data.times.length) {
|
||||
formData.append('times', data.times[0])
|
||||
formData.append('end_time', data.times[1])
|
||||
}
|
||||
formData.append('payee', data.payee)
|
||||
return request({
|
||||
url: `/finance/PaymentDisplay`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除付款申请
|
||||
export const FinanceDeletePayment = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/finance/deletePayment`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
72
src/api/calibration/permissionManagement/index.ts
Normal file
@@ -0,0 +1,72 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 权限管理
|
||||
* */
|
||||
|
||||
// 新增权限
|
||||
export const BusinessAddRermission = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('permission_name', data.permission_name)
|
||||
formData.append('permission_logo', data.permission_logo)
|
||||
formData.append('parent', data.parent)
|
||||
return request({
|
||||
url: `/business/addRermission`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑权限
|
||||
export const BusinessEditRermission = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('permission_name', data.permission_name)
|
||||
formData.append('permission_logo', data.permission_logo)
|
||||
formData.append('parent', data.parent)
|
||||
return request({
|
||||
url: `/business/editRermission`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 权限展示
|
||||
export const BusinessDisplayRermission = () => {
|
||||
// const formData = new FormData()
|
||||
// formData.append('page', data.pageNum)
|
||||
// formData.append('per_page', data.pageSize)
|
||||
// if (data.times && data.times.length) {
|
||||
// formData.append('times', data.times[0])
|
||||
// formData.append('end_time', data.times[1])
|
||||
// }
|
||||
// formData.append('unit', data.unit)
|
||||
return request({
|
||||
url: `/business/displayRermission`,
|
||||
method: 'post'
|
||||
// data: formData,
|
||||
// headers: {
|
||||
// 'Content-Type': 'multipart/form-data'
|
||||
// }
|
||||
})
|
||||
}
|
||||
|
||||
// 删除权限
|
||||
export const BusinessDeleteRermission = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/business/deleteRermission`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
125
src/api/calibration/personnelManagement/index.ts
Normal file
@@ -0,0 +1,125 @@
|
||||
import { isFile } from '@/utils/auxiliaryFunction'
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 人事管理
|
||||
* */
|
||||
|
||||
// 人员分页查询
|
||||
export const UserPersonnelList = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
formData.append('username', data.username)
|
||||
if (data.position) formData.append('position', data.position)
|
||||
if (data.team) formData.append('team', data.team)
|
||||
if (data.academic) formData.append('academic', data.academic)
|
||||
if (data.endtime) formData.append('endtime', data.endtime)
|
||||
formData.append('department', data.department === '全部' ? '' : data.department)
|
||||
return request({
|
||||
url: `/user/personnel-list`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 人事管理-人员添加
|
||||
export const UserCreateUser = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('username', data.username)
|
||||
formData.append('account', data.account)
|
||||
formData.append('password', data.password)
|
||||
formData.append('nation', data.nation)
|
||||
formData.append('IdCard', data.IdCard)
|
||||
formData.append('department', JSON.stringify(data.department))
|
||||
formData.append('role', JSON.stringify(data.role))
|
||||
formData.append('mobilePhone', data.mobilePhone)
|
||||
formData.append('position', data.position)
|
||||
formData.append('team', data.team)
|
||||
formData.append('Dateofjoining', data.Dateofjoining)
|
||||
formData.append('Confirmationtime', data.Confirmationtime)
|
||||
formData.append('Practicingcertificatetime', data.Practicingcertificatetime)
|
||||
formData.append('AcademicResume', data.AcademicResume)
|
||||
|
||||
formData.append('academic', JSON.stringify(data.academic))
|
||||
formData.append('contract', data.contract)
|
||||
formData.append('ApplicationForm', data.ApplicationForm)
|
||||
return request({
|
||||
url: `/user/create-user`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 人事管理-人员编辑
|
||||
export const UserEditorialStaff = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('username', data.username)
|
||||
formData.append('account', data.account)
|
||||
if (data.password) formData.append('password', data.password)
|
||||
formData.append('nation', data.nation)
|
||||
formData.append('IdCard', data.IdCard)
|
||||
formData.append('department', data.department)
|
||||
formData.append('role', JSON.stringify(data.role))
|
||||
formData.append('mobilePhone', data.mobilePhone)
|
||||
formData.append('position', data.position)
|
||||
formData.append('team', data.team)
|
||||
formData.append('Dateofjoining', data.Dateofjoining)
|
||||
formData.append('Confirmationtime', data.Confirmationtime)
|
||||
formData.append('Practicingcertificatetime', data.Practicingcertificatetime)
|
||||
formData.append('academic', JSON.stringify(data.academic))
|
||||
if (isFile(data.AcademicResume)) formData.append('AcademicResume', data.AcademicResume)
|
||||
if (isFile(data.contract)) formData.append('contract', data.contract)
|
||||
if (isFile(data.ApplicationForm)) formData.append('ApplicationForm', data.ApplicationForm)
|
||||
return request({
|
||||
url: `/user/editorial-staff`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 人员列表
|
||||
export const UserPersonneldisplay = () => {
|
||||
return request({
|
||||
url: `/user/personneldisplay`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 修改密码
|
||||
export const UserChangePassword = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('old_password', data.old_password)
|
||||
formData.append('new_password', data.new_password)
|
||||
return request({
|
||||
url: `/user/change-password`,
|
||||
method: 'post',
|
||||
data: formData
|
||||
})
|
||||
}
|
||||
|
||||
// 未进行入职登记人员查询接口
|
||||
export const FinanceUnregisteredUserList = (username: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', '1')
|
||||
formData.append('per_page', '9999')
|
||||
formData.append('username', username)
|
||||
return request({
|
||||
url: `/finance/unregistered-user-list`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
96
src/api/calibration/preRegistration/index.ts
Normal file
@@ -0,0 +1,96 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 预立案登记
|
||||
* */
|
||||
|
||||
// 新增预立案登记
|
||||
export const BusinessRegister = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('times', data.times)
|
||||
formData.append('client_username', data.client_username)
|
||||
formData.append('client_card', data.client_card)
|
||||
formData.append('party_username', data.party_username)
|
||||
formData.append('party_card', data.party_card)
|
||||
formData.append('description', data.description)
|
||||
formData.append('Undertaker', data.Undertaker)
|
||||
return request({
|
||||
url: `/business/register`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑预立案
|
||||
export const BusinessEditRegistration = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('times', data.times)
|
||||
formData.append('client_username', data.client_username)
|
||||
formData.append('client_card', data.client_card)
|
||||
formData.append('party_username', data.party_username)
|
||||
formData.append('party_card', data.party_card)
|
||||
formData.append('description', data.description)
|
||||
formData.append('Undertaker', data.Undertaker)
|
||||
return request({
|
||||
url: `/business/editRegistration`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 预立案登记展示
|
||||
export const BusinessRegisterdetail = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
if (data.times && data.times.length) {
|
||||
formData.append('times', data.times[0])
|
||||
formData.append('end_time', data.times[1])
|
||||
}
|
||||
if (data.Undertaker) formData.append('Undertaker', data.Undertaker)
|
||||
return request({
|
||||
url: `/business/registerdetail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 预立案登记列表接口
|
||||
export const BusinessRegistrationlist = () => {
|
||||
return request({
|
||||
url: `/business/registrationlist`,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
// 预立案关联立案列表接口
|
||||
export const BusinessPreFilingLinkedCases = () => {
|
||||
return request({
|
||||
url: `/business/preFilingLinkedCases`,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
// 删除预立案登记接口
|
||||
export const BusinessDeleteRegistration = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/business/deleteRegistration`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
74
src/api/calibration/registrationPlatform/index.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 注册平台登记
|
||||
* */
|
||||
|
||||
// 新增注册平台登记
|
||||
export const BusinessPlatformRegistration = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('platform', data.platform)
|
||||
formData.append('number', data.number)
|
||||
formData.append('password', data.password)
|
||||
formData.append('username', data.username)
|
||||
return request({
|
||||
url: `/business/PlatformRegistration`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 注册平台登记编辑
|
||||
export const BusinessEditPlatform = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('platform', data.platform)
|
||||
formData.append('number', data.number)
|
||||
formData.append('password', data.password)
|
||||
formData.append('username', data.username)
|
||||
return request({
|
||||
url: `/business/editPlatform`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 注册平台登记展示
|
||||
export const BusinessPlatformDetail = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
// if (data.times && data.times.length) {
|
||||
// formData.append('times', data.times[0])
|
||||
// formData.append('end_time', data.times[1])
|
||||
// }
|
||||
// formData.append('unit', data.unit)
|
||||
return request({
|
||||
url: `/business/PlatformDetail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 注册平台登记删除
|
||||
export const BusinessDeletePlatform = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/business/deletePlatform`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
78
src/api/calibration/reimbursement/index.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 报销
|
||||
* */
|
||||
|
||||
// 新增报销
|
||||
export const FinanceReimbursement = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('person', data.person)
|
||||
formData.append('times', data.times)
|
||||
formData.append('reason', data.reason)
|
||||
formData.append('amount', data.amount)
|
||||
formData.append('FeeDescription', data.FeeDescription)
|
||||
formData.append('approvers', data.approvers)
|
||||
return request({
|
||||
url: `/finance/reimbursement`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑报销申请
|
||||
export const FinanceEditReimbursement = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('person', data.person)
|
||||
formData.append('times', data.times)
|
||||
formData.append('reason', data.reason)
|
||||
formData.append('amount', data.amount)
|
||||
formData.append('FeeDescription', data.FeeDescription)
|
||||
formData.append('approvers', data.approvers)
|
||||
return request({
|
||||
url: `/finance/editReimbursement`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 报销展示
|
||||
export const FinanceReidetail = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
if (data.times && data.times.length) {
|
||||
formData.append('times', data.times[0])
|
||||
formData.append('end_time', data.times[1])
|
||||
}
|
||||
formData.append('person', data.person)
|
||||
return request({
|
||||
url: `/finance/reidetail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除报销申请
|
||||
export const FinanceDeleteReimbursement = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/finance/deleteReimbursement`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
76
src/api/calibration/revenueRecognition/index.ts
Normal file
@@ -0,0 +1,76 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 收入确认
|
||||
* */
|
||||
|
||||
// 新增收入确认
|
||||
export const FinanceConfirm = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('times', data.times)
|
||||
formData.append('case_id', data.case_id)
|
||||
formData.append('CustomerID', data.CustomerID)
|
||||
formData.append('amount', data.amount)
|
||||
formData.append('approvers', data.approvers)
|
||||
return request({
|
||||
url: `/finance/confirm`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑收入确认
|
||||
export const FinanceEditIncome = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('times', data.times)
|
||||
formData.append('case_id', data.case_id)
|
||||
formData.append('CustomerID', data.CustomerID)
|
||||
formData.append('amount', data.amount)
|
||||
formData.append('approvers', data.approvers)
|
||||
return request({
|
||||
url: `/finance/editIncome`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 收入确认展示
|
||||
export const FinanceConfirmdisplay = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
if (data.times && data.times.length) {
|
||||
formData.append('times', data.times[0])
|
||||
formData.append('end_time', data.times[1])
|
||||
}
|
||||
formData.append('CustomerID', data.CustomerID)
|
||||
return request({
|
||||
url: `/finance/confirmdisplay`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除收入确认
|
||||
export const FinanceDeleteIncome = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/finance/deleteIncome`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
94
src/api/calibration/roleManagement/index.ts
Normal file
@@ -0,0 +1,94 @@
|
||||
// roleManagement
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 角色管理
|
||||
* */
|
||||
|
||||
// 添加角色
|
||||
export const BusinessAddRole = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('RoleName', data.RoleName)
|
||||
formData.append('remark', data.remark)
|
||||
return request({
|
||||
url: `/business/addRole`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑角色
|
||||
export const BusinessEditRole = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('RoleName', data.RoleName)
|
||||
formData.append('remark', data.remark)
|
||||
return request({
|
||||
url: `/business/EditRole`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 角色展示
|
||||
export const BusinessDisplayRole = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('RoleName', data.RoleName)
|
||||
return request({
|
||||
url: `/business/displayRole`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除角色
|
||||
export const BusinessDeleteRole = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/business/DeleteRole`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 赋予权限
|
||||
export const BusinessModifypermissions = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('permissionId', JSON.stringify(data.permissionId))
|
||||
return request({
|
||||
url: `/business/modifypermissions`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 根据角色查询权限
|
||||
export const BusinessGetRolePermissions = (roleId: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('roleId', roleId)
|
||||
return request({
|
||||
url: `/business/getRolePermissions`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
74
src/api/calibration/salaryBonusAdjustment/index.ts
Normal file
@@ -0,0 +1,74 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 工资/奖金变更
|
||||
* */
|
||||
|
||||
// 新增工资/奖金变更
|
||||
export const FinanceChange = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('username', data.username)
|
||||
formData.append('type', data.type)
|
||||
formData.append('Instructions', data.Instructions)
|
||||
formData.append('approvers', data.approvers)
|
||||
return request({
|
||||
url: `/finance/change`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑工资/奖金变更
|
||||
export const FinanceEditBonusChange = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('username', data.username)
|
||||
formData.append('type', data.type)
|
||||
formData.append('Instructions', data.Instructions)
|
||||
formData.append('approvers', data.approvers)
|
||||
return request({
|
||||
url: `/finance/editBonusChange`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 工资/奖金变更展示
|
||||
export const FinanceChangeDetail = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
if (data.times && data.times.length) {
|
||||
formData.append('times', data.times[0])
|
||||
formData.append('end_time', data.times[1])
|
||||
}
|
||||
formData.append('username', data.username)
|
||||
return request({
|
||||
url: `/finance/ChangeDetail`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除工资/奖金变更
|
||||
export const FinanceDeleteBonusChange = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/finance/deleteBonusChange`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
75
src/api/calibration/systemManagement/index.ts
Normal file
@@ -0,0 +1,75 @@
|
||||
import request from '@/utils/request'
|
||||
import { isFile } from '@/utils/auxiliaryFunction'
|
||||
|
||||
/*
|
||||
* 制度管理
|
||||
* */
|
||||
|
||||
// 新增制度
|
||||
export const BusinessAddSystem = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('title', data.title)
|
||||
formData.append('content', data.content)
|
||||
if (isFile(data.file)) formData.append('file', data.file)
|
||||
formData.append('state', data.state)
|
||||
return request({
|
||||
url: `/business/addSystem`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编制制度
|
||||
export const BusinessEitSystem = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('title', data.title)
|
||||
formData.append('content', data.content)
|
||||
if (isFile(data.file)) formData.append('file', data.file)
|
||||
formData.append('state', data.state)
|
||||
return request({
|
||||
url: `/business/eitSystem`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 制度分页
|
||||
export const BusinessSystemList = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
// if (data.times && data.times.length) {
|
||||
// formData.append('times', data.times[0])
|
||||
// formData.append('end_time', data.times[1])
|
||||
// }
|
||||
// formData.append('unit', data.unit)
|
||||
return request({
|
||||
url: `/business/SystemList`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除制度
|
||||
export const BusinessDeleteSystem = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/business/deleteSystem`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
82
src/api/calibration/teamManagement/index.ts
Normal file
@@ -0,0 +1,82 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/*
|
||||
* 团队管理
|
||||
* */
|
||||
|
||||
// 添加团队
|
||||
export const UserAdd_team = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('name', data.name)
|
||||
formData.append('team_type', data.team_type)
|
||||
formData.append('description', data.description)
|
||||
return request({
|
||||
url: `/user/add_team`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑团队
|
||||
export const UserEdit_team = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', data.id)
|
||||
formData.append('name', data.name)
|
||||
formData.append('team_type', data.team_type)
|
||||
formData.append('description', data.description)
|
||||
return request({
|
||||
url: `/user/edit_team`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 获取团队列表(下拉选项使用)
|
||||
export const UserTeam = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('name', data.name)
|
||||
return request({
|
||||
url: `/user/team`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 获取团队列表(分页)
|
||||
export const UserTeamList = (data: any) => {
|
||||
const formData = new FormData()
|
||||
formData.append('page', data.pageNum)
|
||||
formData.append('per_page', data.pageSize)
|
||||
formData.append('name', data.name)
|
||||
return request({
|
||||
url: `/user/team-list`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 删除团队
|
||||
export const UserDelete_team = (id: string) => {
|
||||
const formData = new FormData()
|
||||
formData.append('id', id)
|
||||
return request({
|
||||
url: `/user/delete_team`,
|
||||
method: 'post',
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
}
|
||||
70
src/api/system/config-api.ts
Normal file
@@ -0,0 +1,70 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
const CONFIG_BASE_URL = '/api/v1/config'
|
||||
|
||||
const ConfigAPI = {
|
||||
/** 获取配置分页数据 */
|
||||
getPage(queryParams?: ConfigPageQuery) {
|
||||
return request<any, PageResult<ConfigPageVO[]>>({
|
||||
url: `${CONFIG_BASE_URL}/page`,
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
},
|
||||
/** 获取配置表单数据 */
|
||||
getFormData(id: string) {
|
||||
return request<any, ConfigForm>({
|
||||
url: `${CONFIG_BASE_URL}/${id}/form`,
|
||||
method: 'get'
|
||||
})
|
||||
},
|
||||
/** 新增配置 */
|
||||
create(data: ConfigForm) {
|
||||
return request({ url: `${CONFIG_BASE_URL}`, method: 'post', data })
|
||||
},
|
||||
/** 修改配置 */
|
||||
update(id: string, data: ConfigForm) {
|
||||
return request({ url: `${CONFIG_BASE_URL}/${id}`, method: 'put', data })
|
||||
},
|
||||
/** 删除配置 */
|
||||
deleteById(id: string) {
|
||||
return request({ url: `${CONFIG_BASE_URL}/${id}`, method: 'delete' })
|
||||
},
|
||||
/** 刷新配置缓存 */
|
||||
refreshCache() {
|
||||
return request({ url: `${CONFIG_BASE_URL}/refresh`, method: 'PUT' })
|
||||
}
|
||||
}
|
||||
|
||||
export default ConfigAPI
|
||||
|
||||
export interface ConfigPageQuery extends PageQuery {
|
||||
/** 搜索关键字 */
|
||||
keywords?: string
|
||||
}
|
||||
|
||||
export interface ConfigForm {
|
||||
/** 主键 */
|
||||
id?: string
|
||||
/** 配置名称 */
|
||||
configName?: string
|
||||
/** 配置键 */
|
||||
configKey?: string
|
||||
/** 配置值 */
|
||||
configValue?: string
|
||||
/** 描述、备注 */
|
||||
remark?: string
|
||||
}
|
||||
|
||||
export interface ConfigPageVO {
|
||||
/** 主键 */
|
||||
id?: string
|
||||
/** 配置名称 */
|
||||
configName?: string
|
||||
/** 配置键 */
|
||||
configKey?: string
|
||||
/** 配置值 */
|
||||
configValue?: string
|
||||
/** 描述、备注 */
|
||||
remark?: string
|
||||
}
|
||||
75
src/api/system/dept-api.ts
Normal file
@@ -0,0 +1,75 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
const DEPT_BASE_URL = '/api/v1/dept'
|
||||
|
||||
const DeptAPI = {
|
||||
/** 获取部门树形列表 */
|
||||
getList(queryParams?: DeptQuery) {
|
||||
return request<any, DeptVO[]>({ url: `${DEPT_BASE_URL}`, method: 'get', params: queryParams })
|
||||
},
|
||||
/** 获取部门下拉数据源 */
|
||||
getOptions() {
|
||||
return request<any, OptionType[]>({ url: `${DEPT_BASE_URL}/options`, method: 'get' })
|
||||
},
|
||||
/** 获取部门表单数据 */
|
||||
getFormData(id: string) {
|
||||
return request<any, DeptForm>({ url: `${DEPT_BASE_URL}/${id}/form`, method: 'get' })
|
||||
},
|
||||
/** 新增部门 */
|
||||
create(data: DeptForm) {
|
||||
return request({ url: `${DEPT_BASE_URL}`, method: 'post', data })
|
||||
},
|
||||
/** 修改部门 */
|
||||
update(id: string, data: DeptForm) {
|
||||
return request({ url: `${DEPT_BASE_URL}/${id}`, method: 'put', data })
|
||||
},
|
||||
/** 批量删除部门,多个以英文逗号(,)分割 */
|
||||
deleteByIds(ids: string) {
|
||||
return request({ url: `${DEPT_BASE_URL}/${ids}`, method: 'delete' })
|
||||
}
|
||||
}
|
||||
|
||||
export default DeptAPI
|
||||
|
||||
export interface DeptQuery {
|
||||
/** 搜索关键字 */
|
||||
keywords?: string
|
||||
/** 状态 */
|
||||
status?: number
|
||||
}
|
||||
|
||||
export interface DeptVO {
|
||||
/** 子部门 */
|
||||
children?: DeptVO[]
|
||||
/** 创建时间 */
|
||||
createTime?: Date
|
||||
/** 部门ID */
|
||||
id?: string
|
||||
/** 部门名称 */
|
||||
name?: string
|
||||
/** 部门编号 */
|
||||
code?: string
|
||||
/** 父部门ID */
|
||||
parentid?: string
|
||||
/** 排序 */
|
||||
sort?: number
|
||||
/** 状态(1:启用;0:禁用) */
|
||||
status?: number
|
||||
/** 修改时间 */
|
||||
updateTime?: Date
|
||||
}
|
||||
|
||||
export interface DeptForm {
|
||||
/** 部门ID(新增不填) */
|
||||
id?: string
|
||||
/** 部门名称 */
|
||||
name?: string
|
||||
/** 部门编号 */
|
||||
code?: string
|
||||
/** 父部门ID */
|
||||
parentId: string
|
||||
/** 排序 */
|
||||
sort?: number
|
||||
/** 状态(1:启用;0:禁用) */
|
||||
status?: number
|
||||
}
|
||||
145
src/api/system/dict-api.ts
Normal file
@@ -0,0 +1,145 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
const DICT_BASE_URL = '/api/v1/dicts'
|
||||
|
||||
const DictAPI = {
|
||||
/** 字典分页列表 */
|
||||
getPage(queryParams: DictPageQuery) {
|
||||
return request<any, PageResult<DictPageVO[]>>({
|
||||
url: `${DICT_BASE_URL}/page`,
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
},
|
||||
/** 字典列表 */
|
||||
getList() {
|
||||
return request<any, OptionType[]>({ url: `${DICT_BASE_URL}`, method: 'get' })
|
||||
},
|
||||
/** 字典表单数据 */
|
||||
getFormData(id: string) {
|
||||
return request<any, DictForm>({ url: `${DICT_BASE_URL}/${id}/form`, method: 'get' })
|
||||
},
|
||||
/** 新增字典 */
|
||||
create(data: DictForm) {
|
||||
return request({ url: `${DICT_BASE_URL}`, method: 'post', data })
|
||||
},
|
||||
/** 修改字典 */
|
||||
update(id: string, data: DictForm) {
|
||||
return request({ url: `${DICT_BASE_URL}/${id}`, method: 'put', data })
|
||||
},
|
||||
/** 删除字典 */
|
||||
deleteByIds(ids: string) {
|
||||
return request({ url: `${DICT_BASE_URL}/${ids}`, method: 'delete' })
|
||||
},
|
||||
|
||||
/** 获取字典项分页列表 */
|
||||
getDictItemPage(dictCode: string, queryParams: DictItemPageQuery) {
|
||||
return request<any, PageResult<DictItemPageVO[]>>({
|
||||
url: `${DICT_BASE_URL}/${dictCode}/items/page`,
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
},
|
||||
/** 获取字典项列表 */
|
||||
getDictItems(dictCode: string) {
|
||||
return request<any, DictItemOption[]>({
|
||||
url: `${DICT_BASE_URL}/${dictCode}/items`,
|
||||
method: 'get'
|
||||
})
|
||||
},
|
||||
/** 新增字典项 */
|
||||
createDictItem(dictCode: string, data: DictItemForm) {
|
||||
return request({ url: `${DICT_BASE_URL}/${dictCode}/items`, method: 'post', data })
|
||||
},
|
||||
/** 获取字典项表单数据 */
|
||||
getDictItemFormData(dictCode: string, id: string) {
|
||||
return request<any, DictItemForm>({
|
||||
url: `${DICT_BASE_URL}/${dictCode}/items/${id}/form`,
|
||||
method: 'get'
|
||||
})
|
||||
},
|
||||
/** 修改字典项 */
|
||||
updateDictItem(dictCode: string, id: string, data: DictItemForm) {
|
||||
return request({ url: `${DICT_BASE_URL}/${dictCode}/items/${id}`, method: 'put', data })
|
||||
},
|
||||
/** 删除字典项 */
|
||||
deleteDictItems(dictCode: string, ids: string) {
|
||||
return request({ url: `${DICT_BASE_URL}/${dictCode}/items/${ids}`, method: 'delete' })
|
||||
}
|
||||
}
|
||||
|
||||
export default DictAPI
|
||||
|
||||
export interface DictPageQuery extends PageQuery {
|
||||
/** 搜索关键字 */
|
||||
keywords?: string
|
||||
/** 状态(1:启用;0:禁用) */
|
||||
status?: number
|
||||
}
|
||||
export interface DictPageVO {
|
||||
/** 字典ID */
|
||||
id: string
|
||||
/** 字典名称 */
|
||||
name: string
|
||||
/** 字典编码 */
|
||||
dictCode: string
|
||||
/** 状态(1:启用;0:禁用) */
|
||||
status: number
|
||||
}
|
||||
export interface DictForm {
|
||||
/** 字典ID(新增不填) */
|
||||
id?: string
|
||||
/** 字典名称 */
|
||||
name?: string
|
||||
/** 字典编码 */
|
||||
dictCode?: string
|
||||
/** 状态(1:启用;0:禁用) */
|
||||
status?: number
|
||||
/** 备注 */
|
||||
remark?: string
|
||||
}
|
||||
export interface DictItemPageQuery extends PageQuery {
|
||||
/** 搜索关键字 */
|
||||
keywords?: string
|
||||
/** 字典编码 */
|
||||
dictCode?: string
|
||||
}
|
||||
export interface DictItemPageVO {
|
||||
/** 字典项ID */
|
||||
id: string
|
||||
/** 字典编码 */
|
||||
dictCode: string
|
||||
/** 字典项值 */
|
||||
value: string
|
||||
/** 字典项标签 */
|
||||
label: string
|
||||
/** 状态(1:启用;0:禁用) */
|
||||
status: number
|
||||
/** 排序 */
|
||||
sort?: number
|
||||
}
|
||||
export interface DictItemForm {
|
||||
/** 字典项ID(新增不填) */
|
||||
id?: string
|
||||
/** 字典编码 */
|
||||
dictCode?: string
|
||||
/** 字典项值 */
|
||||
value?: string
|
||||
/** 字典项标签 */
|
||||
label?: string
|
||||
/** 状态(1:启用;0:禁用) */
|
||||
status?: number
|
||||
/** 排序 */
|
||||
sort?: number
|
||||
/** 标签类型 */
|
||||
tagType?: 'success' | 'warning' | 'info' | 'primary' | 'danger' | ''
|
||||
}
|
||||
export interface DictItemOption {
|
||||
/** 值 */
|
||||
value: number | string
|
||||
/** 标签 */
|
||||
label: string
|
||||
/** 标签类型 */
|
||||
tagType?: '' | 'success' | 'info' | 'warning' | 'danger'
|
||||
[key: string]: any
|
||||
}
|
||||
89
src/api/system/log-api.ts
Normal file
@@ -0,0 +1,89 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
const LOG_BASE_URL = '/api/v1/logs'
|
||||
|
||||
const LogAPI = {
|
||||
/** 获取日志分页列表 */
|
||||
getPage(queryParams: LogPageQuery) {
|
||||
return request<any, PageResult<LogPageVO[]>>({
|
||||
url: `${LOG_BASE_URL}/page`,
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
},
|
||||
/** 获取访问趋势 */
|
||||
getVisitTrend(queryParams: VisitTrendQuery) {
|
||||
return request<any, VisitTrendVO>({
|
||||
url: `${LOG_BASE_URL}/visit-trend`,
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
},
|
||||
/** 获取访问统计 */
|
||||
getVisitStats() {
|
||||
return request<any, VisitStatsVO>({ url: `${LOG_BASE_URL}/visit-stats`, method: 'get' })
|
||||
}
|
||||
}
|
||||
|
||||
export default LogAPI
|
||||
|
||||
export interface LogPageQuery extends PageQuery {
|
||||
/** 搜索关键字 */
|
||||
keywords?: string
|
||||
/** 操作时间 */
|
||||
createTime?: [string, string]
|
||||
}
|
||||
export interface LogPageVO {
|
||||
/** 主键 */
|
||||
id: string
|
||||
/** 日志模块 */
|
||||
module: string
|
||||
/** 日志内容 */
|
||||
content: string
|
||||
/** 请求路径 */
|
||||
requestUri: string
|
||||
/** 请求方法 */
|
||||
method: string
|
||||
/** IP 地址 */
|
||||
ip: string
|
||||
/** 地区 */
|
||||
region: string
|
||||
/** 浏览器 */
|
||||
browser: string
|
||||
/** 终端系统 */
|
||||
os: string
|
||||
/** 执行时间(毫秒) */
|
||||
executionTime: number
|
||||
/** 操作人 */
|
||||
operator: string
|
||||
}
|
||||
export interface VisitTrendVO {
|
||||
/** 日期列表 */
|
||||
dates: string[]
|
||||
/** 浏览量(PV) */
|
||||
pvList: number[]
|
||||
/** 访客数(UV) */
|
||||
uvList: number[]
|
||||
/** IP数 */
|
||||
ipList: number[]
|
||||
}
|
||||
export interface VisitTrendQuery {
|
||||
/** 开始日期 */
|
||||
startDate: string
|
||||
/** 结束日期 */
|
||||
endDate: string
|
||||
}
|
||||
export interface VisitStatsVO {
|
||||
/** 今日访客数(UV) */
|
||||
todayUvCount: number
|
||||
/** 总访客数 */
|
||||
totalUvCount: number
|
||||
/** 访客数同比增长率(相对于昨天同一时间段的增长率) */
|
||||
uvGrowthRate: number
|
||||
/** 今日浏览量(PV) */
|
||||
todayPvCount: number
|
||||
/** 总浏览量 */
|
||||
totalPvCount: number
|
||||
/** 同比增长率(相对于昨天同一时间段的增长率) */
|
||||
pvGrowthRate: number
|
||||
}
|
||||
135
src/api/system/menu-api.ts
Normal file
@@ -0,0 +1,135 @@
|
||||
import request from '@/utils/request'
|
||||
const MENU_BASE_URL = '/api/v1/menus'
|
||||
|
||||
const MenuAPI = {
|
||||
/** 获取当前用户的路由列表 */
|
||||
getRoutes() {
|
||||
return request<any, RouteVO[]>({ url: `${MENU_BASE_URL}/routes`, method: 'get' })
|
||||
},
|
||||
/** 获取菜单树形列表 */
|
||||
getList(queryParams: MenuQuery) {
|
||||
return request<any, MenuVO[]>({ url: `${MENU_BASE_URL}`, method: 'get', params: queryParams })
|
||||
},
|
||||
/** 获取菜单下拉数据源 */
|
||||
getOptions(onlyParent?: boolean) {
|
||||
return request<any, OptionType[]>({
|
||||
url: `${MENU_BASE_URL}/options`,
|
||||
method: 'get',
|
||||
params: { onlyParent }
|
||||
})
|
||||
},
|
||||
/** 获取菜单表单数据 */
|
||||
getFormData(id: string) {
|
||||
return request<any, MenuForm>({ url: `${MENU_BASE_URL}/${id}/form`, method: 'get' })
|
||||
},
|
||||
/** 新增菜单 */
|
||||
create(data: MenuForm) {
|
||||
return request({ url: `${MENU_BASE_URL}`, method: 'post', data })
|
||||
},
|
||||
/** 修改菜单 */
|
||||
update(id: string, data: MenuForm) {
|
||||
return request({ url: `${MENU_BASE_URL}/${id}`, method: 'put', data })
|
||||
},
|
||||
/** 删除菜单 */
|
||||
deleteById(id: string) {
|
||||
return request({ url: `${MENU_BASE_URL}/${id}`, method: 'delete' })
|
||||
}
|
||||
}
|
||||
|
||||
export default MenuAPI
|
||||
|
||||
export interface MenuQuery {
|
||||
/** 搜索关键字 */
|
||||
keywords?: string
|
||||
}
|
||||
import type { MenuTypeEnum } from '@/enums/system/menu-enum'
|
||||
export interface MenuVO {
|
||||
/** 子菜单 */
|
||||
children?: MenuVO[]
|
||||
/** 组件路径 */
|
||||
component?: string
|
||||
/** ICON */
|
||||
icon?: string
|
||||
/** 菜单ID */
|
||||
id?: string
|
||||
/** 菜单名称 */
|
||||
name?: string
|
||||
/** 父菜单ID */
|
||||
parentId?: string
|
||||
/** 按钮权限标识 */
|
||||
perm?: string
|
||||
/** 跳转路径 */
|
||||
redirect?: string
|
||||
/** 路由名称 */
|
||||
routeName?: string
|
||||
/** 路由相对路径 */
|
||||
routePath?: string
|
||||
/** 菜单排序(数字越小排名越靠前) */
|
||||
sort?: number
|
||||
/** 菜单类型 */
|
||||
type?: MenuTypeEnum
|
||||
/** 是否可见(1:显示;0:隐藏) */
|
||||
visible?: number
|
||||
}
|
||||
export interface MenuForm {
|
||||
/** 菜单ID */
|
||||
id?: string
|
||||
/** 父菜单ID */
|
||||
parentId?: string
|
||||
/** 菜单名称 */
|
||||
name?: string
|
||||
/** 是否可见(1-是 0-否) */
|
||||
visible: number
|
||||
/** ICON */
|
||||
icon?: string
|
||||
/** 排序 */
|
||||
sort?: number
|
||||
/** 路由名称 */
|
||||
routeName?: string
|
||||
/** 路由路径 */
|
||||
routePath?: string
|
||||
/** 组件路径 */
|
||||
component?: string
|
||||
/** 跳转路由路径 */
|
||||
redirect?: string
|
||||
/** 菜单类型 */
|
||||
type?: MenuTypeEnum
|
||||
/** 权限标识 */
|
||||
perm?: string
|
||||
/** 【菜单】是否开启页面缓存 */
|
||||
keepAlive?: number
|
||||
/** 【目录】只有一个子路由是否始终显示 */
|
||||
alwaysShow?: number
|
||||
/** 其他参数 */
|
||||
params?: KeyValue[]
|
||||
}
|
||||
interface KeyValue {
|
||||
key: string
|
||||
value: string
|
||||
}
|
||||
export interface RouteVO {
|
||||
/** 子路由列表 */
|
||||
children: RouteVO[]
|
||||
/** 组件路径 */
|
||||
component?: string
|
||||
/** 路由属性 */
|
||||
meta?: Meta
|
||||
/** 路由名称 */
|
||||
name?: string
|
||||
/** 路由路径 */
|
||||
path?: string
|
||||
/** 跳转链接 */
|
||||
redirect?: string
|
||||
}
|
||||
export interface Meta {
|
||||
/** 【目录】只有一个子路由是否始终显示 */
|
||||
alwaysShow?: boolean
|
||||
/** 是否隐藏(true-是 false-否) */
|
||||
hidden?: boolean
|
||||
/** ICON */
|
||||
icon?: string
|
||||
/** 【菜单】是否开启页面缓存 */
|
||||
keepAlive?: boolean
|
||||
/** 路由title */
|
||||
title?: string
|
||||
}
|
||||
121
src/api/system/notice-api.ts
Normal file
@@ -0,0 +1,121 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
const NOTICE_BASE_URL = '/api/v1/notices'
|
||||
|
||||
const NoticeAPI = {
|
||||
/** 获取通知公告分页数据 */
|
||||
getPage(queryParams?: NoticePageQuery) {
|
||||
return request<any, PageResult<NoticePageVO[]>>({
|
||||
url: `${NOTICE_BASE_URL}/page`,
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
},
|
||||
/** 获取通知公告表单数据 */
|
||||
getFormData(id: string) {
|
||||
return request<any, NoticeForm>({ url: `${NOTICE_BASE_URL}/${id}/form`, method: 'get' })
|
||||
},
|
||||
/** 添加通知公告 */
|
||||
create(data: NoticeForm) {
|
||||
return request({ url: `${NOTICE_BASE_URL}`, method: 'post', data })
|
||||
},
|
||||
/** 更新通知公告 */
|
||||
update(id: string, data: NoticeForm) {
|
||||
return request({ url: `${NOTICE_BASE_URL}/${id}`, method: 'put', data })
|
||||
},
|
||||
/** 批量删除通知公告,多个以英文逗号(,)分割 */
|
||||
deleteByIds(ids: string) {
|
||||
return request({ url: `${NOTICE_BASE_URL}/${ids}`, method: 'delete' })
|
||||
},
|
||||
/** 发布通知 */
|
||||
publish(id: string) {
|
||||
return request({ url: `${NOTICE_BASE_URL}/${id}/publish`, method: 'put' })
|
||||
},
|
||||
/** 撤回通知 */
|
||||
revoke(id: string) {
|
||||
return request({ url: `${NOTICE_BASE_URL}/${id}/revoke`, method: 'put' })
|
||||
},
|
||||
/** 查看通知 */
|
||||
getDetail(id: string) {
|
||||
return request<any, NoticeDetailVO>({ url: `${NOTICE_BASE_URL}/${id}/detail`, method: 'get' })
|
||||
},
|
||||
/** 全部已读 */
|
||||
readAll() {
|
||||
return request({ url: `${NOTICE_BASE_URL}/read-all`, method: 'put' })
|
||||
},
|
||||
/** 获取我的通知分页列表 */
|
||||
getMyNoticePage(queryParams?: NoticePageQuery) {
|
||||
return request<any, PageResult<NoticePageVO[]>>({
|
||||
url: `${NOTICE_BASE_URL}/my-page`,
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export default NoticeAPI
|
||||
|
||||
export interface NoticePageQuery extends PageQuery {
|
||||
/** 标题 */
|
||||
title?: string
|
||||
/** 发布状态(0:草稿;1:已发布;2:已撤回) */
|
||||
publishStatus?: number
|
||||
/** 是否已读(1:是;0:否) */
|
||||
isRead?: number
|
||||
}
|
||||
export interface NoticeForm {
|
||||
/** 通知ID(新增不填) */
|
||||
id?: string
|
||||
/** 标题 */
|
||||
title?: string
|
||||
/** 内容 */
|
||||
content?: string
|
||||
/** 类型 */
|
||||
type?: number
|
||||
/** 优先级/级别 */
|
||||
level?: string
|
||||
/** 目标类型 */
|
||||
targetType?: number
|
||||
/** 目标用户ID(多个以英文逗号(,)分割) */
|
||||
targetUserIds?: string
|
||||
}
|
||||
export interface NoticePageVO {
|
||||
/** 通知ID */
|
||||
id: string
|
||||
/** 标题 */
|
||||
title?: string
|
||||
/** 内容 */
|
||||
content?: string
|
||||
/** 类型 */
|
||||
type?: number
|
||||
/** 发布人ID */
|
||||
publisherId?: bigint
|
||||
/** 优先级 */
|
||||
priority?: number
|
||||
/** 目标类型 */
|
||||
targetType?: number
|
||||
/** 发布状态 */
|
||||
publishStatus?: number
|
||||
/** 发布时间 */
|
||||
publishTime?: Date
|
||||
/** 撤回时间 */
|
||||
revokeTime?: Date
|
||||
}
|
||||
export interface NoticeDetailVO {
|
||||
/** 通知ID */
|
||||
id?: string
|
||||
/** 标题 */
|
||||
title?: string
|
||||
/** 内容 */
|
||||
content?: string
|
||||
/** 类型 */
|
||||
type?: number
|
||||
/** 发布人名称 */
|
||||
publisherName?: string
|
||||
/** 优先级/级别 */
|
||||
level?: string
|
||||
/** 发布时间 */
|
||||
publishTime?: Date
|
||||
/** 发布状态 */
|
||||
publishStatus?: number
|
||||
}
|
||||
79
src/api/system/role-api.ts
Normal file
@@ -0,0 +1,79 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
const ROLE_BASE_URL = '/api/v1/roles'
|
||||
|
||||
const RoleAPI = {
|
||||
/** 获取角色分页数据 */
|
||||
getPage(queryParams?: RolePageQuery) {
|
||||
return request<any, PageResult<RolePageVO[]>>({
|
||||
url: `${ROLE_BASE_URL}/page`,
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
},
|
||||
/** 获取角色下拉数据源 */
|
||||
getOptions() {
|
||||
return request<any, OptionType[]>({ url: `${ROLE_BASE_URL}/options`, method: 'get' })
|
||||
},
|
||||
/** 获取角色的菜单ID集合 */
|
||||
getRoleMenuIds(roleId: string) {
|
||||
return request<any, string[]>({ url: `${ROLE_BASE_URL}/${roleId}/menuIds`, method: 'get' })
|
||||
},
|
||||
/** 分配菜单权限 */
|
||||
updateRoleMenus(roleId: string, data: number[]) {
|
||||
return request({ url: `${ROLE_BASE_URL}/${roleId}/menus`, method: 'put', data })
|
||||
},
|
||||
/** 获取角色表单数据 */
|
||||
getFormData(id: string) {
|
||||
return request<any, RoleForm>({ url: `${ROLE_BASE_URL}/${id}/form`, method: 'get' })
|
||||
},
|
||||
/** 新增角色 */
|
||||
create(data: RoleForm) {
|
||||
return request({ url: `${ROLE_BASE_URL}`, method: 'post', data })
|
||||
},
|
||||
/** 更新角色 */
|
||||
update(id: string, data: RoleForm) {
|
||||
return request({ url: `${ROLE_BASE_URL}/${id}`, method: 'put', data })
|
||||
},
|
||||
/** 批量删除角色,多个以英文逗号(,)分割 */
|
||||
deleteByIds(ids: string) {
|
||||
return request({ url: `${ROLE_BASE_URL}/${ids}`, method: 'delete' })
|
||||
}
|
||||
}
|
||||
|
||||
export default RoleAPI
|
||||
|
||||
export interface RolePageQuery extends PageQuery {
|
||||
/** 搜索关键字 */
|
||||
keywords?: string
|
||||
}
|
||||
export interface RolePageVO {
|
||||
/** 角色ID */
|
||||
id?: string
|
||||
/** 角色编码 */
|
||||
code?: string
|
||||
/** 角色名称 */
|
||||
name?: string
|
||||
/** 排序 */
|
||||
sort?: number
|
||||
/** 角色状态 */
|
||||
status?: number
|
||||
/** 创建时间 */
|
||||
createTime?: Date
|
||||
/** 修改时间 */
|
||||
updateTime?: Date
|
||||
}
|
||||
export interface RoleForm {
|
||||
/** 角色ID */
|
||||
id?: string
|
||||
/** 角色编码 */
|
||||
code?: string
|
||||
/** 数据权限 */
|
||||
dataScope?: number
|
||||
/** 角色名称 */
|
||||
name?: string
|
||||
/** 排序 */
|
||||
sort?: number
|
||||
/** 角色状态(1-正常;0-停用) */
|
||||
status?: number
|
||||
}
|
||||
384
src/api/system/user-api.ts
Normal file
@@ -0,0 +1,384 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
const USER_BASE_URL = '/api/v1/users'
|
||||
|
||||
const UserAPI = {
|
||||
/**
|
||||
* 获取当前登录用户信息
|
||||
*
|
||||
* @returns 登录用户昵称、头像信息,包括角色和权限
|
||||
*/
|
||||
getInfo() {
|
||||
return request<any, UserInfo>({
|
||||
url: `${USER_BASE_URL}/me`,
|
||||
method: 'get'
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取用户分页列表
|
||||
*
|
||||
* @param queryParams 查询参数
|
||||
*/
|
||||
getPage(queryParams: UserPageQuery) {
|
||||
return request<any, PageResult<UserPageVO[]>>({
|
||||
url: `${USER_BASE_URL}/page`,
|
||||
method: 'get',
|
||||
params: queryParams
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取用户表单详情
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @returns 用户表单详情
|
||||
*/
|
||||
getFormData(userId: string) {
|
||||
return request<any, UserForm>({
|
||||
url: `${USER_BASE_URL}/${userId}/form`,
|
||||
method: 'get'
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 添加用户
|
||||
*
|
||||
* @param data 用户表单数据
|
||||
*/
|
||||
create(data: UserForm) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}`,
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 修改用户
|
||||
*
|
||||
* @param id 用户ID
|
||||
* @param data 用户表单数据
|
||||
*/
|
||||
update(id: string, data: UserForm) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/${id}`,
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 修改用户密码
|
||||
*
|
||||
* @param id 用户ID
|
||||
* @param password 新密码
|
||||
*/
|
||||
resetPassword(id: string, password: string) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/${id}/password/reset`,
|
||||
method: 'put',
|
||||
params: { password }
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 批量删除用户,多个以英文逗号(,)分割
|
||||
*
|
||||
* @param ids 用户ID字符串,多个以英文逗号(,)分割
|
||||
*/
|
||||
deleteByIds(ids: string | number) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/${ids}`,
|
||||
method: 'delete'
|
||||
})
|
||||
},
|
||||
|
||||
/** 下载用户导入模板 */
|
||||
downloadTemplate() {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/template`,
|
||||
method: 'get',
|
||||
responseType: 'blob'
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 导出用户
|
||||
*
|
||||
* @param queryParams 查询参数
|
||||
*/
|
||||
export(queryParams: UserPageQuery) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/export`,
|
||||
method: 'get',
|
||||
params: queryParams,
|
||||
responseType: 'blob'
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 导入用户
|
||||
*
|
||||
* @param deptId 部门ID
|
||||
* @param file 导入文件
|
||||
*/
|
||||
import(deptId: string, file: File) {
|
||||
const formData = new FormData()
|
||||
formData.append('file', file)
|
||||
return request<any, ExcelResult>({
|
||||
url: `${USER_BASE_URL}/import`,
|
||||
method: 'post',
|
||||
params: { deptId },
|
||||
data: formData,
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
/** 获取个人中心用户信息 */
|
||||
getProfile() {
|
||||
return request<any, UserProfileVO>({
|
||||
url: `${USER_BASE_URL}/profile`,
|
||||
method: 'get'
|
||||
})
|
||||
},
|
||||
|
||||
/** 修改个人中心用户信息 */
|
||||
updateProfile(data: UserProfileForm) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/profile`,
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
},
|
||||
|
||||
/** 修改个人中心用户密码 */
|
||||
changePassword(data: PasswordChangeForm) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/password`,
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
},
|
||||
|
||||
/** 发送短信验证码(绑定或更换手机号)*/
|
||||
sendMobileCode(mobile: string) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/mobile/code`,
|
||||
method: 'post',
|
||||
params: { mobile }
|
||||
})
|
||||
},
|
||||
|
||||
/** 绑定或更换手机号 */
|
||||
bindOrChangeMobile(data: MobileUpdateForm) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/mobile`,
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
},
|
||||
|
||||
/** 发送邮箱验证码(绑定或更换邮箱)*/
|
||||
sendEmailCode(email: string) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/email/code`,
|
||||
method: 'post',
|
||||
params: { email }
|
||||
})
|
||||
},
|
||||
|
||||
/** 绑定或更换邮箱 */
|
||||
bindOrChangeEmail(data: EmailUpdateForm) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/email`,
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取用户下拉列表
|
||||
*/
|
||||
getOptions() {
|
||||
return request<any, OptionType[]>({
|
||||
url: `${USER_BASE_URL}/options`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export default UserAPI
|
||||
|
||||
/** 登录用户信息 */
|
||||
export interface UserInfo {
|
||||
/** 用户ID */
|
||||
userId?: string
|
||||
|
||||
/** 用户名 */
|
||||
username?: string
|
||||
|
||||
/** 昵称 */
|
||||
nickname?: string
|
||||
|
||||
/** 头像URL */
|
||||
avatar?: string
|
||||
|
||||
/** 角色 */
|
||||
roles: string[]
|
||||
|
||||
/** 权限 */
|
||||
perms: string[]
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户分页查询对象
|
||||
*/
|
||||
export interface UserPageQuery extends PageQuery {
|
||||
/** 搜索关键字 */
|
||||
keywords?: string
|
||||
|
||||
/** 用户状态 */
|
||||
status?: number
|
||||
|
||||
/** 部门ID */
|
||||
deptId?: string
|
||||
|
||||
/** 开始时间 */
|
||||
createTime?: [string, string]
|
||||
}
|
||||
|
||||
/** 用户分页对象 */
|
||||
export interface UserPageVO {
|
||||
/** 用户ID */
|
||||
id: string
|
||||
/** 用户头像URL */
|
||||
avatar?: string
|
||||
/** 创建时间 */
|
||||
createTime?: Date
|
||||
/** 部门名称 */
|
||||
deptName?: string
|
||||
/** 用户邮箱 */
|
||||
email?: string
|
||||
/** 性别 */
|
||||
gender?: number
|
||||
/** 手机号 */
|
||||
mobile?: string
|
||||
/** 用户昵称 */
|
||||
nickname?: string
|
||||
/** 角色名称,多个使用英文逗号(,)分割 */
|
||||
roleNames?: string
|
||||
/** 用户状态(1:启用;0:禁用) */
|
||||
status?: number
|
||||
/** 用户名 */
|
||||
username?: string
|
||||
}
|
||||
|
||||
/** 用户表单类型 */
|
||||
export interface UserForm {
|
||||
/** 用户ID */
|
||||
id?: string
|
||||
/** 用户头像 */
|
||||
avatar?: string
|
||||
/** 部门ID */
|
||||
deptId?: string
|
||||
/** 邮箱 */
|
||||
email?: string
|
||||
/** 性别 */
|
||||
gender?: number
|
||||
/** 手机号 */
|
||||
mobile?: string
|
||||
/** 昵称 */
|
||||
nickname?: string
|
||||
/** 角色ID集合 */
|
||||
roleIds?: number[]
|
||||
/** 用户状态(1:正常;0:禁用) */
|
||||
status?: number
|
||||
/** 用户名 */
|
||||
username?: string
|
||||
}
|
||||
|
||||
/** 个人中心用户信息 */
|
||||
export interface UserProfileVO {
|
||||
/** 用户ID */
|
||||
id?: string
|
||||
|
||||
/** 用户名 */
|
||||
username?: string
|
||||
|
||||
/** 昵称 */
|
||||
nickname?: string
|
||||
|
||||
/** 头像URL */
|
||||
avatar?: string
|
||||
|
||||
/** 性别 */
|
||||
gender?: number
|
||||
|
||||
/** 手机号 */
|
||||
mobile?: string
|
||||
|
||||
/** 邮箱 */
|
||||
email?: string
|
||||
|
||||
/** 部门名称 */
|
||||
deptName?: string
|
||||
|
||||
/** 角色名称,多个使用英文逗号(,)分割 */
|
||||
roleNames?: string
|
||||
|
||||
/** 创建时间 */
|
||||
createTime?: Date
|
||||
}
|
||||
|
||||
/** 个人中心用户信息表单 */
|
||||
export interface UserProfileForm {
|
||||
/** 用户ID */
|
||||
id?: string
|
||||
|
||||
/** 用户名 */
|
||||
username?: string
|
||||
|
||||
/** 昵称 */
|
||||
nickname?: string
|
||||
|
||||
/** 头像URL */
|
||||
avatar?: string
|
||||
|
||||
/** 性别 */
|
||||
gender?: number
|
||||
|
||||
/** 手机号 */
|
||||
mobile?: string
|
||||
|
||||
/** 邮箱 */
|
||||
email?: string
|
||||
}
|
||||
|
||||
/** 修改密码表单 */
|
||||
export interface PasswordChangeForm {
|
||||
/** 原密码 */
|
||||
oldPassword?: string
|
||||
/** 新密码 */
|
||||
newPassword?: string
|
||||
/** 确认新密码 */
|
||||
confirmPassword?: string
|
||||
}
|
||||
|
||||
/** 修改手机表单 */
|
||||
export interface MobileUpdateForm {
|
||||
/** 手机号 */
|
||||
mobile?: string
|
||||
/** 验证码 */
|
||||
code?: string
|
||||
}
|
||||
|
||||
/** 修改邮箱表单 */
|
||||
export interface EmailUpdateForm {
|
||||
/** 邮箱 */
|
||||
email?: string
|
||||
/** 验证码 */
|
||||
code?: string
|
||||
}
|
||||
1
src/assets/font-icon/Excel.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1766994863584" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1984" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M160 0h512l256 256v704c0 35.3472-28.6528 64-64 64H160c-35.3472 0-64-28.6528-64-64V64c0-35.3472 28.6528-64 64-64z" fill="#4CB050" p-id="1985"></path><path d="M400.256 768l114.656-164.5696L630.1632 768H684.8L541.4208 568.4736 674.4768 384H619.84L514.912 533.5104 410.496 384h-54.6176l131.9872 184.4736L345.6 768z" fill="#FFFFFF" p-id="1986"></path><path d="M672 0l256 256h-192c-35.3472 0-64-28.6528-64-64V0z" fill="#B7DFB9" p-id="1987"></path></svg>
|
||||
|
After Width: | Height: | Size: 780 B |
1
src/assets/font-icon/PDF.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1766994877552" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2458" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M160 0h512l256 256v704c0 35.3472-28.6528 64-64 64H160c-35.3472 0-64-28.6528-64-64V64c0-35.3472 28.6528-64 64-64z" fill="#FA4E4E" p-id="2459"></path><path d="M678.304 689.632c-34.5536-2.5664-67.8208-15.3984-94.6944-38.496-52.4672 11.5456-102.3808 28.224-152.288 48.7616C391.6544 770.4704 354.5408 806.4 322.5472 806.4c-6.4 0-14.0736-1.28-19.1936-5.1328-14.08-6.4128-21.7536-20.5312-21.7536-34.6432 0-11.552 2.56-43.6288 124.128-96.2432 28.16-51.328 49.9072-103.936 67.8272-159.1104-15.36-30.7968-48.6272-106.5088-25.6-144.9984 7.68-14.1184 23.04-21.8176 39.68-20.5312 12.7936 0 25.5872 6.4128 33.2672 16.6784 16.64 23.0976 15.36 71.8592-6.4 143.7184a386.9056 386.9056 0 0 0 79.3408 102.656c26.88-5.1392 53.7472-8.9856 80.6208-8.9856 60.1472 1.28 69.1072 29.5104 67.8272 46.1952 0 43.6288-42.2336 43.6288-63.9872 43.6288z m-358.3104 79.552l3.84-1.28c17.9136-6.4128 31.9872-19.2448 42.2272-35.9296-19.2 7.6992-34.5536 20.5312-46.0672 37.216z m170.1952-384.9472h-3.84c-1.28 0-3.84 0-5.12 1.28-5.12 21.8112-1.28 44.9088 7.68 65.44 7.68-21.8112 7.68-44.9088 1.28-66.72z m8.96 186.0608l-1.28 2.56-1.28-1.28c-11.52 29.5168-24.32 59.0272-38.3936 87.2576l2.56-1.28v2.56a743.6992 743.6992 0 0 1 87.0208-25.664l-1.28-1.28h3.84c-19.2-19.2512-37.1136-41.0624-51.1872-62.8736z m174.0352 68.0064c-11.52 0-21.7536 0-33.2736 2.56 12.8 6.4192 25.6 8.9856 38.3936 10.272 8.96 1.28 17.92 0 25.5936-2.5664 0-3.8528-5.12-10.2656-30.7136-10.2656z" fill="#FFFFFF" p-id="2460"></path><path d="M672 0l256 256h-192c-35.3472 0-64-28.6528-64-64V0z" fill="#FDB8B8" p-id="2461"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
1
src/assets/font-icon/Ppt.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1766994867457" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2142" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M160 0h512l256 256v704c0 35.3472-28.6528 64-64 64H160c-35.3472 0-64-28.6528-64-64V64c0-35.3472 28.6528-64 64-64z" fill="#FF9333" p-id="2143"></path><path d="M427.8976 768V610.9568H539.776c87.7952 0 132.224-38.1824 132.224-114.016C672 421.6448 628.1024 384 540.3136 384H384v384h43.8976z m109.7408-195.2256H427.8976v-150.592h109.7408c30.5088 0 52.992 5.92 67.9808 18.8288 14.9888 11.2896 22.4832 30.112 22.4832 55.936 0 25.8112-7.488 44.6336-21.952 57.0048-14.9824 12.3648-37.4656 18.816-68.512 18.816z" fill="#FFFFFF" p-id="2144"></path><path d="M672 0l256 256h-192c-35.3472 0-64-28.6528-64-64V0z" fill="#FFD3AD" p-id="2145"></path></svg>
|
||||
|
After Width: | Height: | Size: 970 B |
1
src/assets/font-icon/Txt.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1766994853054" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1513" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M160 0h512l256 256v704c0 35.3472-28.6528 64-64 64H160c-35.3472 0-64-28.6528-64-64V64c0-35.3472 28.6528-64 64-64z" fill="#8289AD" p-id="1514"></path><path d="M536.9088 768V422.1824H672V384H358.4v38.1824h135.0912V768z" fill="#FFFFFF" p-id="1515"></path><path d="M672 0l256 256h-192c-35.3472 0-64-28.6528-64-64V0z" fill="#CDCFDE" p-id="1516"></path></svg>
|
||||
|
After Width: | Height: | Size: 685 B |
1
src/assets/font-icon/Word.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1766994880924" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2616" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M160 0h512l256 256v704c0 35.3472-28.6528 64-64 64H160c-35.3472 0-64-28.6528-64-64V64c0-35.3472 28.6528-64 64-64z" fill="#4876F9" p-id="2617"></path><path d="M428.0192 768l77.1072-282.6688h1.4208L583.1808 768h43.0464L723.2 428.8h-43.52l-74.2656 284.5696H603.52L526.8864 428.8h-42.0992L407.68 713.3696h-1.8944L331.52 428.8H288l96.9728 339.2z" fill="#FFFFFF" p-id="2618"></path><path d="M672 0l256 256h-192c-35.3472 0-64-28.6528-64-64V0z" fill="#B5C8FC" p-id="2619"></path></svg>
|
||||
|
After Width: | Height: | Size: 809 B |
1
src/assets/font-icon/shiping.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1766994873670" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2300" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M160 0h512l256 256v704c0 35.3472-28.6528 64-64 64H160c-35.3472 0-64-28.6528-64-64V64c0-35.3472 28.6528-64 64-64z" fill="#7C8EEE" p-id="2301"></path><path d="M702.2976 579.2896l-298.5664 177.984c-19.9488 12.0192-45.3312-2.4128-45.3312-25.856v-355.968c0-22.848 25.3824-37.2736 45.3312-25.856l298.56 177.984c19.3408 12.032 19.3408 40.288 0 51.712z" fill="#FFFFFF" p-id="2302"></path><path d="M672 0l256 256h-192c-35.3472 0-64-28.6528-64-64V0z" fill="#CAD1F8" p-id="2303"></path></svg>
|
||||
|
After Width: | Height: | Size: 814 B |
1
src/assets/font-icon/tupian.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1766994856547" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1671" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M160 0h512l256 256v704c0 35.3472-28.6528 64-64 64H160c-35.3472 0-64-28.6528-64-64V64c0-35.3472 28.6528-64 64-64z" fill="#F6AD00" p-id="1672"></path><path d="M258.528 742.0672L351.8336 604.928a14.5024 14.5024 0 0 1 22.1696-2.1824l61.664 60.416 135.296-212.064a14.5024 14.5024 0 0 1 24.8064 0.5568l168.1024 291.328a14.5024 14.5024 0 0 1-12.5696 21.7664H270.528a14.5024 14.5024 0 0 1-12.0064-22.6816z" fill="#FFF7F7" p-id="1673"></path><path d="M359.616 431.5456m-73.1456 0a73.1456 73.1456 0 1 0 146.2912 0 73.1456 73.1456 0 1 0-146.2912 0Z" fill="#FFFFFF" p-id="1674"></path><path d="M672 0l256 256h-192c-35.3472 0-64-28.6528-64-64V0z" fill="#FBDE99" p-id="1675"></path></svg>
|
||||
|
After Width: | Height: | Size: 1007 B |
1
src/assets/font-icon/weizhi.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1766994847697" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1359" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M132.266667 0h518.4L938.666667 288v689.066667a46.933333 46.933333 0 0 1-46.933334 46.933333H132.266667A46.933333 46.933333 0 0 1 85.333333 977.066667V46.933333A46.933333 46.933333 0 0 1 132.266667 0z" fill="#F2F2F2" p-id="1360"></path><path d="M512 693.333333c-11.242667-0.085333-20.266667-9.685333-20.202667-21.461333 0-11.882667 9.045333-21.482667 20.202667-21.482667 11.136 0 20.202667 9.6 20.202667 21.482667 0 11.818667-9.066667 21.461333-20.202667 21.461333z m86.890667-195.712c-6.058667 11.648-18.005333 25.728-35.690667 42.410667-11.904 11.285333-19.669333 19.498667-23.317333 24.768-3.669333 5.397333-6.4 11.456-8.106667 18.325333a132.266667 132.266667 0 0 0-2.773333 25.194667 19.84 19.84 0 0 1-3.264 16.362667 17.429333 17.429333 0 0 1-14.186667 7.210666c-8.533333 0.042667-15.872-6.293333-17.621333-15.146666h-0.32a380.757333 380.757333 0 0 1-0.213334-11.605334c0-15.274667 2.005333-28.330667 6.08-39.36 3.434667-9.216 8.298667-17.749333 14.378667-25.237333 4.906667-6.186667 13.653333-15.274667 26.261333-27.093333 12.629333-11.797333 20.906667-21.269333 24.682667-28.266667 3.797333-7.082667 5.674667-14.762667 5.674667-23.125333 0-15.04-5.589333-28.288-16.64-39.68a54.272 54.272 0 0 0-40.746667-17.152c-15.573333 0-28.544 5.12-38.912 15.530666-9.984 9.877333-16.618667 25.066667-20.053333 45.589334-0.298667 10.944-8.768 19.626667-19.072 19.562666a18.602667 18.602667 0 0 1-15.232-8.021333 21.162667 21.162667 0 0 1-3.050667-17.770667c3.776-27.349333 13.653333-48.426667 29.525333-63.296 16.704-15.637333 38.784-23.488 66.176-23.488 29.141333 0 52.288 8.405333 69.589334 25.237334 17.322667 16.746667 25.941333 37.12 25.941333 60.906666 0 13.781333-3.029333 26.453333-9.109333 38.101334v0.042666z" fill="#AAAAAA" p-id="1361"></path><path d="M650.666667 0v241.066667a46.933333 46.933333 0 0 0 46.933333 46.933333H938.666667L650.666667 0z" fill="#000000" fill-opacity=".1" p-id="1362"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
1
src/assets/font-icon/yasuo.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1766994859741" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1830" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M132.266667 0h518.4L938.666667 288v689.066667a46.933333 46.933333 0 0 1-46.933334 46.933333H132.266667A46.933333 46.933333 0 0 1 85.333333 977.066667V46.933333A46.933333 46.933333 0 0 1 132.266667 0z" fill="#F38C12" p-id="1831"></path><path d="M426.666667 0v85.333333h85.333333V0h-85.333333z m0 170.666667v85.333333h85.333333V170.666667h-85.333333z m0 170.666666v85.333334h85.333333v-85.333334h-85.333333z m85.333333-256v85.333334h85.333333V85.333333h-85.333333z m0 170.666667v85.333333h85.333333v-85.333333h-85.333333z m0 170.666667v85.333333h85.333333v-85.333333h-85.333333z m-85.333333 85.333333v170.666667h170.666666v-170.666667h-170.666666z m28.437333 85.333333h113.792v56.896h-113.792V597.333333z" fill="#FFFFFF" p-id="1832"></path><path d="M650.666667 0v241.066667a46.933333 46.933333 0 0 0 46.933333 46.933333H938.666667L650.666667 0z" fill="#FFFFFF" p-id="1833"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
1
src/assets/icons/ai.svg
Normal file
|
After Width: | Height: | Size: 25 KiB |
1
src/assets/icons/api.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M499.2 671.232v-261.12h102.4c16.384 0 28.672 1.024 37.888 2.56 13.312 2.048 24.576 6.656 34.816 13.312 9.728 6.656 17.92 16.384 23.552 28.16 6.144 12.288 8.704 25.6 8.192 38.4 0 23.552-7.68 44.032-23.04 59.904-15.36 16.896-40.96 25.088-78.848 25.088h-43.52v93.184l-61.44.512zm281.6 0h-61.952v-261.12H780.8v261.12zm-287.744 0h-69.12L396.8 601.6h-73.728l-25.088 69.632h-66.56l100.352-261.12h54.272l107.008 261.12zM343.552 545.28h32.256l-15.872-42.496c0-.512-.512-1.024-.512-1.536l-15.872 44.032zm217.6-26.112h43.52c20.48 0 28.16-4.608 31.232-7.168 4.608-4.096 7.168-10.752 7.168-18.944 0-6.656-1.536-11.776-4.096-15.36-2.56-3.584-6.144-6.144-10.752-7.68-1.536-.512-6.656-1.536-24.064-1.536h-43.008v50.688z"/><path d="M747.52 842.752H512c-8.704 0-16.384-3.584-22.016-9.728-6.144-6.144-9.216-14.336-8.704-22.528.512-16.896 14.336-30.72 31.232-31.232H747.52c115.712 0 209.408-94.208 209.408-209.408 0-104.96-78.848-194.56-183.296-207.872l-22.528-3.072-4.608-22.016C724.992 231.936 631.808 156.16 524.288 156.16c-124.928 0-226.304 101.376-226.304 226.304v8.704l1.536 36.352-36.352-4.096c-6.144-1.024-12.288-1.024-18.432-1.024-98.304 0-178.176 79.872-178.176 178.176 0 98.304 79.872 178.176 178.176 178.176h63.488c8.704 0 16.384 3.584 22.016 9.728 6.144 6.144 9.216 14.336 8.704 22.528-.512 16.896-14.336 30.72-31.232 31.232h-64c-64 0-123.904-25.088-169.472-70.144C28.16 726.528 3.072 665.6 3.072 601.088c0-129.536 103.936-236.544 232.448-241.152 12.288-157.184 149.504-276.48 307.2-266.24 59.904 3.584 118.784 27.136 165.888 65.536 45.568 37.376 77.824 87.04 94.208 143.872 125.952 26.112 217.088 137.728 217.088 266.752.512 151.04-121.856 272.896-272.384 272.896z"/><path d="M572.416 930.816c-8.192 0-15.872-3.072-21.504-8.704L431.616 812.544l113.152-117.76c6.144-6.144 13.824-9.216 22.528-9.216 8.704 0 16.384 3.072 22.528 9.216 11.776 11.776 12.288 31.232 1.024 44.032l-68.608 70.656 71.68 66.048c6.144 5.632 9.728 13.312 10.24 22.016.512 8.704-2.56 16.384-8.192 23.04-6.656 6.656-14.848 10.24-23.552 10.24z"/></svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
1
src/assets/icons/backtop.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M2.88 18.054a35.9 35.9 0 0 1 8.531-16.32.8.8 0 0 1 1.178 0q.25.27.413.455a35.9 35.9 0 0 1 8.118 15.865c-2.141.451-4.34.747-6.584.874l-2.089 4.178a.5.5 0 0 1-.894 0l-2.089-4.178a44 44 0 0 1-6.584-.874m6.698-1.123 1.157.066L12 19.527l1.265-2.53 1.157-.066a42 42 0 0 0 4.227-.454A33.9 33.9 0 0 0 12 4.09a33.9 33.9 0 0 0-6.649 12.387q2.093.334 4.227.454M12 15a3 3 0 1 1 0-6 3 3 0 0 1 0 6m0-2a1 1 0 1 0 0-2 1 1 0 0 0 0 2"/></svg>
|
||||
|
After Width: | Height: | Size: 533 B |
1
src/assets/icons/bell.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M5 18H19V11.0314C19 7.14806 15.866 4 12 4C8.13401 4 5 7.14806 5 11.0314V18ZM12 2C16.9706 2 21 6.04348 21 11.0314V20H3V11.0314C3 6.04348 7.02944 2 12 2ZM9.5 21H14.5C14.5 22.3807 13.3807 23.5 12 23.5C10.6193 23.5 9.5 22.3807 9.5 21Z"></path></svg>
|
||||
|
After Width: | Height: | Size: 334 B |
1
src/assets/icons/bilibili.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg t="1733556119022" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="60026" width="128" height="128"><path d="M0 0m184.32 0l655.36 0q184.32 0 184.32 184.32l0 655.36q0 184.32-184.32 184.32l-655.36 0q-184.32 0-184.32-184.32l0-655.36q0-184.32 184.32-184.32Z" fill="#EC5D85" p-id="60027"></path><path d="M512 241.96096h52.224l65.06496-96.31744c49.63328-50.31936 89.64096 0.43008 63.85664 45.71136l-34.31424 51.5072c257.64864 5.02784 257.64864 43.008 257.64864 325.03808 0 325.94944 0 336.46592-404.48 336.46592S107.52 893.8496 107.52 567.90016c0-277.69856 0-318.80192 253.14304-324.95616l-39.43424-58.368c-31.26272-54.90688 37.33504-90.40896 64.68608-42.37312l60.416 99.80928c18.18624-0.0512 41.18528-0.0512 65.66912-0.0512z" fill="#EF85A7" p-id="60028"></path><path d="M512 338.5856c332.8 0 332.8 0 332.8 240.64s0 248.39168-332.8 248.39168-332.8-7.75168-332.8-248.39168 0-240.64 332.8-240.64z" fill="#EC5D85" p-id="60029"></path><path d="M281.6 558.08a30.72 30.72 0 0 1-27.47392-16.97792 30.72 30.72 0 0 1 13.73184-41.216l122.88-61.44a30.72 30.72 0 0 1 41.216 13.74208 30.72 30.72 0 0 1-13.74208 41.216l-122.88 61.44a30.59712 30.59712 0 0 1-13.73184 3.23584zM752.64 558.08a30.60736 30.60736 0 0 1-12.8512-2.83648l-133.12-61.44a30.72 30.72 0 0 1-15.04256-40.7552 30.72 30.72 0 0 1 40.76544-15.02208l133.12 61.44A30.72 30.72 0 0 1 752.64 558.08zM454.656 666.88a15.36 15.36 0 0 1-12.288-6.1952 15.36 15.36 0 0 1 3.072-21.49376l68.5056-50.91328 50.35008 52.62336a15.36 15.36 0 0 1-22.20032 21.23776l-31.5904-33.024-46.71488 34.72384a15.28832 15.28832 0 0 1-9.13408 3.04128z" fill="#EF85A7" p-id="60030"></path><path d="M65.536 369.31584c15.03232 101.90848 32.84992 147.17952 44.544 355.328 14.63296 2.18112 177.70496 10.04544 204.05248-74.62912a16.14848 16.14848 0 0 0 1.64864-10.87488c-30.60736-80.3328-169.216-60.416-169.216-60.416s-10.36288-146.50368-11.49952-238.83776zM362.25024 383.03744l34.816 303.17568h34.64192L405.23776 381.1328zM309.52448 536.28928h45.48608l16.09728 158.6176-31.82592 1.85344zM446.86336 542.98624h45.80352V705.3312h-33.87392zM296.6016 457.97376h21.39136l5.2736 58.99264-18.91328 2.26304zM326.99392 457.97376h21.39136l2.53952 55.808-17.408 1.61792zM470.62016 459.88864h19.456v62.27968h-19.456zM440.23808 459.88864h22.20032v62.27968h-16.62976z" fill="#FFFFFF" p-id="60031"></path><path d="M243.56864 645.51936a275.456 275.456 0 0 1-28.4672 23.74656 242.688 242.688 0 0 1-29.53216 17.52064 2.70336 2.70336 0 0 1-4.4032-1.95584 258.60096 258.60096 0 0 1-5.12-29.57312c-1.41312-12.1856-1.95584-25.68192-2.16064-36.36224 0-0.3072 0-2.5088 3.01056-1.90464a245.92384 245.92384 0 0 1 34.22208 9.5744 257.024 257.024 0 0 1 32.3584 15.17568c0.52224 0.256 2.51904 1.4848 0.09216 3.77856z" fill="#EB5480" p-id="60032"></path><path d="M513.29024 369.31584c15.03232 101.90848 32.84992 147.17952 44.544 355.328 14.63296 2.18112 177.70496 10.04544 204.05248-74.62912a16.14848 16.14848 0 0 0 1.64864-10.87488c-30.60736-80.3328-169.216-60.416-169.216-60.416s-10.36288-146.50368-11.49952-238.83776zM810.00448 383.03744l34.816 303.17568h34.64192L852.992 381.1328zM757.27872 536.28928h45.48608l16.09728 158.6176-31.82592 1.85344zM894.6176 542.98624h45.80352V705.3312H906.5472zM744.35584 457.97376h21.39136l5.2736 58.99264-18.91328 2.26304zM774.74816 457.97376h21.39136l2.53952 55.808-17.408 1.61792zM918.3744 459.88864h19.456v62.27968h-19.456zM887.99232 459.88864h22.20032v62.27968h-16.62976z" fill="#FFFFFF" p-id="60033"></path><path d="M691.32288 645.51936a275.456 275.456 0 0 1-28.4672 23.74656 242.688 242.688 0 0 1-29.53216 17.52064 2.70336 2.70336 0 0 1-4.4032-1.95584 258.60096 258.60096 0 0 1-5.12-29.57312c-1.41312-12.1856-1.95584-25.68192-2.16064-36.36224 0-0.3072 0-2.5088 3.01056-1.90464a245.92384 245.92384 0 0 1 34.22208 9.5744 257.024 257.024 0 0 1 32.3584 15.17568c0.52224 0.256 2.51904 1.4848 0.09216 3.77856z" fill="#EB5480" p-id="60034"></path></svg>
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
1
src/assets/icons/browser.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg t="1733620744216" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13366" width="128" height="128"><path d="M512.956 741.549c24.671-8.545 73.221-25.811 120.072-46.486 12.131-5.394 24.087-12.036 47.412-25.31a109.078 109.078 0 0 0 37.94-29.11 83.344 83.344 0 0 0 12.227-23.053V219.281c-0.096-24.831-20.211-44.936-45.045-45.043-9.34 1.573-22.76 4.209-38.757 8.543 24.439 62.406 18.146 132.708-17.021 189.792-34.498 55.993-92.88 92.712-158.098 99.992-1.275 0.137-2.499 0.463-3.776 0.585v223.354c0.11 24.835 20.213 44.934 45.046 45.045zM378.672 741.549c24.833-0.108 44.939-20.21 45.046-45.047V472.779a213.556 213.556 0 0 1-158.787-101.461c-34.357-56.592-40.495-125.929-16.655-187.697a423.782 423.782 0 0 0-42.873-9.482c-24.833 0.098-44.938 20.214-45.047 45.047v398.308a82.748 82.748 0 0 0 12.242 23.039c10.5 12.524 23.704 22.495 38.591 29.219 23.801 13.273 35.756 20.011 47.424 25.311 46.84 20.673 95.405 37.942 120.059 46.486z" fill="#FFBA00" opacity=".4" p-id="13367"></path><path d="M744.827 708.729a57 57 0 0 0 32.919-11.275 53.974 53.974 0 0 0 17.343-27.226V271.907c-0.066-23.054-17.548-42.33-40.493-44.667 0.528 2.635 0.815 5.297 0.855 7.974v398.309a82.915 82.915 0 0 1-12.227 23.037 108.602 108.602 0 0 1-37.941 29.126c-22.944 12.799-34.805 19.428-46.568 24.752 12.528 0.003 49.706 0.761 86.112-1.709zM141.202 227.432c-22.861 2.335-40.317 21.49-40.495 44.475V670.23a53.882 53.882 0 0 0 17.362 27.4 56.9 56.9 0 0 0 32.902 11.291c36.421 2.471 73.585 1.984 86.112 1.711-11.764-5.324-23.61-11.958-46.565-24.751a108.597 108.597 0 0 1-37.928-29.128 82.787 82.787 0 0 1-12.242-23.036V235.404c0.041-2.676 0.327-5.338 0.854-7.972z" fill="#FFBA00" opacity=".4" p-id="13368"></path><path d="M629.782 372.569c35.172-57.083 41.463-127.383 17.023-189.792-0.007-0.026-0.016-0.066-0.029-0.096-51.497 13.939-127.844 45.508-165.674 117.207a189.132 189.132 0 0 0-13.288 31.87v141.388c1.307-0.123 2.569-0.447 3.872-0.585 65.218-7.28 123.598-44 158.096-99.992zM248.658 183.62c-23.842 61.769-17.701 131.105 16.639 187.697 34.357 56.608 93.013 94.084 158.8 101.461h0.099v-141.02a190.385 190.385 0 0 0-13.273-31.87c-36.989-70.079-110.861-101.855-162.265-116.268z" fill="#FEC744" opacity=".4" p-id="13369"></path><path d="M593.104 570.52v223.357c0.105 24.83 20.215 44.938 45.05 45.046 24.668-8.544 73.218-25.811 120.071-46.488 12.127-5.392 24.086-12.036 47.409-25.306a109.116 109.116 0 0 0 37.941-29.114 83.408 83.408 0 0 0 12.225-23.051v-398.31c-0.092-24.833-20.21-44.938-45.045-45.047-9.481 1.602-23.134 4.265-39.446 8.723 24.355 62.297 18.091 132.42-16.915 189.423a213.388 213.388 0 0 1-161.29 100.767zM330.601 271.513c-24.833 0.094-44.939 20.214-45.048 45.045v398.31a82.678 82.678 0 0 0 12.24 23.039c10.502 12.524 23.708 22.493 38.595 29.22 23.799 13.271 35.753 20.013 47.422 25.307 46.841 20.677 95.404 37.944 120.062 46.488 24.831-0.109 44.938-20.216 45.045-45.046v-223.72c-65.791-7.377-124.448-44.86-158.79-101.463-34.354-56.591-40.496-125.93-16.655-187.696a423.057 423.057 0 0 0-42.871-9.484z" fill="#FFBA00" p-id="13370"></path><path d="M868.422 753.937a108.626 108.626 0 0 1-37.943 29.126c-22.944 12.796-34.805 19.428-46.567 24.75 12.526 0 49.702 0.765 86.112-1.71a56.988 56.988 0 0 0 32.916-11.274 54.009 54.009 0 0 0 17.346-27.228v-398.32c-0.069-23.053-17.552-42.328-40.496-44.667 0.529 2.635 0.815 5.299 0.855 7.974v398.31a83.035 83.035 0 0 1-12.223 23.039zM266.399 324.804c-22.863 2.338-40.319 21.491-40.496 44.477v398.323a53.886 53.886 0 0 0 17.361 27.4 56.879 56.879 0 0 0 32.901 11.291c36.419 2.471 73.587 1.983 86.111 1.708-11.764-5.323-23.608-11.953-46.566-24.75a108.578 108.578 0 0 1-37.928-29.124 82.698 82.698 0 0 1-12.238-23.039V332.779c0.039-2.675 0.326-5.338 0.855-7.975z" fill="#FFBA00" p-id="13371"></path><path d="M771.97 280.058c-51.497 13.939-127.844 45.508-165.675 117.207a188.947 188.947 0 0 0-13.289 31.871v141.386c66.797-6.206 126.786-43.472 161.969-100.58 35.184-57.11 41.473-127.45 16.995-189.884z" fill="#FFBA00" p-id="13372"></path><path d="M771.97 280.058c-51.497 13.939-127.844 45.508-165.675 117.207a188.947 188.947 0 0 0-13.289 31.871v141.386c66.797-6.206 126.786-43.472 161.969-100.58 35.184-57.11 41.473-127.45 16.995-189.884z" fill="#FEC744" p-id="13373"></path><path d="M549.294 570.155h0.095V429.132a189.948 189.948 0 0 0-13.271-31.871c-36.992-70.081-110.863-101.856-162.266-116.268-23.839 61.769-17.701 131.105 16.642 187.696 34.352 56.608 93.012 94.089 158.8 101.466z" fill="#FFBA00" p-id="13374"></path><path d="M549.294 570.155h0.095V429.132a189.948 189.948 0 0 0-13.271-31.871c-36.992-70.081-110.863-101.856-162.266-116.268-23.839 61.769-17.701 131.105 16.642 187.696 34.352 56.608 93.012 94.089 158.8 101.466z" fill="#FEC744" p-id="13375"></path></svg>
|
||||
|
After Width: | Height: | Size: 4.6 KiB |
1
src/assets/icons/captcha.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M917.6 267.2c-36.1-2.5-72.4-9.3-103.6-19.3-10.1-3-20.2-6.4-30.3-10-21.4-6.3-50.5-18.8-83.6-36.6-.4-.2-.7-.4-1.1-.6-7.8-4.2-15.7-8.7-23.8-13.4-10.9-6.3-21.7-12.9-32.5-19.9-.4-.3-.8-.5-1.2-.8-7.7-5-15.5-10.2-23.1-15.5-5-3.4-10-7.1-15-10.7-3.8-2.8-7.5-5.3-11.3-8.2-27.4-20.5-54.5-43.5-79.9-68.3-25.4 24.8-52.5 47.8-79.9 68.3-3.7 2.8-7.5 5.4-11.3 8.2-5 3.6-10 7.3-15 10.7-7.7 5.4-15.4 10.5-23.1 15.5-.4.3-.8.5-1.2.8-10.8 6.9-21.6 13.6-32.5 19.9-8.1 4.7-16 9.2-23.8 13.4-.3.2-.7.4-1 .6-33 17.8-62.2 30.3-83.6 36.6-10.1 3.6-20.2 7-30.3 10-31.1 10-67.4 16.8-103.6 19.3h.1c1.1 16.2 2.1 37.7 3.4 60.9h.7c6.1 86.8 23.5 210.2 49.7 282.8 1.2 3.2 2.2 6.5 3.3 9.6.6 1.5 1.2 2.8 1.8 4.3 62.8 162.1 171.9 280.1 303 323.4v.4c17.3 5.7 31.9 9.3 43.5 11.5 11.5-2.2 26.1-5.8 43.5-11.5v-.4C687 905 796.1 787 858.9 624.8c.6-1.5 1.2-2.8 1.8-4.3 1.2-3.1 2.2-6.4 3.3-9.6 26.2-72.5 43.6-196 49.7-282.8h.7c1.1-23.3 2.2-44.7 3.2-60.9zm-47.4 41.9-.5 9.5c-.5 2.2-.9 4.4-1 6.6C863 406 847 525.7 821.3 596.7c-.7 1.9-1.4 3.9-2 5.8-.4 1.2-.8 2.5-1.4 4.1-.5 1.2-1 2.5-1.4 3.4C758.1 760.8 657.7 869.3 541 907.8c-1.9.6-3.7 1.4-5.5 2.2-7.9 2.5-15.7 4.6-23.2 6.3-7.5-1.7-15.2-3.8-23.1-6.3-1.8-.9-3.6-1.6-5.5-2.2-116.7-38.5-217.1-147-275.4-297.5-.5-1.2-.9-2.4-1.7-4.1-.4-1.2-.8-2.4-1.3-3.6-.7-2-1.3-3.9-1.9-5.6-25.8-71.2-41.7-191-47.4-271.7-.2-2.3-.5-4.5-1-6.6l-.5-9.3c-.1-1.5-.2-3-.2-4.5 24.6-3.8 48.4-9.3 70-16.2 10.1-3 20.4-6.4 31.4-10.4 25.2-7.6 56.5-21.2 90.5-39.6.6-.3 1.2-.6 1.7-.9 8.2-4.4 16.7-9.2 24.8-14 10.7-6.1 22-13 34.5-21.1.4-.2 1-.6 1.3-.8 8.2-5.3 16.4-10.8 24.1-16.2 4.5-3.1 9.1-6.4 13.7-9.7l2.4-1.8 4-2.9c2.6-1.9 5.2-3.7 7.5-5.5 17.9-13.4 35.3-27.5 52-42.1 16.7 14.7 34 28.7 51.8 42 2.6 1.9 5.1 3.8 7.7 5.6l4.3 3.1 1.5 1.1c4.8 3.5 9.6 6.9 14 9.9 8.1 5.7 16.3 11.2 23.7 16l2.1 1.3c12.4 8 23.7 14.9 34.1 20.8 8.6 5 17 9.8 25 14.1.4.2 1 .5 1.5.8 34.2 18.4 65.6 32.1 90.9 39.7 11 3.9 21.3 7.3 30.6 10.1 22.1 7.1 46.1 12.6 70.8 16.5.1 1.5.1 3 0 4.4z"/><path d="M710.6 411.2 476.1 651.6l-120-123c-8.3-8.5-21.8-8.5-30.1 0s-8.3 22.3 0 30.9L461.1 698c4.2 4.3 9.6 6.4 15.1 6.4 5.4 0 10.9-2.1 15-6.4l249.5-255.7c8.3-8.5 8.3-22.3 0-30.9-8.3-8.7-21.8-8.7-30.1-.2z"/></svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
1
src/assets/icons/cascader.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M832.128 768c33.195 0 60.501 25.173 63.573 57.813L896 832a64 64 0 0 1-63.872 64H533.205a63.787 63.787 0 0 1-63.872-64 64 64 0 0 1 63.872-64h298.923zM213.333 874.667c-23.722 0-42.666-19.072-42.666-42.624V362.667A42.667 42.667 0 0 1 213.333 320l4.992.299C239.66 322.73 256 340.779 256 362.624l-.043 128.043h128.299c21.248 0 39.595 16.469 42.112 37.674l.299 4.992-.299 4.992A42.368 42.368 0 0 1 384.256 576H256l.043 213.333h128.256c22.869 0 42.41 19.115 42.41 42.667l-.298 4.992a42.368 42.368 0 0 1-42.112 37.675zm618.795-405.334c33.195 0 60.501 25.174 63.573 57.814l.299 6.186a64 64 0 0 1-63.872 64H533.205a63.787 63.787 0 0 1-63.872-64 64 64 0 0 1 63.872-64h298.923zM576.171 128c33.194 0 60.458 25.173 63.573 57.813L640 192c0 35.328-29.013 64-63.83 64H191.83A63.744 63.744 0 0 1 128 192c0-35.328 29.013-64 63.83-64h384.34z"/></svg>
|
||||
|
After Width: | Height: | Size: 941 B |
1
src/assets/icons/client.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M962.184 55.874H61.818C27.732 55.874 0 83.606 0 117.692v621.64c0 34.086 27.732 61.818 61.818 61.818h308.52v44.98c0 41.234-33.547 74.782-74.781 74.782h-67.995c-13.036 0-23.606 10.568-23.606 23.606 0 13.038 10.57 23.606 23.606 23.606h568.874c13.036 0 23.606-10.568 23.606-23.606 0-13.038-10.57-23.606-23.606-23.606h-67.997c-41.234 0-74.782-33.548-74.782-74.782v-44.978h308.52c34.087 0 61.821-27.732 61.821-61.819v-621.64c.004-34.087-27.728-61.819-61.814-61.819zM391.84 920.916c16.092-20.672 25.714-46.616 25.714-74.782v-44.98h188.894v44.98c0 28.166 9.622 54.112 25.714 74.782H391.841zm584.95-181.583c0 8.054-6.552 14.608-14.608 14.608H61.818c-8.054 0-14.608-6.552-14.608-14.608V615.267h929.58v124.066zm0-171.28H47.212v-450.36c0-8.055 6.552-14.609 14.608-14.609h900.362c8.054 0 14.61 6.552 14.61 14.608v450.361z"/><path d="M486.531 684.611a25.476 25.476 0 1 0 50.952 0 25.476 25.476 0 1 0-50.952 0zm65.946-466.103c-9.22-9.218-24.162-9.218-33.386 0L352.263 385.337c-9.218 9.218-9.218 24.166 0 33.386a23.534 23.534 0 0 0 16.694 6.914 23.526 23.526 0 0 0 16.692-6.914l166.828-166.829c9.218-9.218 9.218-24.166 0-33.386zm98.88 96.679c-9.216-9.218-24.158-9.218-33.384-.002l-66.46 66.456c-9.218 9.22-9.218 24.168 0 33.386a23.53 23.53 0 0 0 16.692 6.914c6.04 0 12.082-2.304 16.692-6.914l66.46-66.456c9.218-9.218 9.218-24.166 0-33.384z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
1
src/assets/icons/close.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="1em" height="1em" viewBox="0 0 36 36"><path d="m19.41 18 8.29-8.29a1 1 0 0 0-1.41-1.41L18 16.59l-8.29-8.3a1 1 0 0 0-1.42 1.42l8.3 8.29-8.3 8.29A1 1 0 1 0 9.7 27.7l8.3-8.29 8.29 8.29a1 1 0 0 0 1.41-1.41z" fill="currentColor"/></svg>
|
||||
|
After Width: | Height: | Size: 297 B |
1
src/assets/icons/close_all.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="1em" height="1em" viewBox="0 0 36 36"><path d="M26 17H10a1 1 0 0 0 0 2h16a1 1 0 0 0 0-2z" fill="currentColor"/></svg>
|
||||
|
After Width: | Height: | Size: 183 B |
1
src/assets/icons/close_left.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="1em" height="1em" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="m7 12 7 7m-7-7 7-7" stroke-linejoin="round"/><path d="M21 12H7.5"/><path d="M3 3v18" stroke-linejoin="round"/></g></svg>
|
||||
|
After Width: | Height: | Size: 310 B |
1
src/assets/icons/close_other.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="1em" height="1em" viewBox="0 0 20 20"><path d="M3 5h14V3H3v2zm12 8V7H5v6h10zM3 17h14v-2H3v2z" fill="currentColor"/></svg>
|
||||
|
After Width: | Height: | Size: 187 B |
1
src/assets/icons/close_right.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="1em" height="1em" viewBox="0 0 24 24"><g fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="m17 12-7 7m7-7-7-7" stroke-linejoin="round"/><path d="M3 12h13.5"/><path d="M21 3v18" stroke-linejoin="round"/></g></svg>
|
||||
|
After Width: | Height: | Size: 311 B |
1
src/assets/icons/cnblogs.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg t="1733555747788" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10924" width="128" height="128"><path d="M851.404 172.596c-187.462-187.461-491.346-187.461-678.808 0-187.461 187.462-187.461 491.346 0 678.808 187.462 187.461 491.346 187.461 678.808 0 187.461-187.462 187.461-491.346 0-678.808zM387.33 728.087a47.084 47.084 0 1 1-66.633-66.502 47.084 47.084 0 0 1 66.633 66.502z m205.527 1.397a38.75 38.75 0 0 1-76.625-11.52h-0.044a6.545 6.545 0 0 0-0.044 0.305v-0.349c0.306-2.618 2.051-20.727-2.967-44.99a174.24 174.24 0 0 0-48.567-89.28 172.102 172.102 0 0 0-88.8-48.305 156.698 156.698 0 0 0-42.458-2.923 38.662 38.662 0 0 1-35.39-65.324 38.618 38.618 0 0 1 21.12-10.822v-0.218c4.452-0.742 111.142-16.45 200.335 72.742 89.018 89.018 74.182 196.145 73.44 200.727z m175.2 7.592a38.75 38.75 0 0 1-65.673 21.382 39.49 39.49 0 0 1-11.65-33.73c0.087-0.35 5.105-37.484-5.062-88.975-13.31-67.375-45.295-126.895-94.953-176.902-50.007-49.702-109.527-81.644-176.945-94.953-51.491-10.167-88.582-5.193-89.019-5.149h0.219-0.044a39.927 39.927 0 0 1-44.684-32.902 38.836 38.836 0 0 1 32.204-44.378c1.92-0.305 47.869-7.33 111.273 4.364a411.753 411.753 0 0 1 106.254 34.952 425.76 425.76 0 0 1 114.633 82.255l0.916 0.96 0.96 0.873a425.89 425.89 0 0 1 82.255 114.72c16.407 33.6 28.145 69.294 34.996 106.21 11.651 63.404 4.67 109.353 4.32 111.273z" fill="#1296DB" p-id="10925"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
1
src/assets/icons/code.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg t="1720831003829" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5159" width="200" height="200"><path d="M438.4 849.1l222.7-646.7c0.2-0.5 0.3-1.1 0.4-1.6L438.4 849.1z" opacity=".224" p-id="5160"></path><path d="M661.2 168.7h-67.5c-3.4 0-6.5 2.2-7.6 5.4L354.7 846c-0.3 0.8-0.4 1.7-0.4 2.6 0 4.4 3.6 8 8 8h67.8c3.4 0 6.5-2.2 7.6-5.4l0.7-2.1 223.1-648.3 7.4-21.4c0.3-0.8 0.4-1.7 0.4-2.6-0.1-4.5-3.6-8.1-8.1-8.1zM954.6 502.1c-0.8-1-1.7-1.9-2.7-2.7l-219-171.3c-3.5-2.7-8.5-2.1-11.2 1.4-1.1 1.4-1.7 3.1-1.7 4.9v81.3c0 2.5 1.1 4.8 3.1 6.3l115 90-115 90c-1.9 1.5-3.1 3.8-3.1 6.3v81.3c0 4.4 3.6 8 8 8 1.8 0 3.5-0.6 4.9-1.7l219-171.3c6.9-5.4 8.2-15.5 2.7-22.5zM291.1 328.1l-219 171.3c-1 0.8-1.9 1.7-2.7 2.7-5.4 7-4.2 17 2.7 22.5l219 171.3c1.4 1.1 3.1 1.7 4.9 1.7 4.4 0 8-3.6 8-8v-81.3c0-2.5-1.1-4.8-3.1-6.3l-115-90 115-90c1.9-1.5 3.1-3.8 3.1-6.3v-81.3c0-1.8-0.6-3.5-1.7-4.9-2.7-3.5-7.7-4.1-11.2-1.4z" p-id="5161"></path></svg>
|
||||
|
After Width: | Height: | Size: 967 B |
1
src/assets/icons/collapse.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3 4h18v2H3V4zm0 15h18v2H3v-2zm8-5h10v2H11v-2zm0-5h10v2H11V9zm-8 3.5L7 9v7l-4-3.5z"/></svg>
|
||||
|
After Width: | Height: | Size: 180 B |
6
src/assets/icons/csdn.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="30px" height="30px" viewBox="0 0 30 30" version="1.1">
|
||||
<title>ic/csdn</title>
|
||||
<g id="ic/csdn" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path d="M24.7385612,21.818791 C24.4728206,21.5662432 24.1090763,21.4267765 23.7575825,21.4343152 C23.3966653,21.4399693 23.0696724,21.5907441 22.8378562,21.8555424 C20.7581061,24.2349574 17.1347988,24.4922169 15.6732254,24.4922169 C12.9611634,24.4922169 10.886125,23.8043069 9.50559315,22.4501605 C8.19385225,21.1638629 7.50594216,19.2678696 7.46070972,16.8168365 C7.35516735,11.1345107 10.5732673,5.25806226 16.139685,5.25806226 C18.7980335,5.25806226 20.8627061,7.14368979 21.6260036,7.95410443 C21.8917442,8.23586486 22.2583155,8.39794779 22.6352525,8.39983247 C23.0131319,8.4092559 23.362741,8.24151892 23.599269,7.96164317 L23.8160078,7.70532598 C24.2607935,7.18232584 24.4605701,6.50572386 24.380471,5.80179394 C24.2984872,5.09126763 23.9422817,4.44293592 23.3778185,3.97459165 C22.0133064,2.84472288 19.6951436,1.5 16.3969445,1.5 C12.9715292,1.5 9.58757695,3.07465447 7.1129853,5.82441016 C4.51306208,8.71269021 3.1240491,12.6441435 3.20320588,16.895051 C3.26634283,20.3063311 4.38490349,23.1729373 6.44015269,25.1886081 C8.64806138,27.3550537 11.8821812,28.5 15.7947876,28.5 C20.3849384,28.5 23.2289283,27.1401996 24.8082945,26.0009074 C25.4198749,25.5608334 25.7845615,24.8644423 25.8128317,24.093606 C25.8392173,23.3190004 25.5225902,22.5604146 24.9430495,22.0119712 L24.7385612,21.818791 Z" id="Fill-1" fill="#FC5533"/>
|
||||
</g>
|
||||
<script xmlns=""/></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
1
src/assets/icons/dict.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M449.6 116.2H303.8c-14.2 0-25.7-11.5-25.7-25.7s11.5-25.7 25.7-25.7h145.8c14.2 0 25.7 11.5 25.7 25.7s-11.5 25.7-25.7 25.7zm0 0"/><path d="M160.1 859.3c-14.2 0-25.7-11.5-25.7-25.7V167.4c0-56.6 46-102.6 102.6-102.6h66.8c14.2 0 25.7 11.5 25.7 25.7s-11.5 25.7-25.7 25.7H237c-28.2 0-51.1 22.9-51.1 51.1v666.2c-.1 14.3-11.6 25.8-25.8 25.8zm373.5-512.6c-6.3 0-12.4-1.3-17.6-3.5-13.5-5.8-21.9-17.9-21.9-31.6v-221c0-14.2 11.5-25.7 25.7-25.7s25.7 11.5 25.7 25.7v189l27.7-26.6c14.1-13.5 36.1-13.5 50.1 0l22.1 21.3V90.5c0-14.2 11.5-25.7 25.7-25.7s25.7 11.5 25.7 25.7v219.6c0 14.5-8.6 27.5-22 33.2-13.3 5.7-28.7 2.9-39.2-7.2l-37.5-36-37.5 36c-7.6 7.6-17.5 10.6-27 10.6zm0 0"/><path d="M846.1 958.9H236.9c-56.6 0-102.6-46-102.6-102.6v-22.8c0-14.2 11.5-25.7 25.7-25.7s25.7 11.5 25.7 25.7v22.8c0 28.2 22.9 51.1 51.1 51.1H846c14.2 0 25.7 11.5 25.7 25.7.1 14.3-11.4 25.8-25.6 25.8zm0 0"/><path d="M160.1 876h-.9c-14.2-.5-25.3-12.4-24.8-26.6 1-28.2 6.3-48.5 16.7-63.6 13.8-20.1 35.4-30.3 64.3-30.3h615c3.2-2.7 6.4-6.1 8.6-8.6V133.1c-1.8-5.1-11.7-15-16.8-16.8H449.6c-14.2 0-25.7-11.5-25.7-25.7s11.5-25.7 25.7-25.7h373.6c19.8 0 36.7 13.9 45 22.2 8.3 8.3 22.2 25.2 22.2 45v621.6c0 10.8-6.2 19.6-12.3 26.7-4.6 5.4-10.3 11-15.6 15.4-1 .9-2.1 1.7-3.2 2.5-5.4 4.1-12.9 8.8-22.3 8.8H215.3c-15 0-28 0-29.5 44.2-.5 13.8-11.9 24.7-25.7 24.7zm0 0"/><path d="M284.4 806.4c-14.2 0-25.7-11.5-25.7-25.7V90.5c0-14.2 11.5-25.7 25.7-25.7s25.7 11.5 25.7 25.7v690.1c0 14.3-11.5 25.8-25.7 25.8zM844.9 959h-1.6c-6.6-.3-30-2.3-52.2-16.9-19.5-12.7-42.6-38-42.6-86.3 0-62.3 35.7-101 93.1-101 14.2 0 25.7 11.5 25.7 25.7s-11.5 25.7-25.7 25.7c-12.5 0-41.7 0-41.7 49.6 0 21 6.6 35.3 20.1 43.8 10.6 6.6 22.1 7.8 25 8 1.4-.1 2.9 0 4.4.2 13.7 1.7 23.6 14 22.5 27.7-.9 9.5-8.8 23.5-27 23.5zm-1.8-51.3c-1.1.1-2.3.3-3.4.6 1.1-.3 2.2-.5 3.4-.6zm0 0"/></svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
1
src/assets/icons/document.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M832.1 185.1H609.4l-17.1-62c-9.6-34.6-40.5-58.8-75.3-58.8H196c-43.2 0-78.3 36.4-78.3 81.1V897c0 35.3 28.7 64 64 64H832c35.3 0 64-28.7 64-64V249c.1-35.2-28.6-63.9-63.9-63.9zm-644.4-39.7c0-6.6 4.4-11.1 8.3-11.1h321c3.4 0 6.6 3.1 7.8 7.4l12 43.4H187.7v-39.7zm638.4 745.8H187.7V255.1h638.4v636.1z"/><path d="M311.1 415.1a35 35 0 1 0 70 0 35 35 0 1 0-70 0zm151.2-35h257.8v70H462.3zM311.1 582.3a35 35 0 1 0 70 0 35 35 0 1 0-70 0zm151.2-35h257.8v70H462.3zM311.1 749.5a35 35 0 1 0 70 0 35 35 0 1 0-70 0zm151.2-35h257.8v70H462.3z"/></svg>
|
||||
|
After Width: | Height: | Size: 640 B |
1
src/assets/icons/down.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="15" height="15" aria-label="向下键" role="img"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.2"><path d="M7.5 3.5v8M10.5 8.5l-3 3-3-3"></path></g></svg>
|
||||
|
After Width: | Height: | Size: 222 B |
1
src/assets/icons/download.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M624 706.3h-74.1V464c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v242.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.7c3.2 4.1 9.4 4.1 12.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9z"/><path d="M811.4 366.7C765.6 245.9 648.9 160 512.2 160S258.8 245.8 213 366.6C127.3 389.1 64 467.2 64 560c0 110.5 89.5 200 199.9 200H304c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8h-40.1c-33.7 0-65.4-13.4-89-37.7-23.5-24.2-36-56.8-34.9-90.6.9-26.4 9.9-51.2 26.2-72.1 16.7-21.3 40.1-36.8 66.1-43.7l37.9-9.9 13.9-36.6c8.6-22.8 20.6-44.1 35.7-63.4 14.9-19.2 32.6-35.9 52.4-49.9 41.1-28.9 89.5-44.2 140-44.2s98.9 15.3 140 44.2c19.9 14 37.5 30.8 52.4 49.9 15.1 19.3 27.1 40.7 35.7 63.4l13.8 36.5 37.8 10C846.1 454.5 884 503.8 884 560c0 33.1-12.9 64.3-36.3 87.7-23.4 23.4-54.5 36.3-87.6 36.3H720c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h40.1C870.5 760 960 670.5 960 560c0-92.7-63.1-170.7-148.6-193.3z"/></svg>
|
||||
|
After Width: | Height: | Size: 962 B |
1
src/assets/icons/enter.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="15" height="15" aria-label="回车键" role="img"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.2"><path d="M12 3.53088v3c0 1-1 2-2 2H4M7 11.53088l-3-3 3-3"></path></g></svg>
|
||||
|
After Width: | Height: | Size: 241 B |
1
src/assets/icons/esc.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="15" height="15" aria-label="Esc 键" role="img"><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.2"><path d="M13.6167 8.936c-.1065.3583-.6883.962-1.4875.962-.7993 0-1.653-.9165-1.653-2.1258v-.5678c0-1.2548.7896-2.1016 1.653-2.1016.8634 0 1.3601.4778 1.4875 1.0724M9 6c-.1352-.4735-.7506-.9219-1.46-.8972-.7092.0246-1.344.57-1.344 1.2166s.4198.8812 1.3445.9805C8.465 7.3992 8.968 7.9337 9 8.5c.032.5663-.454 1.398-1.4595 1.398C6.6593 9.898 6 9 5.963 8.4851m-1.4748.5368c-.2635.5941-.8099.876-1.5443.876s-1.7073-.6248-1.7073-2.204v-.4603c0-1.0416.721-2.131 1.7073-2.131.9864 0 1.6425 1.031 1.5443 2.2492h-2.956"></path></g></svg>
|
||||
|
After Width: | Height: | Size: 691 B |
1
src/assets/icons/file.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg t="1721541550402" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1592" width="200" height="200"><path d="M979.096493 980.950486H44.904061C19.829898 980.950486 0.000277 960.442811 0.000277 935.839135v-740.047567c0-25.184865 20.410811-45.111351 44.903784-45.111352h934.192432c25.074162 0 44.903784 20.507676 44.903784 45.111352v740.047567c0 25.184865-20.410811 45.111351-44.903784 45.111351z" fill="#FFA000" p-id="1593"></path><path d="M512.000277 344.409946H0.000277V112.902919a45.097514 45.097514 0 0 1 44.903784-45.24973h350.470918c19.829622 0 37.320649 12.924541 43.146379 32.311352L512.000277 344.423784z" fill="#FFA000" p-id="1594"></path><path d="M909.699736 925.599135H114.300817c-25.184865 0-45.111351-20.134054-45.111351-44.281081v-603.32973c0-24.728216 20.493838-44.281081 45.111351-44.281081h795.398919c25.184865 0 45.111351 20.134054 45.111352 44.281081v603.32973c0.567351 24.147027-19.926486 44.281081-45.111352 44.281081z" fill="#FFFFFF" p-id="1595"></path><path d="M979.096493 980.950486H44.904061C19.829898 980.950486 0.000277 960.802595 0.000277 936.627892V361.056865c0-24.755892 20.410811-44.322595 44.903784-44.322595h934.192432c25.074162 0 44.903784 20.147892 44.903784 44.322595v575.571027c0 24.755892-20.410811 44.322595-44.903784 44.322594z" fill="#FFCA28" p-id="1596"></path><path d="M364.46125 485.708108H106.634655C93.917682 485.708108 83.027304 476.021622 83.027304 463.512216c0-11.96973 10.295351-22.223568 23.607351-22.223567h257.21773c12.716973 0 23.607351 9.686486 23.607351 22.223567 0 11.955892-10.295351 22.223568-22.998486 22.223568z m0 149.296433H106.634655c-12.716973 0-23.607351-9.686486-23.607351-22.223568 0-12.537081 10.295351-22.223568 23.607351-22.223568h257.21773c12.716973 0 23.607351 9.686486 23.607351 22.223568 0 12.537081-10.295351 22.223568-22.998486 22.223568z" fill="#FFF8E1" p-id="1597"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
1
src/assets/icons/fullscreen-exit.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z"/></svg>
|
||||
|
After Width: | Height: | Size: 175 B |
1
src/assets/icons/fullscreen.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M8 3v2H4v4H2V3h6zM2 21v-6h2v4h4v2H2zm20 0h-6v-2h4v-4h2v6zm0-12h-2V5h-4V3h6v6z"/></svg>
|
||||
|
After Width: | Height: | Size: 175 B |
1
src/assets/icons/gitcode.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg width="24" height="24" class="icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.4791 4.97677C15.6201 4.89789 15.7691 4.8145 15.93 4.72314C15.9494 4.82848 15.9683 4.92046 15.9854 5.00383C16.0157 5.15091 16.0406 5.2719 16.0525 5.39144C16.1479 6.4296 16.6697 7.1933 17.4092 7.36527C18.4908 7.61639 19.5106 7.20133 20.06 6.28555C20.72 5.18673 20.4334 3.84099 19.3097 3.03098C16.1851 0.777435 12.7523 0.155888 9.05448 1.24127C1.08137 3.59371 -1.64675 13.3884 4.01196 19.3949C6.43291 21.9642 9.50695 23.0727 12.9963 22.9889C17.4663 22.8839 20.6857 20.6563 22.7408 16.7954C24.1978 14.0561 22.6139 11.0619 19.5805 10.4396C17.8481 10.0908 16.0765 9.97756 14.3137 10.103C13.7272 10.1594 13.1579 10.3325 12.6394 10.6124C12.0592 10.9135 11.8915 11.5383 11.9565 12.1575C12.0171 12.7217 12.4498 13.0601 12.965 13.1453C14.0024 13.3077 15.0522 13.402 16.1 13.4881C16.4032 13.5136 16.7093 13.5166 17.0149 13.5197C17.4534 13.5241 17.8912 13.5285 18.3187 13.5991C19.5385 13.8007 19.9574 14.7905 19.33 15.8495C19.1763 16.1041 18.9971 16.3424 18.7951 16.5607C17.9745 17.4632 16.9014 18.0981 15.7152 18.3827C13.55 18.9127 11.3827 18.9425 9.22755 18.2617C6.77347 17.4875 5.31042 15.6849 5.25902 13.2584C5.2398 11.7619 5.61972 10.2874 6.35969 8.9865C6.694 8.38013 6.87751 7.75562 6.82593 7.06851C6.80422 6.77557 6.79219 6.48231 6.77927 6.16716C6.77239 5.99944 6.76526 5.82551 6.75628 5.64214C7.00484 5.69431 7.25032 5.76016 7.49161 5.83943C8.43027 6.21622 9.35415 6.38811 10.3702 6.11155C10.9481 5.97335 11.5455 5.93511 12.1363 5.9985C13.0877 6.07606 14.0387 5.84361 14.847 5.33586C15.0488 5.2176 15.2539 5.10279 15.4791 4.97677Z" fill="currentColor"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |