@ -0,0 +1,15 @@ |
|||||
|
# http://editorconfig.org |
||||
|
|
||||
|
root = true |
||||
|
|
||||
|
[*] # 表示所有文件适用 |
||||
|
charset = utf-8 # 设置文件字符集为 utf-8 |
||||
|
indent_style = space # 缩进风格(tab | space) |
||||
|
indent_size = 2 # 缩进大小 |
||||
|
end_of_line = lf # 控制换行类型(lf | cr | crlf) |
||||
|
trim_trailing_whitespace = true # 去除行首的任意空白字符 |
||||
|
insert_final_newline = true # 始终在文件末尾插入一个新行 |
||||
|
|
||||
|
[*.md] # 表示仅 md 文件适用以下规则 |
||||
|
max_line_length = off |
||||
|
trim_trailing_whitespace = false |
@ -0,0 +1,5 @@ |
|||||
|
## 开发环境 |
||||
|
VITE_APP_ENV = 'development' |
||||
|
VITE_APP_TITLE = 'vue-vite-project-admin' |
||||
|
VITE_APP_PORT = 8089 |
||||
|
VITE_APP_BASE_API = '/dev-api' ## '/dev-api'线上接口 '/mock'本地模拟数据 |
@ -0,0 +1,5 @@ |
|||||
|
## 生产环境 |
||||
|
VITE_APP_ENV = 'production' |
||||
|
VITE_APP_TITLE = 'vue-vite-project-admin' |
||||
|
VITE_APP_PORT = 8089 |
||||
|
VITE_APP_BASE_API = 'http://10.10.10.56:9000/' |
@ -0,0 +1,5 @@ |
|||||
|
## 模拟环境 |
||||
|
VITE_APP_ENV = 'staging' |
||||
|
VITE_APP_TITLE = 'vue-vite-project-admin' |
||||
|
VITE_APP_PORT = 8089 |
||||
|
VITE_APP_BASE_API = '/mock' |
@ -0,0 +1,19 @@ |
|||||
|
*.sh |
||||
|
node_modules |
||||
|
*.md |
||||
|
*.woff |
||||
|
*.ttf |
||||
|
.vscode |
||||
|
.idea |
||||
|
dist |
||||
|
/public |
||||
|
/docs |
||||
|
.husky |
||||
|
.local |
||||
|
/bin |
||||
|
.eslintrc.js |
||||
|
prettier.config.js |
||||
|
src/assets |
||||
|
|
||||
|
auto-imports.d.ts |
||||
|
components.d.ts |
@ -0,0 +1,269 @@ |
|||||
|
{ |
||||
|
"globals": { |
||||
|
"EffectScope": true, |
||||
|
"ElForm": true, |
||||
|
"ElMessage": true, |
||||
|
"ElMessageBox": true, |
||||
|
"ElTree": true, |
||||
|
"asyncComputed": true, |
||||
|
"autoResetRef": true, |
||||
|
"computed": true, |
||||
|
"computedAsync": true, |
||||
|
"computedEager": true, |
||||
|
"computedInject": true, |
||||
|
"computedWithControl": true, |
||||
|
"controlledComputed": true, |
||||
|
"controlledRef": true, |
||||
|
"createApp": true, |
||||
|
"createEventHook": true, |
||||
|
"createGlobalState": true, |
||||
|
"createInjectionState": true, |
||||
|
"createReactiveFn": true, |
||||
|
"createSharedComposable": true, |
||||
|
"createUnrefFn": true, |
||||
|
"customRef": true, |
||||
|
"debouncedRef": true, |
||||
|
"debouncedWatch": true, |
||||
|
"defineAsyncComponent": true, |
||||
|
"defineComponent": true, |
||||
|
"eagerComputed": true, |
||||
|
"effectScope": true, |
||||
|
"extendRef": true, |
||||
|
"getCurrentInstance": true, |
||||
|
"getCurrentScope": true, |
||||
|
"h": true, |
||||
|
"ignorableWatch": true, |
||||
|
"inject": true, |
||||
|
"isDefined": true, |
||||
|
"isProxy": true, |
||||
|
"isReactive": true, |
||||
|
"isReadonly": true, |
||||
|
"isRef": true, |
||||
|
"makeDestructurable": true, |
||||
|
"markRaw": true, |
||||
|
"nextTick": true, |
||||
|
"onActivated": true, |
||||
|
"onBeforeMount": true, |
||||
|
"onBeforeUnmount": true, |
||||
|
"onBeforeUpdate": true, |
||||
|
"onClickOutside": true, |
||||
|
"onDeactivated": true, |
||||
|
"onErrorCaptured": true, |
||||
|
"onKeyStroke": true, |
||||
|
"onLongPress": true, |
||||
|
"onMounted": true, |
||||
|
"onRenderTracked": true, |
||||
|
"onRenderTriggered": true, |
||||
|
"onScopeDispose": true, |
||||
|
"onServerPrefetch": true, |
||||
|
"onStartTyping": true, |
||||
|
"onUnmounted": true, |
||||
|
"onUpdated": true, |
||||
|
"pausableWatch": true, |
||||
|
"provide": true, |
||||
|
"reactify": true, |
||||
|
"reactifyObject": true, |
||||
|
"reactive": true, |
||||
|
"reactiveComputed": true, |
||||
|
"reactiveOmit": true, |
||||
|
"reactivePick": true, |
||||
|
"readonly": true, |
||||
|
"ref": true, |
||||
|
"refAutoReset": true, |
||||
|
"refDebounced": true, |
||||
|
"refDefault": true, |
||||
|
"refThrottled": true, |
||||
|
"refWithControl": true, |
||||
|
"resolveComponent": true, |
||||
|
"resolveDirective": true, |
||||
|
"resolveRef": true, |
||||
|
"resolveUnref": true, |
||||
|
"shallowReactive": true, |
||||
|
"shallowReadonly": true, |
||||
|
"shallowRef": true, |
||||
|
"syncRef": true, |
||||
|
"syncRefs": true, |
||||
|
"templateRef": true, |
||||
|
"throttledRef": true, |
||||
|
"throttledWatch": true, |
||||
|
"toRaw": true, |
||||
|
"toReactive": true, |
||||
|
"toRef": true, |
||||
|
"toRefs": true, |
||||
|
"triggerRef": true, |
||||
|
"tryOnBeforeMount": true, |
||||
|
"tryOnBeforeUnmount": true, |
||||
|
"tryOnMounted": true, |
||||
|
"tryOnScopeDispose": true, |
||||
|
"tryOnUnmounted": true, |
||||
|
"unref": true, |
||||
|
"unrefElement": true, |
||||
|
"until": true, |
||||
|
"useActiveElement": true, |
||||
|
"useArrayEvery": true, |
||||
|
"useArrayFilter": true, |
||||
|
"useArrayFind": true, |
||||
|
"useArrayFindIndex": true, |
||||
|
"useArrayFindLast": 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, |
||||
|
"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, |
||||
|
"watchEffect": true, |
||||
|
"watchIgnorable": true, |
||||
|
"watchOnce": true, |
||||
|
"watchPausable": true, |
||||
|
"watchPostEffect": true, |
||||
|
"watchSyncEffect": true, |
||||
|
"watchThrottled": true, |
||||
|
"watchTriggerable": true, |
||||
|
"watchWithFilter": true, |
||||
|
"whenever": true |
||||
|
} |
||||
|
} |
@ -0,0 +1,33 @@ |
|||||
|
|
||||
|
module.exports = { |
||||
|
env: { |
||||
|
browser: true, |
||||
|
es2021: true, |
||||
|
node: true, |
||||
|
}, |
||||
|
parser: 'vue-eslint-parser', |
||||
|
// https://eslint.vuejs.org/user-guide/#bundle-configurations
|
||||
|
extends: [ |
||||
|
'eslint:recommended', |
||||
|
'plugin:vue/vue3-essential', |
||||
|
'plugin:@typescript-eslint/recommended', |
||||
|
"./.eslintrc-auto-import.json" |
||||
|
], |
||||
|
parserOptions: { |
||||
|
ecmaVersion: 'latest', |
||||
|
sourceType: 'module', |
||||
|
parser: '@typescript-eslint/parser', |
||||
|
}, |
||||
|
plugins: ['vue', '@typescript-eslint'], |
||||
|
rules: { |
||||
|
'vue/multi-word-component-names': 'off', |
||||
|
'@typescript-eslint/no-empty-function': 'off', // 关闭空方法检查
|
||||
|
'@typescript-eslint/no-explicit-any': 'off', // 关闭any类型的警告
|
||||
|
'vue/no-v-model-argument': 'off' |
||||
|
}, |
||||
|
// https://eslint.org/docs/latest/use/configure/language-options#specifying-globals
|
||||
|
globals: { |
||||
|
DialogOption: 'readonly', |
||||
|
OptionType:'readonly' |
||||
|
} |
||||
|
}; |
@ -0,0 +1,17 @@ |
|||||
|
node_modules |
||||
|
.DS_Store |
||||
|
dist |
||||
|
dist-ssr |
||||
|
*.local |
||||
|
|
||||
|
# Editor directories and files |
||||
|
.idea |
||||
|
.vscode |
||||
|
*.suo |
||||
|
*.ntvs* |
||||
|
*.njsproj |
||||
|
*.sln |
||||
|
*.local |
||||
|
|
||||
|
package-lock.json |
||||
|
pnpm-lock.yaml |
@ -0,0 +1,9 @@ |
|||||
|
/dist/* |
||||
|
.local |
||||
|
.output.js |
||||
|
/node_modules/** |
||||
|
|
||||
|
**/*.svg |
||||
|
**/*.sh |
||||
|
|
||||
|
/public/* |
@ -0,0 +1,38 @@ |
|||||
|
/** |
||||
|
* 代码格式化配置 |
||||
|
*/ |
||||
|
module.exports = { |
||||
|
// 一行最多 120 字符..
|
||||
|
printWidth: 120, |
||||
|
// 指定每个缩进级别的空格数
|
||||
|
tabWidth: 2, |
||||
|
// 使用制表符而不是空格缩进行
|
||||
|
useTabs: false, |
||||
|
// 在语句末尾打印分号
|
||||
|
semi: true, |
||||
|
// 使用单引号而不是双引号
|
||||
|
singleQuote: true, |
||||
|
// 更改引用对象属性的时间 可选值"<as-needed|consistent|preserve>"
|
||||
|
quoteProps: 'as-needed', |
||||
|
// 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"<none|es5|all>",默认none
|
||||
|
trailingComma: 'none', |
||||
|
// 在对象文字中的括号之间打印空格
|
||||
|
bracketSpacing: true, |
||||
|
// 在单独的箭头函数参数周围包括括号 always:(x) => x \ avoid:x => x
|
||||
|
arrowParens: 'avoid', |
||||
|
// 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码
|
||||
|
rangeStart: 0, |
||||
|
rangeEnd: Infinity, |
||||
|
// 指定要使用的解析器,不需要写文件开头的 @prettier
|
||||
|
requirePragma: false, |
||||
|
// 不需要自动在文件开头插入 @prettier
|
||||
|
insertPragma: false, |
||||
|
// 换行设置 always\never\preserve
|
||||
|
proseWrap: 'preserve', |
||||
|
// 指定HTML文件的全局空格敏感度 css\strict\ignore
|
||||
|
htmlWhitespaceSensitivity: 'css', |
||||
|
// Vue文件脚本和样式标签缩进
|
||||
|
vueIndentScriptAndStyle: false, |
||||
|
// 换行符使用 lf 结尾是 可选值"<auto|lf|crlf|cr>"
|
||||
|
endOfLine: 'lf' |
||||
|
}; |
@ -0,0 +1,16 @@ |
|||||
|
# Luenmei Operational Cockpit MS |
||||
|
|
||||
|
> 联美运营驾驶舱管理系统 |
||||
|
|
||||
|
## Build Setup |
||||
|
|
||||
|
``` bash |
||||
|
# install dependencies |
||||
|
npm install |
||||
|
|
||||
|
# serve with hot reload at localhost:8080 |
||||
|
npm run dev |
||||
|
|
||||
|
# build for production with minification |
||||
|
npm run build |
||||
|
``` |
After Width: | Height: | Size: 4.2 KiB |
@ -0,0 +1,117 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html> |
||||
|
|
||||
|
<head> |
||||
|
<meta charset="UTF-8"> |
||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
||||
|
<meta name="viewport" |
||||
|
content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,viewport-fit=cover"> |
||||
|
<meta name="apple-mobile-web-app-capable" content="yes" /> |
||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black" /> |
||||
|
<meta name="format-detection" content="telphone=no, email=no" /> |
||||
|
<meta name="format-detection" content="telphone=no, email=no" /> |
||||
|
<title>联美运营驾驶舱管理系统</title> |
||||
|
<link rel="icon" href="" type="image/x-icon"> |
||||
|
<meta name="apple-mobile-web-app-title" content="联美运营驾驶舱管理系统"> |
||||
|
<meta name="keywords" content="数据大屏,管理系统"> |
||||
|
<meta name="description" content="联美运营驾驶舱管理系统"> |
||||
|
<meta name="author" content="Daniel"> |
||||
|
<meta name="copyright" content="Daniel"> |
||||
|
<link rel="icon" href="/favicon.ico" type="image/x-icon"> |
||||
|
<script type="module" src="/src/main.ts"></script> |
||||
|
<style> |
||||
|
:root { |
||||
|
--sk-size: 40px; |
||||
|
--sk-color: #409eff; |
||||
|
} |
||||
|
|
||||
|
.loading-home { |
||||
|
width: 100vw; |
||||
|
height: 100vh; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
z-index: 999999; |
||||
|
} |
||||
|
|
||||
|
.loading-grid { |
||||
|
width: var(--sk-size); |
||||
|
height: var(--sk-size); |
||||
|
} |
||||
|
|
||||
|
.loading-cube { |
||||
|
width: 33.33%; |
||||
|
height: 33.33%; |
||||
|
background-color: var(--sk-color); |
||||
|
float: left; |
||||
|
animation: loading-grid 1.3s infinite ease-in-out; |
||||
|
} |
||||
|
|
||||
|
.loading-cube:nth-child(1) { |
||||
|
animation-delay: 0.2s; |
||||
|
} |
||||
|
|
||||
|
.loading-cube:nth-child(2) { |
||||
|
animation-delay: 0.3s; |
||||
|
} |
||||
|
|
||||
|
.loading-cube:nth-child(3) { |
||||
|
animation-delay: 0.4s; |
||||
|
} |
||||
|
|
||||
|
.loading-cube:nth-child(4) { |
||||
|
animation-delay: 0.1s; |
||||
|
} |
||||
|
|
||||
|
.loading-cube:nth-child(5) { |
||||
|
animation-delay: 0.2s; |
||||
|
} |
||||
|
|
||||
|
.loading-cube:nth-child(6) { |
||||
|
animation-delay: 0.3s; |
||||
|
} |
||||
|
|
||||
|
.loading-cube:nth-child(7) { |
||||
|
animation-delay: 0.0s; |
||||
|
} |
||||
|
|
||||
|
.loading-cube:nth-child(8) { |
||||
|
animation-delay: 0.1s; |
||||
|
} |
||||
|
|
||||
|
.loading-cube:nth-child(9) { |
||||
|
animation-delay: 0.2s; |
||||
|
} |
||||
|
|
||||
|
@keyframes loading-grid { |
||||
|
0%, |
||||
|
70%, |
||||
|
100% { |
||||
|
transform: scale3D(1, 1, 1); |
||||
|
} |
||||
|
35% { |
||||
|
transform: scale3D(0, 0, 1); |
||||
|
} |
||||
|
} |
||||
|
</style> |
||||
|
</head> |
||||
|
|
||||
|
<body> |
||||
|
<div id="app"> |
||||
|
<div class="loading-home"> |
||||
|
<div class="loading-grid"> |
||||
|
<div class="loading-cube"></div> |
||||
|
<div class="loading-cube"></div> |
||||
|
<div class="loading-cube"></div> |
||||
|
<div class="loading-cube"></div> |
||||
|
<div class="loading-cube"></div> |
||||
|
<div class="loading-cube"></div> |
||||
|
<div class="loading-cube"></div> |
||||
|
<div class="loading-cube"></div> |
||||
|
<div class="loading-cube"></div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</body> |
||||
|
|
||||
|
</html> |
@ -0,0 +1,70 @@ |
|||||
|
{ |
||||
|
"name": "luenmei-operational-cockpit-ms", |
||||
|
"version": "1.0.0", |
||||
|
"scripts": { |
||||
|
"dev": "vite serve --mode development", |
||||
|
"build:prod": "vite build --mode production &&vue-tsc --noEmit", |
||||
|
"build:stage": "vite build --mode staging", |
||||
|
"serve": "vite preview", |
||||
|
"lint": "eslint src/**/*.{ts,js,vue} --fix", |
||||
|
"prepare": "husky install", |
||||
|
"prettier": "prettier --write ." |
||||
|
}, |
||||
|
"dependencies": { |
||||
|
"@types/mockjs": "^1.0.7", |
||||
|
"@vueuse/core": "^9.1.1", |
||||
|
"@wangeditor/editor": "^5.0.0", |
||||
|
"@wangeditor/editor-for-vue": "^5.1.10", |
||||
|
"axios": "^1.3.4", |
||||
|
"echarts": "^5.2.2", |
||||
|
"element-plus": "^2.2.32", |
||||
|
"mitt": "^3.0.1", |
||||
|
"mockjs": "^1.1.0", |
||||
|
"nprogress": "^0.2.0", |
||||
|
"path-browserify": "^1.0.1", |
||||
|
"path-to-regexp": "^6.2.0", |
||||
|
"pinia": "^2.0.12", |
||||
|
"screenfull": "^6.0.2", |
||||
|
"terser": "^5.17.6", |
||||
|
"vue": "^3.2.45", |
||||
|
"vue-i18n": "^9.1.9", |
||||
|
"vue-router": "^4.1.6", |
||||
|
"vxe-table": "^4.5.6", |
||||
|
"xe-utils": "^3.5.12", |
||||
|
"xgplayer": "^3.0.2" |
||||
|
}, |
||||
|
"devDependencies": { |
||||
|
"@commitlint/cli": "^16.2.3", |
||||
|
"@commitlint/config-conventional": "^16.2.1", |
||||
|
"@iconify-json/ep": "^1.1.8", |
||||
|
"@types/nprogress": "^0.2.0", |
||||
|
"@types/path-browserify": "^1.0.0", |
||||
|
"@typescript-eslint/eslint-plugin": "^5.19.0", |
||||
|
"@typescript-eslint/parser": "^5.19.0", |
||||
|
"@vicons/antd": "^0.12.0", |
||||
|
"@vicons/ionicons5": "^0.12.0", |
||||
|
"@vicons/tabler": "^0.12.0", |
||||
|
"@vitejs/plugin-vue": "^4.2.3", |
||||
|
"autoprefixer": "^10.4.13", |
||||
|
"eslint": "^8.34.0", |
||||
|
"eslint-config-prettier": "^8.5.0", |
||||
|
"eslint-plugin-prettier": "^4.0.0", |
||||
|
"eslint-plugin-vue": "^9.9.0", |
||||
|
"fast-glob": "^3.2.11", |
||||
|
"husky": "^7.0.4", |
||||
|
"naive-ui": "^2.34.4", |
||||
|
"postcss": "^8.4.20", |
||||
|
"prettier": "^2.6.2", |
||||
|
"sass": "^1.53.0", |
||||
|
"typescript": "^4.7.4", |
||||
|
"unplugin-auto-import": "^0.13.0", |
||||
|
"unplugin-icons": "^0.15.1", |
||||
|
"unplugin-vue-components": "^0.23.0", |
||||
|
"vite": "^4.3.9", |
||||
|
"vite-plugin-svg-icons": "^2.0.1", |
||||
|
"vue-eslint-parser": "^9.1.0", |
||||
|
"vue-tsc": "^0.35.0" |
||||
|
}, |
||||
|
"repository": "https://gitee.com/fuguobin/vue-vite-project-admin.git", |
||||
|
"author": "Daniel" |
||||
|
} |
After Width: | Height: | Size: 4.2 KiB |
@ -0,0 +1,11 @@ |
|||||
|
<template> |
||||
|
<el-config-provider :locale="appStore.locale" :size="appStore.size"> |
||||
|
<router-view /> |
||||
|
</el-config-provider> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import { ElConfigProvider } from 'element-plus'; |
||||
|
import { useAppStore } from '@/store/modules/app'; |
||||
|
const appStore = useAppStore(); |
||||
|
</script> |
@ -0,0 +1,37 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { CaptchaResult, LoginData, LoginResult } from './types'; |
||||
|
|
||||
|
/** |
||||
|
* 登录API |
||||
|
* |
||||
|
* @param data {LoginData} |
||||
|
* @returns |
||||
|
*/ |
||||
|
export function loginApi(data: LoginData): AxiosPromise<LoginResult> { |
||||
|
return request({ |
||||
|
url: '/login', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 注销API |
||||
|
*/ |
||||
|
export function logoutApi() { |
||||
|
return request({ |
||||
|
url: '/logout', |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取验证码 |
||||
|
*/ |
||||
|
export function getCaptchaApi(): AxiosPromise<CaptchaResult> { |
||||
|
return request({ |
||||
|
url: '/api/v1/auth/captcha', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
@ -0,0 +1,49 @@ |
|||||
|
/** |
||||
|
* 登录请求参数 |
||||
|
*/ |
||||
|
export interface LoginData { |
||||
|
/** |
||||
|
* 用户名 |
||||
|
*/ |
||||
|
username: string; |
||||
|
/** |
||||
|
* 密码 |
||||
|
*/ |
||||
|
password: string; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 登录响应 |
||||
|
*/ |
||||
|
export interface LoginResult { |
||||
|
/** |
||||
|
* 访问token |
||||
|
*/ |
||||
|
token?: string; |
||||
|
/** |
||||
|
* 过期时间(单位:毫秒) |
||||
|
*/ |
||||
|
expires?: number; |
||||
|
/** |
||||
|
* 刷新token |
||||
|
*/ |
||||
|
refreshToken?: string; |
||||
|
/** |
||||
|
* token 类型 |
||||
|
*/ |
||||
|
tokenType?: string; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 验证码响应 |
||||
|
*/ |
||||
|
export interface CaptchaResult { |
||||
|
/** |
||||
|
* 验证码缓存key |
||||
|
*/ |
||||
|
verifyCodeKey: string; |
||||
|
/** |
||||
|
* 验证码图片Base64字符串 |
||||
|
*/ |
||||
|
verifyCodeBase64: string; |
||||
|
} |
@ -0,0 +1,77 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { DeptForm, DeptQuery, DeptVO } from './types'; |
||||
|
|
||||
|
/** |
||||
|
* 部门树形表格 |
||||
|
* |
||||
|
* @param queryParams |
||||
|
*/ |
||||
|
export function listDepts(queryParams?: DeptQuery): AxiosPromise<DeptVO[]> { |
||||
|
return request({ |
||||
|
url: '/api/v1/dept', |
||||
|
method: 'get', |
||||
|
params: queryParams |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 部门下拉列表 |
||||
|
*/ |
||||
|
export function listDeptOptions(): AxiosPromise<[]> { |
||||
|
return request({ |
||||
|
url: '/api/v1/dept/options', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取部门详情 |
||||
|
* |
||||
|
* @param id |
||||
|
*/ |
||||
|
export function getDeptForm(id: number): AxiosPromise<DeptForm> { |
||||
|
return request({ |
||||
|
url: '/api/v1/dept/' + id + '/form', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 新增部门 |
||||
|
* |
||||
|
* @param data |
||||
|
*/ |
||||
|
export function addDept(data: DeptForm) { |
||||
|
return request({ |
||||
|
url: '/api/v1/dept', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改部门 |
||||
|
* |
||||
|
* @param id |
||||
|
* @param data |
||||
|
*/ |
||||
|
export function updateDept(id: number, data: DeptForm) { |
||||
|
return request({ |
||||
|
url: '/api/v1/dept/' + id, |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除部门 |
||||
|
* |
||||
|
* @param ids |
||||
|
*/ |
||||
|
export function deleteDept(ids: string) { |
||||
|
return request({ |
||||
|
url: '/api/v1/dept/' + ids, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
@ -0,0 +1,71 @@ |
|||||
|
/** |
||||
|
* 部门查询参数 |
||||
|
*/ |
||||
|
export interface DeptQuery { |
||||
|
keywords?: string; |
||||
|
status?: number; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 部门类型 |
||||
|
*/ |
||||
|
export interface DeptVO { |
||||
|
/** |
||||
|
* 子部门 |
||||
|
*/ |
||||
|
children?: DeptVO[]; |
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
createTime?: Date; |
||||
|
/** |
||||
|
* 部门ID |
||||
|
*/ |
||||
|
id?: number; |
||||
|
/** |
||||
|
* 部门名称 |
||||
|
*/ |
||||
|
name?: string; |
||||
|
/** |
||||
|
* 父部门ID |
||||
|
*/ |
||||
|
parentId?: number; |
||||
|
/** |
||||
|
* 排序 |
||||
|
*/ |
||||
|
sort?: number; |
||||
|
/** |
||||
|
* 状态(1:启用;0:禁用) |
||||
|
*/ |
||||
|
status?: number; |
||||
|
/** |
||||
|
* 修改时间 |
||||
|
*/ |
||||
|
updateTime?: Date; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 部门表单类型 |
||||
|
*/ |
||||
|
export interface DeptForm { |
||||
|
/** |
||||
|
* 部门ID(新增不填) |
||||
|
*/ |
||||
|
id?: number; |
||||
|
/** |
||||
|
* 部门名称 |
||||
|
*/ |
||||
|
name?: string; |
||||
|
/** |
||||
|
* 父部门ID |
||||
|
*/ |
||||
|
parentId: number; |
||||
|
/** |
||||
|
* 排序 |
||||
|
*/ |
||||
|
sort?: number; |
||||
|
/** |
||||
|
* 状态(1:启用;0:禁用) |
||||
|
*/ |
||||
|
status?: number; |
||||
|
} |
@ -0,0 +1,50 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { deviceVo } from './types'; |
||||
|
|
||||
|
/** |
||||
|
* 获取用户部门 |
||||
|
*/ |
||||
|
export function getDept(): AxiosPromise<[]> { |
||||
|
return request({ |
||||
|
url: '/bi/configuration/getMenu', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取设备列表 |
||||
|
* |
||||
|
* @param params 部门Id |
||||
|
*/ |
||||
|
export function getDeviceList(params: number): AxiosPromise<deviceVo> { |
||||
|
return request({ |
||||
|
url: '/bi/configuration/getDeviceListByDept/'+params, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取设备列表 |
||||
|
* |
||||
|
* @param params 设备Id |
||||
|
*/ |
||||
|
export function getViewInfo(params: number): AxiosPromise<deviceVo> { |
||||
|
return request({ |
||||
|
url: '/bi/configuration/getViewInfoById/'+params, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 配置项修改 |
||||
|
* |
||||
|
* @param data |
||||
|
*/ |
||||
|
export function editConfig(data: any) { |
||||
|
return request({ |
||||
|
url: '/dc/dcUserMonitorConfig/A', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
@ -0,0 +1,34 @@ |
|||||
|
/** |
||||
|
* 部门列表 |
||||
|
*/ |
||||
|
export interface menuVo { |
||||
|
createBy: null; |
||||
|
createTime: null; |
||||
|
updateBy: null; |
||||
|
updateTime: null; |
||||
|
remark: null; |
||||
|
deptId: number; |
||||
|
parentId: number; |
||||
|
ancestors: string; |
||||
|
deptName: string; |
||||
|
orderNum: number; |
||||
|
leader: string; |
||||
|
phone: string; |
||||
|
email: string; |
||||
|
status: string; |
||||
|
delFlag: null; |
||||
|
parentName: string; |
||||
|
children?: menuVo[]; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 设备列表 |
||||
|
*/ |
||||
|
export interface deviceVo { |
||||
|
deviceUUID: string; |
||||
|
deviceName: string; |
||||
|
partionCounts: number; |
||||
|
orgCode: number; |
||||
|
sourceType: string; |
||||
|
ifControl: number; |
||||
|
} |
@ -0,0 +1,34 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { FileInfo } from './types'; |
||||
|
|
||||
|
/** |
||||
|
* 上传文件 |
||||
|
* |
||||
|
* @param file |
||||
|
*/ |
||||
|
export function uploadFileApi(file: File): AxiosPromise<FileInfo> { |
||||
|
const formData = new FormData(); |
||||
|
formData.append('file', file); |
||||
|
return request({ |
||||
|
url: '/api/v1/files', |
||||
|
method: 'post', |
||||
|
data: formData, |
||||
|
headers: { |
||||
|
'Content-Type': 'multipart/form-data' |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除文件 |
||||
|
* |
||||
|
* @param filePath 文件完整路径 |
||||
|
*/ |
||||
|
export function deleteFileApi(filePath?: string) { |
||||
|
return request({ |
||||
|
url: '/api/v1/files', |
||||
|
method: 'delete', |
||||
|
params: { filePath: filePath } |
||||
|
}); |
||||
|
} |
@ -0,0 +1,7 @@ |
|||||
|
/** |
||||
|
* 文件API类型声明 |
||||
|
*/ |
||||
|
export interface FileInfo { |
||||
|
name: string; |
||||
|
url: string; |
||||
|
} |
@ -0,0 +1,87 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { MenuQuery, MenuVO, MenuForm } from './types'; |
||||
|
|
||||
|
/** |
||||
|
* 获取路由列表 |
||||
|
*/ |
||||
|
export function listRoutes() { |
||||
|
return request({ |
||||
|
url: '/getRouters', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取菜单树形列表 |
||||
|
* |
||||
|
* @param queryParams |
||||
|
*/ |
||||
|
export function listMenus(queryParams: MenuQuery): AxiosPromise<MenuVO[]> { |
||||
|
return request({ |
||||
|
url: '/system/menu/roleMenuTreeselect', |
||||
|
method: 'get', |
||||
|
params: queryParams |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取菜单下拉树形列表 |
||||
|
*/ |
||||
|
export function listMenuOptions(): AxiosPromise<OptionType[]> { |
||||
|
return request({ |
||||
|
url: '/api/v1/menus/options', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取菜单表单数据 |
||||
|
* |
||||
|
* @param id |
||||
|
*/ |
||||
|
export function getMenuForm(id: number): AxiosPromise<MenuForm> { |
||||
|
return request({ |
||||
|
url: '/api/v1/menus/' + id + '/form', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 添加菜单 |
||||
|
* |
||||
|
* @param data |
||||
|
*/ |
||||
|
export function addMenu(data: MenuForm) { |
||||
|
return request({ |
||||
|
url: '/api/v1/menus', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改菜单 |
||||
|
* |
||||
|
* @param id |
||||
|
* @param data |
||||
|
*/ |
||||
|
export function updateMenu(id: string, data: MenuForm) { |
||||
|
return request({ |
||||
|
url: '/api/v1/menus/' + id, |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除菜单 |
||||
|
* |
||||
|
* @param id 菜单ID |
||||
|
*/ |
||||
|
export function deleteMenu(id: number) { |
||||
|
return request({ |
||||
|
url: '/api/v1/menus/' + id, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
@ -0,0 +1,115 @@ |
|||||
|
import { MenuTypeEnum } from '@/enums/MenuTypeEnum'; |
||||
|
|
||||
|
/** |
||||
|
* 菜单查询参数类型 |
||||
|
*/ |
||||
|
export interface MenuQuery { |
||||
|
keywords?: string; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 菜单视图对象类型 |
||||
|
*/ |
||||
|
export interface MenuVO { |
||||
|
/** |
||||
|
* 子菜单 |
||||
|
*/ |
||||
|
children?: MenuVO[]; |
||||
|
/** |
||||
|
* 组件路径 |
||||
|
*/ |
||||
|
component?: string; |
||||
|
/** |
||||
|
* ICON |
||||
|
*/ |
||||
|
icon?: string; |
||||
|
/** |
||||
|
* 菜单ID |
||||
|
*/ |
||||
|
id?: number; |
||||
|
/** |
||||
|
* 菜单名称 |
||||
|
*/ |
||||
|
name?: string; |
||||
|
/** |
||||
|
* 父菜单ID |
||||
|
*/ |
||||
|
parentId?: number; |
||||
|
/** |
||||
|
* 按钮权限标识 |
||||
|
*/ |
||||
|
perm?: string; |
||||
|
/** |
||||
|
* 跳转路径 |
||||
|
*/ |
||||
|
redirect?: string; |
||||
|
/** |
||||
|
* 路由名称 |
||||
|
*/ |
||||
|
routeName?: string; |
||||
|
/** |
||||
|
* 路由相对路径 |
||||
|
*/ |
||||
|
routePath?: string; |
||||
|
/** |
||||
|
* 菜单排序(数字越小排名越靠前) |
||||
|
*/ |
||||
|
sort?: number; |
||||
|
/** |
||||
|
* 菜单类型 |
||||
|
*/ |
||||
|
type?: MenuTypeEnum; |
||||
|
/** |
||||
|
* 菜单是否可见(1:显示;0:隐藏) |
||||
|
*/ |
||||
|
visible?: number; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 菜单表单对象类型 |
||||
|
*/ |
||||
|
export interface MenuForm { |
||||
|
/** |
||||
|
* 菜单ID |
||||
|
*/ |
||||
|
id?: string; |
||||
|
/** |
||||
|
* 父菜单ID |
||||
|
*/ |
||||
|
parentId?: number; |
||||
|
/** |
||||
|
* 菜单名称 |
||||
|
*/ |
||||
|
name?: string; |
||||
|
/** |
||||
|
* 菜单是否可见(1:是;0:否;) |
||||
|
*/ |
||||
|
visible: number; |
||||
|
icon?: string; |
||||
|
/** |
||||
|
* 排序 |
||||
|
*/ |
||||
|
sort: number; |
||||
|
/** |
||||
|
* 组件路径 |
||||
|
*/ |
||||
|
component?: string; |
||||
|
/** |
||||
|
* 路由路径 |
||||
|
*/ |
||||
|
path?: string; |
||||
|
/** |
||||
|
* 跳转路由路径 |
||||
|
*/ |
||||
|
redirect?: string; |
||||
|
|
||||
|
/** |
||||
|
* 菜单类型 |
||||
|
*/ |
||||
|
type: MenuTypeEnum; |
||||
|
|
||||
|
/** |
||||
|
* 权限标识 |
||||
|
*/ |
||||
|
perm?: string; |
||||
|
} |
@ -0,0 +1,112 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { RoleQuery, RolePageResult, RoleForm } from './types'; |
||||
|
|
||||
|
/** |
||||
|
* 获取分页数据 |
||||
|
* |
||||
|
* @param queryParams |
||||
|
*/ |
||||
|
export function getProPage( |
||||
|
queryParams?: RoleQuery |
||||
|
): AxiosPromise<RolePageResult> { |
||||
|
return request({ |
||||
|
url: '/api/v1/pro/page', |
||||
|
method: 'get', |
||||
|
data: queryParams |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取角色下拉数据 |
||||
|
* |
||||
|
* @param queryParams |
||||
|
*/ |
||||
|
export function listBrandsOptions( |
||||
|
queryParams?: RoleQuery |
||||
|
): AxiosPromise<OptionType[]> { |
||||
|
return request({ |
||||
|
url: '/api/v1/brands/options', |
||||
|
method: 'get', |
||||
|
params: queryParams |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取角色的菜单ID集合 |
||||
|
* |
||||
|
* @param queryParams |
||||
|
*/ |
||||
|
export function getRoleMenuIds(roleId: number): AxiosPromise<number[]> { |
||||
|
return request({ |
||||
|
url: '/api/v1/roles/menuIds', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 分配菜单权限给角色 |
||||
|
* |
||||
|
* @param queryParams |
||||
|
*/ |
||||
|
export function updateRoleMenus( |
||||
|
roleId: number, |
||||
|
data: number[] |
||||
|
): AxiosPromise<any> { |
||||
|
return request({ |
||||
|
url: '/api/v1/roles/' + roleId + '/menus', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取角色详情 |
||||
|
* |
||||
|
* @param id |
||||
|
*/ |
||||
|
export function getproForm(id: number): AxiosPromise<RoleForm> { |
||||
|
return request({ |
||||
|
url: '/api/v1/pro/form', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 添加角色 |
||||
|
* |
||||
|
* @param data |
||||
|
*/ |
||||
|
export function addRole(data: RoleForm) { |
||||
|
return request({ |
||||
|
url: '/api/v1/roles', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 更新角色 |
||||
|
* |
||||
|
* @param id |
||||
|
* @param data |
||||
|
*/ |
||||
|
export function updateRole(id: number, data: RoleForm) { |
||||
|
return request({ |
||||
|
url: '/api/v1/roles/' + id, |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 批量删除角色,多个以英文逗号(,)分割 |
||||
|
* |
||||
|
* @param ids |
||||
|
*/ |
||||
|
export function deleteRoles(ids: string) { |
||||
|
return request({ |
||||
|
url: '/api/v1/roles/' + ids, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
@ -0,0 +1,91 @@ |
|||||
|
/** |
||||
|
* 角色查询参数 |
||||
|
*/ |
||||
|
export interface RoleQuery extends PageQuery { |
||||
|
keywords?: string; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 角色分页对象 |
||||
|
*/ |
||||
|
export interface RolePageVO { |
||||
|
/** |
||||
|
* 角色编码 |
||||
|
*/ |
||||
|
code?: string; |
||||
|
|
||||
|
/** |
||||
|
* 角色ID |
||||
|
*/ |
||||
|
id?: number; |
||||
|
/** |
||||
|
* 角色名称 |
||||
|
*/ |
||||
|
name?: string; |
||||
|
/** |
||||
|
* 排序 |
||||
|
*/ |
||||
|
sort?: number; |
||||
|
/** |
||||
|
* 角色状态 |
||||
|
*/ |
||||
|
status?: number; |
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
createTime?: Date; |
||||
|
/** |
||||
|
* 修改时间 |
||||
|
*/ |
||||
|
updateTime?: Date; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 角色分页 |
||||
|
*/ |
||||
|
export type RolePageResult = PageResult<RolePageVO[]>; |
||||
|
|
||||
|
/** |
||||
|
* 商品表单对象 |
||||
|
*/ |
||||
|
export interface RoleForm { |
||||
|
/** |
||||
|
* 角色ID |
||||
|
*/ |
||||
|
id?: number; |
||||
|
|
||||
|
/** |
||||
|
* 商品名称 |
||||
|
*/ |
||||
|
name: string; |
||||
|
|
||||
|
/** |
||||
|
* 商品品牌 |
||||
|
*/ |
||||
|
brands: string; |
||||
|
|
||||
|
/** |
||||
|
* 商品价格 |
||||
|
*/ |
||||
|
price?: number; |
||||
|
|
||||
|
/** |
||||
|
* 商品图片 |
||||
|
*/ |
||||
|
picture: string; |
||||
|
|
||||
|
/** |
||||
|
* 商品类别 |
||||
|
*/ |
||||
|
category?: RoleForm[]; |
||||
|
|
||||
|
/** |
||||
|
* 排序 |
||||
|
*/ |
||||
|
sort?: number; |
||||
|
|
||||
|
/** |
||||
|
* 介绍 |
||||
|
*/ |
||||
|
desc?: string; |
||||
|
} |
@ -0,0 +1,112 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { RoleQuery, RolePageResult, RoleForm } from './types'; |
||||
|
|
||||
|
/** |
||||
|
* 获取角色分页数据 |
||||
|
* |
||||
|
* @param queryParams |
||||
|
*/ |
||||
|
export function getRolePage( |
||||
|
queryParams?: RoleQuery |
||||
|
): AxiosPromise<RolePageResult> { |
||||
|
return request({ |
||||
|
url: '/api/v1/roles/page', |
||||
|
method: 'get', |
||||
|
data: queryParams |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取角色下拉数据 |
||||
|
* |
||||
|
* @param queryParams |
||||
|
*/ |
||||
|
export function listRoleOptions( |
||||
|
queryParams?: RoleQuery |
||||
|
): AxiosPromise<OptionType[]> { |
||||
|
return request({ |
||||
|
url: '/api/v1/roles/options', |
||||
|
method: 'get', |
||||
|
params: queryParams |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取角色的菜单ID集合 |
||||
|
* |
||||
|
* @param queryParams |
||||
|
*/ |
||||
|
export function getRoleMenuIds(roleId: number): AxiosPromise<number[]> { |
||||
|
return request({ |
||||
|
url: '/api/v1/roles/menuIds', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 分配菜单权限给角色 |
||||
|
* |
||||
|
* @param queryParams |
||||
|
*/ |
||||
|
export function updateRoleMenus( |
||||
|
roleId: number, |
||||
|
data: number[] |
||||
|
): AxiosPromise<any> { |
||||
|
return request({ |
||||
|
url: '/api/v1/roles/' + roleId + '/menus', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取角色详情 |
||||
|
* |
||||
|
* @param id |
||||
|
*/ |
||||
|
export function getRoleForm(id: number): AxiosPromise<RoleForm> { |
||||
|
return request({ |
||||
|
url: '/api/v1/roles/form', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 添加角色 |
||||
|
* |
||||
|
* @param data |
||||
|
*/ |
||||
|
export function addRole(data: RoleForm) { |
||||
|
return request({ |
||||
|
url: '/api/v1/roles', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 更新角色 |
||||
|
* |
||||
|
* @param id |
||||
|
* @param data |
||||
|
*/ |
||||
|
export function updateRole(id: number, data: RoleForm) { |
||||
|
return request({ |
||||
|
url: '/api/v1/roles/' + id, |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 批量删除角色,多个以英文逗号(,)分割 |
||||
|
* |
||||
|
* @param ids |
||||
|
*/ |
||||
|
export function deleteRoles(ids: string) { |
||||
|
return request({ |
||||
|
url: '/api/v1/roles/' + ids, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
@ -0,0 +1,78 @@ |
|||||
|
/** |
||||
|
* 角色查询参数 |
||||
|
*/ |
||||
|
export interface RoleQuery extends PageQuery { |
||||
|
keywords?: string; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 角色分页对象 |
||||
|
*/ |
||||
|
export interface RolePageVO { |
||||
|
/** |
||||
|
* 角色编码 |
||||
|
*/ |
||||
|
code?: string; |
||||
|
|
||||
|
/** |
||||
|
* 角色ID |
||||
|
*/ |
||||
|
id?: number; |
||||
|
/** |
||||
|
* 角色名称 |
||||
|
*/ |
||||
|
name?: string; |
||||
|
/** |
||||
|
* 排序 |
||||
|
*/ |
||||
|
sort?: number; |
||||
|
/** |
||||
|
* 角色状态 |
||||
|
*/ |
||||
|
status?: number; |
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
createTime?: Date; |
||||
|
/** |
||||
|
* 修改时间 |
||||
|
*/ |
||||
|
updateTime?: Date; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 角色分页 |
||||
|
*/ |
||||
|
export type RolePageResult = PageResult<RolePageVO[]>; |
||||
|
|
||||
|
/** |
||||
|
* 角色表单对象 |
||||
|
*/ |
||||
|
export interface RoleForm { |
||||
|
/** |
||||
|
* 角色ID |
||||
|
*/ |
||||
|
id?: number; |
||||
|
|
||||
|
/** |
||||
|
* 角色编码 |
||||
|
*/ |
||||
|
code: string; |
||||
|
/** |
||||
|
* 数据权限 |
||||
|
*/ |
||||
|
dataScope?: number; |
||||
|
|
||||
|
/** |
||||
|
* 角色名称 |
||||
|
*/ |
||||
|
name: string; |
||||
|
/** |
||||
|
* 排序 |
||||
|
*/ |
||||
|
sort?: number; |
||||
|
/** |
||||
|
* 角色状态(1-正常;0-停用) |
||||
|
*/ |
||||
|
status?: number; |
||||
|
} |
@ -0,0 +1,58 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { TableVo } from './types'; |
||||
|
|
||||
|
/** |
||||
|
* 获取左侧菜单 |
||||
|
*/ |
||||
|
export function getMenu(): AxiosPromise<[]> { |
||||
|
return request({ |
||||
|
url: '/bi/opt/getMenu', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取热源信息 |
||||
|
*/ |
||||
|
export function getStationInfo(): AxiosPromise<[]> { |
||||
|
return request({ |
||||
|
url: '/bi/opt/getStationInfo', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取表格header |
||||
|
*/ |
||||
|
export function getTableHeader(): AxiosPromise<[]> { |
||||
|
return request({ |
||||
|
url: '/bi/opt/getTableHeader', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取表格数据 |
||||
|
* |
||||
|
* @param id |
||||
|
*/ |
||||
|
export function getTableData(params: number): AxiosPromise<TableVo> { |
||||
|
return request({ |
||||
|
url: '/bi/opt/getTableData/'+params, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 配置项修改 |
||||
|
* |
||||
|
* @param data |
||||
|
*/ |
||||
|
export function editConfig(data: any) { |
||||
|
return request({ |
||||
|
url: '/dc/dcUserMonitorConfig/A', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
@ -0,0 +1,58 @@ |
|||||
|
/** |
||||
|
* 表格参数 |
||||
|
*/ |
||||
|
export interface TableVo { |
||||
|
id: string; |
||||
|
deviceuuid: string; |
||||
|
areaid: string; |
||||
|
C018: object; |
||||
|
C019: object; |
||||
|
C020: object; |
||||
|
C021: object; |
||||
|
C022: object; |
||||
|
C023: object; |
||||
|
C024: object; |
||||
|
C025: object; |
||||
|
source: string; |
||||
|
data: string; |
||||
|
C007: object; |
||||
|
C026: object; |
||||
|
C027: object; |
||||
|
C028: object; |
||||
|
C029: object; |
||||
|
C005: object; |
||||
|
C006: object; |
||||
|
C001: object; |
||||
|
C002: object; |
||||
|
C003: object; |
||||
|
C004: object; |
||||
|
C008: object; |
||||
|
C009: object; |
||||
|
C010: object; |
||||
|
C011: object; |
||||
|
C012: object; |
||||
|
C013: object; |
||||
|
C014: object; |
||||
|
C015: object; |
||||
|
C016: boolean; |
||||
|
C017: object; |
||||
|
C030: object; |
||||
|
C031: object; |
||||
|
C032: object; |
||||
|
C033: object; |
||||
|
C034: object; |
||||
|
C035: object; |
||||
|
C036: object; |
||||
|
C037: object; |
||||
|
C038: object; |
||||
|
C039: object; |
||||
|
C040: object; |
||||
|
C041: object; |
||||
|
C042: object; |
||||
|
C043: object; |
||||
|
C044: object; |
||||
|
C045: object; |
||||
|
C046: object; |
||||
|
C047: object; |
||||
|
C048: object; |
||||
|
} |
@ -0,0 +1,154 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { UserForm, UserInfo, UserPageVO, UserQuery } from './types'; |
||||
|
|
||||
|
/** |
||||
|
* 登录成功后获取用户信息(昵称、头像、权限集合和角色集合) |
||||
|
*/ |
||||
|
export function getUserInfo(): AxiosPromise<UserInfo> { |
||||
|
return request({ |
||||
|
url: '/getInfo', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取用户分页列表 |
||||
|
* |
||||
|
* @param queryParams |
||||
|
*/ |
||||
|
export function getUserPage( |
||||
|
queryParams: UserQuery |
||||
|
): AxiosPromise<PageResult<UserPageVO[]>> { |
||||
|
return request({ |
||||
|
url: '/api/v1/users/page', |
||||
|
method: 'get', |
||||
|
data: queryParams |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取用户表单详情 |
||||
|
* |
||||
|
* @param userId |
||||
|
*/ |
||||
|
export function getUserForm(userId: number): AxiosPromise<UserForm> { |
||||
|
return request({ |
||||
|
url: '/api/v1/users/form', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 添加用户 |
||||
|
* |
||||
|
* @param data |
||||
|
*/ |
||||
|
export function addUser(data: any) { |
||||
|
return request({ |
||||
|
url: '/api/v1/users', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改用户 |
||||
|
* |
||||
|
* @param id |
||||
|
* @param data |
||||
|
*/ |
||||
|
export function updateUser(id: number, data: UserForm) { |
||||
|
return request({ |
||||
|
url: '/api/v1/users/' + id, |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改用户状态 |
||||
|
* |
||||
|
* @param id |
||||
|
* @param status |
||||
|
*/ |
||||
|
export function updateUserStatus(id: number, status: number) { |
||||
|
return request({ |
||||
|
url: '/api/v1/users/' + id + '/status', |
||||
|
method: 'patch', |
||||
|
params: { status: status } |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改用户密码 |
||||
|
* |
||||
|
* @param id |
||||
|
* @param password |
||||
|
*/ |
||||
|
export function updateUserPassword(id: number, password: string) { |
||||
|
return request({ |
||||
|
url: '/api/v1/users/' + id + '/password', |
||||
|
method: 'patch', |
||||
|
params: { password: password } |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除用户 |
||||
|
* |
||||
|
* @param ids |
||||
|
*/ |
||||
|
export function deleteUsers(ids: string) { |
||||
|
return request({ |
||||
|
url: '/api/v1/users/' + ids, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 下载用户导入模板 |
||||
|
* |
||||
|
* @returns |
||||
|
*/ |
||||
|
export function downloadTemplateApi() { |
||||
|
return request({ |
||||
|
url: '/api/v1/users/template', |
||||
|
method: 'get', |
||||
|
responseType: 'arraybuffer' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 导出用户 |
||||
|
* |
||||
|
* @param queryParams |
||||
|
* @returns |
||||
|
*/ |
||||
|
export function exportUser(queryParams: UserQuery) { |
||||
|
return request({ |
||||
|
url: '/api/v1/users/_export', |
||||
|
method: 'get', |
||||
|
params: queryParams, |
||||
|
responseType: 'arraybuffer' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 导入用户 |
||||
|
* |
||||
|
* @param file |
||||
|
*/ |
||||
|
export function importUser(deptId: number, file: File) { |
||||
|
const formData = new FormData(); |
||||
|
formData.append('file', file); |
||||
|
return request({ |
||||
|
url: '/api/v1/users/_import', |
||||
|
method: 'post', |
||||
|
params: { deptId: deptId }, |
||||
|
data: formData, |
||||
|
headers: { |
||||
|
'Content-Type': 'multipart/form-data' |
||||
|
} |
||||
|
}); |
||||
|
} |
@ -0,0 +1,115 @@ |
|||||
|
/** |
||||
|
* 登录用户信息 |
||||
|
*/ |
||||
|
export interface UserInfo { |
||||
|
// nickname: string;
|
||||
|
// avatar: string;
|
||||
|
// roles: string[];
|
||||
|
// perms: string[];
|
||||
|
permissions: string[]; |
||||
|
roles: string[]; |
||||
|
loginIp: string; |
||||
|
user?: object; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 用户查询对象类型 |
||||
|
*/ |
||||
|
export interface UserQuery extends PageQuery { |
||||
|
keywords?: string; |
||||
|
status?: number; |
||||
|
deptId?: number; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 用户分页对象 |
||||
|
*/ |
||||
|
export interface UserPageVO { |
||||
|
/** |
||||
|
* 用户头像地址 |
||||
|
*/ |
||||
|
avatar?: string; |
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
createTime?: Date; |
||||
|
/** |
||||
|
* 部门名称 |
||||
|
*/ |
||||
|
deptName?: string; |
||||
|
/** |
||||
|
* 用户邮箱 |
||||
|
*/ |
||||
|
email?: string; |
||||
|
/** |
||||
|
* 性别 |
||||
|
*/ |
||||
|
genderLabel?: string; |
||||
|
/** |
||||
|
* 用户ID |
||||
|
*/ |
||||
|
id?: number; |
||||
|
/** |
||||
|
* 手机号 |
||||
|
*/ |
||||
|
mobile?: string; |
||||
|
/** |
||||
|
* 用户昵称 |
||||
|
*/ |
||||
|
nickname?: string; |
||||
|
/** |
||||
|
* 角色名称,多个使用英文逗号(,)分割 |
||||
|
*/ |
||||
|
roleNames?: string; |
||||
|
/** |
||||
|
* 用户状态(1:启用;0:禁用) |
||||
|
*/ |
||||
|
status?: number; |
||||
|
/** |
||||
|
* 用户名 |
||||
|
*/ |
||||
|
username?: string; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 用户表单类型 |
||||
|
*/ |
||||
|
export interface UserForm { |
||||
|
/** |
||||
|
* 用户头像 |
||||
|
*/ |
||||
|
avatar?: string; |
||||
|
/** |
||||
|
* 部门ID |
||||
|
*/ |
||||
|
deptId?: number; |
||||
|
/** |
||||
|
* 邮箱 |
||||
|
*/ |
||||
|
email?: string; |
||||
|
/** |
||||
|
* 性别 |
||||
|
*/ |
||||
|
sex?: number; |
||||
|
/** |
||||
|
* 用户ID |
||||
|
*/ |
||||
|
id?: number; |
||||
|
mobile?: string; |
||||
|
/** |
||||
|
* 昵称 |
||||
|
*/ |
||||
|
nickname?: string; |
||||
|
/** |
||||
|
* 角色ID集合 |
||||
|
*/ |
||||
|
roleIds?: number[]; |
||||
|
/** |
||||
|
* 用户状态(1:正常;0:禁用) |
||||
|
*/ |
||||
|
status?: number; |
||||
|
/** |
||||
|
* 用户名 |
||||
|
*/ |
||||
|
username?: string; |
||||
|
} |
After Width: | Height: | Size: 160 KiB |
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 4.7 KiB |
@ -0,0 +1,539 @@ |
|||||
|
/* Logo 字体 */ |
||||
|
@font-face { |
||||
|
font-family: "iconfont logo"; |
||||
|
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); |
||||
|
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), |
||||
|
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), |
||||
|
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), |
||||
|
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); |
||||
|
} |
||||
|
|
||||
|
.logo { |
||||
|
font-family: "iconfont logo"; |
||||
|
font-size: 160px; |
||||
|
font-style: normal; |
||||
|
-webkit-font-smoothing: antialiased; |
||||
|
-moz-osx-font-smoothing: grayscale; |
||||
|
} |
||||
|
|
||||
|
/* tabs */ |
||||
|
.nav-tabs { |
||||
|
position: relative; |
||||
|
} |
||||
|
|
||||
|
.nav-tabs .nav-more { |
||||
|
position: absolute; |
||||
|
right: 0; |
||||
|
bottom: 0; |
||||
|
height: 42px; |
||||
|
line-height: 42px; |
||||
|
color: #666; |
||||
|
} |
||||
|
|
||||
|
#tabs { |
||||
|
border-bottom: 1px solid #eee; |
||||
|
} |
||||
|
|
||||
|
#tabs li { |
||||
|
cursor: pointer; |
||||
|
width: 100px; |
||||
|
height: 40px; |
||||
|
line-height: 40px; |
||||
|
text-align: center; |
||||
|
font-size: 16px; |
||||
|
border-bottom: 2px solid transparent; |
||||
|
position: relative; |
||||
|
z-index: 1; |
||||
|
margin-bottom: -1px; |
||||
|
color: #666; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
#tabs .active { |
||||
|
border-bottom-color: #f00; |
||||
|
color: #222; |
||||
|
} |
||||
|
|
||||
|
.tab-container .content { |
||||
|
display: none; |
||||
|
} |
||||
|
|
||||
|
/* 页面布局 */ |
||||
|
.main { |
||||
|
padding: 30px 100px; |
||||
|
width: 960px; |
||||
|
margin: 0 auto; |
||||
|
} |
||||
|
|
||||
|
.main .logo { |
||||
|
color: #333; |
||||
|
text-align: left; |
||||
|
margin-bottom: 30px; |
||||
|
line-height: 1; |
||||
|
height: 110px; |
||||
|
margin-top: -50px; |
||||
|
overflow: hidden; |
||||
|
*zoom: 1; |
||||
|
} |
||||
|
|
||||
|
.main .logo a { |
||||
|
font-size: 160px; |
||||
|
color: #333; |
||||
|
} |
||||
|
|
||||
|
.helps { |
||||
|
margin-top: 40px; |
||||
|
} |
||||
|
|
||||
|
.helps pre { |
||||
|
padding: 20px; |
||||
|
margin: 10px 0; |
||||
|
border: solid 1px #e7e1cd; |
||||
|
background-color: #fffdef; |
||||
|
overflow: auto; |
||||
|
} |
||||
|
|
||||
|
.icon_lists { |
||||
|
width: 100% !important; |
||||
|
overflow: hidden; |
||||
|
*zoom: 1; |
||||
|
} |
||||
|
|
||||
|
.icon_lists li { |
||||
|
width: 100px; |
||||
|
margin-bottom: 10px; |
||||
|
margin-right: 20px; |
||||
|
text-align: center; |
||||
|
list-style: none !important; |
||||
|
cursor: default; |
||||
|
} |
||||
|
|
||||
|
.icon_lists li .code-name { |
||||
|
line-height: 1.2; |
||||
|
} |
||||
|
|
||||
|
.icon_lists .icon { |
||||
|
display: block; |
||||
|
height: 100px; |
||||
|
line-height: 100px; |
||||
|
font-size: 42px; |
||||
|
margin: 10px auto; |
||||
|
color: #333; |
||||
|
-webkit-transition: font-size 0.25s linear, width 0.25s linear; |
||||
|
-moz-transition: font-size 0.25s linear, width 0.25s linear; |
||||
|
transition: font-size 0.25s linear, width 0.25s linear; |
||||
|
} |
||||
|
|
||||
|
.icon_lists .icon:hover { |
||||
|
font-size: 100px; |
||||
|
} |
||||
|
|
||||
|
.icon_lists .svg-icon { |
||||
|
/* 通过设置 font-size 来改变图标大小 */ |
||||
|
width: 1em; |
||||
|
/* 图标和文字相邻时,垂直对齐 */ |
||||
|
vertical-align: -0.15em; |
||||
|
/* 通过设置 color 来改变 SVG 的颜色/fill */ |
||||
|
fill: currentColor; |
||||
|
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 |
||||
|
normalize.css 中也包含这行 */ |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
|
||||
|
.icon_lists li .name, |
||||
|
.icon_lists li .code-name { |
||||
|
color: #666; |
||||
|
} |
||||
|
|
||||
|
/* markdown 样式 */ |
||||
|
.markdown { |
||||
|
color: #666; |
||||
|
font-size: 14px; |
||||
|
line-height: 1.8; |
||||
|
} |
||||
|
|
||||
|
.highlight { |
||||
|
line-height: 1.5; |
||||
|
} |
||||
|
|
||||
|
.markdown img { |
||||
|
vertical-align: middle; |
||||
|
max-width: 100%; |
||||
|
} |
||||
|
|
||||
|
.markdown h1 { |
||||
|
color: #404040; |
||||
|
font-weight: 500; |
||||
|
line-height: 40px; |
||||
|
margin-bottom: 24px; |
||||
|
} |
||||
|
|
||||
|
.markdown h2, |
||||
|
.markdown h3, |
||||
|
.markdown h4, |
||||
|
.markdown h5, |
||||
|
.markdown h6 { |
||||
|
color: #404040; |
||||
|
margin: 1.6em 0 0.6em 0; |
||||
|
font-weight: 500; |
||||
|
clear: both; |
||||
|
} |
||||
|
|
||||
|
.markdown h1 { |
||||
|
font-size: 28px; |
||||
|
} |
||||
|
|
||||
|
.markdown h2 { |
||||
|
font-size: 22px; |
||||
|
} |
||||
|
|
||||
|
.markdown h3 { |
||||
|
font-size: 16px; |
||||
|
} |
||||
|
|
||||
|
.markdown h4 { |
||||
|
font-size: 14px; |
||||
|
} |
||||
|
|
||||
|
.markdown h5 { |
||||
|
font-size: 12px; |
||||
|
} |
||||
|
|
||||
|
.markdown h6 { |
||||
|
font-size: 12px; |
||||
|
} |
||||
|
|
||||
|
.markdown hr { |
||||
|
height: 1px; |
||||
|
border: 0; |
||||
|
background: #e9e9e9; |
||||
|
margin: 16px 0; |
||||
|
clear: both; |
||||
|
} |
||||
|
|
||||
|
.markdown p { |
||||
|
margin: 1em 0; |
||||
|
} |
||||
|
|
||||
|
.markdown>p, |
||||
|
.markdown>blockquote, |
||||
|
.markdown>.highlight, |
||||
|
.markdown>ol, |
||||
|
.markdown>ul { |
||||
|
width: 80%; |
||||
|
} |
||||
|
|
||||
|
.markdown ul>li { |
||||
|
list-style: circle; |
||||
|
} |
||||
|
|
||||
|
.markdown>ul li, |
||||
|
.markdown blockquote ul>li { |
||||
|
margin-left: 20px; |
||||
|
padding-left: 4px; |
||||
|
} |
||||
|
|
||||
|
.markdown>ul li p, |
||||
|
.markdown>ol li p { |
||||
|
margin: 0.6em 0; |
||||
|
} |
||||
|
|
||||
|
.markdown ol>li { |
||||
|
list-style: decimal; |
||||
|
} |
||||
|
|
||||
|
.markdown>ol li, |
||||
|
.markdown blockquote ol>li { |
||||
|
margin-left: 20px; |
||||
|
padding-left: 4px; |
||||
|
} |
||||
|
|
||||
|
.markdown code { |
||||
|
margin: 0 3px; |
||||
|
padding: 0 5px; |
||||
|
background: #eee; |
||||
|
border-radius: 3px; |
||||
|
} |
||||
|
|
||||
|
.markdown strong, |
||||
|
.markdown b { |
||||
|
font-weight: 600; |
||||
|
} |
||||
|
|
||||
|
.markdown>table { |
||||
|
border-collapse: collapse; |
||||
|
border-spacing: 0px; |
||||
|
empty-cells: show; |
||||
|
border: 1px solid #e9e9e9; |
||||
|
width: 95%; |
||||
|
margin-bottom: 24px; |
||||
|
} |
||||
|
|
||||
|
.markdown>table th { |
||||
|
white-space: nowrap; |
||||
|
color: #333; |
||||
|
font-weight: 600; |
||||
|
} |
||||
|
|
||||
|
.markdown>table th, |
||||
|
.markdown>table td { |
||||
|
border: 1px solid #e9e9e9; |
||||
|
padding: 8px 16px; |
||||
|
text-align: left; |
||||
|
} |
||||
|
|
||||
|
.markdown>table th { |
||||
|
background: #F7F7F7; |
||||
|
} |
||||
|
|
||||
|
.markdown blockquote { |
||||
|
font-size: 90%; |
||||
|
color: #999; |
||||
|
border-left: 4px solid #e9e9e9; |
||||
|
padding-left: 0.8em; |
||||
|
margin: 1em 0; |
||||
|
} |
||||
|
|
||||
|
.markdown blockquote p { |
||||
|
margin: 0; |
||||
|
} |
||||
|
|
||||
|
.markdown .anchor { |
||||
|
opacity: 0; |
||||
|
transition: opacity 0.3s ease; |
||||
|
margin-left: 8px; |
||||
|
} |
||||
|
|
||||
|
.markdown .waiting { |
||||
|
color: #ccc; |
||||
|
} |
||||
|
|
||||
|
.markdown h1:hover .anchor, |
||||
|
.markdown h2:hover .anchor, |
||||
|
.markdown h3:hover .anchor, |
||||
|
.markdown h4:hover .anchor, |
||||
|
.markdown h5:hover .anchor, |
||||
|
.markdown h6:hover .anchor { |
||||
|
opacity: 1; |
||||
|
display: inline-block; |
||||
|
} |
||||
|
|
||||
|
.markdown>br, |
||||
|
.markdown>p>br { |
||||
|
clear: both; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
.hljs { |
||||
|
display: block; |
||||
|
background: white; |
||||
|
padding: 0.5em; |
||||
|
color: #333333; |
||||
|
overflow-x: auto; |
||||
|
} |
||||
|
|
||||
|
.hljs-comment, |
||||
|
.hljs-meta { |
||||
|
color: #969896; |
||||
|
} |
||||
|
|
||||
|
.hljs-string, |
||||
|
.hljs-variable, |
||||
|
.hljs-template-variable, |
||||
|
.hljs-strong, |
||||
|
.hljs-emphasis, |
||||
|
.hljs-quote { |
||||
|
color: #df5000; |
||||
|
} |
||||
|
|
||||
|
.hljs-keyword, |
||||
|
.hljs-selector-tag, |
||||
|
.hljs-type { |
||||
|
color: #a71d5d; |
||||
|
} |
||||
|
|
||||
|
.hljs-literal, |
||||
|
.hljs-symbol, |
||||
|
.hljs-bullet, |
||||
|
.hljs-attribute { |
||||
|
color: #0086b3; |
||||
|
} |
||||
|
|
||||
|
.hljs-section, |
||||
|
.hljs-name { |
||||
|
color: #63a35c; |
||||
|
} |
||||
|
|
||||
|
.hljs-tag { |
||||
|
color: #333333; |
||||
|
} |
||||
|
|
||||
|
.hljs-title, |
||||
|
.hljs-attr, |
||||
|
.hljs-selector-id, |
||||
|
.hljs-selector-class, |
||||
|
.hljs-selector-attr, |
||||
|
.hljs-selector-pseudo { |
||||
|
color: #795da3; |
||||
|
} |
||||
|
|
||||
|
.hljs-addition { |
||||
|
color: #55a532; |
||||
|
background-color: #eaffea; |
||||
|
} |
||||
|
|
||||
|
.hljs-deletion { |
||||
|
color: #bd2c00; |
||||
|
background-color: #ffecec; |
||||
|
} |
||||
|
|
||||
|
.hljs-link { |
||||
|
text-decoration: underline; |
||||
|
} |
||||
|
|
||||
|
/* 代码高亮 */ |
||||
|
/* PrismJS 1.15.0 |
||||
|
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ |
||||
|
/** |
||||
|
* prism.js default theme for JavaScript, CSS and HTML |
||||
|
* Based on dabblet (http://dabblet.com) |
||||
|
* @author Lea Verou |
||||
|
*/ |
||||
|
code[class*="language-"], |
||||
|
pre[class*="language-"] { |
||||
|
color: black; |
||||
|
background: none; |
||||
|
text-shadow: 0 1px white; |
||||
|
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; |
||||
|
text-align: left; |
||||
|
white-space: pre; |
||||
|
word-spacing: normal; |
||||
|
word-break: normal; |
||||
|
word-wrap: normal; |
||||
|
line-height: 1.5; |
||||
|
|
||||
|
-moz-tab-size: 4; |
||||
|
-o-tab-size: 4; |
||||
|
tab-size: 4; |
||||
|
|
||||
|
-webkit-hyphens: none; |
||||
|
-moz-hyphens: none; |
||||
|
-ms-hyphens: none; |
||||
|
hyphens: none; |
||||
|
} |
||||
|
|
||||
|
pre[class*="language-"]::-moz-selection, |
||||
|
pre[class*="language-"] ::-moz-selection, |
||||
|
code[class*="language-"]::-moz-selection, |
||||
|
code[class*="language-"] ::-moz-selection { |
||||
|
text-shadow: none; |
||||
|
background: #b3d4fc; |
||||
|
} |
||||
|
|
||||
|
pre[class*="language-"]::selection, |
||||
|
pre[class*="language-"] ::selection, |
||||
|
code[class*="language-"]::selection, |
||||
|
code[class*="language-"] ::selection { |
||||
|
text-shadow: none; |
||||
|
background: #b3d4fc; |
||||
|
} |
||||
|
|
||||
|
@media print { |
||||
|
|
||||
|
code[class*="language-"], |
||||
|
pre[class*="language-"] { |
||||
|
text-shadow: none; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/* Code blocks */ |
||||
|
pre[class*="language-"] { |
||||
|
padding: 1em; |
||||
|
margin: .5em 0; |
||||
|
overflow: auto; |
||||
|
} |
||||
|
|
||||
|
:not(pre)>code[class*="language-"], |
||||
|
pre[class*="language-"] { |
||||
|
background: #f5f2f0; |
||||
|
} |
||||
|
|
||||
|
/* Inline code */ |
||||
|
:not(pre)>code[class*="language-"] { |
||||
|
padding: .1em; |
||||
|
border-radius: .3em; |
||||
|
white-space: normal; |
||||
|
} |
||||
|
|
||||
|
.token.comment, |
||||
|
.token.prolog, |
||||
|
.token.doctype, |
||||
|
.token.cdata { |
||||
|
color: slategray; |
||||
|
} |
||||
|
|
||||
|
.token.punctuation { |
||||
|
color: #999; |
||||
|
} |
||||
|
|
||||
|
.namespace { |
||||
|
opacity: .7; |
||||
|
} |
||||
|
|
||||
|
.token.property, |
||||
|
.token.tag, |
||||
|
.token.boolean, |
||||
|
.token.number, |
||||
|
.token.constant, |
||||
|
.token.symbol, |
||||
|
.token.deleted { |
||||
|
color: #905; |
||||
|
} |
||||
|
|
||||
|
.token.selector, |
||||
|
.token.attr-name, |
||||
|
.token.string, |
||||
|
.token.char, |
||||
|
.token.builtin, |
||||
|
.token.inserted { |
||||
|
color: #690; |
||||
|
} |
||||
|
|
||||
|
.token.operator, |
||||
|
.token.entity, |
||||
|
.token.url, |
||||
|
.language-css .token.string, |
||||
|
.style .token.string { |
||||
|
color: #9a6e3a; |
||||
|
background: hsla(0, 0%, 100%, .5); |
||||
|
} |
||||
|
|
||||
|
.token.atrule, |
||||
|
.token.attr-value, |
||||
|
.token.keyword { |
||||
|
color: #07a; |
||||
|
} |
||||
|
|
||||
|
.token.function, |
||||
|
.token.class-name { |
||||
|
color: #DD4A68; |
||||
|
} |
||||
|
|
||||
|
.token.regex, |
||||
|
.token.important, |
||||
|
.token.variable { |
||||
|
color: #e90; |
||||
|
} |
||||
|
|
||||
|
.token.important, |
||||
|
.token.bold { |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
|
||||
|
.token.italic { |
||||
|
font-style: italic; |
||||
|
} |
||||
|
|
||||
|
.token.entity { |
||||
|
cursor: help; |
||||
|
} |
@ -0,0 +1,223 @@ |
|||||
|
@font-face { |
||||
|
font-family: "iconfont"; /* Project id 3987011 */ |
||||
|
src: url('iconfont.woff2?t=1693533922330') format('woff2'), |
||||
|
url('iconfont.woff?t=1693533922330') format('woff'), |
||||
|
url('iconfont.ttf?t=1693533922330') format('truetype'); |
||||
|
} |
||||
|
|
||||
|
.iconfont { |
||||
|
font-family: "iconfont" !important; |
||||
|
font-size: 16px; |
||||
|
font-style: normal; |
||||
|
-webkit-font-smoothing: antialiased; |
||||
|
-moz-osx-font-smoothing: grayscale; |
||||
|
} |
||||
|
|
||||
|
.icon-decline:before { |
||||
|
content: "\eb04"; |
||||
|
} |
||||
|
|
||||
|
.icon-rise:before { |
||||
|
content: "\eb05"; |
||||
|
} |
||||
|
|
||||
|
.icon-visits-chart:before { |
||||
|
content: "\e6a5"; |
||||
|
} |
||||
|
|
||||
|
.icon-user-visits:before { |
||||
|
content: "\e651"; |
||||
|
} |
||||
|
|
||||
|
.icon-turnover:before { |
||||
|
content: "\ec18"; |
||||
|
} |
||||
|
|
||||
|
.icon-num-transactions:before { |
||||
|
content: "\e682"; |
||||
|
} |
||||
|
|
||||
|
.icon-num-download:before { |
||||
|
content: "\e6f8"; |
||||
|
} |
||||
|
|
||||
|
.icon-user-mgt:before { |
||||
|
content: "\e617"; |
||||
|
} |
||||
|
|
||||
|
.icon-home:before { |
||||
|
content: "\e62e"; |
||||
|
} |
||||
|
|
||||
|
.icon-set-edit:before { |
||||
|
content: "\eb61"; |
||||
|
} |
||||
|
|
||||
|
.icon-app-mgt:before { |
||||
|
content: "\eb8f"; |
||||
|
} |
||||
|
|
||||
|
.icon-setting:before { |
||||
|
content: "\e78e"; |
||||
|
} |
||||
|
|
||||
|
.icon-folder-open:before { |
||||
|
content: "\e7d1"; |
||||
|
} |
||||
|
|
||||
|
.icon-image:before { |
||||
|
content: "\e7de"; |
||||
|
} |
||||
|
|
||||
|
.icon-cloud-download:before { |
||||
|
content: "\ec1d"; |
||||
|
} |
||||
|
|
||||
|
.icon-cloud-upload:before { |
||||
|
content: "\ec1e"; |
||||
|
} |
||||
|
|
||||
|
.icon-role-mgt:before { |
||||
|
content: "\e645"; |
||||
|
} |
||||
|
|
||||
|
.icon-key:before { |
||||
|
content: "\e775"; |
||||
|
} |
||||
|
|
||||
|
.icon-safe-code:before { |
||||
|
content: "\e627"; |
||||
|
} |
||||
|
|
||||
|
.icon-safe:before { |
||||
|
content: "\ec4d"; |
||||
|
} |
||||
|
|
||||
|
.icon-other:before { |
||||
|
content: "\e60b"; |
||||
|
} |
||||
|
|
||||
|
.icon-page-right:before { |
||||
|
content: "\e65b"; |
||||
|
} |
||||
|
|
||||
|
.icon-search:before { |
||||
|
content: "\e63c"; |
||||
|
} |
||||
|
|
||||
|
.icon-setup:before { |
||||
|
content: "\eb8d"; |
||||
|
} |
||||
|
|
||||
|
.icon-reset:before { |
||||
|
content: "\e614"; |
||||
|
} |
||||
|
|
||||
|
.icon-camera:before { |
||||
|
content: "\e666"; |
||||
|
} |
||||
|
|
||||
|
.icon-qrcode:before { |
||||
|
content: "\e6b0"; |
||||
|
} |
||||
|
|
||||
|
.icon-delete:before { |
||||
|
content: "\e6b4"; |
||||
|
} |
||||
|
|
||||
|
.icon-address:before { |
||||
|
content: "\e652"; |
||||
|
} |
||||
|
|
||||
|
.icon-clock:before { |
||||
|
content: "\e890"; |
||||
|
} |
||||
|
|
||||
|
.icon-location:before { |
||||
|
content: "\e63d"; |
||||
|
} |
||||
|
|
||||
|
.icon-scan:before { |
||||
|
content: "\e68b"; |
||||
|
} |
||||
|
|
||||
|
.icon-edit:before { |
||||
|
content: "\e6aa"; |
||||
|
} |
||||
|
|
||||
|
.icon-page-left:before { |
||||
|
content: "\e659"; |
||||
|
} |
||||
|
|
||||
|
.icon-font-size:before { |
||||
|
content: "\e689"; |
||||
|
} |
||||
|
|
||||
|
.icon-filter:before { |
||||
|
content: "\e648"; |
||||
|
} |
||||
|
|
||||
|
.icon-ashbin:before { |
||||
|
content: "\e665"; |
||||
|
} |
||||
|
|
||||
|
.icon-code:before { |
||||
|
content: "\e667"; |
||||
|
} |
||||
|
|
||||
|
.icon-copy:before { |
||||
|
content: "\e66a"; |
||||
|
} |
||||
|
|
||||
|
.icon-link:before { |
||||
|
content: "\e676"; |
||||
|
} |
||||
|
|
||||
|
.icon-layers:before { |
||||
|
content: "\e675"; |
||||
|
} |
||||
|
|
||||
|
.icon-fullscreen:before { |
||||
|
content: "\e677"; |
||||
|
} |
||||
|
|
||||
|
.icon-menu:before { |
||||
|
content: "\e678"; |
||||
|
} |
||||
|
|
||||
|
.icon-minus:before { |
||||
|
content: "\e67a"; |
||||
|
} |
||||
|
|
||||
|
.icon-refresh:before { |
||||
|
content: "\e67b"; |
||||
|
} |
||||
|
|
||||
|
.icon-scanning:before { |
||||
|
content: "\e67d"; |
||||
|
} |
||||
|
|
||||
|
.icon-close-other:before { |
||||
|
content: "\e624"; |
||||
|
} |
||||
|
|
||||
|
.icon-close:before { |
||||
|
content: "\e668"; |
||||
|
} |
||||
|
|
||||
|
.icon-arrow-down:before { |
||||
|
content: "\e688"; |
||||
|
} |
||||
|
|
||||
|
.icon-language:before { |
||||
|
content: "\e739"; |
||||
|
} |
||||
|
|
||||
|
.icon-lock:before { |
||||
|
content: "\e62a"; |
||||
|
} |
||||
|
|
||||
|
.icon-user:before { |
||||
|
content: "\e828"; |
||||
|
} |
||||
|
|
@ -0,0 +1,373 @@ |
|||||
|
{ |
||||
|
"id": "3987011", |
||||
|
"name": "vue3后台管理系统", |
||||
|
"font_family": "iconfont", |
||||
|
"css_prefix_text": "icon-", |
||||
|
"description": "", |
||||
|
"glyphs": [ |
||||
|
{ |
||||
|
"icon_id": "5387575", |
||||
|
"name": "箭头_切换向下", |
||||
|
"font_class": "decline", |
||||
|
"unicode": "eb04", |
||||
|
"unicode_decimal": 60164 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "5387578", |
||||
|
"name": "箭头_切换向上", |
||||
|
"font_class": "rise", |
||||
|
"unicode": "eb05", |
||||
|
"unicode_decimal": 60165 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "6033101", |
||||
|
"name": "访问量", |
||||
|
"font_class": "visits-chart", |
||||
|
"unicode": "e6a5", |
||||
|
"unicode_decimal": 59045 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "7956168", |
||||
|
"name": "总访问量", |
||||
|
"font_class": "user-visits", |
||||
|
"unicode": "e651", |
||||
|
"unicode_decimal": 58961 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "26442901", |
||||
|
"name": "订单成交额", |
||||
|
"font_class": "turnover", |
||||
|
"unicode": "ec18", |
||||
|
"unicode_decimal": 60440 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "26908793", |
||||
|
"name": "成交数据-01", |
||||
|
"font_class": "num-transactions", |
||||
|
"unicode": "e682", |
||||
|
"unicode_decimal": 59010 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "31500093", |
||||
|
"name": "下载数量", |
||||
|
"font_class": "num-download", |
||||
|
"unicode": "e6f8", |
||||
|
"unicode_decimal": 59128 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "1348257", |
||||
|
"name": "用户管理", |
||||
|
"font_class": "user-mgt", |
||||
|
"unicode": "e617", |
||||
|
"unicode_decimal": 58903 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "2675009", |
||||
|
"name": "首页", |
||||
|
"font_class": "home", |
||||
|
"unicode": "e62e", |
||||
|
"unicode_decimal": 58926 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "3868263", |
||||
|
"name": "编辑", |
||||
|
"font_class": "set-edit", |
||||
|
"unicode": "eb61", |
||||
|
"unicode_decimal": 60257 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "4347582", |
||||
|
"name": "icon_应用管理", |
||||
|
"font_class": "app-mgt", |
||||
|
"unicode": "eb8f", |
||||
|
"unicode_decimal": 60303 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "4765891", |
||||
|
"name": "setting", |
||||
|
"font_class": "setting", |
||||
|
"unicode": "e78e", |
||||
|
"unicode_decimal": 59278 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "4766847", |
||||
|
"name": "folder-open", |
||||
|
"font_class": "folder-open", |
||||
|
"unicode": "e7d1", |
||||
|
"unicode_decimal": 59345 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "4766917", |
||||
|
"name": "image", |
||||
|
"font_class": "image", |
||||
|
"unicode": "e7de", |
||||
|
"unicode_decimal": 59358 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "4932635", |
||||
|
"name": "云端下载", |
||||
|
"font_class": "cloud-download", |
||||
|
"unicode": "ec1d", |
||||
|
"unicode_decimal": 60445 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "4932636", |
||||
|
"name": "云端上传", |
||||
|
"font_class": "cloud-upload", |
||||
|
"unicode": "ec1e", |
||||
|
"unicode_decimal": 60446 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "6447176", |
||||
|
"name": "角色管理", |
||||
|
"font_class": "role-mgt", |
||||
|
"unicode": "e645", |
||||
|
"unicode_decimal": 58949 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "6150969", |
||||
|
"name": "key", |
||||
|
"font_class": "key", |
||||
|
"unicode": "e775", |
||||
|
"unicode_decimal": 59253 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "1599882", |
||||
|
"name": "网商银行无线端_安全", |
||||
|
"font_class": "safe-code", |
||||
|
"unicode": "e627", |
||||
|
"unicode_decimal": 58919 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "5961299", |
||||
|
"name": "安全", |
||||
|
"font_class": "safe", |
||||
|
"unicode": "ec4d", |
||||
|
"unicode_decimal": 60493 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "13106274", |
||||
|
"name": "其他", |
||||
|
"font_class": "other", |
||||
|
"unicode": "e60b", |
||||
|
"unicode_decimal": 58891 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "8777535", |
||||
|
"name": "page_last", |
||||
|
"font_class": "page-right", |
||||
|
"unicode": "e65b", |
||||
|
"unicode_decimal": 58971 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "8776842", |
||||
|
"name": "search", |
||||
|
"font_class": "search", |
||||
|
"unicode": "e63c", |
||||
|
"unicode_decimal": 58940 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "4347549", |
||||
|
"name": "icon_设置", |
||||
|
"font_class": "setup", |
||||
|
"unicode": "eb8d", |
||||
|
"unicode_decimal": 60301 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "27253675", |
||||
|
"name": "重置", |
||||
|
"font_class": "reset", |
||||
|
"unicode": "e614", |
||||
|
"unicode_decimal": 58900 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "30414", |
||||
|
"name": "camera", |
||||
|
"font_class": "camera", |
||||
|
"unicode": "e666", |
||||
|
"unicode_decimal": 58982 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "32472", |
||||
|
"name": "qr_code", |
||||
|
"font_class": "qrcode", |
||||
|
"unicode": "e6b0", |
||||
|
"unicode_decimal": 59056 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "32477", |
||||
|
"name": "delete", |
||||
|
"font_class": "delete", |
||||
|
"unicode": "e6b4", |
||||
|
"unicode_decimal": 59060 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "658000", |
||||
|
"name": "地址", |
||||
|
"font_class": "address", |
||||
|
"unicode": "e652", |
||||
|
"unicode_decimal": 58962 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "2076264", |
||||
|
"name": "闹钟", |
||||
|
"font_class": "clock", |
||||
|
"unicode": "e890", |
||||
|
"unicode_decimal": 59536 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "9690751", |
||||
|
"name": "地址", |
||||
|
"font_class": "location", |
||||
|
"unicode": "e63d", |
||||
|
"unicode_decimal": 58941 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "16617390", |
||||
|
"name": "scan", |
||||
|
"font_class": "scan", |
||||
|
"unicode": "e68b", |
||||
|
"unicode_decimal": 59019 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "16618154", |
||||
|
"name": "edit", |
||||
|
"font_class": "edit", |
||||
|
"unicode": "e6aa", |
||||
|
"unicode_decimal": 59050 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "8777532", |
||||
|
"name": "page_first", |
||||
|
"font_class": "page-left", |
||||
|
"unicode": "e659", |
||||
|
"unicode_decimal": 58969 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "24502124", |
||||
|
"name": "字体大小", |
||||
|
"font_class": "font-size", |
||||
|
"unicode": "e689", |
||||
|
"unicode_decimal": 59017 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "8777080", |
||||
|
"name": "filter", |
||||
|
"font_class": "filter", |
||||
|
"unicode": "e648", |
||||
|
"unicode_decimal": 58952 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "15838430", |
||||
|
"name": "ashbin", |
||||
|
"font_class": "ashbin", |
||||
|
"unicode": "e665", |
||||
|
"unicode_decimal": 58981 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "15838443", |
||||
|
"name": "code", |
||||
|
"font_class": "code", |
||||
|
"unicode": "e667", |
||||
|
"unicode_decimal": 58983 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "15838456", |
||||
|
"name": "copy", |
||||
|
"font_class": "copy", |
||||
|
"unicode": "e66a", |
||||
|
"unicode_decimal": 58986 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "15838493", |
||||
|
"name": "link", |
||||
|
"font_class": "link", |
||||
|
"unicode": "e676", |
||||
|
"unicode_decimal": 58998 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "15838496", |
||||
|
"name": "layers", |
||||
|
"font_class": "layers", |
||||
|
"unicode": "e675", |
||||
|
"unicode_decimal": 58997 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "15838498", |
||||
|
"name": "fullscreen-expand", |
||||
|
"font_class": "fullscreen", |
||||
|
"unicode": "e677", |
||||
|
"unicode_decimal": 58999 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "15838501", |
||||
|
"name": "menu", |
||||
|
"font_class": "menu", |
||||
|
"unicode": "e678", |
||||
|
"unicode_decimal": 59000 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "15838514", |
||||
|
"name": "minus", |
||||
|
"font_class": "minus", |
||||
|
"unicode": "e67a", |
||||
|
"unicode_decimal": 59002 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "15838519", |
||||
|
"name": "refresh", |
||||
|
"font_class": "refresh", |
||||
|
"unicode": "e67b", |
||||
|
"unicode_decimal": 59003 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "15838527", |
||||
|
"name": "scanning", |
||||
|
"font_class": "scanning", |
||||
|
"unicode": "e67d", |
||||
|
"unicode_decimal": 59005 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "33077825", |
||||
|
"name": "关闭其他-01", |
||||
|
"font_class": "close-other", |
||||
|
"unicode": "e624", |
||||
|
"unicode_decimal": 58916 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "15838444", |
||||
|
"name": "close", |
||||
|
"font_class": "close", |
||||
|
"unicode": "e668", |
||||
|
"unicode_decimal": 58984 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "15838582", |
||||
|
"name": "arrow-down-filling", |
||||
|
"font_class": "arrow-down", |
||||
|
"unicode": "e688", |
||||
|
"unicode_decimal": 59016 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "31061118", |
||||
|
"name": "中英切换", |
||||
|
"font_class": "language", |
||||
|
"unicode": "e739", |
||||
|
"unicode_decimal": 59193 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "611345", |
||||
|
"name": "密码", |
||||
|
"font_class": "lock", |
||||
|
"unicode": "e62a", |
||||
|
"unicode_decimal": 58922 |
||||
|
}, |
||||
|
{ |
||||
|
"icon_id": "34452814", |
||||
|
"name": "customer-fill", |
||||
|
"font_class": "user", |
||||
|
"unicode": "e828", |
||||
|
"unicode_decimal": 59432 |
||||
|
} |
||||
|
] |
||||
|
} |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 179 B |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 395 B |
After Width: | Height: | Size: 279 B |
After Width: | Height: | Size: 647 B |
After Width: | Height: | Size: 284 B |
After Width: | Height: | Size: 693 B |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 927 B |
After Width: | Height: | Size: 909 B |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 356 B |
After Width: | Height: | Size: 818 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 944 B |
After Width: | Height: | Size: 421 B |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 320 B |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 730 B |
After Width: | Height: | Size: 1001 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 914 B |
After Width: | Height: | Size: 883 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 821 B |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 367 B |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 561 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 211 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 689 B |