first commit
@@ -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 # 关闭末尾空格修剪
|
||||
@@ -0,0 +1,11 @@
|
||||
# 应用端口
|
||||
VITE_APP_PORT = 3000
|
||||
|
||||
# 代理前缀
|
||||
VITE_APP_BASE_API = '/dev-api'
|
||||
|
||||
# 接口地址
|
||||
VITE_APP_API_URL = http://localhost:8989
|
||||
|
||||
# 是否启用 Mock 服务
|
||||
VITE_MOCK_DEV_SERVER = false
|
||||
@@ -0,0 +1,3 @@
|
||||
# 代理前缀
|
||||
VITE_APP_BASE_API = '/prod-api'
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
dist
|
||||
node_modules
|
||||
public
|
||||
.husky
|
||||
.vscode
|
||||
.idea
|
||||
*.sh
|
||||
*.md
|
||||
|
||||
src/assets
|
||||
|
||||
.eslintrc.cjs
|
||||
.prettierrc.cjs
|
||||
.stylelintrc.cjs
|
||||
@@ -0,0 +1,309 @@
|
||||
{
|
||||
"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,
|
||||
"whenever": true,
|
||||
"ExtractDefaultPropTypes": true,
|
||||
"ExtractPropTypes": true,
|
||||
"ExtractPublicPropTypes": 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,
|
||||
"provideLocal": true,
|
||||
"setActivePinia": true,
|
||||
"setMapStoreSuffix": true,
|
||||
"storeToRefs": true,
|
||||
"useClipboardItems": true,
|
||||
"useI18n": true,
|
||||
"useLink": true,
|
||||
"useRoute": true,
|
||||
"useRouter": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
env: {
|
||||
browser: true,
|
||||
es2021: true,
|
||||
node: true,
|
||||
},
|
||||
parser: "vue-eslint-parser",
|
||||
extends: [
|
||||
// https://eslint.vuejs.org/user-guide/#usage
|
||||
"plugin:vue/vue3-recommended",
|
||||
"./.eslintrc-auto-import.json",
|
||||
"prettier",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"plugin:prettier/recommended",
|
||||
],
|
||||
parserOptions: {
|
||||
ecmaVersion: "latest",
|
||||
sourceType: "module",
|
||||
parser: "@typescript-eslint/parser",
|
||||
project: "./tsconfig.*?.json",
|
||||
createDefaultProgram: false,
|
||||
extraFileExtensions: [".vue"],
|
||||
},
|
||||
plugins: ["vue", "@typescript-eslint"],
|
||||
rules: {
|
||||
// https://eslint.vuejs.org/rules/#priority-a-essential-error-prevention
|
||||
"vue/multi-word-component-names": "off",
|
||||
"vue/no-v-model-argument": "off",
|
||||
"vue/script-setup-uses-vars": "error",
|
||||
"vue/no-reserved-component-names": "off",
|
||||
"vue/custom-event-name-casing": "off",
|
||||
"vue/attributes-order": "off",
|
||||
"vue/one-component-per-file": "off",
|
||||
"vue/html-closing-bracket-newline": "off",
|
||||
"vue/max-attributes-per-line": "off",
|
||||
"vue/multiline-html-element-content-newline": "off",
|
||||
"vue/singleline-html-element-content-newline": "off",
|
||||
"vue/attribute-hyphenation": "off",
|
||||
"vue/require-default-prop": "off",
|
||||
"vue/require-explicit-emits": "off",
|
||||
"vue/html-self-closing": [
|
||||
"error",
|
||||
{
|
||||
html: {
|
||||
void: "always",
|
||||
normal: "never",
|
||||
component: "always",
|
||||
},
|
||||
svg: "always",
|
||||
math: "always",
|
||||
},
|
||||
],
|
||||
|
||||
"@typescript-eslint/no-empty-function": "off", // 关闭空方法检查
|
||||
"@typescript-eslint/no-explicit-any": "off", // 关闭any类型的警告
|
||||
"@typescript-eslint/no-non-null-assertion": "off",
|
||||
"@typescript-eslint/ban-ts-ignore": "off",
|
||||
"@typescript-eslint/ban-ts-comment": "off",
|
||||
"@typescript-eslint/ban-types": "off",
|
||||
"@typescript-eslint/explicit-function-return-type": "off",
|
||||
"@typescript-eslint/no-explicit-any": "off",
|
||||
"@typescript-eslint/no-var-requires": "off",
|
||||
"@typescript-eslint/no-empty-function": "off",
|
||||
"@typescript-eslint/no-use-before-define": "off",
|
||||
"@typescript-eslint/no-non-null-assertion": "off",
|
||||
"@typescript-eslint/explicit-module-boundary-types": "off",
|
||||
"@typescript-eslint/no-unused-vars": "off",
|
||||
|
||||
"prettier/prettier": [
|
||||
"error",
|
||||
{
|
||||
useTabs: false, // 不使用制表符
|
||||
},
|
||||
],
|
||||
},
|
||||
// eslint不能对html文件生效
|
||||
overrides: [
|
||||
{
|
||||
files: ["*.html"],
|
||||
processor: "vue/.vue",
|
||||
},
|
||||
],
|
||||
// https://eslint.org/docs/latest/use/configure/language-options#specifying-globals
|
||||
globals: {
|
||||
OptionType: "readonly",
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,18 @@
|
||||
node_modules
|
||||
.DS_Store
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
.history
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.local
|
||||
|
||||
package-lock.json
|
||||
pnpm-lock.yaml
|
||||
stats.html
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"extends": [
|
||||
"development"
|
||||
],
|
||||
"hints": {
|
||||
"compat-api/css": [
|
||||
"default",
|
||||
{
|
||||
"ignore": [
|
||||
"text-size-adjust"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
npx --no-install commitlint --edit $1
|
||||
@@ -0,0 +1 @@
|
||||
npm run lint:lint-staged
|
||||
@@ -0,0 +1,11 @@
|
||||
dist
|
||||
node_modules
|
||||
public
|
||||
.husky
|
||||
.vscode
|
||||
.idea
|
||||
*.sh
|
||||
*.md
|
||||
|
||||
src/assets
|
||||
stats.html
|
||||
@@ -0,0 +1,46 @@
|
||||
module.exports = {
|
||||
// (x)=>{},单个参数箭头函数是否显示小括号。(always:始终显示;avoid:省略括号。默认:always)
|
||||
arrowParens: "always",
|
||||
// 开始标签的右尖括号是否跟随在最后一行属性末尾,默认false
|
||||
bracketSameLine: false,
|
||||
// 对象字面量的括号之间打印空格 (true - Example: { foo: bar } ; false - Example: {foo:bar})
|
||||
bracketSpacing: true,
|
||||
// 是否格式化一些文件中被嵌入的代码片段的风格(auto|off;默认auto)
|
||||
embeddedLanguageFormatting: "auto",
|
||||
// 指定 HTML 文件的空格敏感度 (css|strict|ignore;默认css)
|
||||
htmlWhitespaceSensitivity: "ignore",
|
||||
// 当文件已经被 Prettier 格式化之后,是否会在文件顶部插入一个特殊的 @format 标记,默认false
|
||||
insertPragma: false,
|
||||
// 在 JSX 中使用单引号替代双引号,默认false
|
||||
jsxSingleQuote: false,
|
||||
// 每行最多字符数量,超出换行(默认80)
|
||||
printWidth: 120,
|
||||
// 超出打印宽度 (always | never | preserve )
|
||||
proseWrap: "preserve",
|
||||
// 对象属性是否使用引号(as-needed | consistent | preserve;默认as-needed:对象的属性需要加引号才添加;)
|
||||
quoteProps: "as-needed",
|
||||
// 是否只格式化在文件顶部包含特定注释(@prettier| @format)的文件,默认false
|
||||
requirePragma: false,
|
||||
// 结尾添加分号
|
||||
semi: true,
|
||||
// 使用单引号 (true:单引号;false:双引号)
|
||||
singleQuote: false,
|
||||
// 缩进空格数,默认2个空格
|
||||
tabWidth: 2,
|
||||
// 元素末尾是否加逗号,默认es5: ES5中的 objects, arrays 等会添加逗号,TypeScript 中的 type 后不加逗号
|
||||
trailingComma: "es5",
|
||||
// 指定缩进方式,空格或tab,默认false,即使用空格
|
||||
useTabs: false,
|
||||
// vue 文件中是否缩进 <style> 和 <script> 标签,默认 false
|
||||
vueIndentScriptAndStyle: false,
|
||||
|
||||
endOfLine: "auto",
|
||||
overrides: [
|
||||
{
|
||||
files: "*.html",
|
||||
options: {
|
||||
parser: "html",
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
@@ -0,0 +1,11 @@
|
||||
dist
|
||||
node_modules
|
||||
public
|
||||
.husky
|
||||
.vscode
|
||||
.idea
|
||||
*.sh
|
||||
*.md
|
||||
|
||||
src/assets
|
||||
stats.html
|
||||
@@ -0,0 +1,51 @@
|
||||
module.exports = {
|
||||
// 继承推荐规范配置
|
||||
extends: [
|
||||
"stylelint-config-standard",
|
||||
"stylelint-config-recommended-scss",
|
||||
"stylelint-config-recommended-vue/scss",
|
||||
"stylelint-config-html/vue",
|
||||
"stylelint-config-recess-order",
|
||||
],
|
||||
// 指定不同文件对应的解析器
|
||||
overrides: [
|
||||
{
|
||||
files: ["**/*.{vue,html}"],
|
||||
customSyntax: "postcss-html",
|
||||
},
|
||||
{
|
||||
files: ["**/*.{css,scss}"],
|
||||
customSyntax: "postcss-scss",
|
||||
},
|
||||
],
|
||||
// 自定义规则
|
||||
rules: {
|
||||
"import-notation": "string", // 指定导入CSS文件的方式("string"|"url")
|
||||
"selector-class-pattern": null, // 选择器类名命名规则
|
||||
"custom-property-pattern": null, // 自定义属性命名规则
|
||||
"keyframes-name-pattern": null, // 动画帧节点样式命名规则
|
||||
"no-descending-specificity": null, // 允许无降序特异性
|
||||
"no-empty-source": null, // 允许空样式
|
||||
// 允许 global 、export 、deep伪类
|
||||
"selector-pseudo-class-no-unknown": [
|
||||
true,
|
||||
{
|
||||
ignorePseudoClasses: ["global", "export", "deep"],
|
||||
},
|
||||
],
|
||||
// 允许未知属性
|
||||
"property-no-unknown": [
|
||||
true,
|
||||
{
|
||||
ignoreProperties: [],
|
||||
},
|
||||
],
|
||||
// 允许未知规则
|
||||
"at-rule-no-unknown": [
|
||||
true,
|
||||
{
|
||||
ignoreAtRules: ["apply", "use"],
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"vue.volar",
|
||||
"antfu.unocss",
|
||||
"lokalise.i18n-ally",
|
||||
"dbaeumer.vscode-eslint",
|
||||
"esbenp.prettier-vscode",
|
||||
"stylelint.vscode-stylelint",
|
||||
"editorconfig.editorconfig"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"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.keystyle": "nested",
|
||||
"i18n-ally.sortKeys": true,
|
||||
"i18n-ally.namespace": false,
|
||||
"i18n-ally.pathMatcher": "{namespaces}/{locale}.{ext}",
|
||||
"i18n-ally.enabledParsers": ["ts"],
|
||||
"i18n-ally.sourceLanguage": "en",
|
||||
"i18n-ally.displayLanguage": "zh-CN",
|
||||
"i18n-ally.enabledFrameworks": [
|
||||
"vue",
|
||||
"react"
|
||||
],
|
||||
"i18n-ally.localesPaths": [
|
||||
"src/lang"
|
||||
],
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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+"
|
||||
}
|
||||
}
|
||||
@@ -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快速生成模板"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
|
||||
<div align="center">
|
||||
<img alt="vue3-element-admin" width="80" height="80" src="./src/assets/logo.png">
|
||||
<h1>vue3-element-admin</h1>
|
||||
|
||||
<img src="https://img.shields.io/badge/Vue-3.4.35-brightgreen.svg"/>
|
||||
<img src="https://img.shields.io/badge/Vite-5.3.5-green.svg"/>
|
||||
<img src="https://img.shields.io/badge/Element Plus-2.7.8-blue.svg"/>
|
||||
<img src="https://img.shields.io/badge/license-MIT-green.svg"/>
|
||||
<a href="https://gitee.com/youlaiorg" target="_blank">
|
||||
<img src="https://img.shields.io/badge/Author-有来开源组织-orange.svg"/>
|
||||
</a>
|
||||
</div>
|
||||
|
||||

|
||||
|
||||
|
||||
<div align="center">
|
||||
<a target="_blank" href="http://vue3.youlai.tech">🔍 在线预览</a> | <a target="_blank" href="https://juejin.cn/post/7228990409909108793">📖 阅读文档</a> | <a href="./README.en-US.md">🌐English
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
## 项目简介
|
||||
|
||||
[vue3-element-admin](https://gitee.com/youlaiorg/vue3-element-admin) 是基于 Vue3 + Vite5+ TypeScript5 + Element-Plus + Pinia 等主流技术栈构建的免费开源的中后台管理的前端模板(配套[Java 后端源码](https://gitee.com/youlaiorg/youlai-boot))。
|
||||
|
||||
|
||||
## 项目特色
|
||||
|
||||
- **简洁易用**:基于 [vue-element-admin](https://gitee.com/panjiachen/vue-element-admin) 升级的 Vue3 版本,无过渡封装 ,易上手。
|
||||
|
||||
- **数据交互**:同时支持本地 `Mock` 和线上接口,配套 [Java 后端源码](https://gitee.com/youlaiorg/youlai-boot)和[在线接口文档](https://www.apifox.cn/apidoc/shared-195e783f-4d85-4235-a038-eec696de4ea5)。
|
||||
|
||||
- **权限管理**:用户、角色、菜单、字典、部门等完善的权限系统功能。
|
||||
|
||||
- **基础设施**:动态路由、按钮权限、国际化、代码规范、Git 提交规范、常用组件封装。
|
||||
|
||||
- **持续更新**:项目持续开源更新,实时更新工具和依赖。
|
||||
|
||||
|
||||
|
||||
## 项目预览
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 项目地址
|
||||
|
||||
| 项目 | Gitee | Github |
|
||||
| ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
| 前端 | [vue3-element-admin](https://gitee.com/youlaiorg/vue3-element-admin) | [vue3-element-admin](https://github.com/youlaitech/vue3-element-admin) | [vue3-element-admin](https://gitcode.net/youlai/vue3-element-admin) |
|
||||
| 精简版 | [vue3-element-admin-thin](https://gitee.com/cshaptx4869/vue3-element-admin-thin) | [vue3-element-admin-thin](https://github.com/youlaitech/vue3-element-admin-thin) |
|
||||
| 后端 | [youlai-boot](https://gitee.com/youlaiorg/youlai-boot) | [youlai-boot](https://github.com/haoxianrui/youlai-boot.git) |
|
||||
|
||||
## 环境准备
|
||||
|
||||
| 环境 | 名称版本 | 下载地址 |
|
||||
| -------------------- | :----------------------------------------------------------- | ------------------------------------------------------------ |
|
||||
| **开发工具** | VSCode | [下载](https://code.visualstudio.com/Download) |
|
||||
| **运行环境** | Node ≥18 (其中 20.6.0 版本不可用) | [下载](http://nodejs.cn/download) |
|
||||
|
||||
|
||||
## 项目启动
|
||||
|
||||
```bash
|
||||
# 克隆代码
|
||||
git clone https://gitee.com/youlaiorg/vue3-element-admin.git
|
||||
|
||||
# 切换目录
|
||||
cd vue3-element-admin
|
||||
|
||||
# 安装 pnpm
|
||||
npm install pnpm -g
|
||||
|
||||
# 设置镜像源(可忽略)
|
||||
pnpm config set registry https://registry.npmmirror.com
|
||||
|
||||
# 安装依赖
|
||||
pnpm install
|
||||
|
||||
# 启动运行
|
||||
pnpm run dev
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 项目部署
|
||||
|
||||
```bash
|
||||
# 项目打包
|
||||
pnpm run build
|
||||
|
||||
# 上传文件至远程服务器
|
||||
将本地打包生成的 dist 目录下的所有文件拷贝至服务器的 /usr/share/nginx/html 目录。
|
||||
|
||||
# nginx.cofig 配置
|
||||
server {
|
||||
listen 80;
|
||||
server_name localhost;
|
||||
location / {
|
||||
root /usr/share/nginx/html;
|
||||
index index.html index.htm;
|
||||
}
|
||||
# 反向代理配置
|
||||
location /prod-api/ {
|
||||
# vapi.youlai.tech 替换后端API地址,注意保留后面的斜杠 /
|
||||
proxy_pass http://vapi.youlai.tech/;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 本地Mock
|
||||
|
||||
项目同时支持在线和本地 Mock 接口,默认使用线上接口,如需替换为 Mock 接口,修改文件 `.env.development` 的 `VITE_MOCK_DEV_SERVER` 为 `true` **即可**。
|
||||
|
||||
## 后端接口
|
||||
|
||||
> 如果您具备Java开发基础,按照以下步骤将在线接口转为本地后端接口,创建企业级前后端分离开发环境,助您走向全栈之路。
|
||||
|
||||
1. 获取基于 `Java` 和 `SpringBoot` 开发的后端 [youlai-boot](https://gitee.com/youlaiorg/youlai-boot.git) 源码。
|
||||
2. 根据后端工程的说明文档 [README.md](https://gitee.com/youlaiorg/youlai-boot#%E9%A1%B9%E7%9B%AE%E8%BF%90%E8%A1%8C) 完成本地启动。
|
||||
3. 修改 `.env.development` 文件中的 `VITE_APP_API_URL` 的值,将其从 http://vapi.youlai.tech 更改为 http://localhost:8989。
|
||||
|
||||
|
||||
## 注意事项
|
||||
|
||||
- **自动导入插件自动生成默认关闭**
|
||||
|
||||
模板项目的组件类型声明已自动生成。如果添加和使用新的组件,请按照图示方法开启自动生成。在自动生成完成后,记得将其设置为 `false`,避免重复执行引发冲突。
|
||||
|
||||

|
||||
|
||||
- **项目启动浏览器访问空白**
|
||||
|
||||
请升级浏览器尝试,低版本浏览器内核可能不支持某些新的 JavaScript 语法,比如可选链操作符 `?.`。
|
||||
|
||||
- **项目同步仓库更新升级**
|
||||
|
||||
项目同步仓库更新升级之后,建议 `pnpm install` 安装更新依赖之后启动 。
|
||||
|
||||
- **项目组件、函数和引用爆红**
|
||||
|
||||
重启 VSCode 尝试
|
||||
|
||||
- **其他问题**
|
||||
|
||||
如果有其他问题或者建议,建议 [ISSUE](https://gitee.com/youlaiorg/vue3-element-admin/issues/new)
|
||||
|
||||
|
||||
|
||||
## 项目文档
|
||||
|
||||
- [基于 Vue3 + Vite + TypeScript + Element-Plus 从0到1搭建后台管理系统](https://blog.csdn.net/u013737132/article/details/130191394)
|
||||
|
||||
- [ESLint+Prettier+Stylelint+EditorConfig 约束和统一前端代码规范](https://blog.csdn.net/u013737132/article/details/130190788)
|
||||
- [Husky + Lint-staged + Commitlint + Commitizen + cz-git 配置 Git 提交规范](https://blog.csdn.net/u013737132/article/details/130191363)
|
||||
|
||||
|
||||
## 提交规范
|
||||
|
||||
执行 `pnpm run commit` 唤起 git commit 交互,根据提示完成信息的输入和选择。
|
||||
|
||||

|
||||
|
||||
|
||||
## 项目统计
|
||||
|
||||

|
||||
|
||||
|
||||
Thanks to all the contributors!
|
||||
|
||||
[](https://github.com/youlaitech/vue3-element-admin/graphs/contributors)
|
||||
|
||||
|
||||
## 交流群🚀
|
||||
|
||||
> **关注「有来技术」公众号,获取交流群二维码。**
|
||||
>
|
||||
> 如果交流群的二维码过期,请加微信(haoxianrui)并备注「前端」、「后端」或「全栈」以获取最新二维码。
|
||||
>
|
||||
> 为确保交流群质量,防止营销广告人群混入,我们采取了此措施。望各位理解!
|
||||
|
||||
| 公众号 | 交流群 |
|
||||
|:----:|:----:|
|
||||
|  |  |
|
||||
|
||||
@@ -0,0 +1,94 @@
|
||||
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", // 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)
|
||||
],
|
||||
],
|
||||
"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: "",
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,137 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="description" content="欢迎使用唱作网音乐软件,你的音乐制作必将特别方便、愉快!" />
|
||||
<meta
|
||||
name="keywords"
|
||||
content="唱作魔方,唱作魔方Windows,唱作魔方Android,唱作魔方专业版,唱作魔方iOS,唱作网,唱作,原创音乐,原创,伴奏"
|
||||
/>
|
||||
<title>唱作网</title>
|
||||
|
||||
<!-- 百度统计 -->
|
||||
<script>
|
||||
var _hmt = _hmt || [];
|
||||
(function () {
|
||||
var hm = document.createElement("script");
|
||||
hm.src = "https://hm.baidu.com/hm.js?f62e0194ca03f4c06a9a69fa752c812f";
|
||||
var s = document.getElementsByTagName("script")[0];
|
||||
s.parentNode.insertBefore(hm, s);
|
||||
})();
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app">
|
||||
<!--加载动画-->
|
||||
<div class="mesh-loader">
|
||||
<div class="set-one">
|
||||
<div class="circle"></div>
|
||||
<div class="circle"></div>
|
||||
</div>
|
||||
<div class="set-two">
|
||||
<div class="circle"></div>
|
||||
<div class="circle"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
|
||||
<!-- 检查浏览器是否支持VUE -->
|
||||
<script type="text/javascript">
|
||||
(function (window) {
|
||||
var theUA = window.navigator.userAgent.toLowerCase();
|
||||
console.log(theUA);
|
||||
if (
|
||||
(theUA.indexOf("trident") > -1 && theUA.indexOf("rv:11.0") > -1) ||
|
||||
(theUA.indexOf("compatible") > -1 && theUA.indexOf("msie") > -1)
|
||||
) {
|
||||
var str = "你的浏览器版本不受支持,请及时更新";
|
||||
var str2 =
|
||||
"推荐使用:<a style='color:#fff;'>谷歌</a>," +
|
||||
"<a style='color:#fff;'>Edge</a>," +
|
||||
"<a style='color:#fff;'>火狐</a>," +
|
||||
"或其他双核极速模式浏览器";
|
||||
document.writeln(
|
||||
"<pre style='text-align:center;color:#fff;background-color:#1890FF; height:100%;border:0;position:fixed;top:0;left:0;width:100%;z-index:1234'>" +
|
||||
"<h2 style='padding-top:200px;margin:0'><strong>" +
|
||||
str +
|
||||
"<br/></strong></h2><h2>" +
|
||||
str2 +
|
||||
"</h2><h2 style='margin:0'><strong>如果你的使用的是双核浏览器,请切换到极速模式访问<br/></strong></h2></pre>"
|
||||
);
|
||||
console.log("浏览器不合格");
|
||||
document.execCommand("Stop");
|
||||
} else {
|
||||
console.log("浏览器合格");
|
||||
}
|
||||
})(window);
|
||||
</script>
|
||||
<style>
|
||||
html,
|
||||
body,
|
||||
#app {
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.mesh-loader {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.mesh-loader .circle {
|
||||
position: absolute;
|
||||
width: 25px;
|
||||
height: 25px;
|
||||
margin: -12.5px;
|
||||
background: #03a9f4;
|
||||
border-radius: 50%;
|
||||
animation: mesh 3s ease-in-out infinite -1.5s;
|
||||
}
|
||||
|
||||
.mesh-loader > div .circle:last-child {
|
||||
animation-delay: 0s;
|
||||
}
|
||||
|
||||
.mesh-loader > div {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
}
|
||||
|
||||
.mesh-loader > div:last-child {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
@keyframes mesh {
|
||||
0% {
|
||||
transform: rotate(0);
|
||||
transform-origin: 50% -100%;
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: rotate(360deg);
|
||||
transform-origin: 50% -100%;
|
||||
}
|
||||
|
||||
50.00001% {
|
||||
transform: rotate(0deg);
|
||||
transform-origin: 50% 200%;
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
transform-origin: 50% 200%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,43 @@
|
||||
import { defineMock } from "./base";
|
||||
|
||||
export default defineMock([
|
||||
{
|
||||
url: "auth/captcha",
|
||||
method: ["GET"],
|
||||
body: {
|
||||
code: "00000",
|
||||
data: {
|
||||
captchaKey: "534b8ef2b0a24121bec76391ddd159f9",
|
||||
captchaBase64:
|
||||
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAAkCAIAAADNSmkJAAAFKUlEQVR4Xu2ZXUwcVRiGV70wMWo08V5NvPXCrDbFaGpMaZW2hqQxaoiJTRsaMBCNSYtpa2JTKiFSelFa+Q/QZcMWqEhBlh+htbEpZhMrBQrlJ0hBywLLyrJ0WZbje3bqOvPNLHPWrDvdOE9ONmfe78zkzMs335wzWJhJQrBQweS/wTQ6QWgYHdoIOcecOe05O+t2WkutO+p2ZF3Ksg/YV9ZW6FATYajR3nveg60H9327r3O8c35lHgp+r05dPdJzBL73TPSQ8SaCKIxGLsPlop+K0JHrEkPuoT31e5qGmmjARACF0agYyGVNlyVm/pzZXrN9fHGcBkz0UBid+31u93i3XFFT80vN8cvHqWqih8Lo1NpUqS5vwh3vnd223VQ10UNh9NbyrcFQUK6oCawHUipSqGqiB83oBf+CXFGDMp1mS6OqiR4Ko7FexkpOrqhpHGw82nOUqiZ6KIzGrkRuorW0dJMmOy+hOCfYGzb2RBFv6HRO0gEJw/U7y+pgL1bwmTxexN6sZ31TdEwEhdG+gA+7EqyXpUO1uZH20cWL8hMTRt1N9tBXzCJrOIRoCPJpSO2RAp4HmtCdIfZ+2JWgEBN9LbR28seTGU0Zue1tMLp+YIAMSADzfvbkKX4/eb28j4YODiGin3heqmIlLja5hAUCu+nmGY3JWKvpMAlqNGgebsauBOvlqSX+JEx7p7EbTLen53XlzfmWUioqXikrc68Y8N2juJ/fyVsNChGHEE//rBANYWaZz+TRQqpLaBgNsPfDrgSpbS21YtV87IdjrlkX9JZbt5DOma2t9ITo5F+5glN22WwL/n+yDv00mw06orKxOqQ5+J04hhViwzAXETIcJDVm8uxZqktoGx2Nj9t43Wgaul/ERQiGQvtbWnDWgZYW9CXlQFjZ/7ciyHNn+Z2MexTimIeLz59TiIln0M1e+IbPpOAaDUnEYPTi6iqKxpbycs/qKo1tCslfKcffPn9enuMiPPY1vxO/ckeFQ4h46cdGqUWoidE/y54q5tPY5WDrGzQqIXot4BgchEE57e00IMCw2/1qZSVO/7SjA78o9INzcxsbrL+fnTnDDh9mmZn8F30oG1Hm+nABv5mQMopDS/h1HxtqTzWbABMe9sxpPoe9zezeOo1GELqWhPS8t46M0IAYHbdvR1aHbaOjbjfLz2eFhez6dba4yAfgF30o0BFVE8+Mjh/wFxPI+I5mAEHU6Ls+38vhTFwOBGhMDF8gkFpbC5ffsdv/uBs6dIj19dExEtARVXv9YNbop8NFY3aZ6gRRo+tu3IBHnzmdNCBMXldXJKPfL74WzWUJRE+coDUknqsOdZXQbAJYwluVTbOZI3Qt8GFzMwxyjo3RgBiN4fr+elXVpZGRLWXl6PdOTtJBSlBDUK/lnIrjOlrtqWYTQDJaF6FrTXu9sOa1ysrVoM5HVE1GFxZQcyJ/p+xzv6K/rbr6N6+XDpUBl0tKFIrbz78qWB6YnWFMCBld4XLBms+7df75ook/GNzb0GCV7U1Qfz9p64TyQWNjYD3qe9rj4SMJtQP3MyjSDPzWIRHPjH7X4YAvfXoPuyZf9Pbi3PcuXIh4mp3NllYC6XY79C+jl2o8PBipxjnBttn4MgMNnWgfcRJGPI2OL8hTj3LloIlmRicvBhiNykvecpqoa3RSY4DRcLAwyicuOepVR1JjgNFYHWONHL04czTX0UmNAUYD7Pr+xc4wqTHGaBb2OtZvHUmNYUazcA2J6etdUmOk0f8rTKMTxF91RG0D1SwYGwAAAABJRU5ErkJggg==",
|
||||
},
|
||||
msg: "一切ok",
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
url: "auth/login",
|
||||
method: ["POST"],
|
||||
body: {
|
||||
code: "00000",
|
||||
data: {
|
||||
accessToken:
|
||||
"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImp0aSI6IjE2YWJkNTlkOTAxNzQwZDliYmI3ZjczODBhZDkyNzNhIiwidXNlcklkIjoyLCJ1c2VybmFtZSI6ImFkbWluIiwiZGVwdElkIjoxLCJkYXRhU2NvcGUiOjEsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iXSwiZXhwIjoxNjkxMTAzMzgyfQ.P4cuIfmPepl3HuguhMS7NXn5a7IUPpsLbmtA_rHOhHk",
|
||||
tokenType: "Bearer",
|
||||
refreshToken: null,
|
||||
expires: null,
|
||||
},
|
||||
msg: "一切ok",
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
url: "auth/logout",
|
||||
method: ["DELETE"],
|
||||
body: {
|
||||
code: "00000",
|
||||
data: {},
|
||||
msg: "string",
|
||||
},
|
||||
},
|
||||
]);
|
||||
@@ -0,0 +1,10 @@
|
||||
import path from "path";
|
||||
import { createDefineMock } from "vite-plugin-mock-dev-server";
|
||||
|
||||
export const defineMock = createDefineMock((mock) => {
|
||||
// 拼接url
|
||||
mock.url = path.join(
|
||||
import.meta.env.VITE_APP_BASE_API + "/api/v1/",
|
||||
mock.url
|
||||
);
|
||||
});
|
||||
@@ -0,0 +1,120 @@
|
||||
import { defineMock } from "./base";
|
||||
|
||||
export default defineMock([
|
||||
{
|
||||
url: "menus/routes",
|
||||
method: ["GET"],
|
||||
body: {
|
||||
code: "00000",
|
||||
data: [
|
||||
{
|
||||
path: "/doc",
|
||||
component: "Layout",
|
||||
redirect: "https://juejin.cn/post/7228990409909108793",
|
||||
name: "/doc",
|
||||
meta: {
|
||||
title: "平台文档",
|
||||
icon: "document",
|
||||
hidden: false,
|
||||
alwaysShow: false,
|
||||
params: null,
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: "internal-doc",
|
||||
component: "demo/internal-doc",
|
||||
name: "InternalDoc",
|
||||
meta: {
|
||||
title: "平台文档(内嵌)",
|
||||
icon: "document",
|
||||
hidden: false,
|
||||
alwaysShow: false,
|
||||
params: null,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: "https://juejin.cn/post/7228990409909108793",
|
||||
name: "Https://juejin.cn/post/7228990409909108793",
|
||||
meta: {
|
||||
title: "平台文档(外链)",
|
||||
icon: "el-icon-Link",
|
||||
hidden: false,
|
||||
alwaysShow: false,
|
||||
params: null,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "/multi-level",
|
||||
component: "Layout",
|
||||
name: "/multiLevel",
|
||||
meta: {
|
||||
title: "多级菜单",
|
||||
icon: "cascader",
|
||||
hidden: false,
|
||||
alwaysShow: true,
|
||||
params: null,
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: "multi-level1",
|
||||
component: "demo/multi-level/level1",
|
||||
name: "MultiLevel1",
|
||||
meta: {
|
||||
title: "菜单一级",
|
||||
icon: "",
|
||||
hidden: false,
|
||||
alwaysShow: true,
|
||||
params: null,
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: "multi-level2",
|
||||
component: "demo/multi-level/children/level2",
|
||||
name: "MultiLevel2",
|
||||
meta: {
|
||||
title: "菜单二级",
|
||||
icon: "",
|
||||
hidden: false,
|
||||
alwaysShow: false,
|
||||
params: null,
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: "multi-level3-1",
|
||||
component: "demo/multi-level/children/children/level3-1",
|
||||
name: "MultiLevel31",
|
||||
meta: {
|
||||
title: "菜单三级-1",
|
||||
icon: "",
|
||||
hidden: false,
|
||||
keepAlive: true,
|
||||
alwaysShow: false,
|
||||
params: null,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: "multi-level3-2",
|
||||
component: "demo/multi-level/children/children/level3-2",
|
||||
name: "MultiLevel32",
|
||||
meta: {
|
||||
title: "菜单三级-2",
|
||||
icon: "",
|
||||
hidden: false,
|
||||
keepAlive: true,
|
||||
alwaysShow: false,
|
||||
params: null,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
msg: "一切ok",
|
||||
},
|
||||
},
|
||||
]);
|
||||
@@ -0,0 +1,44 @@
|
||||
import { defineMock } from "./base";
|
||||
|
||||
export default defineMock([
|
||||
{
|
||||
url: "users/me",
|
||||
method: ["GET"],
|
||||
body: {
|
||||
code: "00000",
|
||||
data: {
|
||||
userId: 2,
|
||||
nickname: "系统管理员",
|
||||
username: "admin",
|
||||
avatar:
|
||||
"https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif?imageView2/1/w/80/h/80",
|
||||
roles: ["ROOT"],
|
||||
perms: [
|
||||
"sys:menu:delete",
|
||||
"sys:dept:edit",
|
||||
"sys:dict_type:add",
|
||||
"sys:dict:edit",
|
||||
"sys:dict:delete",
|
||||
"sys:dict_type:edit",
|
||||
"sys:menu:add",
|
||||
"sys:user:add",
|
||||
"sys:role:edit",
|
||||
"sys:dept:delete",
|
||||
"sys:user:edit",
|
||||
"sys:user:delete",
|
||||
"sys:user:password:reset",
|
||||
"sys:dept:add",
|
||||
"sys:role:delete",
|
||||
"sys:dict_type:delete",
|
||||
"sys:menu:edit",
|
||||
"sys:dict:add",
|
||||
"sys:role:add",
|
||||
"sys:user:query",
|
||||
"sys:user:export",
|
||||
"sys:user:import",
|
||||
],
|
||||
},
|
||||
msg: "一切ok",
|
||||
},
|
||||
},
|
||||
]);
|
||||
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"name": "ichangzuo",
|
||||
"version": "1.1.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vue-tsc --noEmit & vite build",
|
||||
"preview": "vite preview",
|
||||
"build-only": "vite build",
|
||||
"type-check": "vue-tsc --noEmit",
|
||||
"lint:eslint": "eslint --fix --ext .ts,.js,.vue ./src ",
|
||||
"lint:prettier": "prettier --write \"**/*.{js,cjs,ts,json,tsx,css,less,scss,vue,html,md}\"",
|
||||
"lint:stylelint": "stylelint \"**/*.{css,scss,vue}\" --fix",
|
||||
"lint:lint-staged": "lint-staged",
|
||||
"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.1",
|
||||
"@vueuse/core": "^12.0.0",
|
||||
"@wangeditor/editor": "^5.1.23",
|
||||
"@wangeditor/editor-for-vue": "5.1.10",
|
||||
"animate.css": "^4.1.1",
|
||||
"axios": "^1.7.8",
|
||||
"color": "^4.2.3",
|
||||
"element-plus": "^2.9.0",
|
||||
"nprogress": "^0.2.0",
|
||||
"path-browserify": "^1.0.1",
|
||||
"path-to-regexp": "^8.2.0",
|
||||
"pinia": "^2.2.8",
|
||||
"qs": "^6.13.1",
|
||||
"vue": "^3.5.13",
|
||||
"vue-i18n": "10.0.5",
|
||||
"vue-qrcode": "^2.2.2",
|
||||
"vue-router": "^4.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^19.6.0",
|
||||
"@commitlint/config-conventional": "^19.6.0",
|
||||
"@iconify-json/ep": "^1.2.1",
|
||||
"@types/color": "^4.2.0",
|
||||
"@types/node": "^22.10.1",
|
||||
"@types/nprogress": "^0.2.3",
|
||||
"@types/path-browserify": "^1.0.3",
|
||||
"@types/qs": "^6.9.17",
|
||||
"@typescript-eslint/eslint-plugin": "^8.17.0",
|
||||
"@typescript-eslint/parser": "^8.17.0",
|
||||
"@vitejs/plugin-vue": "^5.2.1",
|
||||
"@vitejs/plugin-vue-jsx": "^4.1.1",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"commitizen": "^4.3.1",
|
||||
"cz-git": "^1.11.0",
|
||||
"eslint": "^9.16.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-import": "^2.31.0",
|
||||
"eslint-plugin-prettier": "^5.2.1",
|
||||
"eslint-plugin-vue": "^9.32.0",
|
||||
"fast-glob": "^3.3.2",
|
||||
"husky": "^9.1.7",
|
||||
"lint-staged": "^15.2.10",
|
||||
"postcss": "^8.4.49",
|
||||
"postcss-html": "^1.7.0",
|
||||
"postcss-scss": "^4.0.9",
|
||||
"prettier": "^3.4.1",
|
||||
"sass": "^1.82.0",
|
||||
"stylelint": "^16.11.0",
|
||||
"stylelint-config-html": "^1.1.0",
|
||||
"stylelint-config-recess-order": "^5.1.1",
|
||||
"stylelint-config-recommended-scss": "^14.1.0",
|
||||
"stylelint-config-recommended-vue": "^1.5.0",
|
||||
"stylelint-config-standard": "^36.0.1",
|
||||
"terser": "^5.36.0",
|
||||
"typescript": "^5.7.2",
|
||||
"unocss": "^0.65.0",
|
||||
"unplugin-auto-import": "^0.18.6",
|
||||
"unplugin-icons": "^0.21.0",
|
||||
"unplugin-vue-components": "^0.27.5",
|
||||
"vite": "^6.0.2",
|
||||
"vite-plugin-mock-dev-server": "^1.8.0",
|
||||
"vite-plugin-svg-icons": "^2.0.1",
|
||||
"vite-plugin-vue-devtools": "^7.6.7",
|
||||
"vue-tsc": "^2.1.10"
|
||||
},
|
||||
"repository": "",
|
||||
"author": "",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,66 @@
|
||||
<link href="help.css" rel="stylesheet" type="text/css" />
|
||||
|
||||
<div class="helpContent_border">
|
||||
<div class="helpContent_title">唱作音符</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title"></div>
|
||||
<div class="msg">
|
||||
唱作音符是唱作网的操作度量工具,在使用唱作魔方软件时会用到唱作音符。唱作音符通常叫作“音符”。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">音符使用:</div>
|
||||
<div class="msg">
|
||||
在唱作魔方软件中:<br>
|
||||
(1)保存音乐 (-1)<br />
|
||||
(2)保存音乐时使用扩展音色库 (-80) <br/>
|
||||
(3)保存音乐时使用收费风格 <br/>
|
||||
(4)其它
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">用户获取:</div>
|
||||
<div class="msg">
|
||||
(1)在注册用户时唱作网会赠予一定的音符<br />
|
||||
(2)充值兑换<br />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">音符充值:</div>
|
||||
<div class="msg">
|
||||
进入账户管理页,选择 "唱作音符" 下的 "充值提现"<br />
|
||||
当前兑换比例:¥1元 = 100音符
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">音符提现:</div>
|
||||
<div class="msg">
|
||||
进入账户管理页,选择 "唱作音符" 下的 "充值提现"<br />
|
||||
最低提现金额为100元(即10000音符);唱作网将收取按提现金额6%的音符作为平台管理费,提现后24小时内到账
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">查看明细:</div>
|
||||
<div class="msg">
|
||||
进入账户管理页,选择 "唱作音符" 下的 "音符明细" 查看 <br/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="msg">
|
||||
<b>注:音符获取细则和使用细则等请以唱作网具体规定为准</b> <br/> <br/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clear"></div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
<link href="help.css" rel="stylesheet" type="text/css" />
|
||||
|
||||
<div class="helpContent_border">
|
||||
<div class="helpContent_title">联系我们</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title"></div>
|
||||
<div class="msg">
|
||||
<br />
|
||||
<br />
|
||||
邮箱:music@ichangzuo.com
|
||||
<br />
|
||||
<br />
|
||||
QQ群:271573952
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clear"></div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/*帮助内容*/
|
||||
.helpContent_border{width:100%; margin:0 0 30px 0px;}
|
||||
.helpContent_border .helpContent_title{width:100%; padding: 20px 0 10px 0; text-align:center; font-size:20px; font-weight:bold;}
|
||||
.helpContent_border .content{width:100%; padding:25px 0 0 0;}
|
||||
.helpContent_border .content .title{font-size:16px; font-weight:bold;padding-left: 10px;}
|
||||
.helpContent_border .content .msg{padding:10px 0 0 20px; font-size:12px; line-height:24px;}
|
||||
.helpContent_border .content .img_border{width:100%; padding:20px 0 20px 0; text-align:center;}
|
||||
.helpContent_border .content .img_border img{max-width:850px;}
|
||||
table, th, td {
|
||||
border: 1px solid black;
|
||||
border-collapse: collapse;
|
||||
text-align: center;
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
<link href="help.css" rel="stylesheet" type="text/css" />
|
||||
|
||||
<div class="helpContent_border">
|
||||
<div class="helpContent_title">唱作网隐私政策</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title"></div>
|
||||
<div class="msg">
|
||||
欢迎您使用唱作网产品及服务!<br/>
|
||||
我们非常重视保护您的个人信息和隐私。您可以通过《唱作网隐私政策》(以下简称“隐私政策”)了解我们收集、使用、存储用户个人信息的情况,以及您所享有的相关权利。请您仔细阅读并充分理解相关内容:<br/>
|
||||
1、为向您提供产品及服务,我们将依据隐私政策收集、使用、存储必要的信息。<br/>
|
||||
2、基于您的明示授权,我们可能会申请开启您的存储、网络、麦克风等设备权限,您有权拒绝或取消授权。<br/>
|
||||
3、您可以访问、更正、删除您的个人信息,还可以撤回授权同意、注销账号、投诉举报以及调整其他隐私设置。<br/>
|
||||
4、我们已采取符合业界标准的安全防护措施保护您的个人信息。<br/>
|
||||
5、如您是未成年人,请您和您的监护人仔细阅读本隐私政策,并在征得您的监护人授权同意的前提下使用我们的服务或向我们提供个人信息。<br/>
|
||||
请您阅读完整版<a href="user.html">《唱作网用户协议》</a>及本隐私政策了解详细信息。<br/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">一、 我们如何收集和使用您的个人信息</div>
|
||||
<div class="msg">
|
||||
<h3>1、完成注册</h3>
|
||||
注册账号时,我们会要求您提供相应的个人信息,包括您的账号、密码、邮箱、手机号码等。<br/>
|
||||
<h3>2、使用产品</h3>
|
||||
(1)我们会收集您在使用我们的产品和服务时设备的相关信息,例如设备类型、操作系统类型及版本、浏览器类型和版本、屏幕分辨率、IP地址等,以及因产品而异的其他技术信息。<br/>
|
||||
(2)在您使用我们的产品或服务,以及与我们互动时由您直接提交给我们的信息,包括您输入的信息或您为了获得客服支持而提供的问题或信息等。<br/>
|
||||
(3)当您使用我们的产品和服务时,我们会自动收集并存储必要的日志信息,如服务的每次访问时间、访问的页面路径、客户端 IP地址、事件信息(如错误、崩溃、重启、升级)等。
|
||||
<h3>3、实名认证</h3>
|
||||
当您使用我们的部分产品与/或服务时,根据相关法律法规要求,需要您进行实名认证。实名认证需要上传实名认证信息。不同的实名认证主体类型会要求不同实名认证信息,这些信息包括:姓名、证件号码、公司名称、公司统一信用代码、学生证信息、身份证信息等。<br/>
|
||||
上述信息将仅在您使用我们的产品与/或服务期间持续授权我们保存使用。在您主动注销账号时,我们将根据适用法律法规的要求尽快使其匿名或删除您的个人信息。
|
||||
<h3>4、充值提现</h3>
|
||||
(1)您可以通过微信支付、支付宝支付等进行充值。支付功能本身并不收集您的个人信息,但我们需要将您的订单号与交易金额信息与这些支付机构共享以实现其确认您的支付指令并完成支付。<br/>
|
||||
(2)为充分保障您的合法权益,我们允许您将账户余额提现。在此过程中,您至少需要向我们提供微信账号、支付宝账号、或汇款银行名称、汇款账号、汇款账户名、汇款金额等信息。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">二、设备权限调用</div>
|
||||
<div class="msg">
|
||||
在您使用我们的产品及服务过程中,我们需要在必要范围内向您申请获取设备权限。请您知悉,我们不会默认开启您设备的权限,仅在您主动确认开启的情况下,我们才有可能通过设备权限收集您的信息。<br/>
|
||||
我们的产品及服务调用的权限、调用权限的目的,以及调用权限前向您询问的情况请见下表:
|
||||
<table style="margin-top: 8px;">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="w-auto">设备权限</th>
|
||||
<th scope="col" class="w-auto">调用权限的目的</th>
|
||||
<th scope="col" class="w-auto">是否询问</th>
|
||||
<th scope="col" class="w-auto">可否关闭</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>网络</td>
|
||||
<td>访问网络</td>
|
||||
<td>是</td>
|
||||
<td>可</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>外部存储</td>
|
||||
<td>存储应用运行所需文件</td>
|
||||
<td>是</td>
|
||||
<td>不可</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>麦克风</td>
|
||||
<td>录音</td>
|
||||
<td>是</td>
|
||||
<td>可</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>系统设置</td>
|
||||
<td>设置铃音</td>
|
||||
<td>是</td>
|
||||
<td>可</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">三、我们如何使用您的个人信息</div>
|
||||
<div class="msg">
|
||||
(1)我们会根据本政策的约定并为实现我们的服务的目的对所收集的个人信息进行使用。 <br/>
|
||||
(2)请您注意,您在使用我们提供的服务时所提供的所有个人信息,除非您删除或通过系统设置拒绝我们收集,否则将在您使用我们的服务期间持续授权我们使用。在您注销账号时,我们将停止使用并删除您的个人信息。<br/>
|
||||
(3)我们会对我们提供的服务使用情况进行统计,并可能会与公众或第三方共享这些统计信息,以用于产品开发、服务优化、安全保障的目的。但这些统计信息不包含您的任何身份识别信息。 <br/>
|
||||
(4)当我们要将您的个人信息用于本政策未载明的其它用途时,或基于特定目的收集而来的信息用于其他目的时,会通过您主动做出勾选的形式事先征求您的同意。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">四、我们如何使用Cookie和同类技术</div>
|
||||
<div class="msg">
|
||||
(1)为确保网站正常运转,我们有时会在计算机或移动设备上存储名为 Cookie 的小数据文件。<br/>
|
||||
(2)我们启用Cookie的目的与大多数网站的目的一样,即改善用户体验。借助于 Cookie,网站能够记住用户的单次访问(使用会话 Cookie)或多次访问(使用永久 Cookie)。<br/>
|
||||
借助于 Cookie,网站能够保存设置,例如计算机或移动设备的语言、字体大小和其他浏览偏好。这意味着,用户无需在每次访问时重新配置用户偏好设置。<br/>
|
||||
如果某个网站不使用 Cookie,那么在用户每一次打开网页时,该网站都会将其视为新访客。例如,如果您登录某个网站后转到另一个网页,该网站就不会识别出您,而您会被再次注销。<br/>
|
||||
(3)我们不会将 Cookie 用于本政策所述目的之外的任何用途。<br/>
|
||||
(4)您可根据自己的偏好管理或删除 Cookie。您可以清除计算机上保存的所有 Cookie,大部分网络浏览器都设有阻止 Cookie 的功能。但如果您这么做,则需要在每一次访问我们的网站时亲自更改用户设置。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">五、我们如何披露您的个人信息</div>
|
||||
<div class="msg">
|
||||
通常我们不会对外披露您的个人信息,但以下场景除外:<br/>
|
||||
(1)在某些服务由我们的授权合作伙伴提供的情况下,我们会如本政策描述与该合作伙伴共享您的个人信息。例如,委托合作伙伴代表我们处理热线、发送电子邮件、提供技术支持等,我们会要求合作伙伴仅能将您的个人信息用于代表我们向您提供服务。<br/>
|
||||
(2)在适用的法律要求或响应法律程序的情况下,我们也可能会向相关的执法机关或者其他政府机关披露您的个人信息。在某些管辖区,如果我们牵涉到重组、合并或破产和清理诉讼,那么您的个人信息还可能会被披露给交易方。<br/>
|
||||
(3)我们还会在合理的情况下披露您的数据,例如出于执行合同以及我们认为为阻止身体损害或财产损失或调查可能的或实际的非法行为有必要披露且披露是适当的。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">六、我们如何保护和留存您的个人信息</div>
|
||||
<div class="msg">
|
||||
(1)我们重视个人信息的安全,采用适当的物理、管理和技术保障措施来保护您的个人信息不被未经授权访问、披露、使用、修改、损坏或丢失。<br/>
|
||||
例如,我们会使用加密技术确保数据的机密性;我们会使用保护机制防止数据遭到恶意攻击;我们会部署访问控制机制,确保只有授权人员才可访问个人信息;以及我们会举办安全和隐私保护培训课程,加强员工对于保护个人信息重要性的认识。<br/>
|
||||
我们会尽力保护您的个人信息,但是请注意任何安全措施都无法做到无懈可击。<br/>
|
||||
(2)我们将会在达成本政策所述目的所需的期限内保留您的个人信息,除非按照法律要求或许可需要延长保留期或受到法律的允许。因为基于不同的场景和产品及服务的不同,数据的存储期可能会有所不同。<br/>
|
||||
我们用于确定存留期的标准包括:完成该业务目的需要留存个人信息的时间,包括提供产品和服务,维护相应的交易及业务记录,管控并提升产品与服务性能与质量,保证产品和服务的安全,应对可能的用户查询或投诉,问题定位等;用户是否同意更长的留存期间;法律、合同等是否有保留数据的特殊要求等。<br/>
|
||||
只要您的账户是为您提供服务必须,我们都将保留您的注册信息。您也可以选择注销您的账号,在您注销账号后,我们会停止基于该账号提供产品和服务,并在无特殊法律要求的情况下,删除您相应的个人信息或对其进行匿名化处理。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">七、我们如何保护儿童的个人信息</div>
|
||||
<div class="msg">
|
||||
(1)我们的产品和服务主要面向成人。如果没有父母或监护人的同意,(未满14周岁的未成年人)不得创建自己的用户帐户。<br/>
|
||||
(2)对于经父母同意而收集儿童个人信息的情况,我们只会在受到法律允许、父母或监护人明确同意或者保护儿童所必要的情况下使用或披露此数据。 <br/>
|
||||
(3)如果我们发现在未事先获得可证实的父母同意的情况下收集了儿童的个人信息,则会设法尽快删除相关数据。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">八、本政策如何更新</div>
|
||||
<div class="msg">
|
||||
我们保留不时更新或修改本政策的权利。如果我们的隐私政策变更,我们会将最新版隐私政策发布在这里。<br/>
|
||||
如果我们对隐私政策做出了重大变更,我们还可能会通过不同渠道向您发送变更通知,例如,在我们的网站上发布通知或者向您发布单独的通知。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">九、其他</div>
|
||||
<div class="msg">
|
||||
(1)本政策的订立、执行和解释及争议的解决均应适用中国法律。<br/>
|
||||
(2)如双方就本协议内容或其执行发生任何争议,双方应尽量友好协商解决;协商不成时,任何一方均可向唱作网所在地的人民法院提起诉讼。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clear"></div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
<link href="help.css" rel="stylesheet" type="text/css" />
|
||||
|
||||
<div class="helpContent_border">
|
||||
<div class="helpContent_title">唱作网用户协议</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title"></div>
|
||||
<div class="msg">
|
||||
欢迎您使用唱作网产品及服务!<br/>
|
||||
为使用唱作网产品及服务(以下统称“本产品及服务”),您应当阅读并遵守《唱作网用户协议》(以下简称“本协议”),以及<a href="privacy.html">《唱作网隐私政策》</a>。<br/>
|
||||
在您注册成为唱作网用户的过程中,您需要完成我们的注册流程并通过点击同意的形式在线签署以下使用协议,请务必仔细阅读,充分理解协议中的条款后再点击同意,这些条款可能会明确您应履行的义务或对您的权利有所限制。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">服务内容</div>
|
||||
<div class="msg">
|
||||
(1)本产品及服务的具体内容由唱作网根据实际情况提供,例如账户管理、软件升级等。唱作网保留随时变更、中断或终止部分或全部产品及服务的权利。<br/>
|
||||
(2)当您使用本产品时,您应选择与您的终端、系统等相匹配的本产品版本,否则,您可能无法正常使用本产品。
|
||||
(3)唱作网在提供产品及服务时,可能会对部分产品及服务收取一定的费用。在此情况下, 唱作网会在相关页面上做明确的提示。如用户拒绝支付该等费用,则不能使用相关产品及服务。<br/>
|
||||
(4)唱作网仅提供相关的产品及服务,除此之外与之有关的设备(如电脑、移动设备、调制解调器及其他与接入互联网有关的装置)及所需的费用( 如为接入互联网而支付的电话费及上网费 )均应由用户自行负担。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">使用规则</div>
|
||||
<div class="msg">
|
||||
(1)当您注册成功后,唱作网将给予您一个用户帐号及相应的密码,该用户帐号和密码由您负责保管,您应当对以其用户帐号进行的所有活动和事件负法律责任。<br/>
|
||||
(2)在您使用本产品与服务视为同意接受唱作网通过电子邮件或其它方式向用户发送的商品促销或其他相关商业信息。<br/>
|
||||
(3)您在使用本服务过程中,必须遵循以下原则:<br/>
|
||||
A:遵守中国有关的法律和法规;<br/>
|
||||
B:不得为任何非法目的而使用网络服务系统;<br/>
|
||||
C:遵守所有与本产品及服务有关的网络协议、规定和程序;<br/>
|
||||
D:不得利用本产品及服务进行任何可能对互联网的正常运转造成不利影响的行为;<br/>
|
||||
E:不得利用本产品及服务传播任何骚扰性的、中伤他人的、辱骂性的、恐吓性的、庸俗淫秽的或其他任何非法的信息资料;<br/>
|
||||
F:不得利用本产品及服务进行任何不利于唱作网的行为;<br/>
|
||||
G:如发现任何非法使用用户帐号或帐号出现安全漏洞的情况,应立即通告唱作网。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">内容所有权</div>
|
||||
<div class="msg">
|
||||
(1)唱作网提供的网络服务内容可能包括:文字、软件、声音、图片、MV、图表等。所有这些内容受版权、商标和其它财产所有权法律的保护。<br/>
|
||||
(2)您只有在获得唱作网或其他相关权利人的授权之后才能使用这些内容,而不能擅自复制、再造这些内容、或创造与内容有关的派生产品。<br/>
|
||||
(3)您使用本产品及服务创作或制作的歌曲,著作权仍归您所有。唱作网对您著作权部分不作任何要求。<br/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">隐私保护</div>
|
||||
<div class="msg">
|
||||
隐私保护相关条款以<a href="privacy.html">《唱作网隐私政策》</a>内容为准。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">免责声明</div>
|
||||
<div class="msg">
|
||||
(1)您明确同意其使用本产品及服务所存在的风险将完全由其您承担,因您使用本产品及服务而产生的一切后果也由您承担, 唱作网对此不承担任何责任。<br/>
|
||||
(2)唱作网不担保本产品及服务一定能满足您的要求,也不担保本产品及服务不会中断,对本产品及服务的及时性、安全性、准确性也都不作担保。<br/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">服务变更、中断或终止</div>
|
||||
<div class="msg">
|
||||
(1)如因系统维护或升级的需要而需暂停网络服务, 唱作网将尽可能事先进行通告。<br/>
|
||||
(2)如发生下列任何一种情形, 唱作网有权随时中断或终止向您提供本协议中的服务而无需通知:<br/>
|
||||
A:您提供的个人资料不真实;<br/>
|
||||
B:您违反本协议中规定的使用规则。<br/>
|
||||
(3)除前款所述情形外, 唱作网同时保留在不事先通知您的情况下随时中断或终止部分或全部产品及服务的权利,对于所有服务的中断或终止而造成的任何损失, 唱作网无须承担责任。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">违约赔偿</div>
|
||||
<div class="msg">
|
||||
您同意保障和维护唱作网及其他用户的利益,如因您违反有关法律、法规或本协议项下的任何条款而给唱作网或任何其他第三人造成损失,您同意承担由此造成的损害赔偿责任。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">修改协议</div>
|
||||
<div class="msg">
|
||||
(1)唱作网将可能不时的修改本协议的有关条款,一旦条款内容发生变动,唱作网将尽量在相关页面提示修改内容。<br/>
|
||||
(2)如果不同意唱作网对服务条款所做的修改,您有权停止使用本产品及服务。如果您继续使用本产品及服务,则视为您接受服务条款的变动。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">法律管辖</div>
|
||||
<div class="msg">
|
||||
(1)本协议的订立、执行和解释及争议的解决均应适用中国法律。<br/>
|
||||
(2)如双方就本协议内容或其执行发生任何争议,双方应尽量友好协商解决;协商不成时,任何一方均可向唱作网所在地的人民法院提起诉讼。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">通知和送达</div>
|
||||
<div class="msg">
|
||||
本协议项下所有的通知均可通过重要页面公告、电子邮件或常规的信件传送等方式进行;该等通知于发送之日视为已送达收件人。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">其他规定</div>
|
||||
<div class="msg">
|
||||
(1)本协议构成双方对本协议之约定事项及其他有关事宜的完整协议,除本协议规定的之外,未赋予本协议各方其他权利。<br/>
|
||||
(2)如本协议中的任何条款无论因何种原因完全或部分无效或不具有执行力,本协议的其余条款仍应有效并且有约束力。<br/>
|
||||
(3)本协议中的标题仅为方便而设,在解释本协议时应被忽略。
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clear"></div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
<link href="help.css" rel="stylesheet" type="text/css" />
|
||||
|
||||
<div class="helpContent_border">
|
||||
<div class="helpContent_title">VIP会员</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">特权:</div>
|
||||
<div class="msg">
|
||||
(1)唱作魔方所有版本免收功能费;<br />
|
||||
(2)唱作魔方所有版本使用收费风格时享受8折优惠;<br />
|
||||
(3)唱作魔方所有版本可使用离线保存功能;<br />
|
||||
<br />
|
||||
更多VIP会员特权敬请期待!
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="title">费用标准:</div>
|
||||
<div class="msg">
|
||||
(1)一月:1000 音符<br />
|
||||
(2)半年:5500 音符<br />
|
||||
(3)一年:10000 音符<br />
|
||||
(4)两年:20000 音符<br />
|
||||
<s>(5)终身:30000 音符(为庆祝唱作网首次推出VIP会员服务,限时可成为终身会员。目前已结束。)</s>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="clear"></div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
<template>
|
||||
<el-config-provider :locale="locale" :size="size">
|
||||
<router-view />
|
||||
</el-config-provider>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { useAppStore, useSettingsStore } from "@/store";
|
||||
// import defaultSettings from "@/settings";
|
||||
import { ThemeEnum } from "@/enums/ThemeEnum";
|
||||
import { SizeEnum } from "@/enums/SizeEnum";
|
||||
|
||||
const appStore = useAppStore();
|
||||
const settingsStore = useSettingsStore();
|
||||
|
||||
const locale = computed(() => appStore.locale);
|
||||
const size = computed(() => appStore.size as SizeEnum);
|
||||
// const watermarkEnabled = computed(() => settingsStore.watermarkEnabled);
|
||||
|
||||
// 明亮/暗黑主题水印字体颜色适配
|
||||
const fontColor = computed(() => {
|
||||
return settingsStore.theme === ThemeEnum.DARK ? "rgba(255, 255, 255, .15)" : "rgba(0, 0, 0, .15)";
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,150 @@
|
||||
import request from "@/utils/request";
|
||||
import { verify } from "crypto";
|
||||
|
||||
const AUTH_BASE_URL = "/api/v1/auth";
|
||||
|
||||
class AuthAPI {
|
||||
/** 登录 接口*/
|
||||
static login(data: LoginData) {
|
||||
const formData = new FormData();
|
||||
formData.append("username", data.username);
|
||||
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",
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/** 注销 接口*/
|
||||
static logout() {
|
||||
return request({
|
||||
url: `${AUTH_BASE_URL}/logout`,
|
||||
method: "delete",
|
||||
});
|
||||
}
|
||||
|
||||
/** 获取验证码 接口*/
|
||||
static getCaptcha() {
|
||||
return request<any, CaptchaResult>({
|
||||
url: `${AUTH_BASE_URL}/captcha`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
static sendCode(data: SendCodeData) {
|
||||
const formData = new FormData();
|
||||
formData.append("contact", data.contact);
|
||||
formData.append("captchaKey", data.captchaKey);
|
||||
formData.append("captchaCode", data.captchaCode);
|
||||
|
||||
return request({
|
||||
url: `${AUTH_BASE_URL}/sendRegCode`,
|
||||
method: "post",
|
||||
data: formData,
|
||||
headers: {
|
||||
"Content-Type": "multipart/form-data",
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/** 登录 接口*/
|
||||
static register(data: RegisterData) {
|
||||
const formData = new FormData();
|
||||
formData.append("username", data.username);
|
||||
formData.append("password", data.password);
|
||||
formData.append("verifyCode", data.verifyCode);
|
||||
|
||||
return request<any, LoginResult>({
|
||||
url: `${AUTH_BASE_URL}/register`,
|
||||
method: "post",
|
||||
data: formData,
|
||||
headers: {
|
||||
"Content-Type": "multipart/form-data",
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
static autoLogin(username: string, password: string) {
|
||||
const formData = new FormData();
|
||||
formData.append("username", username);
|
||||
formData.append("password", password);
|
||||
|
||||
return request<any, LoginResult>({
|
||||
url: `${AUTH_BASE_URL}/autoLogin`,
|
||||
method: "post",
|
||||
data: formData,
|
||||
headers: {
|
||||
"Content-Type": "multipart/form-data",
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default AuthAPI;
|
||||
|
||||
/** 登录请求参数 */
|
||||
export interface LoginData {
|
||||
/** 用户名 */
|
||||
username: string;
|
||||
/** 密码 */
|
||||
password: string;
|
||||
/** 验证码缓存key */
|
||||
captchaKey: string;
|
||||
/** 验证码 */
|
||||
captchaCode: string;
|
||||
}
|
||||
|
||||
/** 登录响应 */
|
||||
export interface LoginResult {
|
||||
/** 访问token */
|
||||
accessToken?: string;
|
||||
/** 过期时间(单位:毫秒) */
|
||||
expires?: number;
|
||||
/** 刷新token */
|
||||
refreshToken?: string;
|
||||
/** token 类型 */
|
||||
tokenType?: string;
|
||||
}
|
||||
|
||||
/** 验证码响应 */
|
||||
export interface CaptchaResult {
|
||||
/** 验证码缓存key */
|
||||
captchaKey: string;
|
||||
/** 验证码图片Base64字符串 */
|
||||
captchaBase64: string;
|
||||
}
|
||||
|
||||
export interface CaptchaData {
|
||||
/** 验证码缓存key */
|
||||
captchaKey: string;
|
||||
/** 验证码 */
|
||||
captchaCode: string;
|
||||
}
|
||||
|
||||
export interface SendCodeData {
|
||||
/** 发送验证码账号 */
|
||||
contact: string;
|
||||
/** 验证码缓存key */
|
||||
captchaKey: string;
|
||||
/** 验证码 */
|
||||
captchaCode: string;
|
||||
}
|
||||
|
||||
/** 注册请求参数 */
|
||||
export interface RegisterData {
|
||||
/** 用户名 */
|
||||
username: string;
|
||||
/** 密码 */
|
||||
password: string;
|
||||
/** 重复输入密码 */
|
||||
repeatPassword: string;
|
||||
/** 验证码 */
|
||||
verifyCode: string;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
const BANK_BASE_URL = "/api/v1/bank";
|
||||
|
||||
class BankAPI {
|
||||
static hotlist() {
|
||||
return request<any, string[]>({
|
||||
url: `${BANK_BASE_URL}/hotList`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
static bankInfo() {
|
||||
return request<any, BankInfo>({
|
||||
url: `${BANK_BASE_URL}/me`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default BankAPI;
|
||||
|
||||
export interface BankInfo {
|
||||
userId: number;
|
||||
bankName?: string;
|
||||
bankCardNum?: string;
|
||||
bankCardName?: string;
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
const GENERATOR_BASE_URL = "/api/v1/codegen";
|
||||
|
||||
class GeneratorAPI {
|
||||
/** 获取数据表分页列表 */
|
||||
static getTablePage(params: TablePageQuery) {
|
||||
return request<any, PageResult<TablePageVO[]>>({
|
||||
url: `${GENERATOR_BASE_URL}/table/page`,
|
||||
method: "get",
|
||||
params: params,
|
||||
});
|
||||
}
|
||||
|
||||
/** 获取代码生成配置 */
|
||||
static getGenConfig(tableName: string) {
|
||||
return request<any, GenConfigForm>({
|
||||
url: `${GENERATOR_BASE_URL}/${tableName}/config`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
/** 获取代码生成配置 */
|
||||
static saveGenConfig(tableName: string, data: GenConfigForm) {
|
||||
return request({
|
||||
url: `${GENERATOR_BASE_URL}/${tableName}/config`,
|
||||
method: "post",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/** 获取代码生成预览数据 */
|
||||
static getPreviewData(tableName: string) {
|
||||
return request<any, GeneratorPreviewVO[]>({
|
||||
url: `${GENERATOR_BASE_URL}/${tableName}/preview`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
/** 重置代码生成配置 */
|
||||
static resetGenConfig(tableName: string) {
|
||||
return request({
|
||||
url: `${GENERATOR_BASE_URL}/${tableName}/config`,
|
||||
method: "delete",
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载 ZIP 文件
|
||||
* @param url
|
||||
* @param fileName
|
||||
*/
|
||||
static download(tableName: string) {
|
||||
return request({
|
||||
url: `${GENERATOR_BASE_URL}/${tableName}/download`,
|
||||
method: "get",
|
||||
responseType: "blob",
|
||||
}).then((response) => {
|
||||
const fileName = decodeURI(
|
||||
response.headers["content-disposition"].split(";")[1].split("=")[1]
|
||||
);
|
||||
|
||||
const blob = new Blob([response.data], { type: "application/zip" });
|
||||
const a = document.createElement("a");
|
||||
const url = window.URL.createObjectURL(blob);
|
||||
a.href = url;
|
||||
a.download = fileName;
|
||||
a.click();
|
||||
window.URL.revokeObjectURL(url);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default GeneratorAPI;
|
||||
|
||||
/** 代码生成预览对象 */
|
||||
export interface GeneratorPreviewVO {
|
||||
/** 文件生成路径 */
|
||||
path: string;
|
||||
/** 文件名称 */
|
||||
fileName: string;
|
||||
/** 文件内容 */
|
||||
content: string;
|
||||
}
|
||||
|
||||
/** 数据表分页查询参数 */
|
||||
export interface TablePageQuery extends PageQuery {
|
||||
/** 关键字(表名) */
|
||||
keywords?: string;
|
||||
}
|
||||
|
||||
/** 数据表分页对象 */
|
||||
export interface TablePageVO {
|
||||
/** 表名称 */
|
||||
tableName: string;
|
||||
|
||||
/** 表描述 */
|
||||
tableComment: string;
|
||||
|
||||
/** 存储引擎 */
|
||||
engine: string;
|
||||
|
||||
/** 字符集排序规则 */
|
||||
tableCollation: string;
|
||||
|
||||
/** 创建时间 */
|
||||
createTime: string;
|
||||
}
|
||||
|
||||
/** 代码生成配置表单 */
|
||||
export interface GenConfigForm {
|
||||
/** 主键 */
|
||||
id?: number;
|
||||
|
||||
/** 表名 */
|
||||
tableName?: string;
|
||||
|
||||
/** 业务名 */
|
||||
businessName?: string;
|
||||
|
||||
/** 模块名 */
|
||||
moduleName?: string;
|
||||
|
||||
/** 包名 */
|
||||
packageName?: string;
|
||||
|
||||
/** 实体名 */
|
||||
entityName?: string;
|
||||
|
||||
/** 作者 */
|
||||
author?: string;
|
||||
|
||||
/** 上级菜单 */
|
||||
parentMenuId?: number;
|
||||
|
||||
/** 后端应用名 */
|
||||
backendAppName?: string;
|
||||
/** 前端应用名 */
|
||||
frontendAppName?: string;
|
||||
|
||||
/** 字段配置列表 */
|
||||
fieldConfigs?: FieldConfig[];
|
||||
}
|
||||
|
||||
/** 字段配置 */
|
||||
export interface FieldConfig {
|
||||
/** 主键 */
|
||||
id?: number;
|
||||
|
||||
/** 列名 */
|
||||
columnName?: string;
|
||||
|
||||
/** 列类型 */
|
||||
columnType?: string;
|
||||
|
||||
/** 字段名 */
|
||||
fieldName?: string;
|
||||
|
||||
/** 字段类型 */
|
||||
fieldType?: string;
|
||||
|
||||
/** 字段描述 */
|
||||
fieldComment?: string;
|
||||
|
||||
/** 是否在列表显示 */
|
||||
isShowInList?: number;
|
||||
|
||||
/** 是否在表单显示 */
|
||||
isShowInForm?: number;
|
||||
|
||||
/** 是否在查询条件显示 */
|
||||
isShowInQuery?: number;
|
||||
|
||||
/** 是否必填 */
|
||||
isRequired?: number;
|
||||
|
||||
/** 表单类型 */
|
||||
formType?: number;
|
||||
|
||||
/** 查询类型 */
|
||||
queryType?: number;
|
||||
|
||||
/** 字段长度 */
|
||||
maxLength?: number;
|
||||
|
||||
/** 字段排序 */
|
||||
fieldSort?: number;
|
||||
|
||||
/** 字典类型 */
|
||||
dictType?: string;
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
const CONFIG_BASE_URL = "/api/v1/config";
|
||||
|
||||
class ConfigAPI {
|
||||
/** 获取系统配置分页数据 */
|
||||
static getPage(queryParams?: ConfigPageQuery) {
|
||||
return request<any, PageResult<ConfigPageVO[]>>({
|
||||
url: `${CONFIG_BASE_URL}/page`,
|
||||
method: "get",
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 获取系统配置表单数据
|
||||
*
|
||||
* @param id ConfigID
|
||||
* @returns Config表单数据
|
||||
*/
|
||||
static getFormData(id: number) {
|
||||
return request<any, ConfigForm>({
|
||||
url: `${CONFIG_BASE_URL}/${id}/form`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
/** 添加系统配置*/
|
||||
static add(data: ConfigForm) {
|
||||
return request({
|
||||
url: `${CONFIG_BASE_URL}`,
|
||||
method: "post",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新系统配置
|
||||
*
|
||||
* @param id ConfigID
|
||||
* @param data Config表单数据
|
||||
*/
|
||||
static update(id: number, data: ConfigForm) {
|
||||
return request({
|
||||
url: `${CONFIG_BASE_URL}/${id}`,
|
||||
method: "put",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除系统配置
|
||||
*
|
||||
* @param ids 系统配置ID
|
||||
*/
|
||||
static deleteById(id: number) {
|
||||
return request({
|
||||
url: `${CONFIG_BASE_URL}/${id}`,
|
||||
method: "delete",
|
||||
});
|
||||
}
|
||||
|
||||
static refreshCache() {
|
||||
return request({
|
||||
url: `${CONFIG_BASE_URL}`,
|
||||
method: "patch",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default ConfigAPI;
|
||||
|
||||
/** $系统配置分页查询参数 */
|
||||
export interface ConfigPageQuery extends PageQuery {
|
||||
/** 搜索关键字 */
|
||||
keywords?: string;
|
||||
}
|
||||
|
||||
/** 系统配置表单对象 */
|
||||
export interface ConfigForm {
|
||||
/** 主键 */
|
||||
id?: number;
|
||||
/** 配置名称 */
|
||||
configName?: string;
|
||||
/** 配置键 */
|
||||
configKey?: string;
|
||||
/** 配置值 */
|
||||
configValue?: string;
|
||||
/** 描述、备注 */
|
||||
remark?: string;
|
||||
}
|
||||
|
||||
/** 系统配置分页对象 */
|
||||
export interface ConfigPageVO {
|
||||
/** 主键 */
|
||||
id?: number;
|
||||
/** 配置名称 */
|
||||
configName?: string;
|
||||
/** 配置键 */
|
||||
configKey?: string;
|
||||
/** 配置值 */
|
||||
configValue?: string;
|
||||
/** 描述、备注 */
|
||||
remark?: string;
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
const DICT_BASE_URL = "/api/v1/dict";
|
||||
|
||||
class DictAPI {
|
||||
/**
|
||||
* 获取字典分页列表
|
||||
*
|
||||
* @param queryParams 查询参数
|
||||
* @returns 字典分页结果
|
||||
*/
|
||||
static getPage(queryParams: DictPageQuery) {
|
||||
return request<any, PageResult<DictPageVO[]>>({
|
||||
url: `${DICT_BASE_URL}/page`,
|
||||
method: "get",
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取字典表单数据
|
||||
*
|
||||
* @param id 字典ID
|
||||
* @returns 字典表单数据
|
||||
*/
|
||||
static getFormData(id: number) {
|
||||
return request<any, ResponseData<DictForm>>({
|
||||
url: `${DICT_BASE_URL}/${id}/form`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增字典
|
||||
*
|
||||
* @param data 字典表单数据
|
||||
*/
|
||||
static add(data: DictForm) {
|
||||
return request({
|
||||
url: `${DICT_BASE_URL}`,
|
||||
method: "post",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改字典
|
||||
*
|
||||
* @param id 字典ID
|
||||
* @param data 字典表单数据
|
||||
*/
|
||||
static update(id: number, data: DictForm) {
|
||||
return request({
|
||||
url: `${DICT_BASE_URL}/${id}`,
|
||||
method: "put",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除字典
|
||||
*
|
||||
* @param ids 字典ID,多个以英文逗号(,)分隔
|
||||
*/
|
||||
static deleteByIds(ids: string) {
|
||||
return request({
|
||||
url: `${DICT_BASE_URL}/${ids}`,
|
||||
method: "delete",
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取字典列表
|
||||
*
|
||||
* @returns 字典列表
|
||||
*/
|
||||
static getList() {
|
||||
return request<any, OptionType[]>({
|
||||
url: `${DICT_BASE_URL}/list`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取字典的数据项
|
||||
*
|
||||
* @param typeCode 字典编码
|
||||
* @returns 字典数据项
|
||||
*/
|
||||
static getOptions(code: string) {
|
||||
return request<any, OptionType[]>({
|
||||
url: `${DICT_BASE_URL}/${code}/options`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default DictAPI;
|
||||
|
||||
/**
|
||||
* 字典查询参数
|
||||
*/
|
||||
export interface DictPageQuery extends PageQuery {
|
||||
/**
|
||||
* 关键字(字典名称/编码)
|
||||
*/
|
||||
keywords?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* 字典分页对象
|
||||
*/
|
||||
export interface DictPageVO {
|
||||
/**
|
||||
* 字典ID
|
||||
*/
|
||||
id: number;
|
||||
/**
|
||||
* 字典名称
|
||||
*/
|
||||
name: string;
|
||||
/**
|
||||
* 字典编码
|
||||
*/
|
||||
code: string;
|
||||
/**
|
||||
* 字典状态(1-启用,0-禁用)
|
||||
*/
|
||||
status: number;
|
||||
/**
|
||||
* 字典项列表
|
||||
*/
|
||||
dictItems: DictItem[];
|
||||
}
|
||||
|
||||
/**
|
||||
* 字典项
|
||||
*/
|
||||
export interface DictItem {
|
||||
/**
|
||||
* 字典项ID
|
||||
*/
|
||||
id?: number;
|
||||
/**
|
||||
* 字典项名称
|
||||
*/
|
||||
name?: string;
|
||||
/**
|
||||
* 字典项值
|
||||
*/
|
||||
value?: string;
|
||||
/**
|
||||
* 排序
|
||||
*/
|
||||
sort?: number;
|
||||
/**
|
||||
* 状态(1-启用,0-禁用)
|
||||
*/
|
||||
status?: number;
|
||||
}
|
||||
|
||||
// TypeScript 类型声明
|
||||
|
||||
/**
|
||||
* 字典
|
||||
*/
|
||||
export interface DictForm {
|
||||
/**
|
||||
* 字典ID
|
||||
*/
|
||||
id?: number;
|
||||
/**
|
||||
* 字典名称
|
||||
*/
|
||||
name?: string;
|
||||
/**
|
||||
* 字典编码
|
||||
*/
|
||||
code?: string;
|
||||
/**
|
||||
* 字典状态(1-启用,0-禁用)
|
||||
*/
|
||||
status?: number;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
remark?: string;
|
||||
/**
|
||||
* 字典数据项列表
|
||||
*/
|
||||
dictItems?: DictItem[];
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
class FileAPI {
|
||||
/**
|
||||
* 文件上传地址
|
||||
*/
|
||||
static uploadUrl = import.meta.env.VITE_APP_BASE_API + "/api/v1/files";
|
||||
|
||||
/**
|
||||
* 上传文件
|
||||
*
|
||||
* @param file
|
||||
*/
|
||||
static upload(file: File, type: string) {
|
||||
const formData = new FormData();
|
||||
formData.append("file", file);
|
||||
formData.append("type", type);
|
||||
return request<any, FileInfo>({
|
||||
url: "/api/v1/files",
|
||||
method: "post",
|
||||
timeout: 300000,
|
||||
data: formData,
|
||||
headers: {
|
||||
"Content-Type": "multipart/form-data",
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除文件
|
||||
*
|
||||
* @param filePath 文件完整路径
|
||||
*/
|
||||
static deleteByPath(filePath?: string) {
|
||||
return request({
|
||||
url: "/api/v1/files",
|
||||
method: "delete",
|
||||
params: { filePath: filePath },
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载文件
|
||||
* @param url
|
||||
* @param fileName
|
||||
*/
|
||||
static downloadFile(url: string, fileName?: string) {
|
||||
return request({
|
||||
url: url,
|
||||
method: "get",
|
||||
responseType: "blob",
|
||||
}).then((res) => {
|
||||
const blob = new Blob([res.data]);
|
||||
const a = document.createElement("a");
|
||||
const url = window.URL.createObjectURL(blob);
|
||||
a.href = url;
|
||||
a.download = fileName || "下载文件";
|
||||
a.click();
|
||||
window.URL.revokeObjectURL(url);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default FileAPI;
|
||||
|
||||
/**
|
||||
* 文件API类型声明
|
||||
*/
|
||||
export interface FileInfo {
|
||||
/** 文件名 */
|
||||
name: string;
|
||||
/** 文件路径 */
|
||||
url: string;
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
import request from "@/utils/request";
|
||||
import { ColoredType } from "@/enums/SoftwareEnum";
|
||||
|
||||
const HELPER_BASE_URL = "/api/v1/helper";
|
||||
|
||||
class HelpAPI {
|
||||
static listQnA(id: number) {
|
||||
return request<any, HelpQnA[]>({
|
||||
url: `${HELPER_BASE_URL}/listQnA/${id}`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
static getPage(queryParams: QnAPageQuery) {
|
||||
return request<any, PageResult<FullQnA[]>>({
|
||||
url: `${HELPER_BASE_URL}/pageQnA`,
|
||||
method: "get",
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
static setByIds(ids: string, state: number) {
|
||||
return request({
|
||||
url: `${HELPER_BASE_URL}/setQnAByIds/${ids}`,
|
||||
method: "put",
|
||||
params: { state: state },
|
||||
});
|
||||
}
|
||||
|
||||
static saveOrUpdate(data: UpdateQnA) {
|
||||
return request({
|
||||
url: `${HELPER_BASE_URL}/updateQnA`,
|
||||
method: "put",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default HelpAPI;
|
||||
|
||||
export interface QnAPageQuery extends PageQuery {
|
||||
userId?: number;
|
||||
state?: number;
|
||||
typeIds?: string;
|
||||
}
|
||||
|
||||
/** 问题简要信息 */
|
||||
export interface HelpQnA {
|
||||
/** ID */
|
||||
helpId: number;
|
||||
question: string;
|
||||
answer: string;
|
||||
}
|
||||
|
||||
// export interface QnAType {
|
||||
// color: string;
|
||||
// value: string;
|
||||
// label: string;
|
||||
// }
|
||||
|
||||
/** 问题简要信息 */
|
||||
export interface FullQnA {
|
||||
/** ID */
|
||||
helpId?: number;
|
||||
question?: string;
|
||||
answer?: string;
|
||||
helpTypeId?: string; //提问类型
|
||||
types?: ColoredType[];
|
||||
submitVersinos?: string; //提交问题的软件版本
|
||||
userId?: number; //提问用户
|
||||
userName?: string;
|
||||
nickname?: string;
|
||||
state?: number; //编辑状态
|
||||
editTime?: number; //提交时间
|
||||
answerTime?: number; //处理时间
|
||||
}
|
||||
|
||||
/** 问题简要信息 */
|
||||
export interface UpdateQnA {
|
||||
/** ID */
|
||||
helpId?: number;
|
||||
question?: string;
|
||||
answer?: string;
|
||||
helpTypeId?: string;
|
||||
state?: number;
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
const INTEGRAL_BASE_URL = "/api/v1/integral";
|
||||
|
||||
class IntegralAPI {
|
||||
static listAdmin(query: IntegralPageQuery) {
|
||||
return request<any, PageResult<IntegralPageAdminVO[]>>({
|
||||
url: `${INTEGRAL_BASE_URL}/pageAdmin`,
|
||||
method: "get",
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
|
||||
static listUser(query: IntegralPageQuery) {
|
||||
return request<any, PageResult<IntegralPageUserVO[]>>({
|
||||
url: `${INTEGRAL_BASE_URL}/pageUser`,
|
||||
method: "get",
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default IntegralAPI;
|
||||
|
||||
export interface IntegralPageAdminVO {
|
||||
detailsId: number;
|
||||
userId: number;
|
||||
userName: string;
|
||||
nickName?: string;
|
||||
title: string;
|
||||
score: number;
|
||||
balance: number;
|
||||
//类型规则编号(-1:订制音乐服务;-2:退订音乐服务;-3:音乐服务收入;-4:保存音频;-5:保存midi;-6:积分发放;-7:购买VIP;;-8:提现;-9:推荐音乐;-10:风格收入;-11:购买CPJ;-12:出售CPJ;-13:购买金曲票数;-14:领奖;-15:论坛金钱兑换)
|
||||
ruleid: number;
|
||||
ruletype: number;
|
||||
addtime: number;
|
||||
comment: string;
|
||||
}
|
||||
|
||||
export interface IntegralPageUserVO {
|
||||
detailsId: number;
|
||||
title: string;
|
||||
score: number;
|
||||
balance: number;
|
||||
ruleid: number;
|
||||
ruletype: number;
|
||||
addtime: number;
|
||||
comment: string;
|
||||
}
|
||||
|
||||
export interface IntegralPageQuery extends PageQuery {
|
||||
userId?: number;
|
||||
ruletype?: number;
|
||||
/** 添加时间 */
|
||||
addtime?: [number, number];
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
const LOG_BASE_URL = "/api/v1/logs";
|
||||
|
||||
class LogAPI {
|
||||
/**
|
||||
* 获取日志分页列表
|
||||
*
|
||||
* @param queryParams 查询参数
|
||||
*/
|
||||
static getPage(queryParams: LogPageQuery) {
|
||||
return request<any, PageResult<LogPageVO[]>>({
|
||||
url: `${LOG_BASE_URL}/page`,
|
||||
method: "get",
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取访问趋势
|
||||
*
|
||||
* @param queryParams
|
||||
* @returns
|
||||
*/
|
||||
static getVisitTrend(queryParams: VisitTrendQuery) {
|
||||
return request<any, VisitTrendVO>({
|
||||
url: `${LOG_BASE_URL}/visit-trend`,
|
||||
method: "get",
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取访问趋势
|
||||
*
|
||||
* @param queryParams
|
||||
* @returns
|
||||
*/
|
||||
static 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];
|
||||
}
|
||||
|
||||
/**
|
||||
* 系统日志分页VO
|
||||
*/
|
||||
export interface LogPageVO {
|
||||
/** 主键 */
|
||||
id: number;
|
||||
/** 日志模块 */
|
||||
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 {
|
||||
/** 标题 */
|
||||
title: string;
|
||||
/** 类型 */
|
||||
type: "pv" | "uv" | "ip";
|
||||
|
||||
/** 今日访问量 */
|
||||
todayCount: number;
|
||||
/** 总访问量 */
|
||||
totalCount: number;
|
||||
/** 同比增长率(相对于昨天同一时间段的增长率) */
|
||||
growthRate: number;
|
||||
|
||||
totalCountOutput: number;
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
import request from "@/utils/request";
|
||||
// 菜单基础URL
|
||||
const MENU_BASE_URL = "/api/v1/menus";
|
||||
|
||||
class MenuAPI {
|
||||
/**
|
||||
* 获取当前用户的路由列表
|
||||
* <p/>
|
||||
* 无需传入角色,后端解析token获取角色自行判断是否拥有路由的权限
|
||||
*
|
||||
* @returns 路由列表
|
||||
*/
|
||||
static getRoutes() {
|
||||
return request<any, RouteVO[]>({
|
||||
url: `${MENU_BASE_URL}/routes`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取菜单树形列表
|
||||
*
|
||||
* @param queryParams 查询参数
|
||||
* @returns 菜单树形列表
|
||||
*/
|
||||
static getList(queryParams: MenuQuery) {
|
||||
return request<any, MenuVO[]>({
|
||||
url: `${MENU_BASE_URL}`,
|
||||
method: "get",
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取菜单下拉数据源
|
||||
*
|
||||
* @returns 菜单下拉数据源
|
||||
*/
|
||||
static getOptions(onlyParent?: boolean) {
|
||||
return request<any, OptionType[]>({
|
||||
url: `${MENU_BASE_URL}/options`,
|
||||
method: "get",
|
||||
params: { onlyParent: onlyParent },
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取菜单表单数据
|
||||
*
|
||||
* @param id 菜单ID
|
||||
*/
|
||||
static getFormData(id: number) {
|
||||
return request<any, MenuForm>({
|
||||
url: `${MENU_BASE_URL}/${id}/form`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加菜单
|
||||
*
|
||||
* @param data 菜单表单数据
|
||||
* @returns 请求结果
|
||||
*/
|
||||
static add(data: MenuForm) {
|
||||
return request({
|
||||
url: `${MENU_BASE_URL}`,
|
||||
method: "post",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改菜单
|
||||
*
|
||||
* @param id 菜单ID
|
||||
* @param data 菜单表单数据
|
||||
* @returns 请求结果
|
||||
*/
|
||||
static update(id: string, data: MenuForm) {
|
||||
return request({
|
||||
url: `${MENU_BASE_URL}/${id}`,
|
||||
method: "put",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除菜单
|
||||
*
|
||||
* @param id 菜单ID
|
||||
* @returns 请求结果
|
||||
*/
|
||||
static deleteById(id: number) {
|
||||
return request({
|
||||
url: `${MENU_BASE_URL}/${id}`,
|
||||
method: "delete",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default MenuAPI;
|
||||
|
||||
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 */
|
||||
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;
|
||||
}
|
||||
|
||||
/** RouteVO,路由对象 */
|
||||
export interface RouteVO {
|
||||
/** 子路由列表 */
|
||||
children: RouteVO[];
|
||||
/** 组件路径 */
|
||||
component?: string;
|
||||
/** 路由属性 */
|
||||
meta?: Meta;
|
||||
/** 路由名称 */
|
||||
name?: string;
|
||||
/** 路由路径 */
|
||||
path?: string;
|
||||
/** 跳转链接 */
|
||||
redirect?: string;
|
||||
}
|
||||
|
||||
/** Meta,路由属性 */
|
||||
export interface Meta {
|
||||
/** 【目录】只有一个子路由是否始终显示 */
|
||||
alwaysShow?: boolean;
|
||||
/** 是否隐藏(true-是 false-否) */
|
||||
hidden?: boolean;
|
||||
/** ICON */
|
||||
icon?: string;
|
||||
/** 【菜单】是否开启页面缓存 */
|
||||
keepAlive?: boolean;
|
||||
/** 路由title */
|
||||
title?: string;
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
const MESSAGE_BASE_URL = "/api/v1/message";
|
||||
|
||||
class MessageAPI {
|
||||
static getPage(queryParams: MessagePageQuery) {
|
||||
return request<any, PageResult<WebMessage[]>>({
|
||||
url: `${MESSAGE_BASE_URL}/page`,
|
||||
method: "get",
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
static getLatest(userId: number) {
|
||||
return request<any, WebMessage[]>({
|
||||
url: `${MESSAGE_BASE_URL}/${userId}/latest`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
static setByIds(ids: string, state: number) {
|
||||
return request({
|
||||
url: `${MESSAGE_BASE_URL}/${ids}`,
|
||||
method: "put",
|
||||
params: { state: state },
|
||||
});
|
||||
}
|
||||
|
||||
static save(data: WebMessage) {
|
||||
return request({
|
||||
url: `${MESSAGE_BASE_URL}/save`,
|
||||
method: "put",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default MessageAPI;
|
||||
|
||||
export interface MessagePageQuery extends PageQuery {
|
||||
userId?: number;
|
||||
type: number;
|
||||
}
|
||||
|
||||
export interface WebMessage {
|
||||
msgId?: number;
|
||||
|
||||
userId?: number;
|
||||
|
||||
title?: string;
|
||||
content?: string;
|
||||
|
||||
state?: number;
|
||||
type?: number;
|
||||
|
||||
sendTime?: number;
|
||||
readTime?: number;
|
||||
deleteTime?: number;
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
const NOTICE_BASE_URL = "/api/v1/notice";
|
||||
|
||||
class NoticeAPI {
|
||||
static getPage(queryParams: NoticePageQuery) {
|
||||
return request<any, PageResult<WebNotice[]>>({
|
||||
url: `${NOTICE_BASE_URL}/page`,
|
||||
method: "get",
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
static save(data: WebNotice) {
|
||||
return request({
|
||||
url: `${NOTICE_BASE_URL}/save`,
|
||||
method: "put",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
static setByIds(ids: string, state: number) {
|
||||
return request({
|
||||
url: `${NOTICE_BASE_URL}/${ids}`,
|
||||
method: "put",
|
||||
params: { state: state },
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default NoticeAPI;
|
||||
|
||||
export interface NoticePageQuery extends PageQuery {
|
||||
state?: number;
|
||||
}
|
||||
|
||||
export interface WebNotice {
|
||||
noticeId?: number;
|
||||
|
||||
title?: string;
|
||||
content?: string;
|
||||
|
||||
state?: number;
|
||||
noticeType?: number;
|
||||
|
||||
releaseTime?: number;
|
||||
shieldTime?: number;
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
const ORDER_BASE_URL = "/api/v1/order";
|
||||
|
||||
class OrderAPI {
|
||||
static listPage(query: OrderPageQuery) {
|
||||
return request<any, PageResult<OrderPageVO[]>>({
|
||||
url: `${ORDER_BASE_URL}/page`,
|
||||
method: "get",
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default OrderAPI;
|
||||
|
||||
export interface OrderPageVO {
|
||||
orderId: number;
|
||||
userId: number;
|
||||
userName: string;
|
||||
nickName?: string;
|
||||
money: number;
|
||||
orderNumber: string;
|
||||
payway: string;
|
||||
state: number;
|
||||
paytime: number;
|
||||
endtime?: number;
|
||||
remark?: string;
|
||||
}
|
||||
|
||||
export interface OrderPageQuery extends PageQuery {
|
||||
userId?: number;
|
||||
state?: number;
|
||||
payway?: string;
|
||||
/** 添加时间 */
|
||||
paytime?: [number, number];
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
const ROLE_BASE_URL = "/api/v1/roles";
|
||||
|
||||
class RoleAPI {
|
||||
/** 获取角色分页数据 */
|
||||
static getPage(queryParams?: RolePageQuery) {
|
||||
return request<any, PageResult<RolePageVO[]>>({
|
||||
url: `${ROLE_BASE_URL}/page`,
|
||||
method: "get",
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/** 获取角色下拉数据源 */
|
||||
static getOptions() {
|
||||
return request<any, OptionType[]>({
|
||||
url: `${ROLE_BASE_URL}/options`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取角色的菜单ID集合
|
||||
*
|
||||
* @param roleId 角色ID
|
||||
* @returns 角色的菜单ID集合
|
||||
*/
|
||||
static getRoleMenuIds(roleId: number) {
|
||||
return request<any, number[]>({
|
||||
url: `${ROLE_BASE_URL}/${roleId}/menuIds`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 分配菜单权限
|
||||
*
|
||||
* @param roleId 角色ID
|
||||
* @param data 菜单ID集合
|
||||
*/
|
||||
static updateRoleMenus(roleId: number, data: number[]) {
|
||||
return request({
|
||||
url: `${ROLE_BASE_URL}/${roleId}/menus`,
|
||||
method: "put",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取角色表单数据
|
||||
*
|
||||
* @param id 角色ID
|
||||
* @returns 角色表单数据
|
||||
*/
|
||||
static getFormData(id: number) {
|
||||
return request<any, RoleForm>({
|
||||
url: `${ROLE_BASE_URL}/${id}/form`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
/** 添加角色 */
|
||||
static add(data: RoleForm) {
|
||||
return request({
|
||||
url: `${ROLE_BASE_URL}`,
|
||||
method: "post",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新角色
|
||||
*
|
||||
* @param id 角色ID
|
||||
* @param data 角色表单数据
|
||||
*/
|
||||
static update(id: number, data: RoleForm) {
|
||||
return request({
|
||||
url: `${ROLE_BASE_URL}/${id}`,
|
||||
method: "put",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除角色,多个以英文逗号(,)分割
|
||||
*
|
||||
* @param ids 角色ID字符串,多个以英文逗号(,)分割
|
||||
*/
|
||||
static 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 {
|
||||
/** 角色编码 */
|
||||
code?: string;
|
||||
/** 角色ID */
|
||||
id?: number;
|
||||
/** 角色名称 */
|
||||
name?: string;
|
||||
/** 排序 */
|
||||
sort?: number;
|
||||
/** 角色状态 */
|
||||
status?: number;
|
||||
/** 创建时间 */
|
||||
createTime?: Date;
|
||||
/** 修改时间 */
|
||||
updateTime?: Date;
|
||||
}
|
||||
|
||||
/** 角色表单对象 */
|
||||
export interface RoleForm {
|
||||
/** 角色ID */
|
||||
id?: number;
|
||||
/** 角色编码 */
|
||||
code: string;
|
||||
/** 数据权限 */
|
||||
dataScope?: number;
|
||||
/** 角色名称 */
|
||||
name: string;
|
||||
/** 排序 */
|
||||
sort?: number;
|
||||
/** 角色状态(1-正常;0-停用) */
|
||||
status?: number;
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
const SOFTWARE_BASE_URL = "/api/v1/software";
|
||||
|
||||
class SoftwareAPI {
|
||||
static listSoftware() {
|
||||
return request<any, SoftwareInfo[]>({
|
||||
url: `${SOFTWARE_BASE_URL}/list`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
static listFont() {
|
||||
return request<any, FontInfo[]>({
|
||||
url: `${SOFTWARE_BASE_URL}/listFont`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
static getVersion(id: number, os: number) {
|
||||
return request<any, VersionInfo>({
|
||||
url: `${SOFTWARE_BASE_URL}/lastVersion/${id}/${os}`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
static page(query: VersionPageQuery) {
|
||||
return request<any, PageResult<FullVersion[]>>({
|
||||
url: `${SOFTWARE_BASE_URL}/page`,
|
||||
method: "get",
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
|
||||
static update(data: FullVersion) {
|
||||
return request({
|
||||
url: `${SOFTWARE_BASE_URL}/update`,
|
||||
method: "put",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
static maxVersion(swId: number, innerId: number) {
|
||||
return request<any, VersionNum>({
|
||||
url: `${SOFTWARE_BASE_URL}/maxVersion`,
|
||||
method: "get",
|
||||
params: { softwareId: swId, innerId: innerId },
|
||||
});
|
||||
}
|
||||
|
||||
static swDownload(swId: number, os: number) {
|
||||
return request({
|
||||
url: `${SOFTWARE_BASE_URL}/swDownload`,
|
||||
method: "put",
|
||||
params: { softwareId: swId, os: os },
|
||||
});
|
||||
}
|
||||
|
||||
static setByIds(ids: string, state: number) {
|
||||
return request({
|
||||
url: `${SOFTWARE_BASE_URL}/${ids}`,
|
||||
method: "put",
|
||||
params: { state: state },
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default SoftwareAPI;
|
||||
|
||||
/** 软件信息 */
|
||||
export interface SoftwareInfo {
|
||||
/** 软件ID */
|
||||
softwareId: number;
|
||||
/** 软件名称 */
|
||||
name: string;
|
||||
/** 适用系统 */
|
||||
os: number;
|
||||
}
|
||||
|
||||
/** 版本信息 */
|
||||
export interface VersionInfo {
|
||||
softwareId: number;
|
||||
os: number;
|
||||
version: string;
|
||||
installPath: string;
|
||||
releaseDate: number;
|
||||
packageSize: number;
|
||||
describe?: string;
|
||||
pictures?: string[];
|
||||
}
|
||||
|
||||
/** 音色库信息 */
|
||||
export interface FontInfo {
|
||||
fontsId: number;
|
||||
name: string;
|
||||
path: string;
|
||||
size: number;
|
||||
describe?: string;
|
||||
}
|
||||
|
||||
export interface VersionPageQuery extends PageQuery {
|
||||
softwareId?: number;
|
||||
innerId?: number;
|
||||
incompatible?: number;
|
||||
}
|
||||
|
||||
export interface FullVersion {
|
||||
versionId?: number;
|
||||
softwareId?: number;
|
||||
innerId?: number;
|
||||
versionMajor?: number;
|
||||
versionMinor?: number;
|
||||
versionModify?: number;
|
||||
versionBuild?: number;
|
||||
incompatible?: number;
|
||||
installSize?: number;
|
||||
installPath?: string;
|
||||
releaseTime?: number;
|
||||
describeText?: string;
|
||||
accessNum?: number;
|
||||
downloadNum?: number;
|
||||
isDeleted?: number;
|
||||
}
|
||||
|
||||
export interface VersionNum {
|
||||
major: number;
|
||||
minor: number;
|
||||
modify: number;
|
||||
build: number;
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
const STATISTICS_BASE_URL = "/api/v1/statistics";
|
||||
|
||||
class StatisticsAPI {
|
||||
static page(query: StatisticsPageQuery) {
|
||||
return request<any, PageResult<StatisticsBO[]>>({
|
||||
url: `${STATISTICS_BASE_URL}/page`,
|
||||
method: "get",
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default StatisticsAPI;
|
||||
|
||||
export interface StatisticsBO {
|
||||
statisticsId?: number;
|
||||
statisticsDate?: number; //统计日期
|
||||
login?: string; //登录次数
|
||||
loginUsersum?: string; //登录人数
|
||||
register?: string; //注册人数
|
||||
mofangAccess?: string; //软件使用次数
|
||||
downloadNum?: string; //软件下载次数
|
||||
accompanyUse?: string; //风格使用次数
|
||||
accompanyConsume?: string; //风格消费额
|
||||
recharge?: string; //音符充值
|
||||
consume?: string; //音符消费
|
||||
}
|
||||
|
||||
export interface StatisticsVO {
|
||||
statisticsId?: number;
|
||||
statisticsDate?: number; //统计日期
|
||||
login?: number[]; //登录次数
|
||||
loginUsersum?: number[]; //登录人数
|
||||
register?: number[]; //注册人数
|
||||
mofangAccess?: number[]; //软件使用次数
|
||||
downloadNum?: number[]; //软件下载次数
|
||||
accompanyUse?: number[]; //风格使用次数
|
||||
accompanyConsume?: number[]; //风格消费总额
|
||||
recharge?: number[]; //音符充值
|
||||
consume?: number[]; //音符消费
|
||||
}
|
||||
|
||||
export interface StatisticsPageQuery extends PageQuery {
|
||||
/** 时间范围 */
|
||||
range?: [number, number];
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
const STYLE_BASE_URL = "/api/v1/style";
|
||||
|
||||
class StyleAPI {
|
||||
static statistic() {
|
||||
return request<any, StyleStatistic>({
|
||||
url: `${STYLE_BASE_URL}/statistic`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
static page(query: StylePageQuery) {
|
||||
return request<any, PageResult<StyleVO[]>>({
|
||||
url: `${STYLE_BASE_URL}/page`,
|
||||
method: "get",
|
||||
params: query,
|
||||
});
|
||||
}
|
||||
|
||||
static update(data: StyleUpdate) {
|
||||
return request({
|
||||
url: `${STYLE_BASE_URL}/update`,
|
||||
method: "put",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default StyleAPI;
|
||||
|
||||
export interface StyleStatistic {
|
||||
ts0: number;
|
||||
ts1: number;
|
||||
ts2: number;
|
||||
ts3: number;
|
||||
temp: number;
|
||||
}
|
||||
|
||||
export interface StyleVO {
|
||||
accompanyId: number;
|
||||
|
||||
cost: number; //使用价格
|
||||
score: number; //评分
|
||||
state: number; //状态
|
||||
name: string; //风格名称
|
||||
description?: string; //风格描述
|
||||
author: number; //作者ID
|
||||
authorName?: string; //作者昵称
|
||||
timesignature: number; //节拍(0:4/4;1:3/4;2:2/4;3:6/8)
|
||||
tempo: number; //速度
|
||||
changeTime: number; //编辑时间
|
||||
scoreTime: number; //评分时间
|
||||
useCount: number; //使用次数
|
||||
sellCount: number; //购买次数
|
||||
}
|
||||
|
||||
export interface StylePageQuery extends PageQuery {
|
||||
author?: number;
|
||||
ts?: number;
|
||||
state?: number;
|
||||
}
|
||||
|
||||
export interface StyleUpdate {
|
||||
accompanyId?: number;
|
||||
cost?: number; //使用价格
|
||||
state?: number; //状态
|
||||
}
|
||||
@@ -0,0 +1,612 @@
|
||||
import request from "@/utils/request";
|
||||
import { SendCodeData } from "./auth";
|
||||
|
||||
const USER_BASE_URL = "/api/v1/users";
|
||||
|
||||
class UserAPI {
|
||||
/**
|
||||
* 获取当前登录用户信息
|
||||
*
|
||||
* @returns 登录用户昵称、头像信息,包括角色和权限
|
||||
*/
|
||||
static getInfo() {
|
||||
return request<any, UserInfo>({
|
||||
url: `${USER_BASE_URL}/me`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户分页列表
|
||||
*
|
||||
* @param queryParams 查询参数
|
||||
*/
|
||||
static getPage(queryParams: UserPageQuery) {
|
||||
return request<any, PageResult<UserPageVO[]>>({
|
||||
url: `${USER_BASE_URL}/page`,
|
||||
method: "get",
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户表单详情
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @returns 用户表单详情
|
||||
*/
|
||||
static getFormData(userId: number) {
|
||||
return request<any, UserForm>({
|
||||
url: `${USER_BASE_URL}/${userId}/form`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加用户
|
||||
*
|
||||
* @param data 用户表单数据
|
||||
*/
|
||||
static add(data: UserForm) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}`,
|
||||
method: "post",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改用户
|
||||
*
|
||||
* @param id 用户ID
|
||||
* @param data 用户表单数据
|
||||
*/
|
||||
static update(id: number, data: UserForm) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/${id}`,
|
||||
method: "put",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
// /**
|
||||
// * 修改用户密码
|
||||
// *
|
||||
// * @param id 用户ID
|
||||
// * @param password 新密码
|
||||
// */
|
||||
// static resetPassword(id: number, password: string) {
|
||||
// return request({
|
||||
// url: `${USER_BASE_URL}/${id}/password/reset`,
|
||||
// method: "put",
|
||||
// params: { password: password },
|
||||
// });
|
||||
// }
|
||||
|
||||
/**
|
||||
* 批量删除用户,多个以英文逗号(,)分割
|
||||
*
|
||||
* @param ids 用户ID字符串,多个以英文逗号(,)分割
|
||||
*/
|
||||
static deleteByIds(ids: string) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/${ids}`,
|
||||
method: "delete",
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量修改用户状态,多个以英文逗号(,)分割
|
||||
*
|
||||
* @param ids 用户ID字符串,多个以英文逗号(,)分割
|
||||
*/
|
||||
static setStateByIds(ids: string, state: number) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/${ids}/${state}`,
|
||||
method: "patch",
|
||||
});
|
||||
}
|
||||
|
||||
/** 下载用户导入模板 */
|
||||
static downloadTemplate() {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/template`,
|
||||
method: "get",
|
||||
responseType: "arraybuffer",
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出用户
|
||||
*
|
||||
* @param queryParams 查询参数
|
||||
*/
|
||||
static export(queryParams: UserPageQuery) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/export`,
|
||||
method: "get",
|
||||
params: queryParams,
|
||||
responseType: "arraybuffer",
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入用户
|
||||
*
|
||||
* @param deptId 部门ID
|
||||
* @param file 导入文件
|
||||
*/
|
||||
static import(deptId: number, file: File) {
|
||||
const formData = new FormData();
|
||||
formData.append("file", file);
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/import`,
|
||||
method: "post",
|
||||
params: { deptId: deptId },
|
||||
data: formData,
|
||||
headers: {
|
||||
"Content-Type": "multipart/form-data",
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/** 获取个人中心用户信息 */
|
||||
static getProfile() {
|
||||
return request<any, UserProfileVO>({
|
||||
url: `${USER_BASE_URL}/profile`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
/** 修改个人中心用户信息 */
|
||||
static updateProfile(data: UserProfileForm) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/profile`,
|
||||
method: "put",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/** 修改个人中心用户密码 */
|
||||
static changePassword(data: PasswordChangeForm) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/password`,
|
||||
method: "put",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送手机/邮箱验证码
|
||||
*
|
||||
* @param contact 联系方式 手机号/邮箱
|
||||
*/
|
||||
static sendBindCode(data: SendCodeData) {
|
||||
const formData = new FormData();
|
||||
formData.append("contact", data.contact);
|
||||
formData.append("captchaKey", data.captchaKey);
|
||||
formData.append("captchaCode", data.captchaCode);
|
||||
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/sendBindCode`,
|
||||
method: "post",
|
||||
data: formData,
|
||||
headers: {
|
||||
"Content-Type": "multipart/form-data",
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/** 绑定个人中心用户手机 */
|
||||
static bindMobile(data: MobileBindingForm) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/mobile`,
|
||||
method: "put",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/** 绑定个人中心用户邮箱 */
|
||||
static bindEmail(data: EmailBindingForm) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/email`,
|
||||
method: "put",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/** 获取账户信息 */
|
||||
static getAccountInfo() {
|
||||
return request<any, AccountInfo>({
|
||||
url: `${USER_BASE_URL}/account`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改用户昵称
|
||||
*
|
||||
* @param id 用户ID
|
||||
* @param nickname 用户昵称
|
||||
*/
|
||||
static updateNickname(id: number, nickname: string) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/${id}/nickname`,
|
||||
method: "patch",
|
||||
params: { nickname: nickname },
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改用户手机
|
||||
*
|
||||
* @param id 用户ID
|
||||
* @param phone 用户手机号
|
||||
*/
|
||||
static updatePhone(id: number, phone: string) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/${id}/phone`,
|
||||
method: "patch",
|
||||
params: { phone: phone },
|
||||
});
|
||||
}
|
||||
|
||||
/** 修改个人中心用户密码 */
|
||||
static resetPassword(data: ResetPasswordForm) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/resetPassword`,
|
||||
method: "post",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
/** 获取用户实名认证信息 */
|
||||
static getRealNameInfo() {
|
||||
return request<any, RealNameInfo>({
|
||||
url: `${USER_BASE_URL}/realname`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
/** 更新用户实名认证信息 */
|
||||
static updateRealNameInfo(data: RealNameInfo) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/realname`,
|
||||
method: "put",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
static getRealNamePage(queryParams: PageQuery) {
|
||||
return request<any, PageResult<RealNameInfo[]>>({
|
||||
url: `${USER_BASE_URL}/realname/page`,
|
||||
method: "get",
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
static verifyRealName(userId: number, reason: string) {
|
||||
return request({
|
||||
url: `${USER_BASE_URL}/${userId}/realname`,
|
||||
method: "post",
|
||||
params: { reason: reason },
|
||||
});
|
||||
}
|
||||
|
||||
static beingVIP(vipType: number) {
|
||||
return request<any, number>({
|
||||
url: `${USER_BASE_URL}/vip`,
|
||||
method: "post",
|
||||
params: { vipType: vipType },
|
||||
});
|
||||
}
|
||||
|
||||
static buyNotes(payType: string, amount: string) {
|
||||
return request<any, { order: string; resp: string }>({
|
||||
url: `${USER_BASE_URL}/buyNotes`,
|
||||
method: "post",
|
||||
params: { payType: payType, amount: amount },
|
||||
});
|
||||
}
|
||||
|
||||
static checkOrder(order: string) {
|
||||
return request<any, number>({
|
||||
url: `${USER_BASE_URL}/checkOrder`,
|
||||
method: "get",
|
||||
params: { order: order },
|
||||
});
|
||||
}
|
||||
|
||||
static draw(data: DrawForm) {
|
||||
return request<any, string>({
|
||||
url: `${USER_BASE_URL}/draw`,
|
||||
method: "post",
|
||||
data: data,
|
||||
});
|
||||
}
|
||||
|
||||
static drawPage(queryParams: PageQuery) {
|
||||
return request<any, PageResult<DrawPageVO[]>>({
|
||||
url: `${USER_BASE_URL}/draw/page`,
|
||||
method: "get",
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
|
||||
static verifyDraw(orderId: number, reason: string) {
|
||||
return request<any, number>({
|
||||
url: `${USER_BASE_URL}/draw`,
|
||||
method: "put",
|
||||
params: { orderId: orderId, reason: reason },
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default UserAPI;
|
||||
|
||||
/** 登录用户信息 */
|
||||
export interface UserInfo {
|
||||
/** 用户ID */
|
||||
userId?: number;
|
||||
|
||||
/** 用户名 */
|
||||
username?: string;
|
||||
|
||||
/** 昵称 */
|
||||
nickname?: string;
|
||||
|
||||
/** 头像URL */
|
||||
avatar?: string;
|
||||
|
||||
/** 角色 */
|
||||
roles: string[];
|
||||
|
||||
/** 权限 */
|
||||
perms: string[];
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户分页查询对象
|
||||
*/
|
||||
export interface UserPageQuery extends PageQuery {
|
||||
/** 搜索关键字 */
|
||||
keywords?: string;
|
||||
|
||||
/** 用户状态 */
|
||||
status?: number;
|
||||
|
||||
/** 部门ID */
|
||||
// deptId?: number;
|
||||
|
||||
/** 注册时间 */
|
||||
regTime?: [number, number];
|
||||
}
|
||||
|
||||
/** 用户分页对象 */
|
||||
export interface UserPageVO {
|
||||
/** 用户头像URL */
|
||||
avatar?: string;
|
||||
/** 创建时间 */
|
||||
regTime?: number;
|
||||
/** 部门名称 */
|
||||
// deptName?: string;
|
||||
/** 用户邮箱 */
|
||||
email?: string;
|
||||
/** 性别 */
|
||||
genderLabel?: string;
|
||||
/** 用户ID */
|
||||
id?: number;
|
||||
/** 手机号 */
|
||||
mobile?: string;
|
||||
/** 用户昵称 */
|
||||
nickname?: string;
|
||||
/** 角色名称,多个使用英文逗号(,)分割 */
|
||||
// roleNames?: string;
|
||||
/** 用户状态(1:启用;0:禁用) */
|
||||
status?: number;
|
||||
/** 用户名 */
|
||||
username?: string;
|
||||
|
||||
name?: string;
|
||||
isName?: number;
|
||||
isPhone?: number;
|
||||
loginTime?: number;
|
||||
loginNum?: number;
|
||||
deleteTime?: number;
|
||||
vipTime?: number;
|
||||
integral?: number;
|
||||
authority?: number;
|
||||
}
|
||||
|
||||
/** 用户表单类型 */
|
||||
export interface UserForm {
|
||||
/** 用户头像 */
|
||||
avatar?: string;
|
||||
/** 部门ID */
|
||||
// deptId?: number;
|
||||
/** 邮箱 */
|
||||
email?: string;
|
||||
/** 性别 */
|
||||
gender?: number;
|
||||
/** 用户ID */
|
||||
id?: number;
|
||||
/** 手机号 */
|
||||
mobile?: string;
|
||||
/** 昵称 */
|
||||
nickname?: string;
|
||||
/** 角色ID集合 */
|
||||
roleIds?: number[];
|
||||
/** 用户状态(1:正常;0:禁用) */
|
||||
status?: number;
|
||||
/** 用户名 */
|
||||
username?: string;
|
||||
}
|
||||
|
||||
/** 个人中心用户信息 */
|
||||
export interface UserProfileVO {
|
||||
/** 用户ID */
|
||||
id?: number;
|
||||
|
||||
/** 用户名 */
|
||||
username?: string;
|
||||
|
||||
/** 昵称 */
|
||||
nickname?: string;
|
||||
|
||||
/** 头像URL */
|
||||
avatar?: string;
|
||||
|
||||
/** 性别 */
|
||||
gender?: number;
|
||||
|
||||
/** 手机号 */
|
||||
mobile?: string;
|
||||
|
||||
/** 邮箱 */
|
||||
email?: string;
|
||||
|
||||
// /** 部门名称 */
|
||||
// deptName?: string;
|
||||
|
||||
/** 角色名称,多个使用英文逗号(,)分割 */
|
||||
roleNames?: string;
|
||||
|
||||
/** 创建时间 */
|
||||
createTime?: Date;
|
||||
}
|
||||
|
||||
/** 个人中心用户信息表单 */
|
||||
export interface UserProfileForm {
|
||||
/** 用户ID */
|
||||
id?: number;
|
||||
|
||||
/** 用户名 */
|
||||
username?: string;
|
||||
|
||||
/** 昵称 */
|
||||
nickname?: string;
|
||||
|
||||
/** 头像URL */
|
||||
avatar?: string;
|
||||
|
||||
/** 性别 */
|
||||
gender?: number;
|
||||
|
||||
/** 手机号 */
|
||||
mobile?: string;
|
||||
|
||||
/** 邮箱 */
|
||||
email?: string;
|
||||
}
|
||||
|
||||
/** 修改密码表单 */
|
||||
export interface PasswordChangeForm {
|
||||
/** 原密码 */
|
||||
oldPassword?: string;
|
||||
/** 新密码 */
|
||||
newPassword?: string;
|
||||
/** 确认新密码 */
|
||||
confirmPassword?: string;
|
||||
}
|
||||
|
||||
/** 重置密码表单 */
|
||||
export interface ResetPasswordForm {
|
||||
/** 用户ID */
|
||||
userId?: number;
|
||||
/** 用户名 */
|
||||
username?: string;
|
||||
/** 手机或邮箱 */
|
||||
contact?: string;
|
||||
/** 验证码 */
|
||||
verifyCode?: string;
|
||||
/** 密码 */
|
||||
password?: string;
|
||||
}
|
||||
|
||||
/** 修改手机表单 */
|
||||
export interface MobileBindingForm {
|
||||
/** 手机号 */
|
||||
mobile?: string;
|
||||
/** 验证码 */
|
||||
code?: string;
|
||||
}
|
||||
|
||||
/** 修改邮箱表单 */
|
||||
export interface EmailBindingForm {
|
||||
/** 邮箱 */
|
||||
email?: string;
|
||||
/** 验证码 */
|
||||
code?: string;
|
||||
}
|
||||
|
||||
/** 账户信息 */
|
||||
export interface AccountInfo {
|
||||
/** 用户ID */
|
||||
userId?: number;
|
||||
/** 账户状态(0:注销;1:锁定;2:已激活;3:未激活;4:在线;5:旧版用户) */
|
||||
state?: number;
|
||||
|
||||
/** 真实名称 */
|
||||
name?: string;
|
||||
/** 是否实名认证(1:是;2:不是;3:正在认证) */
|
||||
isName?: number;
|
||||
|
||||
/** 手机号 */
|
||||
phone?: string;
|
||||
/** 是否手机认证(1:是;2:不是) */
|
||||
isPhone?: number;
|
||||
|
||||
/** 邮箱 */
|
||||
email?: string;
|
||||
/** 邮箱激活时间 */
|
||||
// activateTime?: number;
|
||||
|
||||
/** 唱作音符数 */
|
||||
integral?: number;
|
||||
|
||||
/** VIP过期时间(-1:终身, -2: 已过期, 0: 非会员) */
|
||||
vipTime?: number;
|
||||
/** VIP状态 */
|
||||
// vipState?: number;
|
||||
|
||||
/** 注册时间 */
|
||||
regTime?: number;
|
||||
}
|
||||
|
||||
export interface RealNameInfo {
|
||||
/** 用户ID */
|
||||
userId?: number;
|
||||
|
||||
/** 真实名称 */
|
||||
name?: string;
|
||||
isName?: number;
|
||||
|
||||
identityType?: number; //证件类型
|
||||
identityCard?: string; //证件号
|
||||
identityPic?: string; //证件照片
|
||||
address?: string; //联系地址
|
||||
}
|
||||
|
||||
export interface RealNameInfoPageQuery extends PageQuery {
|
||||
isName?: number;
|
||||
}
|
||||
|
||||
export interface DrawForm {
|
||||
amount: number;
|
||||
cardNum: string;
|
||||
bankName: string;
|
||||
cardName?: string;
|
||||
}
|
||||
|
||||
export interface DrawPageVO {
|
||||
orderId: number;
|
||||
userId: number;
|
||||
userName: string;
|
||||
money: string;
|
||||
bankName: string;
|
||||
cardNum: string;
|
||||
cardName?: string;
|
||||
takeTime: number;
|
||||
makeTime?: number;
|
||||
state: number;
|
||||
}
|
||||
@@ -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="1733401634463" class="icon" viewBox="0 0 2902 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2432" xmlns:xlink="http://www.w3.org/1999/xlink" width="566.796875" height="200"><path d="M351.318 553.48c-24.058 2.379-69.213 13.007-93.905 34.774-74.024 64.33-29.733 181.992 120.042 181.992 87.048 0 174.061-55.518 242.393-144.364-97.183-47.304-179.561-81.161-268.53-72.402zM909.985 634.782c138.636 46.3 170.078 48.786 170.078 48.786v-497.775c0-84.951-68.965-153.793-154.163-153.793h-654.354c-85.214 0-154.215 68.843-154.215 153.793v652.432c0 84.916 69 153.775 154.216 153.775h654.352c85.198 0 154.163-68.843 154.163-153.775v-6.293s-250.412-104.091-376.869-164.72c-84.792 104.021-194.206 167.188-307.78 167.188-192.091 0-257.32-167.611-166.377-277.959 19.846-24.022 53.579-47.004 105.942-59.888 81.885-20.058 212.255 12.531 334.412 52.733 21.96-40.378 40.448-84.81 54.231-132.15h-376.499v-38.034h194.119v-68.154h-235.114v-38.052h235.114v-97.237s0-16.39 16.656-16.39h94.873v113.626h232.47v38.052h-232.47v68.154h189.766c-18.154 74.166-45.754 142.443-80.351 202.385 57.579 20.762 109.291 40.448 147.801 53.297zM2450.384 182.498h275.598v54.548h98.416v-64.63c-0.035-0.159-0.035-0.212-0.035-0.388 0-14.522-11.386-26.278-25.485-26.525h-159.292v-50.865h-102.998v50.865h-184.619v91.543h98.416v-54.549zM1854.141 99.344l-100.918 238.656h77.408v284.004h84.652v-376.71h-30.649l63.766-145.95h-94.256zM2835.696 608.962l-30.931-104.443c-2.027-6.663-8.091-11.492-15.246-11.51h-81.938l23.74 80.228h-96.337v-155.381h189.202v-37.012h-189.202v-73.125h189.202v-36.994h-472.219v36.994h189.184v73.125h-189.184v37.012h189.184v155.38h-189.184v37.012h483.727l-0.388-1.269h0.388v-0.018zM2070.625 294.978c-3.225-6.556-9.8-11.086-17.413-11.138h-73.284l57.069 179.771h86.713l-53.085-168.633zM2256.143 103.679h-87.982v91.931h-216.836v36.994h216.836v330.481c-0.757 7.543-6.715 13.465-14.205 13.852h-44.696v38.299h114.014c18.030-0.758 32.482-15.739 32.87-34.28v-348.353h35.725v-36.994h-35.725v-91.931zM1707.186 271.15h-169.003v-60.559h195.952v-37.717h-195.952v-76.738l-87.366 0.018c-9.57 0-17.307 8.002-17.307 17.906v58.814h-194.577v37.717h194.577v60.559h-164.227v37.699h327.114s-18.118 70.763-107.845 146.831c-80.386-60.858-107.264-109.326-107.264-109.326h-87.753c35.496 61.528 85.956 110.807 140.274 149.898-49.895 32.43-114.613 63.697-198.295 88.687v45.172s129.101-24.357 253.866-97.87c124.959 72.932 250.465 97.87 250.465 97.87v-42.758c-80.316-29.24-143.959-61.387-193.943-92.423 72.42-53.597 135.851-126.405 161.284-223.781zM1429.826 874.249l14.611 44.115h40.959l-80.668-219.040h-31.319l-80.369 219.040h40.978l15.245-44.115h80.563zM1390.206 755.776l30.297 90.837h-61.688l31.39-90.837zM1614.639 699.324v219.040h132.608v-29.822h-93.217v-189.217h-39.391zM1891.769 699.324h39.427v219.023h-39.427v-219.023zM2176.038 699.324h-85.127v219.040h39.391v-84.193h45.737c42.475 0 72.155-27.724 72.155-67.415s-29.679-67.432-72.155-67.432zM2173.835 804.068h-43.533v-74.94h43.534c21.854 0 34.914 19.122 34.914 37.628 0 18.083-12.232 37.312-34.914 37.312zM2479.554 874.249l14.611 44.115h40.959l-80.686-219.040h-31.301l-80.367 219.040h40.995l15.21-44.115h80.58zM2439.933 755.776l30.297 90.837h-61.687l31.39-90.837zM2754.586 699.324l-42.985 93.323-43.622-93.323h-42.581l66.322 129.066v89.975h39.11v-89.974l0.247-0.494 66.093-128.572h-42.581z" fill="#25ABEE" p-id="2433"></path></svg>
|
||||
|
After Width: | Height: | Size: 3.4 KiB |
@@ -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="1733401743401" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2575" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M1024.0512 701.0304V196.864A196.9664 196.9664 0 0 0 827.136 0H196.864A196.9664 196.9664 0 0 0 0 196.864v630.272A196.9152 196.9152 0 0 0 196.864 1024h630.272a197.12 197.12 0 0 0 193.8432-162.0992c-52.224-22.6304-278.528-120.32-396.4416-176.64-89.7024 108.6976-183.7056 173.9264-325.3248 173.9264s-236.1856-87.2448-224.8192-194.048c7.4752-70.0416 55.552-184.576 264.2944-164.9664 110.08 10.3424 160.4096 30.8736 250.1632 60.5184 23.1936-42.5984 42.496-89.4464 57.1392-139.264H248.064v-39.424h196.9152V311.1424H204.8V267.776h240.128V165.632s2.1504-15.9744 19.8144-15.9744h98.4576V267.776h256v43.4176h-256V381.952h208.8448a805.9904 805.9904 0 0 1-84.8384 212.6848c60.672 22.016 336.7936 106.3936 336.7936 106.3936zM283.5456 791.6032c-149.6576 0-173.312-94.464-165.376-133.9392 7.8336-39.3216 51.2-90.624 134.4-90.624 95.5904 0 181.248 24.4736 284.0576 74.5472-72.192 94.0032-160.9216 150.016-253.0816 150.016z" fill="#009FE8" p-id="2576"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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="1733622638025" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5515" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 0C229.688889 0 0 229.688889 0 512s229.688889 512 512 512 512-229.688889 512-512S794.311111 0 512 0z m0 970.112C259.399111 970.112 53.888 764.600889 53.888 512S259.399111 53.888 512 53.888 970.112 259.399111 970.112 512 764.600889 970.112 512 970.112z" fill="#231815" p-id="5516"></path><path d="M415.345778 644.536889l-128.924445-128.924445-38.101333 38.115556 167.025778 167.025778L775.68 360.405333l-38.101333-38.115555z" fill="#231815" p-id="5517"></path></svg>
|
||||
|
After Width: | Height: | Size: 802 B |
@@ -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="1733627092957" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4604" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 0C229.688889 0 0 229.688889 0 512s229.688889 512 512 512 512-229.688889 512-512S794.311111 0 512 0z m0 970.112C259.399111 970.112 53.888 764.600889 53.888 512S259.399111 53.888 512 53.888 970.112 259.399111 970.112 512 764.600889 970.112 512 970.112z" fill="#ffffff" p-id="4605"></path><path d="M415.345778 644.536889l-128.924445-128.924445-38.101333 38.115556 167.025778 167.025778L775.68 360.405333l-38.101333-38.115555z" fill="#ffffff" p-id="4606"></path></svg>
|
||||
|
After Width: | Height: | Size: 802 B |
@@ -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 |
@@ -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 |
@@ -0,0 +1 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M511.543 14.057C228.914 13.943 0 242.743 0 525.143 0 748.457 143.2 938.286 342.629 1008c26.857 6.743 22.742-12.343 22.742-25.371v-88.572C210.286 912.23 204 809.6 193.6 792.457c-21.029-35.886-70.743-45.028-55.886-62.171 35.315-18.172 71.315 4.571 113.029 66.171 30.171 44.686 89.028 37.143 118.857 29.714 6.514-26.857 20.457-50.857 39.657-69.485C248.571 727.886 181.6 629.829 181.6 513.257c0-56.571 18.629-108.571 55.2-150.514-23.314-69.143 2.171-128.343 5.6-137.143 66.4-5.943 135.429 47.543 140.8 51.771C420.914 267.2 464 261.83 512.229 261.83c48.457 0 91.657 5.6 129.714 15.885 12.914-9.828 76.914-55.771 138.628-50.171 3.315 8.8 28.229 66.628 6.286 134.857 37.029 42.057 55.886 94.514 55.886 151.2 0 116.8-67.429 214.971-228.572 243.314a145.714 145.714 0 0 1 43.543 104v128.572c.915 10.285 0 20.457 17.143 20.457 202.4-68.229 348.114-259.429 348.114-484.686 0-282.514-229.028-511.2-511.428-511.2z"/></svg>
|
||||
|
After Width: | Height: | Size: 1019 B |
@@ -0,0 +1 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M958.401 451.55a20.01 20.01 0 0 0-6.966-14.972L524.345 69.511c-7.499-6.446-18.581-6.446-26.08 0L309.583 231.676V129.657c0-11.05-8.902-19.533-19.952-19.533h-88.034c-11.048 0-19.928 8.482-19.928 19.533v211.954L71.176 436.578a20.003 20.003 0 0 0-6.968 15.174v105.5a20.007 20.007 0 0 0 33.052 15.172l53.298-45.826V850.7c0 60.678 49.364 110.042 110.042 110.042h504.192c60.678 0 110.043-49.364 110.043-110.042V527.026l51.586 44.336a20.001 20.001 0 0 0 21.48 2.966 20.006 20.006 0 0 0 11.566-18.343l-1.066-104.436zM221.579 150.033h48.095v115.942l-48.095 41.336V150.034zm349.14 770.692H436.665V700.642c0-11.03 8.977-20.007 20.008-20.007h94.036c11.03 0 20.007 8.976 20.007 20.007v220.084zm264.1-424.83v354.803c0 38.612-31.415 70.027-70.028 70.027H610.733V700.642c0-33.096-26.927-60.023-60.023-60.023h-94.036c-33.097 0-60.023 26.927-60.023 60.023v220.085H260.599c-38.612 0-70.027-31.415-70.027-70.027V495.895a20.07 20.07 0 0 0-.315-3.432L512.37 215.504l322.703 277.349a20.158 20.158 0 0 0-.255 3.042zM525.41 173.947c-7.502-6.446-18.587-6.447-26.086.003l-395.1 339.714v-52.727l407.081-349.87 407.177 349.952.522 51.205L525.41 173.948z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1 @@
|
||||
<svg t="1719843722868" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="226927" width="200" height="200"><path d="M276.854606 340.74413h468.523178v298.151114H276.854606z" fill="#0ee41c" p-id="226928"></path><path d="M511.116195 1.76761c-282.285215 0-511.116195 228.83098-511.116195 511.116195s228.83098 511.116195 511.116195 511.116195 511.116195-228.83098 511.116195-511.116195c0-282.263919-228.83098-511.116195-511.116195-511.116195z m276.854605 670.712227C787.9708 686.343864 759.284404 724.081276 745.420377 724.081276H575.005719v15.354782l42.593017 33.478111V787.9708H404.633654v-15.077927l42.593017-33.478111V724.081276h-170.414658C262.926689 724.081276 234.261589 686.343864 234.261589 672.479837V337.762619c0-13.864027 28.6651-39.611505 42.550424-39.611505h468.608364C759.284404 298.151114 787.9708 323.898592 787.9708 337.762619v334.717218z" fill="#0ee41c" p-id="226929"></path></svg>
|
||||
|
After Width: | Height: | Size: 937 B |
@@ -0,0 +1 @@
|
||||
<svg t="1721534999310" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2348" width="200" height="200"><path d="M558.08 472.064c48.128 53.248-13.312 103.424-13.312 103.424s119.808-61.44 65.536-139.264c-51.2-71.68-91.136-107.52 122.88-232.448 0 1.024-335.872 86.016-175.104 268.288" fill="#FF0000" p-id="2349"></path><path d="M610.304 5.12s101.376 101.376-96.256 258.048C356.352 389.12 478.208 460.8 514.048 543.744 420.864 459.776 354.304 386.048 399.36 317.44 463.872 216.064 651.264 166.912 610.304 5.12" fill="#FF0000" p-id="2350"></path><path d="M720.896 757.76c183.296-95.232 98.304-188.416 39.936-175.104-15.36 3.072-21.504 5.12-21.504 5.12s5.12-8.192 16.384-11.264c117.76-40.96 207.872 120.832-37.888 186.368-1.024 0 2.048-3.072 3.072-5.12m-337.92 38.912s-37.888 21.504 26.624 29.696c76.8 8.192 117.76 8.192 202.752-8.192 0 0 23.552 15.36 53.248 26.624-191.488 80.896-433.152-5.12-282.624-48.128m-23.552-106.496s-43.008 31.744 23.552 37.888c82.944 8.192 149.504 10.24 261.12-13.312 0 0 16.384 16.384 40.96 24.576-231.424 68.608-490.496 5.12-325.632-49.152" fill="#6699FF" p-id="2351"></path><path d="M811.008 876.544s27.648 23.552-31.744 40.96c-111.616 34.816-460.8 45.056-558.08 2.048-34.816-15.36 31.744-35.84 51.2-40.96 21.504-5.12 34.816-3.072 34.816-3.072-38.912-28.672-251.904 52.224-107.52 75.776 390.144 62.464 712.704-28.672 611.328-74.752M400.384 578.56s-178.176 43.008-63.488 56.32c49.152 6.144 146.432 5.12 235.52-3.072 73.728-6.144 147.456-19.456 147.456-19.456s-26.624 11.264-45.056 24.576c-181.248 48.128-530.432 26.624-430.08-23.552 88.064-39.936 155.648-34.816 155.648-34.816" fill="#6699FF" p-id="2352"></path><path d="M418.816 1015.808c176.128 11.264 446.464-6.144 453.632-90.112 0 0-13.312 31.744-146.432 56.32-150.528 27.648-336.896 24.576-446.464 6.144 2.048 1.024 24.576 20.48 139.264 27.648" fill="#6699FF" p-id="2353"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="m18.5 10 4.4 11h-2.155l-1.201-3h-4.09l-1.199 3h-2.154L16.5 10h2zM10 2v2h6v2h-1.968a18.221 18.221 0 0 1-3.62 6.301 14.865 14.865 0 0 0 2.335 1.707l-.75 1.878A17.016 17.016 0 0 1 9 13.725a16.677 16.677 0 0 1-6.201 3.548l-.536-1.929a14.7 14.7 0 0 0 5.327-3.042A18.078 18.078 0 0 1 4.767 8h2.24A16.031 16.031 0 0 0 9 10.877a16.165 16.165 0 0 0 2.91-4.876L2 6V4h6V2h2zm7.5 10.885L16.253 16h2.492L17.5 12.885z"/></svg>
|
||||
|
After Width: | Height: | Size: 501 B |
@@ -0,0 +1 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M374.272 440.832H127.488c-33.792 0-61.44-27.648-61.44-61.44V132.608c0-33.792 27.648-61.44 61.44-61.44h247.296c33.792 0 61.44 27.648 61.44 61.44v247.296c-.512 33.792-27.648 60.928-61.952 60.928zM127.488 132.608v247.296h247.296V132.608H127.488zM762.88 492.032c-16.384 0-31.744-6.144-43.52-17.92L544.768 299.52c-11.776-11.776-17.92-27.136-17.92-43.52s6.144-31.744 17.92-43.52L719.36 37.888c11.776-11.776 27.136-17.92 43.52-17.92s31.744 6.144 43.52 17.92L980.992 212.48c11.776 11.776 17.92 27.136 17.92 43.52s-6.144 31.744-17.92 43.52L806.4 474.112c-11.776 11.776-27.136 17.92-43.52 17.92zm0-410.624L588.288 256 762.88 430.592 937.472 256 762.88 81.408zM374.272 952.832H127.488c-33.792 0-61.44-27.648-61.44-61.44V644.096c0-33.792 27.648-61.44 61.44-61.44h247.296c33.792 0 61.44 27.648 61.44 61.44v247.296c-.512 34.304-27.648 61.44-61.952 61.44zM127.488 644.608v247.296h247.296V644.608H127.488zm758.784 308.224H638.976c-33.792 0-61.44-27.648-61.44-61.44V644.096c0-33.792 27.648-61.44 61.44-61.44h247.296c33.792 0 61.44 27.648 61.44 61.44v247.296c0 34.304-27.136 61.44-61.44 61.44zM639.488 644.608v247.296h247.296V644.608H639.488z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1 @@
|
||||
<svg t="1719845783644" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="277659" width="200" height="200"><path d="M392.297931 841.021793a130.01269 128.635586 90 1 0 257.271172 0 130.01269 128.635586 90 1 0-257.271172 0Z" fill="#FFD08D" p-id="277660"></path><path d="M456.174345 52.965517m50.458483 0l-0.035311 0q50.458483 0 50.458483 50.458483l0 59.568552q0 50.458483-50.458483 50.458482l0.035311 0q-50.458483 0-50.458483-50.458482l0-59.568552q0-50.458483 50.458483-50.458483Z" fill="#FFD293" p-id="277661"></path><path d="M520.933517 1006.344828c-90.641655 0-163.945931-74.081103-163.945931-165.323035 0-91.206621 73.304276-165.323034 163.945931-165.323034 90.606345 0 163.945931 74.116414 163.945931 165.323034 0 91.241931-73.339586 165.323034-163.945931 165.323035z m0-70.62069c51.447172 0 93.325241-42.301793 93.325242-94.702345 0-52.365241-41.878069-94.702345-93.325242-94.702345-51.482483 0-93.325241 42.337103-93.325241 94.702345 0 52.400552 41.842759 94.702345 93.325241 94.702345z" fill="#FCA100" p-id="277662"></path><path d="M506.632828 88.275862a15.148138 15.148138 0 0 0-15.148138 15.148138v59.603862a15.148138 15.148138 0 0 0 30.296276 0V103.424a15.148138 15.148138 0 0 0-15.183449-15.148138z m85.768827 15.148138v59.603862a85.768828 85.768828 0 1 1-171.537655 0V103.424a85.768828 85.768828 0 1 1 171.537655 0z" fill="#FB9C00" p-id="277663"></path><path d="M177.893517 494.344828c0-183.472552 147.173517-332.270345 328.739311-332.270345 181.530483 0 346.394483 148.797793 346.394482 332.270345v260.025379l100.034207 129.977379H77.85931l100.034207-129.977379V494.344828z" fill="#FFA300" p-id="277664"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><defs><style>@font-face{font-family:rbicon;src:url(chrome-extension://dipiagiiohfljcicegpgffpbnjmgjcnf/fonts/rbicon.woff2) format("woff2");font-weight:400;font-style:normal}</style></defs><path d="M64 64v576h832V64H64zM0 0h960v704H0V0z"/><path d="M192 896h576v64H192zm256-256h64v256h-64zm31.232-78.396 309.99-348.33-47.803-42.548-259.567 291.67-177.895-222.387L163.21 438.605l52.224 37.009 91.622-129.28z"/></svg>
|
||||
|
After Width: | Height: | Size: 525 B |
@@ -0,0 +1 @@
|
||||
<svg t="1719844718926" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="266272" width="200" height="200"><path d="M138.0173018 383.04044608h747.9653964c7.09277447 0 12.89595271-5.80317818 12.89595812-12.89595273v-64.47977419c0-28.37110348-23.21271811-51.58382158-51.58382153-51.58382161H497.81445089c-24.50231446 0-47.71503251-11.60636172-62.54538509-31.59508902l-24.50231442-33.52948343c-14.83034722-19.98873261-38.04306533-31.59508889-62.54537971-31.59509427h-145.72429566c-42.55665253 0-77.37573228 34.81907982-77.37573233 77.37573236v135.40753016c0 7.09277447 5.80317818 12.89595271 12.89595812 12.89595273zM885.9826982 415.2803386h-747.9653964c-7.09277447 0-12.89595271 5.80317818-12.89595812 12.89595272V787.97344057c0 42.55665253 34.81907982 77.37573228 77.37573233 77.37573223l619.00584798 1.28959637c42.55665253 0 77.37573228-34.81907982 77.37573233-77.37573236v-361.08674549c0-7.09277447-5.80317818-12.89595271-12.89595812-12.89595272z m-606.1098899 310.14771686c-1.28959636 1.93439451-3.22399088 3.86878903-5.8031835 5.80318347-32.88468534 20.63353074-67.05896691-13.54075089-46.4254362-46.42544153 1.28959636-1.93439451 3.22399088-3.86878903 5.80317822-5.80317821 32.88468534-20.63353074 67.70376514 14.18554911 46.42544148 46.42543627z m0-137.98671761c-1.28959636 1.93439451-3.22399088 3.86878903-5.8031835 5.80317817-32.88468534 20.63353074-67.05896691-13.54075089-46.4254362-46.4254362 1.28959636-1.93439451 3.22399088-3.86878903 5.80317822-5.80317818 32.88468534-21.27832364 67.70376514 13.54075089 46.42544148 46.42543621z m361.08674562 149.59307926h-264.36708411c-6.44797635 0-12.25115989-2.57919268-16.11994359-7.73757266-21.27832364-27.08150713-2.57919268-56.74220161 23.212718-56.74220164h264.36708417c6.44797635 0 12.25115989 2.57919268 16.11994364 7.73757283 21.27832364 27.08150713 2.57919268 56.74220161-23.21271811 56.74220147z m128.95954853-137.98671756h-393.32663264c-6.44797635 0-12.25115989-2.57919268-16.11994359-7.73757269-21.27832364-27.08150713-2.57919268-56.74220161 23.212718-56.74220692h393.32663275c6.44797635 0 12.25115989 2.57919268 16.11994354 7.7375727 21.27832364 27.08150713 2.57919268 56.74220161-23.21271806 56.74220691z" fill="#08D19F" p-id="266273"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -0,0 +1 @@
|
||||
<svg t="1719843111735" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="146261" width="200" height="200"><path d="M512 42.7C252.8 42.7 42.7 252.8 42.7 512c0 259.2 210.1 469.3 469.3 469.3S981.3 771.2 981.3 512c0-259.2-210.1-469.3-469.3-469.3z m93.3 225.9c16.1 0 29.1 13 29.1 29.1s-13.1 29.1-29.1 29.1c-16.1 0-29.1-13.1-29.1-29.1-0.1-16 13-29.1 29.1-29.1zM506.2 257c19.3 0 35 15.7 35 35s-15.7 35-35 35-35-15.7-35-35c0-19.4 15.7-35 35-35zM343 321.1c0-29 23.5-52.5 52.5-52.5s52.5 23.5 52.5 52.5-23.5 52.5-52.5 52.5c-29.1 0-52.5-23.5-52.5-52.5z m303.1 247.7c-11.7 35 11.7 81.6-11.7 128.2-23.3 46.6-58.3 69.9-93.3 69.9s-104.9 0-104.9-93.3c0-70 35-58.3 35-104.9s-23.3-23.3-58.3-81.6 0-93.3 0-93.3 58.3-58.3 174.9-23.3c116.6 35.1 69.9 163.4 58.3 198.3z m11.6-198.2c-12.9 0-23.3-10.4-23.3-23.3s10.4-23.3 23.3-23.3 23.3 10.4 23.3 23.3-10.4 23.3-23.3 23.3z" fill="#FFBD27" p-id="146262"></path></svg>
|
||||
|
After Width: | Height: | Size: 933 B |
@@ -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="1733627880032" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6703" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M426.666667 0H42.666667A42.666667 42.666667 0 0 0 0 42.666667V426.666667a42.666667 42.666667 0 0 0 42.666667 42.666666H426.666667a42.666667 42.666667 0 0 0 42.666666-42.666666V42.666667A42.666667 42.666667 0 0 0 426.666667 0z m-42.666667 384H85.333333V85.333333h298.666667v298.666667z m42.666667 170.666667H42.666667A42.666667 42.666667 0 0 0 0 597.333333v384A42.666667 42.666667 0 0 0 42.666667 1024H426.666667a42.666667 42.666667 0 0 0 42.666666-42.666667V597.333333a42.666667 42.666667 0 0 0-42.666666-42.666666zM384 938.666667H85.333333V640h298.666667V938.666667z m597.333333-938.666667H597.333333a42.666667 42.666667 0 0 0-42.666666 42.666667V426.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h384A42.666667 42.666667 0 0 0 1024 426.666667V42.666667A42.666667 42.666667 0 0 0 981.333333 0zM938.666667 384H640V85.333333H938.666667v298.666667zM170.666667 170.666667h128v128H170.666667V170.666667z m0 554.666666h128V853.333333H170.666667v-128z m725.333333-170.666666H1024V682.666667h-128v-128z m0 341.333333h-85.333333V1024H1024v-213.333333h-128v85.333333z m-341.333333 0H682.666667V1024h-128v-128z m170.666666-725.333333H853.333333v128h-128V170.666667z m-170.666666 384H682.666667V682.666667h-128v-128zM682.666667 682.666667h128v213.333333H682.666667V682.666667z" fill="#000000" p-id="6704"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -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="1733627880032" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6703" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M426.666667 0H42.666667A42.666667 42.666667 0 0 0 0 42.666667V426.666667a42.666667 42.666667 0 0 0 42.666667 42.666666H426.666667a42.666667 42.666667 0 0 0 42.666666-42.666666V42.666667A42.666667 42.666667 0 0 0 426.666667 0z m-42.666667 384H85.333333V85.333333h298.666667v298.666667z m42.666667 170.666667H42.666667A42.666667 42.666667 0 0 0 0 597.333333v384A42.666667 42.666667 0 0 0 42.666667 1024H426.666667a42.666667 42.666667 0 0 0 42.666666-42.666667V597.333333a42.666667 42.666667 0 0 0-42.666666-42.666666zM384 938.666667H85.333333V640h298.666667V938.666667z m597.333333-938.666667H597.333333a42.666667 42.666667 0 0 0-42.666666 42.666667V426.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h384A42.666667 42.666667 0 0 0 1024 426.666667V42.666667A42.666667 42.666667 0 0 0 981.333333 0zM938.666667 384H640V85.333333H938.666667v298.666667zM170.666667 170.666667h128v128H170.666667V170.666667z m0 554.666666h128V853.333333H170.666667v-128z m725.333333-170.666666H1024V682.666667h-128v-128z m0 341.333333h-85.333333V1024H1024v-213.333333h-128v85.333333z m-341.333333 0H682.666667V1024h-128v-128z m170.666666-725.333333H853.333333v128h-128V170.666667z m-170.666666 384H682.666667V682.666667h-128v-128zM682.666667 682.666667h128v213.333333H682.666667V682.666667z" fill="#ffffff" p-id="6704"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" width="1em" height="1em" viewBox="0 0 512 512"><path d="m400 148-21.12-24.57A191.43 191.43 0 0 0 240 64C134 64 48 150 48 256s86 192 192 192a192.09 192.09 0 0 0 181.07-128" fill="none" stroke="currentColor" stroke-linecap="square" stroke-miterlimit="10" stroke-width="32"/><path d="M464 68.45V220a4 4 0 0 1-4 4H308.45a4 4 0 0 1-2.83-6.83L457.17 65.62a4 4 0 0 1 6.83 2.83z" fill="currentColor"/></svg>
|
||||
|
After Width: | Height: | Size: 458 B |
@@ -0,0 +1 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="256" height="256"><path d="M79.238 961.896v-25.442c0-109.28 28.835-214.892 81.139-297.416 48.427-76.396 115.304-131.573 195.508-161.896A240.785 240.785 0 0 1 279.488 300.5c0-131.538 104.331-238.535 232.547-238.535S744.546 168.962 744.546 300.5a240.854 240.854 0 0 1-76.742 176.988c190.87 73.004 276.992 277.131 276.992 458.966v25.442H79.238zM694.908 300.5c0-103.43-82.039-187.615-182.873-187.615-100.835 0-182.873 84.184-182.873 187.615 0 103.465 82.038 187.65 182.873 187.65 100.834 0 182.873-84.185 182.873-187.65zm-79.166 213.508a226.454 226.454 0 0 1-103.707 25.096A225.935 225.935 0 0 1 407.912 513.8C212.888 564.927 136.804 752.854 129.5 910.977h765.035c-7.997-167.4-95.227-347.746-278.793-396.97zm-143.411 37.246h79.407l39.739-8.48-45.242 65.664 30.6 227.527-64.8 56.908-69.197-56.908 40.535-227.527-50.78-65.665 39.738 8.48z"/></svg>
|
||||
|
After Width: | Height: | Size: 925 B |
@@ -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="1733622411916" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2414" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M693.333333 170.666667a32 32 0 0 1 0-64h149.333334a74.666667 74.666667 0 0 1 74.666666 74.666666v149.333334a32 32 0 0 1-64 0V181.333333a10.666667 10.666667 0 0 0-10.666666-10.666666H693.333333z m160 522.666666a32 32 0 0 1 64 0v149.333334a74.666667 74.666667 0 0 1-74.666666 74.666666H693.333333a32 32 0 0 1 0-64h149.333334a10.666667 10.666667 0 0 0 10.666666-10.666666V693.333333zM330.666667 853.333333a32 32 0 0 1 0 64H181.333333a74.666667 74.666667 0 0 1-74.666666-74.666666V693.333333a32 32 0 0 1 64 0v149.333334a10.666667 10.666667 0 0 0 10.666666 10.666666h149.333334zM170.666667 330.666667a32 32 0 0 1-64 0V181.333333a74.666667 74.666667 0 0 1 74.666666-74.666666h149.333334a32 32 0 0 1 0 64H181.333333a10.666667 10.666667 0 0 0-10.666666 10.666666v149.333334z m629.333333 149.333333a32 32 0 0 1 0 64H224a32 32 0 0 1 0-64h576z" fill="#000000" p-id="2415"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -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="1733626950565" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2432" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M40.394823 391.378855a40.44597 40.44597 0 0 0 40.44597-40.445969v-245.747664a24.574766 24.574766 0 0 1 24.267582-24.267582H358.38206A40.44597 40.44597 0 1 0 358.38206 0.025701H105.108375A105.210718 105.210718 0 0 0 0.000051 105.134025v245.747663a40.44597 40.44597 0 0 0 40.394772 40.497167zM358.38206 943.133557H105.108375a24.574766 24.574766 0 0 1-24.267582-24.267582v-277.541267a40.44597 40.44597 0 0 0-80.840742 0v277.541267A105.210718 105.210718 0 0 0 105.108375 1023.974299H358.38206a40.44597 40.44597 0 1 0 0-80.840742zM983.553877 595.554206a40.394772 40.394772 0 0 0-40.44597 40.394772v282.916997a24.574766 24.574766 0 0 1-24.267582 24.267582h-267.506571a40.44597 40.44597 0 1 0 0 80.840742h267.506571A105.210718 105.210718 0 0 0 1023.948649 918.865975v-282.916997a40.394772 40.394772 0 0 0-40.394772-40.394772zM918.840325 0.025701h-267.506571a40.44597 40.44597 0 1 0 0 80.840742h267.506571a24.574766 24.574766 0 0 1 24.267582 24.267582v245.747663a40.44597 40.44597 0 1 0 80.840742 0v-245.747663A105.210718 105.210718 0 0 0 918.840325 0.025701zM983.553877 458.089106H40.394823a40.44597 40.44597 0 0 0 0 80.840742h943.159054a40.44597 40.44597 0 0 0 0-80.840742z" p-id="2433" fill="#ffffff"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="m12 1 9.5 5.5v11L12 23l-9.5-5.5v-11L12 1zm0 2.311L4.5 7.653v8.694l7.5 4.342 7.5-4.342V7.653L12 3.311zM12 16a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm0-2a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></svg>
|
||||
|
After Width: | Height: | Size: 267 B |
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M10 6v15H8V6H2V4h14v2h-6zm8 8v7h-2v-7h-3v-2h8v2h-3z"/></svg>
|
||||
|
After Width: | Height: | Size: 149 B |
@@ -0,0 +1 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M139 669.6V164.3c0-12.7 10.3-23.1 23.1-23.1h694.4c12.7 0 23.1 10.4 23.1 23.1v248.5h70V164.3c0-51.3-41.8-93.1-93.1-93.1H162c-51.3.1-93 41.8-93 93.1v505.3c0 51.3 41.8 93.1 93.1 93.1h224.7v-70H162c-12.7 0-23-10.4-23-23.1zm-34.3 131h282v70h-282z"/><path d="m954.9 599.4-5.1-15c-11.5-33.9-29.4-64.9-53.2-91.9l-10.5-11.9h-83.2l-41.7-72.2-15.6-3.1c-34.8-6.9-71.3-6.9-106.1 0l-15.6 3.1-41.7 72.2H499l-10.5 11.9c-23.8 27.1-41.7 58-53.2 91.9l-5.1 15 41.7 72.2-41.7 72.2 5.1 15c11.5 33.9 29.4 64.9 53.2 91.9l10.5 11.9h83.2l41.7 72.2 15.6 3.1c17.4 3.5 35.3 5.2 53.1 5.2s35.6-1.8 53.1-5.2l15.6-3.1 41.7-72.2h83.2l10.5-11.9c23.8-27.1 41.7-58 53.2-91.9l5.1-15-41.7-72.2 41.6-72.2zm-76.8 151.2c-6.4 14.9-14.5 29-24.3 42h-91.2l-45.6 79c-16.1 1.9-32.4 1.9-48.5 0l-45.6-79h-91.2c-9.8-13-17.9-27-24.3-42l45.6-79.1-45.6-79.1c6.4-14.9 14.5-29 24.3-42h91.2l45.6-79c16.1-1.9 32.4-1.9 48.5 0l45.6 79h91.2c9.8 13 17.9 27 24.3 42l-45.6 79.1 45.6 79.1z"/><path d="M692.7 560.2c-61.4 0-111.3 49.9-111.3 111.3s49.9 111.3 111.3 111.3S804 732.9 804 671.5c0-61.3-49.9-111.3-111.3-111.3zm0 152.7c-22.8 0-41.3-18.5-41.3-41.3s18.5-41.3 41.3-41.3 41.3 18.5 41.3 41.3-18.5 41.3-41.3 41.3z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M0 64v896h1024V64H0zm384 576V448h256v192H384zm256 64v192H384V704h256zm0-512v192H384V192h256zm-320 0v192H64V192h256zM64 448h256v192H64V448zm640 0h256v192H704V448zm0-64V192h256v192H704zM64 704h256v192H64V704zm640 192V704h256v192H704z"/></svg>
|
||||
|
After Width: | Height: | Size: 351 B |
@@ -0,0 +1 @@
|
||||
<svg t="1719844784164" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="269353" width="200" height="200"><path d="M920.78 322.56L700.878 102.656c-36.199-36.198-94.925-36.198-131.123 0s-36.199 94.925 0 131.123l23.5 23.501-86.272 86.323c-123.033-75.11-285.798-59.494-392.192 46.9l-37.376 37.375L293.94 644.403l-89.088 89.088c-23.5 23.501-23.5 61.645 0 85.146s61.645 23.5 85.146 0l89.088-89.088L595.61 946.074l37.376-37.376c106.393-106.394 122.01-269.21 46.899-392.192l86.323-86.324 23.5 23.501c36.2 36.199 94.926 36.199 131.124 0s36.198-94.925-0.051-131.123z m-454.758 132.3a41.206 41.206 0 0 1-34.304 18.28 41.057 41.057 0 0 1-22.988-7.015c-55.91-37.581-122.266-8.09-122.932-7.783-20.633 9.728-45.21 0.87-54.886-19.763a41.196 41.196 0 0 1 19.763-54.886c4.403-2.048 108.851-50.023 204.083 13.926 18.893 12.698 23.962 38.349 11.264 57.242z" fill="#FF5C64" p-id="269354"></path><path d="M569.754 102.656c-36.199 36.198-36.199 94.925 0 131.123l23.5 23.501-86.272 86.323c-123.033-75.11-285.798-59.494-392.192 46.9l-37.376 37.375L293.94 644.403l-89.088 89.088c-23.5 23.501-23.5 61.645 0 85.146s61.645 23.5 85.146 0l89.088-89.088 105.83 105.83c99.226-42.445 182.119-115.558 236.851-207.462a319.145 319.145 0 0 0-41.881-111.411l86.323-86.324 20.173 20.173c4.3-26.624 6.656-53.862 6.656-81.664 0-82.073-19.61-159.539-54.221-228.147l-37.888-37.888c-36.25-36.198-94.976-36.198-131.174 0zM466.022 454.861a41.206 41.206 0 0 1-34.304 18.278 41.057 41.057 0 0 1-22.988-7.014c-55.91-37.581-122.266-8.09-122.932-7.783-20.633 9.728-45.21 0.87-54.886-19.763a41.196 41.196 0 0 1 19.763-54.886c4.403-2.048 108.851-50.023 204.083 13.926 18.893 12.698 23.962 38.349 11.264 57.242z" fill="#FF5C64" p-id="269355"></path><path d="M253.85 684.442c228.812-49.152 400.332-252.468 400.332-495.924 0-38.758-4.505-76.441-12.697-112.69-25.754-1.69-52.07 7.167-71.731 26.88-36.199 36.198-36.199 94.924 0 131.122l23.5 23.501-86.272 86.272c-123.033-75.11-285.798-59.494-392.192 46.9l-37.376 37.375L293.94 644.403l-40.09 40.039z m32-226.15c-20.634 9.727-45.21 0.87-54.887-19.764a41.196 41.196 0 0 1 19.763-54.886c4.404-2.048 108.852-50.023 204.084 13.926 18.892 12.698 23.961 38.349 11.264 57.242a41.206 41.206 0 0 1-34.304 18.278 41.057 41.057 0 0 1-22.99-7.014c-55.96-37.53-122.316-8.09-122.93-7.783z" fill="#FF5C64" p-id="269356"></path><path d="M230.912 438.58a41.196 41.196 0 0 1 19.763-54.887c3.226-1.536 60.058-27.546 127.642-16.333 18.022-18.074 34.662-37.53 49.817-58.112-107.827-30.618-228.505-3.584-313.395 81.306L77.363 427.93l71.629 71.628a502.748 502.748 0 0 0 103.885-40.243 41.861 41.861 0 0 1-21.965-20.736z" fill="#FF5C64" p-id="269357"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
@@ -0,0 +1 @@
|
||||
<svg class="icon" viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="200" height="200"><path d="M977.455 558.545h-34.91V453.818c0-44.218-37.236-81.454-81.454-81.454H546.909v-93.091h197.818c25.6 0 46.546-20.946 46.546-46.546V93.091c0-25.6-20.946-46.546-46.546-46.546H279.273c-25.6 0-46.546 20.946-46.546 46.546v139.636c0 25.6 20.946 46.546 46.546 46.546H477.09v93.09H162.909c-44.218 0-81.454 37.237-81.454 81.455v104.727h-34.91C20.945 558.545 0 579.491 0 605.091v325.818c0 25.6 20.945 46.546 46.545 46.546h139.637c25.6 0 46.545-20.946 46.545-46.546V605.091c0-25.6-20.945-46.546-46.545-46.546h-34.91V453.818c0-6.982 4.655-11.636 11.637-11.636h314.182v116.363h-34.91c-25.6 0-46.545 20.946-46.545 46.546v325.818c0 25.6 20.946 46.546 46.546 46.546h139.636c25.6 0 46.546-20.946 46.546-46.546V605.091c0-25.6-20.946-46.546-46.546-46.546H546.91V442.182h314.182c6.982 0 11.636 4.654 11.636 11.636v104.727h-34.909c-25.6 0-46.545 20.946-46.545 46.546v325.818c0 25.6 20.945 46.546 46.545 46.546h139.637c25.6 0 46.545-20.946 46.545-46.546V605.091c0-25.6-20.945-46.546-46.545-46.546zm-814.546 69.819v279.272H69.82V628.364h93.09zm395.636 0v279.272h-93.09V628.364h93.09zm-256-418.91v-93.09h418.91v93.09h-418.91zm651.637 698.182H861.09V628.364h93.09v279.272z"/></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1 @@
|
||||
<svg t="1721541160105" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13856" width="200" height="200"><path d="M762.464 263.776a141.568 141.568 0 0 1 71.136 40.992 187.296 187.296 0 0 1 27.264 36.576c0.352 1.44-49.088 34.656-79.072 53.184-1.088 0.736-5.408-3.968-10.304-11.2a64.448 64.448 0 0 0-53.44-32c-34.464-2.368-56.672 15.68-56.512 45.856a41.6 41.6 0 0 0 4.896 21.312c7.584 15.68 21.664 25.088 65.888 44.256 81.408 35.04 116.352 58.144 137.92 90.976a165.056 165.056 0 0 1 13.312 138.656 152.448 152.448 0 0 1-125.824 90.08 348.8 348.8 0 0 1-86.656-0.896 208.992 208.992 0 0 1-115.712-60.288 200.896 200.896 0 0 1-29.632-43.872 84.96 84.96 0 0 1 10.464-6.656c5.056-2.88 24.192-13.888 42.24-24.352l32.768-19.2 6.848 9.984a152.672 152.672 0 0 0 43.2 41.344 105.6 105.6 0 0 0 110.656-5.6 49.44 49.44 0 0 0 6.4-63.168c-8.832-12.64-26.88-23.264-78.176-45.504a281.6 281.6 0 0 1-107.168-65.76 149.984 149.984 0 0 1-31.232-56.864 227.712 227.712 0 0 1-1.984-72.576 138.624 138.624 0 0 1 116.608-107.968 288 288 0 0 1 86.112 2.688z m-266.976 47.456l0.352 46.528h-148.16v420.736H243.2V357.856H95.04V312.16a447.552 447.552 0 0 1 1.28-46.912c0.544-0.736 90.624-1.088 199.84-0.896l198.752 0.544z" fill="#007ACC" p-id="13857"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1 @@
|
||||
<svg t="1719843414729" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="175406" width="200" height="200"><path d="M512 1024C229.236364 1024 0 794.763636 0 512S229.236364 0 512 0s512 229.236364 512 512-229.236364 512-512 512z m56.599273-542.72a153.134545 153.134545 0 0 0 97.652363-142.149818C666.251636 254.789818 597.038545 186.181818 512 186.181818S357.794909 254.789818 357.794909 339.130182a153.134545 153.134545 0 0 0 97.605818 142.149818C328.471273 507.345455 232.727273 619.054545 232.727273 752.500364c0 32.488727 22.993455 43.240727 41.425454 51.851636l1.070546 0.465455c74.333091 26.065455 181.992727 33.000727 233.797818 33.000727 56.552727 0 167.191273-9.122909 240.686545-34.304 27.601455-10.472727 41.565091-27.648 41.565091-51.013818 0-133.492364-95.744-245.201455-222.673454-271.220364z" fill="#17E3C7" p-id="175407"></path></svg>
|
||||
|
After Width: | Height: | Size: 890 B |