| New file |
| | |
| | | root = true |
| | | [*.{js,ts,vue}] |
| | | charset = utf-8 # 设置æä»¶å符é为 utf-8 |
| | | end_of_line = lf # æ§å¶æ¢è¡ç±»å(lf | cr | crlf) |
| | | insert_final_newline = true # å§ç»å¨æä»¶æ«å°¾æå
¥ä¸ä¸ªæ°è¡ |
| | | indent_style = space # 缩è¿é£æ ¼ï¼tab | spaceï¼ |
| | | indent_size = 2 # 缩è¿å¤§å° |
| | | max_line_length = 100 # æå¤§è¡é¿åº¦ |
| | | |
| | | [*.md] # ä»
md æä»¶éç¨ä»¥ä¸è§å |
| | | max_line_length = off # å
³éæå¤§è¡é¿åº¦éå¶ |
| | | trim_trailing_whitespace = false # å
³éæ«å°¾ç©ºæ ¼ä¿®åª |
| New file |
| | |
| | | # æ é¢ |
| | | VITE_APP_TITLE=èé管çç³»ç» |
| | | |
| | | # é¡¹ç®æ¬å°è¿è¡ç«¯å£å· |
| | | VITE_PORT=80 |
| | | |
| | | # open è¿è¡ npm run dev æ¶èªå¨æå¼æµè§å¨ |
| | | VITE_OPEN=true |
| | | |
| | | # ç§æ·å¼å
³ |
| | | VITE_APP_TENANT_ENABLE=true |
| | | |
| | | # éªè¯ç çå¼å
³ |
| | | VITE_APP_CAPTCHA_ENABLE=true |
| | | |
| | | # ææ¡£å°åçå¼å
³ |
| | | VITE_APP_DOCALERT_ENABLE=true |
| | | |
| | | # ç¾åº¦ç»è®¡ |
| | | VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc |
| | | |
| | | # é»è®¤è´¦æ·å¯ç |
| | | VITE_APP_DEFAULT_LOGIN_TENANT = èéæºç |
| | | VITE_APP_DEFAULT_LOGIN_USERNAME = admin |
| | | VITE_APP_DEFAULT_LOGIN_PASSWORD = admin123 |
| | | |
| | | # API å è§£å¯ |
| | | VITE_APP_API_ENCRYPT_ENABLE = true |
| | | VITE_APP_API_ENCRYPT_HEADER = X-Api-Encrypt |
| | | VITE_APP_API_ENCRYPT_ALGORITHM = AES |
| | | VITE_APP_API_ENCRYPT_REQUEST_KEY = 52549111389893486934626385991395 |
| | | VITE_APP_API_ENCRYPT_RESPONSE_KEY = 96103715984234343991809655248883 |
| | | # VITE_APP_API_ENCRYPT_REQUEST_KEY = MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCls2rIpnGdYnLFgz1XU13GbNQ5DloyPpvW00FPGjqn5Z6JpK+kDtVlnkhwR87iRrE5Vf2WNqRX6vzbLSgveIQY8e8oqGCb829myjf1MuI+ZzN4ghf/7tEYhZJGPI9AbfxFqBUzm+kR3/HByAI22GLT96WM26QiMK8n3tIP/yiLswIDAQAB |
| | | # VITE_APP_API_ENCRYPT_RESPONSE_KEY = MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOH8IfIFxL/MR9XIg1UDv5z1fGXQI93E8wrU4iPFovL/sEt9uSgSkjyidC2O7N+m7EKtoN6b1u7cEwXSkwf3kfK0jdWLSQaNpX5YshqXCBzbDfugDaxuyYrNA4/tIMs7mzZAk0APuRXB35Dmupou7Yw7TFW/7QhQmGfzeEKULQvnAgMBAAECgYAw8LqlQGyQoPv5p3gRxEMOCfgL0JzD3XBJKztiRd35RDh40Nx1ejgjW4dPioFwGiVWd2W8cAGHLzALdcQT2KDJh+T/tsd4SPmI6uSBBK6Ff2DkO+kFFcuYvfclQQKqxma5CaZOSqhgenacmgTMFeg2eKlY3symV6JlFNu/IKU42QJBAOhxAK/Eq3e61aYQV2JSguhMR3b8NXJJRroRs/QHEanksJtl+M+2qhkC9nQVXBmBkndnkU/l2tYcHfSBlAyFySMCQQD445tgm/J2b6qMQmuUGQAYDN8FIkHjeKmha+l/fv0igWm8NDlBAem91lNDIPBUzHL1X1+pcts5bjmq99YdOnhtAkAg2J8dN3B3idpZDiQbC8fd5bGPmdI/pSUudAP27uzLEjr2qrE/QPPGdwm2m7IZFJtK7kK1hKio6u48t/bg0iL7AkEAuUUs94h+v702Fnym+jJ2CHEkXvz2US8UDs52nWrZYiM1o1y4tfSHm8H8bv8JCAa9GHyriEawfBraILOmllFdLQJAQSRZy4wmlaG48MhVXodB85X+VZ9krGXZ2TLhz7kz9iuToy53l9jTkESt6L5BfBDCVdIwcXLYgK+8KFdHN5W7HQ== |
| | | |
| | | # ç¾åº¦å°å¾ |
| | | VITE_BAIDU_MAP_KEY = 'efHIw2qmH8RzHPxK0z0rbCgzDVLup9LD' |
| New file |
| | |
| | | # å¼åç¯å¢ï¼æ¬å°åªå¯å¨å端项ç®ï¼ä¾èµå¼åç¯å¢ï¼å端ãAPPï¼ |
| | | NODE_ENV=production |
| | | |
| | | VITE_DEV=true |
| | | |
| | | # 请æ±è·¯å¾ |
| | | VITE_BASE_URL='http://101.43.143.75:48080' |
| | | |
| | | # æä»¶ä¸ä¼ ç±»åï¼server - å端ä¸ä¼ ï¼ client - å端ç´è¿ä¸ä¼ ï¼ä»
æ¯æS3æå¡ |
| | | VITE_UPLOAD_TYPE=server |
| | | |
| | | # æ¥å£å°å |
| | | VITE_API_URL=/admin-api |
| | | |
| | | # æ¯å¦å é¤debugger |
| | | VITE_DROP_DEBUGGER=false |
| | | |
| | | # æ¯å¦å é¤console.log |
| | | VITE_DROP_CONSOLE=false |
| | | |
| | | # æ¯å¦sourcemap |
| | | VITE_SOURCEMAP=true |
| | | |
| | | # æå
è·¯å¾ |
| | | VITE_BASE_PATH=/ |
| | | |
| | | # è¾åºè·¯å¾ |
| | | VITE_OUT_DIR=dist |
| | | |
| | | # ååH5ä¼å端åå |
| | | VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn' |
| | | |
| | | # éªè¯ç çå¼å
³ |
| | | VITE_APP_CAPTCHA_ENABLE=true |
| | | |
| | | # GoViewåå |
| | | VITE_GOVIEW_URL='http://127.0.0.1:3000' |
| New file |
| | |
| | | # æ¬å°å¼åç¯å¢ï¼æ¬å°å¯å¨ææé¡¹ç®ï¼å端ãå端ãAPPï¼æ¶ä½¿ç¨ï¼ä¸ä¾èµå¤é¨ç¯å¢ |
| | | NODE_ENV=development |
| | | |
| | | VITE_DEV=true |
| | | |
| | | # 请æ±è·¯å¾ |
| | | VITE_BASE_URL='http://101.43.143.75:48080' |
| | | # VITE_BASE_URL='https://gdkw.qxueyou.com/' |
| | | |
| | | |
| | | # æä»¶ä¸ä¼ ç±»åï¼server - å端ä¸ä¼ ï¼ client - å端ç´è¿ä¸ä¼ ï¼ä»
æ¯æ S3 æå¡ |
| | | VITE_UPLOAD_TYPE=server |
| | | |
| | | # æ¥å£å°å |
| | | VITE_API_URL=/admin-api |
| | | |
| | | # æ¯å¦å é¤debugger |
| | | VITE_DROP_DEBUGGER=false |
| | | |
| | | # æ¯å¦å é¤console.log |
| | | VITE_DROP_CONSOLE=false |
| | | |
| | | # æ¯å¦sourcemap |
| | | VITE_SOURCEMAP=false |
| | | |
| | | # æå
è·¯å¾ |
| | | VITE_BASE_PATH=/ |
| | | |
| | | # ååH5ä¼å端åå |
| | | VITE_MALL_H5_DOMAIN='http://localhost:3000' |
| | | |
| | | # éªè¯ç çå¼å
³ |
| | | VITE_APP_CAPTCHA_ENABLE=false |
| | | |
| | | # GoViewåå |
| | | VITE_GOVIEW_URL='http://127.0.0.1:3000' |
| New file |
| | |
| | | # ç产ç¯å¢ï¼åªå¨æå
æ¶ä½¿ç¨ |
| | | NODE_ENV=production |
| | | |
| | | VITE_DEV=false |
| | | |
| | | # 请æ±è·¯å¾ |
| | | VITE_BASE_URL='http://localhost:48080' |
| | | |
| | | # æä»¶ä¸ä¼ ç±»åï¼server - å端ä¸ä¼ ï¼ client - å端ç´è¿ä¸ä¼ ï¼ä»
æ¯æS3æå¡ |
| | | VITE_UPLOAD_TYPE=server |
| | | |
| | | # æ¥å£å°å |
| | | VITE_API_URL=/admin-api |
| | | |
| | | # æ¯å¦å é¤debugger |
| | | VITE_DROP_DEBUGGER=true |
| | | |
| | | # æ¯å¦å é¤console.log |
| | | VITE_DROP_CONSOLE=true |
| | | |
| | | # æ¯å¦sourcemap |
| | | VITE_SOURCEMAP=false |
| | | |
| | | # æå
è·¯å¾ |
| | | VITE_BASE_PATH=/ |
| | | |
| | | # è¾åºè·¯å¾ |
| | | VITE_OUT_DIR=dist-prod |
| | | |
| | | # ååH5ä¼å端åå |
| | | VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn' |
| | | |
| | | # GoViewåå |
| | | VITE_GOVIEW_URL='http://127.0.0.1:3000' |
| New file |
| | |
| | | # é¢åå¸ç¯å¢ï¼åªå¨æå
æ¶ä½¿ç¨ |
| | | NODE_ENV=production |
| | | |
| | | VITE_DEV=false |
| | | |
| | | # 请æ±è·¯å¾ |
| | | VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn' |
| | | |
| | | # æä»¶ä¸ä¼ ç±»åï¼server - å端ä¸ä¼ ï¼ client - å端ç´è¿ä¸ä¼ ï¼ä»
æ¯æS3æå¡ |
| | | VITE_UPLOAD_TYPE=server |
| | | |
| | | # æ¥å£å°å |
| | | VITE_API_URL=/admin-api |
| | | |
| | | # æ¯å¦å é¤debugger |
| | | VITE_DROP_DEBUGGER=true |
| | | |
| | | # æ¯å¦å é¤console.log |
| | | VITE_DROP_CONSOLE=true |
| | | |
| | | # æ¯å¦sourcemap |
| | | VITE_SOURCEMAP=false |
| | | |
| | | # æå
è·¯å¾ |
| | | VITE_BASE_PATH='http://static-vue3.yudao.iocoder.cn/' |
| | | |
| | | # è¾åºè·¯å¾ |
| | | VITE_OUT_DIR=dist-stage |
| | | |
| | | # ååH5ä¼å端åå |
| | | VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn' |
| | | |
| | | # GoViewåå |
| | | VITE_GOVIEW_URL='http://127.0.0.1:3000' |
| New file |
| | |
| | | # æµè¯ç¯å¢ï¼åªå¨æå
æ¶ä½¿ç¨ |
| | | NODE_ENV=production |
| | | |
| | | VITE_DEV=false |
| | | |
| | | # 请æ±è·¯å¾ |
| | | VITE_BASE_URL='http://localhost:48080' |
| | | |
| | | # æä»¶ä¸ä¼ ç±»åï¼server - å端ä¸ä¼ ï¼ client - å端ç´è¿ä¸ä¼ ï¼ä»
æ¯æS3æå¡ |
| | | VITE_UPLOAD_TYPE=server |
| | | |
| | | # æ¥å£å°å |
| | | VITE_API_URL=/admin-api |
| | | |
| | | # æ¯å¦å é¤debugger |
| | | VITE_DROP_DEBUGGER=true |
| | | |
| | | # æ¯å¦å é¤console.log |
| | | VITE_DROP_CONSOLE=true |
| | | |
| | | # æ¯å¦sourcemap |
| | | VITE_SOURCEMAP=false |
| | | |
| | | # æå
è·¯å¾ |
| | | VITE_BASE_PATH=/admin-ui-vue3/ |
| | | |
| | | # è¾åºè·¯å¾ |
| | | VITE_OUT_DIR=dist-test |
| | | |
| | | # ååH5ä¼å端åå |
| | | VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn' |
| | | |
| | | # GoViewåå |
| | | VITE_GOVIEW_URL='http://127.0.0.1:3000' |
| New file |
| | |
| | | /build/ |
| | | /config/ |
| | | /dist/ |
| | | /*.js |
| | | /test/unit/coverage/ |
| | | /node_modules/* |
| | | /dist* |
| | | /src/main.ts |
| New file |
| | |
| | | { |
| | | "globals": { |
| | | "EffectScope": true, |
| | | "ElMessage": true, |
| | | "ElMessageBox": true, |
| | | "ElTag": true, |
| | | "asyncComputed": true, |
| | | "autoResetRef": true, |
| | | "computed": true, |
| | | "computedAsync": true, |
| | | "computedEager": true, |
| | | "computedInject": true, |
| | | "computedWithControl": true, |
| | | "controlledComputed": true, |
| | | "controlledRef": true, |
| | | "createApp": true, |
| | | "createEventHook": true, |
| | | "createGlobalState": true, |
| | | "createInjectionState": true, |
| | | "createReactiveFn": true, |
| | | "createSharedComposable": true, |
| | | "createUnrefFn": true, |
| | | "customRef": true, |
| | | "debouncedRef": true, |
| | | "debouncedWatch": true, |
| | | "defineAsyncComponent": true, |
| | | "defineComponent": true, |
| | | "eagerComputed": true, |
| | | "effectScope": true, |
| | | "extendRef": true, |
| | | "getCurrentInstance": true, |
| | | "getCurrentScope": true, |
| | | "h": true, |
| | | "ignorableWatch": true, |
| | | "inject": true, |
| | | "isDefined": true, |
| | | "isProxy": true, |
| | | "isReactive": true, |
| | | "isReadonly": true, |
| | | "isRef": true, |
| | | "makeDestructurable": true, |
| | | "markRaw": true, |
| | | "nextTick": true, |
| | | "onActivated": true, |
| | | "onBeforeMount": true, |
| | | "onBeforeUnmount": true, |
| | | "onBeforeUpdate": true, |
| | | "onClickOutside": true, |
| | | "onDeactivated": true, |
| | | "onErrorCaptured": true, |
| | | "onKeyStroke": true, |
| | | "onLongPress": true, |
| | | "onMounted": true, |
| | | "onRenderTracked": true, |
| | | "onRenderTriggered": true, |
| | | "onScopeDispose": true, |
| | | "onServerPrefetch": true, |
| | | "onStartTyping": true, |
| | | "onUnmounted": true, |
| | | "onUpdated": true, |
| | | "pausableWatch": true, |
| | | "provide": true, |
| | | "reactify": true, |
| | | "reactifyObject": true, |
| | | "reactive": true, |
| | | "reactiveComputed": true, |
| | | "reactiveOmit": true, |
| | | "reactivePick": true, |
| | | "readonly": true, |
| | | "ref": true, |
| | | "refAutoReset": true, |
| | | "refDebounced": true, |
| | | "refDefault": true, |
| | | "refThrottled": true, |
| | | "refWithControl": true, |
| | | "resolveComponent": true, |
| | | "resolveRef": true, |
| | | "resolveUnref": true, |
| | | "shallowReactive": true, |
| | | "shallowReadonly": true, |
| | | "shallowRef": true, |
| | | "syncRef": true, |
| | | "syncRefs": true, |
| | | "templateRef": true, |
| | | "throttledRef": true, |
| | | "throttledWatch": true, |
| | | "toRaw": true, |
| | | "toReactive": true, |
| | | "toRef": true, |
| | | "toRefs": true, |
| | | "triggerRef": true, |
| | | "tryOnBeforeMount": true, |
| | | "tryOnBeforeUnmount": true, |
| | | "tryOnMounted": true, |
| | | "tryOnScopeDispose": true, |
| | | "tryOnUnmounted": true, |
| | | "unref": true, |
| | | "unrefElement": true, |
| | | "until": true, |
| | | "useActiveElement": true, |
| | | "useArrayEvery": true, |
| | | "useArrayFilter": true, |
| | | "useArrayFind": true, |
| | | "useArrayFindIndex": true, |
| | | "useArrayJoin": true, |
| | | "useArrayMap": true, |
| | | "useArrayReduce": true, |
| | | "useArraySome": true, |
| | | "useAsyncQueue": true, |
| | | "useAsyncState": true, |
| | | "useAttrs": true, |
| | | "useBase64": true, |
| | | "useBattery": true, |
| | | "useBluetooth": true, |
| | | "useBreakpoints": true, |
| | | "useBroadcastChannel": true, |
| | | "useBrowserLocation": true, |
| | | "useCached": true, |
| | | "useClipboard": true, |
| | | "useColorMode": true, |
| | | "useConfirmDialog": true, |
| | | "useCounter": true, |
| | | "useCssModule": true, |
| | | "useCssVar": true, |
| | | "useCssVars": true, |
| | | "useCurrentElement": true, |
| | | "useCycleList": true, |
| | | "useDark": true, |
| | | "useDateFormat": true, |
| | | "useDebounce": true, |
| | | "useDebounceFn": true, |
| | | "useDebouncedRefHistory": true, |
| | | "useDeviceMotion": true, |
| | | "useDeviceOrientation": true, |
| | | "useDevicePixelRatio": true, |
| | | "useDevicesList": true, |
| | | "useDisplayMedia": true, |
| | | "useDocumentVisibility": true, |
| | | "useDraggable": true, |
| | | "useDropZone": true, |
| | | "useElementBounding": true, |
| | | "useElementByPoint": true, |
| | | "useElementHover": true, |
| | | "useElementSize": true, |
| | | "useElementVisibility": true, |
| | | "useEventBus": true, |
| | | "useEventListener": true, |
| | | "useEventSource": true, |
| | | "useEyeDropper": true, |
| | | "useFavicon": true, |
| | | "useFetch": true, |
| | | "useFileDialog": true, |
| | | "useFileSystemAccess": true, |
| | | "useFocus": true, |
| | | "useFocusWithin": true, |
| | | "useFps": true, |
| | | "useFullscreen": true, |
| | | "useGamepad": true, |
| | | "useGeolocation": true, |
| | | "useIdle": true, |
| | | "useImage": true, |
| | | "useInfiniteScroll": true, |
| | | "useIntersectionObserver": true, |
| | | "useInterval": true, |
| | | "useIntervalFn": true, |
| | | "useKeyModifier": true, |
| | | "useLastChanged": true, |
| | | "useLocalStorage": true, |
| | | "useMagicKeys": true, |
| | | "useManualRefHistory": true, |
| | | "useMediaControls": true, |
| | | "useMediaQuery": true, |
| | | "useMemoize": true, |
| | | "useMemory": true, |
| | | "useMounted": true, |
| | | "useMouse": true, |
| | | "useMouseInElement": true, |
| | | "useMousePressed": true, |
| | | "useMutationObserver": true, |
| | | "useNavigatorLanguage": true, |
| | | "useNetwork": true, |
| | | "useNow": true, |
| | | "useObjectUrl": true, |
| | | "useOffsetPagination": true, |
| | | "useOnline": true, |
| | | "usePageLeave": true, |
| | | "useParallax": true, |
| | | "usePermission": true, |
| | | "usePointer": true, |
| | | "usePointerSwipe": true, |
| | | "usePreferredColorScheme": true, |
| | | "usePreferredDark": true, |
| | | "usePreferredLanguages": true, |
| | | "useRafFn": true, |
| | | "useRefHistory": true, |
| | | "useResizeObserver": true, |
| | | "useRoute": true, |
| | | "useRouter": true, |
| | | "useScreenOrientation": true, |
| | | "useScreenSafeArea": true, |
| | | "useScriptTag": true, |
| | | "useScroll": true, |
| | | "useScrollLock": true, |
| | | "useSessionStorage": true, |
| | | "useShare": true, |
| | | "useSlots": true, |
| | | "useSpeechRecognition": true, |
| | | "useSpeechSynthesis": true, |
| | | "useStepper": true, |
| | | "useStorage": true, |
| | | "useStorageAsync": true, |
| | | "useStyleTag": true, |
| | | "useSupported": true, |
| | | "useSwipe": true, |
| | | "useTemplateRefsList": true, |
| | | "useTextDirection": true, |
| | | "useTextSelection": true, |
| | | "useTextareaAutosize": true, |
| | | "useThrottle": true, |
| | | "useThrottleFn": true, |
| | | "useThrottledRefHistory": true, |
| | | "useTimeAgo": true, |
| | | "useTimeout": true, |
| | | "useTimeoutFn": true, |
| | | "useTimeoutPoll": true, |
| | | "useTimestamp": true, |
| | | "useTitle": true, |
| | | "useToggle": true, |
| | | "useTransition": true, |
| | | "useUrlSearchParams": true, |
| | | "useUserMedia": true, |
| | | "useVModel": true, |
| | | "useVModels": true, |
| | | "useVibrate": true, |
| | | "useVirtualList": true, |
| | | "useWakeLock": true, |
| | | "useWebNotification": true, |
| | | "useWebSocket": true, |
| | | "useWebWorker": true, |
| | | "useWebWorkerFn": true, |
| | | "useWindowFocus": true, |
| | | "useWindowScroll": true, |
| | | "useWindowSize": true, |
| | | "watch": true, |
| | | "watchArray": true, |
| | | "watchAtMost": true, |
| | | "watchDebounced": true, |
| | | "watchEffect": true, |
| | | "watchIgnorable": true, |
| | | "watchOnce": true, |
| | | "watchPausable": true, |
| | | "watchPostEffect": true, |
| | | "watchSyncEffect": true, |
| | | "watchThrottled": true, |
| | | "watchTriggerable": true, |
| | | "watchWithFilter": true, |
| | | "whenever": true |
| | | } |
| | | } |
| New file |
| | |
| | | // @ts-check |
| | | const { defineConfig } = require('eslint-define-config') |
| | | module.exports = defineConfig({ |
| | | root: true, |
| | | env: { |
| | | browser: true, |
| | | node: true, |
| | | es6: true |
| | | }, |
| | | parser: 'vue-eslint-parser', |
| | | parserOptions: { |
| | | parser: '@typescript-eslint/parser', |
| | | ecmaVersion: 2020, |
| | | sourceType: 'module', |
| | | jsxPragma: 'React', |
| | | ecmaFeatures: { |
| | | jsx: true |
| | | } |
| | | }, |
| | | extends: [ |
| | | 'plugin:vue/vue3-recommended', |
| | | 'plugin:@typescript-eslint/recommended', |
| | | 'prettier', |
| | | 'plugin:prettier/recommended', |
| | | '@unocss' |
| | | ], |
| | | rules: { |
| | | 'vue/no-setup-props-destructure': 'off', |
| | | 'vue/script-setup-uses-vars': 'error', |
| | | 'vue/no-reserved-component-names': 'off', |
| | | '@typescript-eslint/ban-ts-ignore': 'off', |
| | | '@typescript-eslint/explicit-function-return-type': 'off', |
| | | '@typescript-eslint/no-explicit-any': 'off', |
| | | '@typescript-eslint/no-var-requires': 'off', |
| | | '@typescript-eslint/no-empty-function': 'off', |
| | | 'vue/custom-event-name-casing': 'off', |
| | | 'no-use-before-define': 'off', |
| | | '@typescript-eslint/no-use-before-define': 'off', |
| | | '@typescript-eslint/ban-ts-comment': 'off', |
| | | '@typescript-eslint/ban-types': 'off', |
| | | '@typescript-eslint/no-non-null-assertion': 'off', |
| | | '@typescript-eslint/explicit-module-boundary-types': 'off', |
| | | '@typescript-eslint/no-unused-vars': 'off', |
| | | 'no-unused-vars': 'off', |
| | | 'space-before-function-paren': 'off', |
| | | |
| | | 'vue/attributes-order': 'off', |
| | | 'vue/one-component-per-file': 'off', |
| | | 'vue/html-closing-bracket-newline': 'off', |
| | | 'vue/max-attributes-per-line': 'off', |
| | | 'vue/multiline-html-element-content-newline': 'off', |
| | | 'vue/singleline-html-element-content-newline': 'off', |
| | | 'vue/attribute-hyphenation': 'off', |
| | | 'vue/require-default-prop': 'off', |
| | | 'vue/require-explicit-emits': 'off', |
| | | 'vue/require-toggle-inside-transition': 'off', |
| | | 'vue/html-self-closing': [ |
| | | 'error', |
| | | { |
| | | html: { |
| | | void: 'always', |
| | | normal: 'never', |
| | | component: 'always' |
| | | }, |
| | | svg: 'always', |
| | | math: 'always' |
| | | } |
| | | ], |
| | | 'vue/multi-word-component-names': 'off', |
| | | 'vue/no-v-html': 'off', |
| | | 'prettier/prettier': 'off', // èè¿ï¼é»è®¤å
³é prettier ç ESLint æ ¡éªï¼å 为æä»¬ä½¿ç¨çæ¯ IDE ç Prettier æä»¶ |
| | | '@unocss/order': 'off', // èè¿ï¼ç¦ç¨ unocss ãcssã顺åºçæç¤ºï¼å ä¸ºææ¶ä¸éè¦è¿ä¹ä¸¥æ ¼ï¼è¦å乿ç¹ç¹ç |
| | | '@unocss/order-attributify': 'off' // èè¿ï¼ç¦ç¨ unocss ã屿§ã顺åºçæç¤ºï¼å ä¸ºææ¶ä¸éè¦è¿ä¹ä¸¥æ ¼ï¼è¦å乿ç¹ç¹ç |
| | | } |
| | | }) |
| New file |
| | |
| | | node_modules |
| | | .DS_Store |
| | | dist |
| | | dist-ssr |
| | | /dist* |
| | | pnpm-debug |
| | | auto-*.d.ts |
| | | .idea |
| | | .history |
| New file |
| | |
| | | /node_modules/** |
| | | /dist/ |
| | | /dist* |
| | | /public/* |
| | | /docs/* |
| | | /vite.config.ts |
| | | /src/types/env.d.ts |
| | | /src/types/auto-components.d.ts |
| | | /src/types/auto-imports.d.ts |
| | | /docs/**/* |
| | | CHANGELOG |
| New file |
| | |
| | | /dist/* |
| | | /public/* |
| | | public/* |
| | | /dist* |
| | | /src/types/env.d.ts |
| | | /docs/**/* |
| New file |
| | |
| | | { |
| | | "recommendations": [ |
| | | "christian-kohler.path-intellisense", |
| | | "vscode-icons-team.vscode-icons", |
| | | "davidanson.vscode-markdownlint", |
| | | "dbaeumer.vscode-eslint", |
| | | "esbenp.prettier-vscode", |
| | | "mrmlnc.vscode-less", |
| | | "lokalise.i18n-ally", |
| | | "redhat.vscode-yaml", |
| | | "csstools.postcss", |
| | | "mikestead.dotenv", |
| | | "eamodio.gitlens", |
| | | "antfu.iconify", |
| | | "antfu.unocss", |
| | | "Vue.volar" |
| | | ] |
| | | } |
| New file |
| | |
| | | { |
| | | // Use IntelliSense to learn about possible attributes. |
| | | // Hover to view descriptions of existing attributes. |
| | | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 |
| | | "version": "0.2.0", |
| | | "configurations": [ |
| | | { |
| | | "type": "msedge", |
| | | "request": "launch", |
| | | "name": "Launch Edge against localhost", |
| | | "url": "http://localhost", |
| | | "webRoot": "${workspaceFolder}/src", |
| | | "sourceMaps": true |
| | | } |
| | | ] |
| | | } |
| New file |
| | |
| | | { |
| | | "typescript.tsdk": "node_modules/typescript/lib", |
| | | "npm.packageManager": "pnpm", |
| | | "editor.tabSize": 2, |
| | | "prettier.printWidth": 100, // è¶
è¿æå¤§å¼æ¢è¡ |
| | | "editor.defaultFormatter": "esbenp.prettier-vscode", |
| | | "files.eol": "\n", |
| | | "search.exclude": { |
| | | "**/node_modules": true, |
| | | "**/*.log": true, |
| | | "**/*.log*": true, |
| | | "**/bower_components": true, |
| | | "**/dist": true, |
| | | "**/elehukouben": true, |
| | | "**/.git": true, |
| | | "**/.gitignore": true, |
| | | "**/.svn": true, |
| | | "**/.DS_Store": true, |
| | | "**/.idea": true, |
| | | "**/.vscode": false, |
| | | "**/yarn.lock": true, |
| | | "**/tmp": true, |
| | | "out": true, |
| | | "dist": true, |
| | | "node_modules": true, |
| | | "CHANGELOG.md": true, |
| | | "examples": true, |
| | | "res": true, |
| | | "screenshots": true, |
| | | "yarn-error.log": true, |
| | | "**/.yarn": true |
| | | }, |
| | | "files.exclude": { |
| | | "**/.cache": true, |
| | | "**/.editorconfig": true, |
| | | "**/.eslintcache": true, |
| | | "**/bower_components": true, |
| | | "**/.idea": true, |
| | | "**/tmp": true, |
| | | "**/.git": true, |
| | | "**/.svn": true, |
| | | "**/.hg": true, |
| | | "**/CVS": true, |
| | | "**/.DS_Store": true |
| | | }, |
| | | "files.watcherExclude": { |
| | | "**/.git/objects/**": true, |
| | | "**/.git/subtree-cache/**": true, |
| | | "**/.vscode/**": true, |
| | | "**/node_modules/**": true, |
| | | "**/tmp/**": true, |
| | | "**/bower_components/**": true, |
| | | "**/dist/**": true, |
| | | "**/yarn.lock": true |
| | | }, |
| | | "stylelint.enable": true, |
| | | "stylelint.validate": ["css", "less", "postcss", "scss", "vue", "sass"], |
| | | "path-intellisense.mappings": { |
| | | "@/": "${workspaceRoot}/src" |
| | | }, |
| | | "[javascriptreact]": { |
| | | "editor.defaultFormatter": "esbenp.prettier-vscode" |
| | | }, |
| | | "[typescript]": { |
| | | "editor.defaultFormatter": "esbenp.prettier-vscode" |
| | | }, |
| | | "[typescriptreact]": { |
| | | "editor.defaultFormatter": "esbenp.prettier-vscode" |
| | | }, |
| | | "[html]": { |
| | | "editor.defaultFormatter": "esbenp.prettier-vscode" |
| | | }, |
| | | "[css]": { |
| | | "editor.defaultFormatter": "esbenp.prettier-vscode" |
| | | }, |
| | | "[less]": { |
| | | "editor.defaultFormatter": "esbenp.prettier-vscode" |
| | | }, |
| | | "[scss]": { |
| | | "editor.defaultFormatter": "esbenp.prettier-vscode" |
| | | }, |
| | | "[markdown]": { |
| | | "editor.defaultFormatter": "esbenp.prettier-vscode" |
| | | }, |
| | | "editor.codeActionsOnSave": { |
| | | "source.fixAll.eslint": "explicit", |
| | | "source.fixAll.stylelint": "explicit" |
| | | }, |
| | | "editor.formatOnSave": true, |
| | | "[vue]": { |
| | | "editor.defaultFormatter": "esbenp.prettier-vscode" |
| | | }, |
| | | "i18n-ally.localesPaths": ["src/locales"], |
| | | "i18n-ally.keystyle": "nested", |
| | | "i18n-ally.sortKeys": true, |
| | | "i18n-ally.namespace": false, |
| | | "i18n-ally.enabledParsers": ["ts"], |
| | | "i18n-ally.sourceLanguage": "en", |
| | | "i18n-ally.displayLanguage": "zh-CN", |
| | | "i18n-ally.enabledFrameworks": ["vue", "react"], |
| | | "cSpell.words": [ |
| | | "brotli", |
| | | "browserslist", |
| | | "codemirror", |
| | | "commitlint", |
| | | "cropperjs", |
| | | "echart", |
| | | "echarts", |
| | | "esnext", |
| | | "esno", |
| | | "iconify", |
| | | "INTLIFY", |
| | | "lintstagedrc", |
| | | "logicflow", |
| | | "nprogress", |
| | | "pinia", |
| | | "pnpm", |
| | | "qrcode", |
| | | "sider", |
| | | "sortablejs", |
| | | "stylelint", |
| | | "svgs", |
| | | "unocss", |
| | | "unplugin", |
| | | "unref", |
| | | "videojs", |
| | | "VITE", |
| | | "vitejs", |
| | | "vueuse", |
| | | "wangeditor", |
| | | "xingyu", |
| | | "yudao", |
| | | "zxcvbn" |
| | | ], |
| | | // æ§å¶ç¸å
³æä»¶åµå¥å±ç¤º |
| | | "explorer.fileNesting.enabled": true, |
| | | "explorer.fileNesting.expand": false, |
| | | "explorer.fileNesting.patterns": { |
| | | "*.ts": "$(capture).test.ts, $(capture).test.tsx", |
| | | "*.tsx": "$(capture).test.ts, $(capture).test.tsx", |
| | | "*.env": "$(capture).env.*", |
| | | "package.json": "pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.eslintrc-auto-import.json,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore" |
| | | }, |
| | | "terminal.integrated.scrollback": 10000, |
| | | "nuxt.isNuxtApp": false |
| | | } |
| New file |
| | |
| | | MIT License |
| | | |
| | | Copyright (c) 2021-present Archer |
| | | |
| | | Permission is hereby granted, free of charge, to any person obtaining a copy |
| | | of this software and associated documentation files (the "Software"), to deal |
| | | in the Software without restriction, including without limitation the rights |
| | | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| | | copies of the Software, and to permit persons to whom the Software is |
| | | furnished to do so, subject to the following conditions: |
| | | |
| | | The above copyright notice and this permission notice shall be included in all |
| | | copies or substantial portions of the Software. |
| | | |
| | | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| | | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| | | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| | | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| | | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| | | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| | | SOFTWARE. |
| | |
| | | ## app-web-examination-yudao |
| | | **严è声æï¼ç°å¨ãæªæ¥é½ä¸ä¼æåä¸çæ¬ï¼ææä»£ç å
¨é¨å¼æº!ï¼** |
| | | |
| | | **ãæå欢å代ç ï¼ä¹æ¤ä¸ç²ã** |
| | | **ãæå欢å弿ºï¼ä»¥æ¤ä¸ºä¹ã** |
| | | |
| | | æ ð¶ å¨ä¸æµ·è°è¦å¥æï¼æ©ä¸æå¨ top3 大åè®¤çæ¬ç ï¼å¤éä¸ºå¼æºåè´¡ç®ã |
| | | |
| | | 妿è¿ä¸ªé¡¹ç®è®©ä½ æææ¶è·ï¼è®°å¾ Star å
³æ³¨å¦ï¼è¿å¯¹ææ¯é常ä¸éçé¼å±ä¸æ¯æã |
| | | |
| | | ## ð¶ æ°æå¿
读 |
| | | |
| | | * nodejs > 16.18.0 && pnpm > 8.6.0 (强å¶ä½¿ç¨pnpm) |
| | | * æ¼ç¤ºå°åãVue3 + element-plusãï¼<http://dashboard-vue3.yudao.iocoder.cn> |
| | | * æ¼ç¤ºå°åãVue3 + vben5.0(ant-design-vue)ãï¼<http://dashboard-vben.yudao.iocoder.cn> |
| | | * æ¼ç¤ºå°åãVue2 + element-uiãï¼<http://dashboard.yudao.iocoder.cn> |
| | | * å¯å¨ææ¡£ï¼<https://doc.iocoder.cn/quick-start/> |
| | | * è§é¢æç¨ï¼<https://doc.iocoder.cn/video/> |
| | | |
| | | ## ð¯ å¹³å°ç®ä» |
| | | |
| | | **èé**ï¼ä»¥å¼åè
为ä¸å¿ï¼æé ä¸å½ç¬¬ä¸æµçå¿«éå¼åå¹³å°ï¼å
¨é¨å¼æºï¼ä¸ªäººä¸ä¼ä¸å¯ 100% å
费使ç¨ã |
| | | |
| | | * éç¨ [vue-element-plus-admin](https://gitee.com/kailong110120130/vue-element-plus-admin) å®ç° |
| | | * æ¹æ¢ saasï¼èªå¨å¼å
¥çåè½ |
| | | * ä½¿ç¨ Element Plus å
è´¹å¼æºçä¸åå°æ¨¡çï¼å
·å¤å¦ä¸ç¹æ§ï¼ |
| | | |
| | |  |
| | | |
| | | * **ææ°ææ¯æ **ï¼ä½¿ç¨ Vue3ãVite4 çåç«¯åæ²¿ææ¯å¼å |
| | | * **TypeScript**: åºç¨ç¨åºçº§ JavaScript çè¯è¨ |
| | | * **主é¢**: å¯é
ç½®çä¸»é¢ |
| | | * **å½é
å**ï¼å
ç½®å®åçå½é
åæ¹æ¡ |
| | | * **æé**ï¼å
ç½®å®åçå¨æè·¯ç±æéçææ¹æ¡ |
| | | * **ç»ä»¶**ï¼äºæ¬¡å°è£
äºå¤ä¸ªå¸¸ç¨çç»ä»¶ |
| | | * **示ä¾**ï¼å
置丰å¯çç¤ºä¾ |
| | | |
| | | ## ææ¯æ |
| | | |
| | | | æ¡æ¶ | 说æ | çæ¬ | |
| | | |----------------------------------------------------------------------|------------------|--------| |
| | | | [Vue](https://staging-cn.vuejs.org/) | Vue æ¡æ¶ | 3.3.8 | |
| | | | [Vite](https://cn.vitejs.dev//) | å¼åä¸æå»ºå·¥å
· | 4.5.0 | |
| | | | [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.4.2 | |
| | | | [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript çè¶
é | 5.2.2 | |
| | | | [pinia](https://pinia.vuejs.org/) | Vue åå¨åº æ¿ä»£ vuex5 | 2.1.7 | |
| | | | [vueuse](https://vueuse.org/) | 常ç¨å·¥å
·é | 10.6.1 | |
| | | | [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | å½é
å | 9.6.5 | |
| | | | [vue-router](https://router.vuejs.org/) | Vue è·¯ç± | 4.2.5 | |
| | | | [unocss](https://uno.antfu.me/) | åå css | 0.57.4 | |
| | | | [iconify](https://icon-sets.iconify.design/) | å¨çº¿å¾æ åº | 3.1.1 | |
| | | | [wangeditor](https://www.wangeditor.com/) | 坿æ¬ç¼è¾å¨ | 5.1.23 | |
| | | |
| | | ## å¼åå·¥å
· |
| | | |
| | | æ¨è VS Code å¼åï¼é
åæä»¶å¦ä¸ï¼ |
| | | |
| | | | æä»¶å | åè½ | |
| | | |-------------------------------|---------------------| |
| | | | Vue - Official | Vue ä¸ TypeScript æ¯æ | |
| | | | unocss | unocss for vscode | |
| | | | Iconify IntelliSense | Iconify é¢è§åæç´¢ | |
| | | | i18n Ally | å½é
åæºè½æç¤º | |
| | | | Stylelint | Css æ ¼å¼å | |
| | | | Prettier | ä»£ç æ ¼å¼å | |
| | | | ESLint | èæ¬ä»£ç æ£æ¥ | |
| | | | DotENV | env æä»¶é«äº® | |
| | | |
| | | ## ð¥ åç«¯æ¶æ |
| | | |
| | | æ¯æ Spring BootãSpring Cloud ä¸¤ç§æ¶æï¼ |
| | | |
| | | â Spring Boot å使¶æï¼<https://doc.iocoder.cn> |
| | | |
| | |  |
| | | |
| | | â¡ Spring Cloud å¾®æå¡æ¶æï¼<https://cloud.iocoder.cn> |
| | | |
| | |  |
| | | |
| | | ## å
ç½®åè½ |
| | | |
| | | ç³»ç»å
ç½®å¤ç§å¤ç§ä¸å¡åè½ï¼å¯ä»¥ç¨äºå¿«éä½ çä¸å¡ç³»ç»ï¼ |
| | | |
| | | ç³»ç»å
ç½®å¤ç§å¤ç§ä¸å¡åè½ï¼å¯ä»¥ç¨äºå¿«éä½ çä¸å¡ç³»ç»ï¼ |
| | | |
| | |  |
| | | |
| | | * éç¨æ¨¡åï¼å¿
éï¼ï¼ç³»ç»åè½ãåºç¡è®¾æ½ |
| | | * éç¨æ¨¡åï¼å¯éï¼ï¼å·¥ä½æµç¨ãæ¯ä»ç³»ç»ãæ°æ®æ¥è¡¨ãä¼åä¸å¿ |
| | | * ä¸å¡ç³»ç»ï¼æéï¼ï¼ERP ç³»ç»ãCRM ç³»ç»ãååç³»ç»ã微信å
¬ä¼å·ãAI 大模å |
| | | |
| | | ### ç³»ç»åè½ |
| | | |
| | | | | åè½ | æè¿° | |
| | | |-----|-------|---------------------------------| |
| | | | | ç¨æ·ç®¡ç | ç¨æ·æ¯ç³»ç»æä½è
ï¼è¯¥åè½ä¸»è¦å®æç³»ç»ç¨æ·é
ç½® | |
| | | | âï¸ | å¨çº¿ç¨æ· | å½åç³»ç»ä¸æ´»è·ç¨æ·ç¶æçæ§ï¼æ¯ææå¨è¸¢ä¸çº¿ | |
| | | | | è§è²ç®¡ç | è§è²èåæéåé
ã设置è§è²ææºæè¿è¡æ°æ®èå´æéåå | |
| | | | | èå管ç | é
置系ç»èåãæä½æéãæé®æéæ è¯çï¼æ¬å°ç¼åæä¾æ§è½ | |
| | | | | é¨é¨ç®¡ç | é
置系ç»ç»ç»æºæï¼å
¬å¸ãé¨é¨ãå°ç»ï¼ï¼æ ç»æå±ç°æ¯ææ°æ®æé | |
| | | | | å²ä½ç®¡ç | é
置系ç»ç¨æ·æå±æ
ä»»èå¡ | |
| | | | ð | ç§æ·ç®¡ç | é
置系ç»ç§æ·ï¼æ¯æ SaaS åºæ¯ä¸çå¤ç§æ·åè½ | |
| | | | ð | ç§æ·å¥é¤ | é
ç½®ç§æ·å¥é¤ï¼èªå®æ¯ä¸ªç§æ·çèåãæä½ãæé®çæé | |
| | | | | åå
¸ç®¡ç | 对系ç»ä¸ç»å¸¸ä½¿ç¨çä¸äºè¾ä¸ºåºå®çæ°æ®è¿è¡ç»´æ¤ | |
| | | | ð | ç信管ç | çä¿¡æ¸ éãçæ¯æ¨¡æ¿ãçä¿¡æ¥å¿ï¼å¯¹æ¥é¿éäºãè
¾è®¯äºç主æµçä¿¡å¹³å° | |
| | | | ð | é®ä»¶ç®¡ç | é®ç®±è´¦å·ãé®ä»¶æ¨¡çãé®ä»¶å鿥å¿ï¼æ¯æææé®ä»¶å¹³å° | |
| | | | ð | ç«å
ä¿¡ | ç³»ç»å
çæ¶æ¯éç¥ï¼æä¾ç«å
信模çãç«å
ä¿¡æ¶æ¯ | |
| | | | ð | æä½æ¥å¿ | ç³»ç»æ£å¸¸æä½æ¥å¿è®°å½åæ¥è¯¢ï¼éæ Swagger çææ¥å¿å
容 | |
| | | | âï¸ | ç»å½æ¥å¿ | ç³»ç»ç»å½æ¥å¿è®°å½æ¥è¯¢ï¼å
å«ç»å½å¼å¸¸ | |
| | | | ð | é误ç 管ç | ç³»ç»ææé误ç ç管çï¼å¯å¨çº¿ä¿®æ¹é误æç¤ºï¼æ ééå¯æå¡ | |
| | | | | éç¥å
¬å | ç³»ç»éç¥å
¬åä¿¡æ¯åå¸ç»´æ¤ | |
| | | | ð | ææè¯ | é
ç½®ç³»ç»ææè¯ï¼æ¯ææ ç¾åç» | |
| | | | ð | åºç¨ç®¡ç | 管ç SSO åç¹ç»å½çåºç¨ï¼æ¯æå¤ç§ OAuth2 æææ¹å¼ | |
| | | | ð | å°åºç®¡ç | å±ç¤ºç份ãåå¸ãåºéçåå¸ä¿¡æ¯ï¼æ¯æ IP 对åºåå¸ | |
| | | |
| | |  |
| | | |
| | | ### 工使µç¨ |
| | | |
| | |  |
| | | |
| | | åºäº Flowable æå»ºï¼å¯æ¯æä¿¡åï¼å½äº§ï¼æ°æ®åºï¼æ»¡è¶³ä¸å½ç¹è²æµç¨æä½ï¼ |
| | | |
| | | | BPMN è®¾è®¡å¨ | éé/é£ä¹¦è®¾è®¡å¨ | |
| | | |-----------------------------|-------------------------------| |
| | | |  |  | |
| | | |
| | | > åç»å¤´é¨ä¼ä¸ç产éªè¯ï¼å·¥ä½æµå¼æé¡»æ é
仿éé/é£ä¹¦ + BPMN å设计å¨ï¼ï¼ï¼ |
| | | > |
| | | > åè
æ¯æè½»éé
ç½®ç®åæµç¨ï¼åè
å®ç°å¤æåºæ¯æ·±åº¦ç¼æ |
| | | |
| | | | åè½å表 | åè½æè¿° | æ¯å¦å®æ | |
| | | |------------|-------------------------------------------------------------------------------------|------| |
| | | | SIMPLE è®¾è®¡å¨ | 仿éé/é£ä¹¦è®¾è®¡å¨ï¼æ¯æææ½æå»ºè¡¨åæµç¨ï¼10 åéå¿«éå®æå®¡æ¹æµç¨é
ç½® | â
| |
| | | | BPMN è®¾è®¡å¨ | åºäº BPMN æ åå¼åï¼éé
夿ä¸å¡åºæ¯ï¼æ»¡è¶³å¤å±çº§å®¡æ¹åæµç¨èªå¨åéæ± | â
| |
| | | | ä¼ç¾ | åä¸ä¸ªå®¡æ¹èç¹è®¾ç½®å¤ä¸ªäººï¼å¦ AãBãC ä¸äººï¼ä¸äººä¼åæ¶æ¶å°å¾
åä»»å¡ï¼ï¼éå
¨é¨åæä¹åï¼å®¡æ¹æå¯å°ä¸ä¸å®¡æ¹èç¹ | â
| |
| | | | æç¾ | åä¸ä¸ªå®¡æ¹èç¹è®¾ç½®å¤ä¸ªäººï¼ä»»æä¸ä¸ªäººå¤çåï¼å°±è½è¿å
¥ä¸ä¸ä¸ªèç¹ | â
| |
| | | | 便¬¡å®¡æ¹ | ï¼é¡ºåºä¼ç¾ï¼åä¸ä¸ªå®¡æ¹èç¹è®¾ç½®å¤ä¸ªäººï¼å¦ AãBãC ä¸äººï¼ï¼ä¸äººæé¡ºåºä¾æ¬¡æ¶å°å¾
åï¼å³ A å
审æ¹ï¼A æäº¤å B æè½å®¡æ¹ï¼éå
¨é¨åæä¹åï¼å®¡æ¹æå¯å°ä¸ä¸å®¡æ¹èç¹ | â
| |
| | | | æé | å°å®¡æ¹ç»æéç¥ç»æé人ï¼åä¸ä¸ªå®¡æ¹é»è®¤æéï¼ä¸é夿éç»åä¸äºº | â
| |
| | | | 驳å | ï¼éåï¼å°å®¡æ¹éç½®åéç»æèç¹ï¼éæ°å®¡æ¹ãå¯é©³åè³å起人ãä¸ä¸èç¹ãä»»æèç¹ | â
| |
| | | | 转å | A 转ç»å
¶ B 审æ¹ï¼B 审æ¹åï¼è¿å
¥ä¸ä¸èç¹ | â
| |
| | | | å§æ´¾ | A 转ç»å
¶ B 审æ¹ï¼B 审æ¹åï¼è½¬ç» Aï¼A ç»§ç»å®¡æ¹åè¿å
¥ä¸ä¸èç¹ | â
| |
| | | | å ç¾ | å
许å½å审æ¹äººæ ¹æ®éè¦ï¼èªè¡å¢å å½åèç¹ç审æ¹äººï¼æ¯æååãååå ç¾ | â
| |
| | | | åç¾ | ï¼åæ¶å ç¾ï¼å¨å½å审æ¹äººæä½ä¹åï¼åå°å®¡æ¹äºº | â
| |
| | | | æ¤é | ï¼åæ¶æµç¨ï¼æµç¨å起人ï¼å¯ä»¥å¯¹æµç¨è¿è¡æ¤éå¤ç | â
| |
| | | | ç»æ¢ | ç³»ç»ç®¡çåï¼å¨ä»»æèç¹ç»æ¢æµç¨å®ä¾ | â
| |
| | | | 表åæé | æ¯ææææ½é
置表åï¼æ¯ä¸ªå®¡æ¹èç¹å¯é
ç½®åªè¯»ãç¼è¾ãéèæé | â
| |
| | | | è¶
æ¶å®¡æ¹ | é
ç½®è¶
æ¶å®¡æ¹æ¶é´ï¼è¶
æ¶åèªå¨è§¦å审æ¹éè¿ãä¸éè¿ã驳åçæä½ | â
| |
| | | | èªå¨æé | é
ç½®æéæ¶é´ï¼å°è¾¾æ¶é´åèªå¨è§¦åçä¿¡ãé®ç®±ãç«å
ä¿¡çéç¥æéï¼æ¯æèªå®ä¹é夿é颿¬¡ | â
| |
| | | | ç¶åæµç¨ | 主æµç¨è®¾ç½®åæµç¨èç¹ï¼åæµç¨èç¹ä¼èªå¨è§¦ååæµç¨ãåæµç¨ç»æåï¼ä¸»æµç¨æä¼æ§è¡ï¼ç»§ç»å¾ä¸ä¸æ§è¡ï¼ï¼æ¯æåæ¥åæµç¨ã弿¥åæµç¨ | â
| |
| | | | æ¡ä»¶åæ¯ | ï¼æå®åæ¯ï¼ç¨äºå¨æµç¨ä¸å®ç°å³çï¼å³æ ¹æ®æ¡ä»¶éæ©ä¸ä¸ªåæ¯æ§è¡ | â
| |
| | | | å¹¶è¡åæ¯ | å
è®¸å°æµç¨åæå¤æ¡åæ¯ï¼ä¸è¿è¡æ¡ä»¶å¤æï¼ææåæ¯é½ä¼æ§è¡ | â
| |
| | | | å
容忝 | ï¼æ¡ä»¶åæ¯ + å¹¶è¡åæ¯çç»åä½ï¼å
许åºäºæ¡ä»¶éæ©å¤æ¡åæ¯æ§è¡ï¼ä½å¦ææ²¡æä»»ä½ä¸ä¸ªåæ¯æ»¡è¶³æ¡ä»¶ï¼åå¯ä»¥éæ©é»è®¤åæ¯ | â
| |
| | | | è·¯ç±åæ¯ | æ ¹æ®æ¡ä»¶éæ©ä¸ä¸ªåæ¯æ§è¡ï¼éå®åå°æå®é
ç½®èç¹ï¼ï¼ä¹å¯ä»¥éæ©é»è®¤åæ¯æ§è¡ï¼ç»§ç»å¾ä¸æ§è¡ï¼ | â
| |
| | | | 触åèç¹ | æ§è¡å°è¯¥èç¹ï¼è§¦å HTTP 请æ±ãHTTP åè°ãæ´æ°æ°æ®ãå 餿°æ®ç | â
| |
| | | | å»¶è¿èç¹ | æ§è¡å°è¯¥èç¹ï¼å®¡æ¹çå¾
䏿®µæ¶é´åæ§è¡ï¼æ¯æåºå®æ¶é¿ãåºå®æ¥æç | â
| |
| | | | æå±è®¾ç½® | æµç¨åç½®/åç½®éç¥ï¼èç¹ï¼ä»»å¡ï¼åç½®ãåç½®éç¥ï¼æµç¨æ¥è¡¨ï¼èªå¨å®¡æ¹å»éï¼èªå®æµç¨ç¼å·ãæ é¢ãæè¦ï¼æµç¨æ¥è¡¨ç | â
| |
| | | |
| | | ### æ¯ä»ç³»ç» |
| | | |
| | | | | åè½ | æè¿° | |
| | | |-----|------|---------------------------| |
| | | | ð | åºç¨ä¿¡æ¯ | é
ç½®åæ·çåºç¨ä¿¡æ¯ï¼å¯¹æ¥æ¯ä»å®ã微信çå¤ä¸ªæ¯ä»æ¸ é | |
| | | | ð | æ¯ä»è®¢å | æ¥çç¨æ·åèµ·çæ¯ä»å®ã微信ççãæ¯ä»ã订å | |
| | | | ð | 鿬¾è®¢å | æ¥çç¨æ·åèµ·çæ¯ä»å®ã微信ççã鿬¾ã订å | |
| | | | ð | åè°éç¥ | æ¥çæ¯ä»åè°ä¸å¡çãæ¯ä»ãã鿬¾ãçéç¥ç»æ | |
| | | | ð | æ¥å
¥ç¤ºä¾ | æä¾æ¥å
¥æ¯ä»ç³»ç»çãæ¯ä»ãã鿬¾ãçåè½å®æ | |
| | | |
| | | ### åºç¡è®¾æ½ |
| | | |
| | | | | åè½ | æè¿° | |
| | | |-----|-----------|----------------------------------------------| |
| | | | ð | 代ç çæ | åå端代ç ççæï¼JavaãVueãSQLãåå
æµè¯ï¼ï¼æ¯æ CRUD ä¸è½½ | |
| | | | ð | ç³»ç»æ¥å£ | åºäº Swagger èªå¨çæç¸å
³ç RESTful API æ¥å£ææ¡£ | |
| | | | ð | æ°æ®åºææ¡£ | åºäº Screw èªå¨çææ°æ®åºææ¡£ï¼æ¯æå¯¼åº WordãHTMLãMD æ ¼å¼ | |
| | | | | 表åæå»º | æå¨è¡¨åå
ç´ çæç¸åºç HTML 代ç ï¼æ¯æå¯¼åº JSONãVue æä»¶ | |
| | | | ð | é
置管ç | 对系ç»å¨æé
置常ç¨åæ°ï¼æ¯æ SpringBoot å è½½ | |
| | | | âï¸ | 宿¶ä»»å¡ | å¨çº¿ï¼æ·»å ãä¿®æ¹ãå é¤)ä»»å¡è°åº¦å
嫿§è¡ç»ææ¥å¿ | |
| | | | ð | æä»¶æå¡ | æ¯æå°æä»¶åå¨å° S3ï¼MinIOãé¿éäºãè
¾è®¯äºãä¸çäºï¼ãæ¬å°ãFTPãæ°æ®åºç | |
| | | | ð | WebSocket | æä¾ WebSocket æ¥å
¥ç¤ºä¾ï¼æ¯æä¸å¯¹ä¸ãä¸å¯¹å¤åéæ¹å¼ | |
| | | | ð | API æ¥å¿ | å
æ¬ RESTful API è®¿é®æ¥å¿ãå¼å¸¸æ¥å¿ä¸¤é¨åï¼æ¹ä¾¿ææ¥ API ç¸å
³çé®é¢ | |
| | | | | MySQL çæ§ | çè§å½åç³»ç»æ°æ®åºè¿æ¥æ± ç¶æï¼å¯è¿è¡åæSQLæ¾åºç³»ç»æ§è½ç¶é¢ | |
| | | | | Redis çæ§ | çæ§ Redis æ°æ®åºçä½¿ç¨æ
åµï¼ä½¿ç¨ç Redis Key 管ç | |
| | | | ð | æ¶æ¯éå | åºäº Redis å®ç°æ¶æ¯éåï¼Stream æä¾é群æ¶è´¹ï¼Pub/Sub æä¾å¹¿ææ¶è´¹ | |
| | | | ð | Java çæ§ | åºäº Spring Boot Admin å®ç° Java åºç¨ççæ§ | |
| | | | ð | é¾è·¯è¿½è¸ª | æ¥å
¥ SkyWalking ç»ä»¶ï¼å®ç°é¾è·¯è¿½è¸ª | |
| | | | ð | æ¥å¿ä¸å¿ | æ¥å
¥ SkyWalking ç»ä»¶ï¼å®ç°æ¥å¿ä¸å¿ | |
| | | | ð | æå¡ä¿é | åºäº Redis å®ç°åå¸å¼éãå¹çãéæµåè½ï¼æ»¡è¶³é«å¹¶ååºæ¯ | |
| | | | ð | æ¥å¿æå¡ | è½»é级æ¥å¿ä¸å¿ï¼æ¥çè¿ç¨æå¡å¨çæ¥å¿ | |
| | | | ð | åå
æµè¯ | åºäº JUnit + Mockito å®ç°åå
æµè¯ï¼ä¿è¯åè½çæ£ç¡®æ§ã代ç çè´¨éç | |
| | | |
| | |  |
| | | |
| | | ### æ°æ®æ¥è¡¨ |
| | | |
| | | | | åè½ | æè¿° | |
| | | |-----|-------|--------------------| |
| | | | ð | æ¥è¡¨è®¾è®¡å¨ | æ¯ææ°æ®æ¥è¡¨ãå¾å½¢æ¥è¡¨ãæå°è®¾è®¡ç | |
| | | | ð | 大å±è®¾è®¡å¨ | ææ½çææ°æ®å¤§å±ï¼å
ç½®å åç§å¾è¡¨ç»ä»¶ | |
| | | |
| | | ### 微信å
¬ä¼å· |
| | | |
| | | | | åè½ | æè¿° | |
| | | |----|--------|-------------------------------| |
| | | | ð | è´¦å·ç®¡ç | é
ç½®æ¥å
¥ç微信å
¬ä¼å·ï¼å¯æ¯æå¤ä¸ªå
¬ä¼å· | |
| | | | ð | æ°æ®ç»è®¡ | ç»è®¡å
¬ä¼å·çç¨æ·å¢åãç´¯è®¡ç¨æ·ãæ¶æ¯æ¦åµãæ¥å£åæçæ°æ® | |
| | | | ð | ç²ä¸ç®¡ç | æ¥çå·²å
³æ³¨ãåå
³çç²ä¸å表ï¼å¯å¯¹ç²ä¸è¿è¡åæ¥ãææ ç¾çæä½ | |
| | | | ð | æ¶æ¯ç®¡ç | æ¥çç²ä¸åéçæ¶æ¯å表ï¼å¯ä¸»å¨åå¤ç²ä¸æ¶æ¯ | |
| | | | ð | æ¨¡çæ¶æ¯ | é
ç½®åå鿍¡çæ¶æ¯ï¼ç¨äºåç²ä¸æ¨ééç¥ç±»æ¶æ¯ | |
| | | | ð | èªå¨åå¤ | èªå¨åå¤ç²ä¸åéçæ¶æ¯ï¼æ¯æå
³æ³¨åå¤ãæ¶æ¯åå¤ãå
³é®ååå¤ | |
| | | | ð | æ ç¾ç®¡ç | 对å
¬ä¼å·çæ ç¾è¿è¡åå»ºãæ¥è¯¢ãä¿®æ¹ãå é¤çæä½ | |
| | | | ð | èå管ç | èªå®ä¹å
¬ä¼å·çèåï¼ä¹å¯ä»¥ä»å
¬ä¼å·åæ¥èå | |
| | | | ð | ç´ æç®¡ç | 管çå
¬ä¼å·çå¾çãè¯é³ãè§é¢çç´ æï¼æ¯æå¨çº¿ææ¾è¯é³ãè§é¢ | |
| | | | ð | 徿è稿箱 | æ°å¢å¸¸ç¨çå¾æç´ æå°è稿箱ï¼å¯åå¸å°å
¬ä¼å· | |
| | | | ð | 徿åè¡¨è®°å½ | æ¥çå·²å叿åçå¾æç´ æï¼æ¯æå é¤æä½ | |
| | | |
| | | ### ååç³»ç» |
| | | |
| | | æ¼ç¤ºå°åï¼<https://doc.iocoder.cn/mall-preview/> |
| | | |
| | |  |
| | | |
| | |  |
| | | |
| | | ### ERP ç³»ç» |
| | | |
| | | æ¼ç¤ºå°åï¼<https://doc.iocoder.cn/erp-preview/> |
| | | |
| | |  |
| | | |
| | | ### CRM ç³»ç» |
| | | |
| | | æ¼ç¤ºå°åï¼<https://doc.iocoder.cn/crm-preview/> |
| | | |
| | |  |
| | | |
| | | ### AI 大模å |
| | | |
| | | æ¼ç¤ºå°åï¼<https://doc.iocoder.cn/ai-preview/> |
| | | |
| | |  |
| | | |
| | |  |
| | | |
| | | ## ð· æ¼ç¤ºå¾ |
| | | |
| | | ### ç³»ç»åè½ |
| | | |
| | | | 模å | biu | biu | biu | |
| | | |----------|-----------------------------|---------------------------|--------------------------| |
| | | | ç»å½ & é¦é¡µ |  |  |  | |
| | | | ç¨æ· & åºç¨ |  |  |  | |
| | | | ç§æ· & å¥é¤ |  |  | - | |
| | | | é¨é¨ & å²ä½ |  |  | - | |
| | | | èå & è§è² |  |  | - | |
| | | | 审计æ¥å¿ |  |  | - | |
| | | | çä¿¡ |  |  |  | |
| | | | åå
¸ & ææè¯ |  |  |  | |
| | | | é误ç & éç¥ |  |  | - | |
| | | |
| | | ### 工使µç¨ |
| | | |
| | | | 模å | biu | biu | biu | |
| | | |---------|---------------------------------|---------------------------------|---------------------------------| |
| | | | æµç¨æ¨¡å |  |  |  | |
| | | | 表å & åç» |  |  | - | |
| | | | æçæµç¨ |  |  |  | |
| | | | å¾
å & å·²å |  |  |  | |
| | | | OA 请å |  |  |  | |
| | | |
| | | ### åºç¡è®¾æ½ |
| | | |
| | | | 模å | biu | biu | biu | |
| | | |---------------|-------------------------------|-----------------------------|---------------------------| |
| | | | 代ç çæ |  |  | - | |
| | | | ææ¡£ |  |  | - | |
| | | | æä»¶ & é
ç½® |  |  |  | |
| | | | 宿¶ä»»å¡ |  |  | - | |
| | | | API æ¥å¿ |  |  | - | |
| | | | MySQL & Redis |  |  | - | |
| | | | çæ§å¹³å° |  |  |  | |
| | | |
| | | ### æ¯ä»ç³»ç» |
| | | |
| | | | 模å | biu | biu | biu | |
| | | |---------|---------------------------|---------------------------------|---------------------------------| |
| | | | åå®¶ & åºç¨ |  |  |  | |
| | | | æ¯ä» & 鿬¾ |  |  | --- | |
| | | |
| | | ### æ°æ®æ¥è¡¨ |
| | | |
| | | | 模å | biu | biu | biu | |
| | | |-------|---------------------------------|---------------------------------|---------------------------------------| |
| | | | æ¥è¡¨è®¾è®¡å¨ |  |  |  | |
| | | | 大å±è®¾è®¡å¨ |  |  |  | |
| New file |
| | |
| | | import { resolve } from 'path' |
| | | import Vue from '@vitejs/plugin-vue' |
| | | import VueJsx from '@vitejs/plugin-vue-jsx' |
| | | import progress from 'vite-plugin-progress' |
| | | import EslintPlugin from 'vite-plugin-eslint' |
| | | import PurgeIcons from 'vite-plugin-purge-icons' |
| | | import { ViteEjsPlugin } from 'vite-plugin-ejs' |
| | | // @ts-ignore |
| | | import ElementPlus from 'unplugin-element-plus/vite' |
| | | import AutoImport from 'unplugin-auto-import/vite' |
| | | import Components from 'unplugin-vue-components/vite' |
| | | import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' |
| | | import viteCompression from 'vite-plugin-compression' |
| | | import topLevelAwait from 'vite-plugin-top-level-await' |
| | | import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite' |
| | | import { createSvgIconsPlugin } from 'vite-plugin-svg-icons-ng' |
| | | import UnoCSS from 'unocss/vite' |
| | | |
| | | export function createVitePlugins() { |
| | | const root = process.cwd() |
| | | |
| | | // è·¯å¾æ¥æ¾ |
| | | function pathResolve(dir: string) { |
| | | return resolve(root, '.', dir) |
| | | } |
| | | |
| | | return [ |
| | | Vue(), |
| | | VueJsx(), |
| | | UnoCSS(), |
| | | progress(), |
| | | PurgeIcons(), |
| | | ElementPlus({}), |
| | | AutoImport({ |
| | | include: [ |
| | | /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx |
| | | /\.vue$/, |
| | | /\.vue\?vue/, // .vue |
| | | /\.md$/ // .md |
| | | ], |
| | | imports: [ |
| | | 'vue', |
| | | 'vue-router', |
| | | // å¯é¢å¤æ·»å éè¦ autoImport çç»ä»¶ |
| | | { |
| | | '@/hooks/web/useI18n': ['useI18n'], |
| | | '@/hooks/web/useMessage': ['useMessage'], |
| | | '@/hooks/web/useTable': ['useTable'], |
| | | '@/hooks/web/useCrudSchemas': ['useCrudSchemas'], |
| | | '@/utils/formRules': ['required'], |
| | | '@/utils/dict': ['DICT_TYPE'] |
| | | } |
| | | ], |
| | | dts: 'src/types/auto-imports.d.ts', |
| | | resolvers: [ElementPlusResolver()], |
| | | eslintrc: { |
| | | enabled: false, // Default `false` |
| | | filepath: './.eslintrc-auto-import.json', // Default `./.eslintrc-auto-import.json` |
| | | globalsPropValue: true // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable') |
| | | } |
| | | }), |
| | | Components({ |
| | | // çæèªå®ä¹ `auto-components.d.ts` å
¨å±å£°æ |
| | | dts: 'src/types/auto-components.d.ts', |
| | | // èªå®ä¹ç»ä»¶çè§£æå¨ |
| | | resolvers: [ElementPlusResolver()], |
| | | globs: ["src/components/**/**.{vue, md}", '!src/components/DiyEditor/components/mobile/**'] |
| | | }), |
| | | EslintPlugin({ |
| | | cache: false, |
| | | include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // æ£æ¥çæä»¶ |
| | | }), |
| | | VueI18nPlugin({ |
| | | runtimeOnly: true, |
| | | compositionOnly: true, |
| | | include: [resolve(__dirname, 'src/locales/**')] |
| | | }), |
| | | createSvgIconsPlugin({ |
| | | iconDirs: [pathResolve('src/assets/svgs')], |
| | | symbolId: 'icon-[dir]-[name]', |
| | | }), |
| | | viteCompression({ |
| | | verbose: true, // æ¯å¦å¨æ§å¶å°è¾åºåç¼©ç»æ |
| | | disable: false, // æ¯å¦ç¦ç¨ |
| | | threshold: 10240, // ä½ç§¯å¤§äº threshold æä¼è¢«å缩,åä½ b |
| | | algorithm: 'gzip', // åç¼©ç®æ³,å¯é [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw'] |
| | | ext: '.gz', // çæçå缩å
åç¼ |
| | | deleteOriginFile: false //åç¼©åæ¯å¦å 餿ºæä»¶ |
| | | }), |
| | | ViteEjsPlugin(), |
| | | topLevelAwait({ |
| | | // https://juejin.cn/post/7152191742513512485 |
| | | // The export name of top-level await promise for each chunk module |
| | | promiseExportName: '__tla', |
| | | // The function to generate import names of top-level await promise in each chunk module |
| | | promiseImportName: (i) => `__tla_${i}` |
| | | }) |
| | | ] |
| | | } |
| New file |
| | |
| | | const include = [ |
| | | 'qs', |
| | | 'url', |
| | | 'vue', |
| | | 'sass', |
| | | 'mitt', |
| | | 'axios', |
| | | 'pinia', |
| | | 'dayjs', |
| | | 'qrcode', |
| | | 'unocss', |
| | | 'vue-router', |
| | | 'vue-types', |
| | | 'vue-i18n', |
| | | 'crypto-js', |
| | | 'cropperjs', |
| | | 'lodash-es', |
| | | 'nprogress', |
| | | 'web-storage-cache', |
| | | '@iconify/iconify', |
| | | '@vueuse/core', |
| | | '@zxcvbn-ts/core', |
| | | 'echarts/core', |
| | | 'echarts/charts', |
| | | 'echarts/components', |
| | | 'echarts/renderers', |
| | | 'echarts-wordcloud', |
| | | '@wangeditor-next/editor', |
| | | '@wangeditor-next/editor-for-vue', |
| | | '@microsoft/fetch-event-source', |
| | | 'markdown-it', |
| | | 'markmap-view', |
| | | 'markmap-lib', |
| | | 'markmap-toolbar', |
| | | 'highlight.js', |
| | | 'element-plus', |
| | | 'element-plus/es', |
| | | 'element-plus/es/locale/lang/zh-cn', |
| | | 'element-plus/es/locale/lang/en', |
| | | 'element-plus/es/components/avatar/style/css', |
| | | 'element-plus/es/components/space/style/css', |
| | | 'element-plus/es/components/backtop/style/css', |
| | | 'element-plus/es/components/form/style/css', |
| | | 'element-plus/es/components/radio-group/style/css', |
| | | 'element-plus/es/components/radio/style/css', |
| | | 'element-plus/es/components/checkbox/style/css', |
| | | 'element-plus/es/components/checkbox-group/style/css', |
| | | 'element-plus/es/components/switch/style/css', |
| | | 'element-plus/es/components/time-picker/style/css', |
| | | 'element-plus/es/components/date-picker/style/css', |
| | | 'element-plus/es/components/descriptions/style/css', |
| | | 'element-plus/es/components/descriptions-item/style/css', |
| | | 'element-plus/es/components/link/style/css', |
| | | 'element-plus/es/components/tooltip/style/css', |
| | | 'element-plus/es/components/drawer/style/css', |
| | | 'element-plus/es/components/dialog/style/css', |
| | | 'element-plus/es/components/checkbox-button/style/css', |
| | | 'element-plus/es/components/option-group/style/css', |
| | | 'element-plus/es/components/radio-button/style/css', |
| | | 'element-plus/es/components/cascader/style/css', |
| | | 'element-plus/es/components/color-picker/style/css', |
| | | 'element-plus/es/components/input-number/style/css', |
| | | 'element-plus/es/components/rate/style/css', |
| | | 'element-plus/es/components/select-v2/style/css', |
| | | 'element-plus/es/components/tree-select/style/css', |
| | | 'element-plus/es/components/slider/style/css', |
| | | 'element-plus/es/components/time-select/style/css', |
| | | 'element-plus/es/components/autocomplete/style/css', |
| | | 'element-plus/es/components/image-viewer/style/css', |
| | | 'element-plus/es/components/upload/style/css', |
| | | 'element-plus/es/components/col/style/css', |
| | | 'element-plus/es/components/form-item/style/css', |
| | | 'element-plus/es/components/alert/style/css', |
| | | 'element-plus/es/components/breadcrumb/style/css', |
| | | 'element-plus/es/components/select/style/css', |
| | | 'element-plus/es/components/input/style/css', |
| | | 'element-plus/es/components/breadcrumb-item/style/css', |
| | | 'element-plus/es/components/tag/style/css', |
| | | 'element-plus/es/components/pagination/style/css', |
| | | 'element-plus/es/components/table/style/css', |
| | | 'element-plus/es/components/table-v2/style/css', |
| | | 'element-plus/es/components/table-column/style/css', |
| | | 'element-plus/es/components/card/style/css', |
| | | 'element-plus/es/components/row/style/css', |
| | | 'element-plus/es/components/button/style/css', |
| | | 'element-plus/es/components/menu/style/css', |
| | | 'element-plus/es/components/sub-menu/style/css', |
| | | 'element-plus/es/components/menu-item/style/css', |
| | | 'element-plus/es/components/option/style/css', |
| | | 'element-plus/es/components/dropdown/style/css', |
| | | 'element-plus/es/components/dropdown-menu/style/css', |
| | | 'element-plus/es/components/dropdown-item/style/css', |
| | | 'element-plus/es/components/skeleton/style/css', |
| | | 'element-plus/es/components/skeleton/style/css', |
| | | 'element-plus/es/components/backtop/style/css', |
| | | 'element-plus/es/components/menu/style/css', |
| | | 'element-plus/es/components/sub-menu/style/css', |
| | | 'element-plus/es/components/menu-item/style/css', |
| | | 'element-plus/es/components/dropdown/style/css', |
| | | 'element-plus/es/components/tree/style/css', |
| | | 'element-plus/es/components/dropdown-menu/style/css', |
| | | 'element-plus/es/components/dropdown-item/style/css', |
| | | 'element-plus/es/components/badge/style/css', |
| | | 'element-plus/es/components/breadcrumb/style/css', |
| | | 'element-plus/es/components/breadcrumb-item/style/css', |
| | | 'element-plus/es/components/image/style/css', |
| | | 'element-plus/es/components/collapse-transition/style/css', |
| | | 'element-plus/es/components/timeline/style/css', |
| | | 'element-plus/es/components/timeline-item/style/css', |
| | | 'element-plus/es/components/collapse/style/css', |
| | | 'element-plus/es/components/collapse-item/style/css', |
| | | 'element-plus/es/components/button-group/style/css', |
| | | 'element-plus/es/components/text/style/css', |
| | | 'element-plus/es/components/segmented/style/css', |
| | | '@element-plus/icons-vue', |
| | | 'element-plus/es/components/footer/style/css', |
| | | 'element-plus/es/components/empty/style/css', |
| | | 'element-plus/es/components/mention/style/css', |
| | | 'element-plus/es/components/progress/style/css' |
| | | ] |
| | | |
| | | const exclude = ['@iconify/json'] |
| | | |
| | | export { include, exclude } |
| New file |
| | |
| | | <!DOCTYPE html> |
| | | <html lang="en"> |
| | | <head> |
| | | <meta charset="UTF-8" /> |
| | | <link rel="icon" href="/favicon.ico" /> |
| | | <meta http-equiv="X-UA-Compatible" content="IE=edge" /> |
| | | <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
| | | <meta |
| | | name="keywords" |
| | | content="èé管çç³»ç» åºäº vue3 + CompositionAPI + typescript + vite3 + element plus çåå°å¼æºå
费管çç³»ç»ï¼" |
| | | /> |
| | | <meta |
| | | name="description" |
| | | content="èé管çç³»ç» åºäº vue3 + CompositionAPI + typescript + vite3 + element plus çåå°å¼æºå
费管çç³»ç»ï¼" |
| | | /> |
| | | <title>%VITE_APP_TITLE%</title> |
| | | </head> |
| | | <body> |
| | | <div id="app"> |
| | | <style> |
| | | .app-loading { |
| | | display: flex; |
| | | width: 100%; |
| | | height: 100%; |
| | | justify-content: center; |
| | | align-items: center; |
| | | flex-direction: column; |
| | | background: #f0f2f5; |
| | | } |
| | | |
| | | .app-loading .app-loading-wrap { |
| | | position: absolute; |
| | | top: 50%; |
| | | left: 50%; |
| | | display: flex; |
| | | -webkit-transform: translate3d(-50%, -50%, 0); |
| | | transform: translate3d(-50%, -50%, 0); |
| | | justify-content: center; |
| | | align-items: center; |
| | | flex-direction: column; |
| | | } |
| | | |
| | | .app-loading .app-loading-title { |
| | | margin-bottom: 30px; |
| | | font-size: 20px; |
| | | font-weight: bold; |
| | | text-align: center; |
| | | } |
| | | |
| | | .app-loading .app-loading-logo { |
| | | width: 100px; |
| | | margin: 0 auto 15px auto; |
| | | } |
| | | |
| | | .app-loading .app-loading-item { |
| | | position: relative; |
| | | display: inline-block; |
| | | width: 60px; |
| | | height: 60px; |
| | | vertical-align: middle; |
| | | border-radius: 50%; |
| | | } |
| | | |
| | | .app-loading .app-loading-outter { |
| | | position: absolute; |
| | | width: 100%; |
| | | height: 100%; |
| | | border: 4px solid #2d8cf0; |
| | | border-bottom: 0; |
| | | border-left-color: transparent; |
| | | border-radius: 50%; |
| | | animation: loader-outter 1s cubic-bezier(0.42, 0.61, 0.58, 0.41) infinite; |
| | | } |
| | | |
| | | .app-loading .app-loading-inner { |
| | | position: absolute; |
| | | top: calc(50% - 20px); |
| | | left: calc(50% - 20px); |
| | | width: 40px; |
| | | height: 40px; |
| | | border: 4px solid #87bdff; |
| | | border-right: 0; |
| | | border-top-color: transparent; |
| | | border-radius: 50%; |
| | | animation: loader-inner 1s cubic-bezier(0.42, 0.61, 0.58, 0.41) infinite; |
| | | } |
| | | |
| | | @-webkit-keyframes loader-outter { |
| | | 0% { |
| | | -webkit-transform: rotate(0deg); |
| | | transform: rotate(0deg); |
| | | } |
| | | |
| | | 100% { |
| | | -webkit-transform: rotate(360deg); |
| | | transform: rotate(360deg); |
| | | } |
| | | } |
| | | |
| | | @keyframes loader-outter { |
| | | 0% { |
| | | -webkit-transform: rotate(0deg); |
| | | transform: rotate(0deg); |
| | | } |
| | | |
| | | 100% { |
| | | -webkit-transform: rotate(360deg); |
| | | transform: rotate(360deg); |
| | | } |
| | | } |
| | | |
| | | @-webkit-keyframes loader-inner { |
| | | 0% { |
| | | -webkit-transform: rotate(0deg); |
| | | transform: rotate(0deg); |
| | | } |
| | | |
| | | 100% { |
| | | -webkit-transform: rotate(-360deg); |
| | | transform: rotate(-360deg); |
| | | } |
| | | } |
| | | |
| | | @keyframes loader-inner { |
| | | 0% { |
| | | -webkit-transform: rotate(0deg); |
| | | transform: rotate(0deg); |
| | | } |
| | | |
| | | 100% { |
| | | -webkit-transform: rotate(-360deg); |
| | | transform: rotate(-360deg); |
| | | } |
| | | } |
| | | </style> |
| | | <div class="app-loading"> |
| | | <div class="app-loading-wrap"> |
| | | <div class="app-loading-title"> |
| | | <img src="/logo.gif" class="app-loading-logo" alt="Logo" /> |
| | | <div class="app-loading-title">%VITE_APP_TITLE%</div> |
| | | </div> |
| | | <div class="app-loading-item"> |
| | | <div class="app-loading-outter"></div> |
| | | <div class="app-loading-inner"></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <script type="module" src="/src/main.ts"></script> |
| | | </body> |
| | | </html> |
| New file |
| | |
| | | { |
| | | "name": "yudao-ui-admin-vue3", |
| | | "version": "2025.12-snapshot", |
| | | "description": "åºäºvue3ãvite4ãelement-plusãtypesScript", |
| | | "author": "xingyu", |
| | | "private": false, |
| | | "scripts": { |
| | | "i": "pnpm install", |
| | | "dev": "vite --mode env.local", |
| | | "dev-server": "vite --mode dev", |
| | | "ts:check": "vue-tsc --noEmit", |
| | | "build:local": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build", |
| | | "build:dev": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode dev", |
| | | "build:test": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode test", |
| | | "build:stage": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode stage", |
| | | "build:prod": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode prod", |
| | | "serve:dev": "vite preview --mode dev", |
| | | "serve:prod": "vite preview --mode prod", |
| | | "preview": "pnpm build:local && vite preview", |
| | | "clean": "npx rimraf node_modules", |
| | | "clean:cache": "npx rimraf node_modules/.cache", |
| | | "lint:eslint": "eslint --fix --ext .js,.ts,.vue ./src", |
| | | "lint:format": "prettier --write --loglevel warn \"src/**/*.{js,ts,json,tsx,css,less,scss,vue,html,md}\"", |
| | | "lint:style": "stylelint --fix \"./src/**/*.{vue,less,postcss,css,scss}\" --cache --cache-location node_modules/.cache/stylelint/", |
| | | "lint:lint-staged": "lint-staged -c " |
| | | }, |
| | | "dependencies": { |
| | | "@element-plus/icons-vue": "2.3.2", |
| | | "@form-create/designer": "^3.2.6", |
| | | "@form-create/element-ui": "^3.2.11", |
| | | "@iconify/iconify": "^3.1.1", |
| | | "@microsoft/fetch-event-source": "^2.0.1", |
| | | "@videojs-player/vue": "^1.0.0", |
| | | "@vueuse/core": "^10.9.0", |
| | | "@wangeditor-next/editor": "^5.6.46", |
| | | "@wangeditor-next/editor-for-vue": "^5.1.14", |
| | | "@wangeditor-next/plugin-mention": "^1.0.16", |
| | | "@zxcvbn-ts/core": "^3.0.4", |
| | | "animate.css": "^4.1.1", |
| | | "axios": "1.9.0", |
| | | "benz-amr-recorder": "^1.1.5", |
| | | "bpmn-js-token-simulation": "^0.36.0", |
| | | "camunda-bpmn-moddle": "^7.0.1", |
| | | "cropperjs": "^1.6.1", |
| | | "crypto-js": "^4.2.0", |
| | | "dayjs": "^1.11.10", |
| | | "diagram-js": "^12.8.0", |
| | | "driver.js": "^1.3.1", |
| | | "echarts": "^5.5.0", |
| | | "echarts-wordcloud": "^2.1.0", |
| | | "element-plus": "2.11.1", |
| | | "fast-xml-parser": "^4.3.2", |
| | | "highlight.js": "^11.9.0", |
| | | "jsencrypt": "^3.3.2", |
| | | "jsoneditor": "^10.1.3", |
| | | "lodash-es": "^4.17.21", |
| | | "markdown-it": "^14.1.0", |
| | | "markmap-common": "^0.16.0", |
| | | "markmap-lib": "^0.16.1", |
| | | "markmap-toolbar": "^0.17.0", |
| | | "markmap-view": "^0.16.0", |
| | | "min-dash": "^4.1.1", |
| | | "mitt": "^3.0.1", |
| | | "nprogress": "^0.2.0", |
| | | "pinia": "^2.1.7", |
| | | "pinia-plugin-persistedstate": "^3.2.1", |
| | | "qrcode": "^1.5.3", |
| | | "qs": "^6.12.0", |
| | | "snabbdom": "^3.6.2", |
| | | "sortablejs": "^1.15.3", |
| | | "steady-xml": "^0.1.0", |
| | | "url": "^0.11.3", |
| | | "video.js": "^7.21.5", |
| | | "vue": "3.5.12", |
| | | "vue-dompurify-html": "^4.1.4", |
| | | "vue-i18n": "9.10.2", |
| | | "vue-router": "4.4.5", |
| | | "vue-types": "^5.1.1", |
| | | "vue3-print-nb": "^0.1.4", |
| | | "vue3-signature": "^0.2.4", |
| | | "vuedraggable": "^4.1.0", |
| | | "web-storage-cache": "^1.1.1", |
| | | "xml-js": "^1.6.11" |
| | | }, |
| | | "devDependencies": { |
| | | "@commitlint/cli": "^19.0.1", |
| | | "@commitlint/config-conventional": "^19.0.0", |
| | | "@iconify/json": "^2.2.187", |
| | | "@intlify/unplugin-vue-i18n": "^2.0.0", |
| | | "@purge-icons/generated": "^0.9.0", |
| | | "@types/jsoneditor": "^9.9.5", |
| | | "@types/lodash-es": "^4.17.12", |
| | | "@types/node": "^20.11.21", |
| | | "@types/nprogress": "^0.2.3", |
| | | "@types/qrcode": "^1.5.5", |
| | | "@types/qs": "^6.9.12", |
| | | "@typescript-eslint/eslint-plugin": "^7.1.0", |
| | | "@typescript-eslint/parser": "^7.1.0", |
| | | "@unocss/eslint-config": "^0.57.4", |
| | | "@unocss/eslint-plugin": "66.1.0-beta.5", |
| | | "@unocss/transformer-variant-group": "^0.58.5", |
| | | "@vitejs/plugin-legacy": "^5.3.1", |
| | | "@vitejs/plugin-vue": "^5.0.4", |
| | | "@vitejs/plugin-vue-jsx": "^3.1.0", |
| | | "autoprefixer": "^10.4.17", |
| | | "bpmn-js": "^17.9.2", |
| | | "bpmn-js-properties-panel": "5.23.0", |
| | | "consola": "^3.2.3", |
| | | "eslint": "^8.57.0", |
| | | "eslint-config-prettier": "^9.1.0", |
| | | "eslint-define-config": "^2.1.0", |
| | | "eslint-plugin-prettier": "^5.1.3", |
| | | "eslint-plugin-vue": "^9.22.0", |
| | | "lint-staged": "^15.2.2", |
| | | "postcss": "^8.4.35", |
| | | "postcss-html": "^1.6.0", |
| | | "postcss-scss": "^4.0.9", |
| | | "prettier": "^3.2.5", |
| | | "prettier-eslint": "^16.3.0", |
| | | "rimraf": "^5.0.5", |
| | | "rollup": "^4.12.0", |
| | | "sass": "^1.69.5", |
| | | "stylelint": "^16.2.1", |
| | | "stylelint-config-html": "^1.1.0", |
| | | "stylelint-config-recommended": "^14.0.0", |
| | | "stylelint-config-standard": "^36.0.0", |
| | | "stylelint-order": "^6.0.4", |
| | | "terser": "^5.28.1", |
| | | "typescript": "5.3.3", |
| | | "unocss": "^0.58.5", |
| | | "unplugin-auto-import": "^0.16.7", |
| | | "unplugin-element-plus": "^0.8.0", |
| | | "unplugin-vue-components": "^0.25.2", |
| | | "vite": "5.1.4", |
| | | "vite-plugin-compression": "^0.5.1", |
| | | "vite-plugin-ejs": "^1.7.0", |
| | | "vite-plugin-eslint": "^1.8.1", |
| | | "vite-plugin-progress": "^0.0.7", |
| | | "vite-plugin-purge-icons": "^0.10.0", |
| | | "vite-plugin-svg-icons-ng": "^1.3.1", |
| | | "vite-plugin-top-level-await": "^1.4.4", |
| | | "vue-eslint-parser": "^9.3.2", |
| | | "vue-tsc": "^1.8.27" |
| | | }, |
| | | "license": "MIT", |
| | | "repository": { |
| | | "type": "git", |
| | | "url": "git+https://gitee.com/yudaocode/yudao-ui-admin-vue3" |
| | | }, |
| | | "bugs": { |
| | | "url": "https://gitee.com/yudaocode/yudao-ui-admin-vue3/issues" |
| | | }, |
| | | "homepage": "https://gitee.com/yudaocode/yudao-ui-admin-vue3", |
| | | "web-types": "./web-types.json", |
| | | "engines": { |
| | | "node": ">= 16.0.0", |
| | | "pnpm": ">=8.6.0" |
| | | } |
| | | } |
| New file |
| | |
| | | module.exports = { |
| | | plugins: { |
| | | autoprefixer: {} |
| | | } |
| | | } |
| New file |
| | |
| | | module.exports = { |
| | | printWidth: 100, // æ¯è¡ä»£ç é¿åº¦ï¼é»è®¤80ï¼ |
| | | tabWidth: 2, // æ¯ä¸ªtabç¸å½äºå¤å°ä¸ªç©ºæ ¼ï¼é»è®¤2ï¼abè¿è¡ç¼©è¿ï¼é»è®¤falseï¼ |
| | | useTabs: false, // æ¯å¦ä½¿ç¨tab |
| | | semi: false, // 声æç»å°¾ä½¿ç¨åå·(é»è®¤true) |
| | | vueIndentScriptAndStyle: false, |
| | | singleQuote: true, // 使ç¨åå¼å·ï¼é»è®¤falseï¼ |
| | | quoteProps: 'as-needed', |
| | | bracketSpacing: true, // 对象åé¢éç大æ¬å·é´ä½¿ç¨ç©ºæ ¼ï¼é»è®¤trueï¼ |
| | | trailingComma: 'none', // å¤è¡ä½¿ç¨æå°¾éå·ï¼é»è®¤noneï¼ |
| | | jsxSingleQuote: false, |
| | | // ç®å¤´å½æ°åæ°æ¬å· é»è®¤avoid å¯é avoid| always |
| | | // avoid è½çç¥æ¬å·çæ¶åå°±çç¥ ä¾å¦x => x |
| | | // always æ»æ¯ææ¬å· |
| | | arrowParens: 'always', |
| | | insertPragma: false, |
| | | requirePragma: false, |
| | | proseWrap: 'never', |
| | | htmlWhitespaceSensitivity: 'strict', |
| | | endOfLine: 'auto', |
| | | rangeStart: 0 |
| | | } |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | import { isDark } from '@/utils/is' |
| | | import { useAppStore } from '@/store/modules/app' |
| | | import { useDesign } from '@/hooks/web/useDesign' |
| | | import { CACHE_KEY, useCache } from '@/hooks/web/useCache' |
| | | import routerSearch from '@/components/RouterSearch/index.vue' |
| | | |
| | | defineOptions({ name: 'APP' }) |
| | | |
| | | const { getPrefixCls } = useDesign() |
| | | const prefixCls = getPrefixCls('app') |
| | | const appStore = useAppStore() |
| | | const currentSize = computed(() => appStore.getCurrentSize) |
| | | const greyMode = computed(() => appStore.getGreyMode) |
| | | const { wsCache } = useCache() |
| | | |
| | | // æ ¹æ®æµè§å¨å½å主é¢è®¾ç½®ç³»ç»ä¸»é¢è² |
| | | const setDefaultTheme = () => { |
| | | let isDarkTheme = wsCache.get(CACHE_KEY.IS_DARK) |
| | | if (isDarkTheme === null) { |
| | | isDarkTheme = isDark() |
| | | } |
| | | appStore.setIsDark(isDarkTheme) |
| | | } |
| | | setDefaultTheme() |
| | | </script> |
| | | <template> |
| | | <ConfigGlobal :size="currentSize"> |
| | | <RouterView :class="greyMode ? `${prefixCls}-grey-mode` : ''" /> |
| | | <routerSearch /> |
| | | </ConfigGlobal> |
| | | </template> |
| | | <style lang="scss"> |
| | | $prefix-cls: #{$namespace}-app; |
| | | |
| | | .size { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | |
| | | html, |
| | | body { |
| | | @extend .size; |
| | | |
| | | padding: 0 !important; |
| | | margin: 0; |
| | | overflow: hidden; |
| | | |
| | | #app { |
| | | @extend .size; |
| | | } |
| | | } |
| | | |
| | | .#{$prefix-cls}-grey-mode { |
| | | filter: grayscale(100%); |
| | | } |
| | | </style> |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // AI èå¤©å¯¹è¯ VO |
| | | export interface ChatConversationVO { |
| | | id: number // ID ç¼å· |
| | | userId: number // ç¨æ·ç¼å· |
| | | title: string // å¯¹è¯æ é¢ |
| | | pinned: boolean // æ¯å¦ç½®é¡¶ |
| | | roleId: number // è§è²ç¼å· |
| | | modelId: number // 模åç¼å· |
| | | model: string // æ¨¡åæ å¿ |
| | | temperature: number // æ¸©åº¦åæ° |
| | | maxTokens: number // åæ¡åå¤çæå¤§ Token æ°é |
| | | maxContexts: number // ä¸ä¸æçæå¤§ Message æ°é |
| | | createTime?: Date // å建æ¶é´ |
| | | // é¢å¤å段 |
| | | systemMessage?: string // è§è²è®¾å® |
| | | modelName?: string // 模ååå |
| | | roleAvatar?: string // è§è²å¤´å |
| | | modelMaxTokens?: string // 模åçåæ¡åå¤çæå¤§ Token æ°é |
| | | modelMaxContexts?: string // 模åçä¸ä¸æçæå¤§ Message æ°é |
| | | } |
| | | |
| | | // AI èå¤©å¯¹è¯ API |
| | | export const ChatConversationApi = { |
| | | // è·å¾ãæçãèå¤©å¯¹è¯ |
| | | getChatConversationMy: async (id: number) => { |
| | | return await request.get({ url: `/ai/chat/conversation/get-my?id=${id}` }) |
| | | }, |
| | | |
| | | // æ°å¢ãæçãèå¤©å¯¹è¯ |
| | | createChatConversationMy: async (data?: ChatConversationVO) => { |
| | | return await request.post({ url: `/ai/chat/conversation/create-my`, data }) |
| | | }, |
| | | |
| | | // æ´æ°ãæçãèå¤©å¯¹è¯ |
| | | updateChatConversationMy: async (data: ChatConversationVO) => { |
| | | return await request.put({ url: `/ai/chat/conversation/update-my`, data }) |
| | | }, |
| | | |
| | | // å é¤ãæçãèå¤©å¯¹è¯ |
| | | deleteChatConversationMy: async (id: string) => { |
| | | return await request.delete({ url: `/ai/chat/conversation/delete-my?id=${id}` }) |
| | | }, |
| | | |
| | | // å é¤ãæçãææå¯¹è¯ï¼ç½®é¡¶é¤å¤ |
| | | deleteChatConversationMyByUnpinned: async () => { |
| | | return await request.delete({ url: `/ai/chat/conversation/delete-by-unpinned` }) |
| | | }, |
| | | |
| | | // è·å¾ãæçãè天对è¯å表 |
| | | getChatConversationMyList: async () => { |
| | | return await request.get({ url: `/ai/chat/conversation/my-list` }) |
| | | }, |
| | | |
| | | // è·å¾å¯¹è¯å页 |
| | | getChatConversationPage: async (params: any) => { |
| | | return await request.get({ url: `/ai/chat/conversation/page`, params }) |
| | | }, |
| | | |
| | | // 管çåå 餿¶æ¯ |
| | | deleteChatConversationByAdmin: async (id: number) => { |
| | | return await request.delete({ url: `/ai/chat/conversation/delete-by-admin?id=${id}` }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import { fetchEventSource } from '@microsoft/fetch-event-source' |
| | | import { getAccessToken } from '@/utils/auth' |
| | | import { config } from '@/config/axios/config' |
| | | |
| | | // è天VO |
| | | export interface ChatMessageVO { |
| | | id: number // ç¼å· |
| | | conversationId: number // 对è¯ç¼å· |
| | | type: string // æ¶æ¯ç±»å |
| | | userId: string // ç¨æ·ç¼å· |
| | | roleId: string // è§è²ç¼å· |
| | | model: number // æ¨¡åæ å¿ |
| | | modelId: number // 模åç¼å· |
| | | content: string // è天å
容 |
| | | reasoningContent?: string // æ¨çå
容 |
| | | attachmentUrls?: string[] // éä»¶ URL æ°ç» |
| | | tokens: number // æ¶è Token æ°é |
| | | segmentIds?: number[] // 段è½ç¼å· |
| | | segments?: { |
| | | id: number // 段è½ç¼å· |
| | | content: string // 段è½å
容 |
| | | documentId: number // ææ¡£ç¼å· |
| | | documentName: string // ææ¡£åç§° |
| | | }[] |
| | | webSearchPages?: { |
| | | name: string // åç§° |
| | | icon: string // 徿 |
| | | title: string // æ é¢ |
| | | url: string // URL |
| | | snippet: string // å
容çç®çæè¿° |
| | | summary: string // å
å®¹çææ¬æè¦ |
| | | }[] |
| | | createTime: Date // å建æ¶é´ |
| | | roleAvatar: string // è§è²å¤´å |
| | | userAvatar: string // ç¨æ·å¤´å |
| | | } |
| | | |
| | | // AI chat è天 |
| | | export const ChatMessageApi = { |
| | | // æ¶æ¯å表 |
| | | getChatMessageListByConversationId: async (conversationId: number | null) => { |
| | | return await request.get({ |
| | | url: `/ai/chat/message/list-by-conversation-id?conversationId=${conversationId}` |
| | | }) |
| | | }, |
| | | |
| | | // åé Stream æ¶æ¯ |
| | | // 为ä»ä¹ä¸ç¨ axios å¢ï¼å 为å®ä¸æ¯æ SSE è°ç¨ |
| | | sendChatMessageStream: async ( |
| | | conversationId: number, |
| | | content: string, |
| | | ctrl, |
| | | enableContext: boolean, |
| | | enableWebSearch: boolean, |
| | | onMessage, |
| | | onError, |
| | | onClose, |
| | | attachmentUrls?: string[] |
| | | ) => { |
| | | const token = getAccessToken() |
| | | return fetchEventSource(`${config.base_url}/ai/chat/message/send-stream`, { |
| | | method: 'post', |
| | | headers: { |
| | | 'Content-Type': 'application/json', |
| | | Authorization: `Bearer ${token}` |
| | | }, |
| | | openWhenHidden: true, |
| | | body: JSON.stringify({ |
| | | conversationId, |
| | | content, |
| | | useContext: enableContext, |
| | | useSearch: enableWebSearch, |
| | | attachmentUrls: attachmentUrls || [] |
| | | }), |
| | | onmessage: onMessage, |
| | | onerror: onError, |
| | | onclose: onClose, |
| | | signal: ctrl.signal |
| | | }) |
| | | }, |
| | | |
| | | // å 餿¶æ¯ |
| | | deleteChatMessage: async (id: string) => { |
| | | return await request.delete({ url: `/ai/chat/message/delete?id=${id}` }) |
| | | }, |
| | | |
| | | // å 餿å®å¯¹è¯çæ¶æ¯ |
| | | deleteByConversationId: async (conversationId: number) => { |
| | | return await request.delete({ |
| | | url: `/ai/chat/message/delete-by-conversation-id?conversationId=${conversationId}` |
| | | }) |
| | | }, |
| | | |
| | | // è·å¾æ¶æ¯å页 |
| | | getChatMessagePage: async (params: any) => { |
| | | return await request.get({ url: '/ai/chat/message/page', params }) |
| | | }, |
| | | |
| | | // 管çåå 餿¶æ¯ |
| | | deleteChatMessageByAdmin: async (id: number) => { |
| | | return await request.delete({ url: `/ai/chat/message/delete-by-admin?id=${id}` }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // AI ç»å¾ VO |
| | | export interface ImageVO { |
| | | id: number // ç¼å· |
| | | platform: string // å¹³å° |
| | | model: string // 模å |
| | | prompt: string // æç¤ºè¯ |
| | | width: number // å¾ç宽度 |
| | | height: number // å¾çé«åº¦ |
| | | status: number // ç¶æ |
| | | publicStatus: boolean // å
¬å¼ç¶æ |
| | | picUrl: string // ä»»å¡å°å |
| | | errorMessage: string // éè¯¯ä¿¡æ¯ |
| | | options: any // é
ç½® Map<string, string> |
| | | taskId: number // ä»»å¡ç¼å· |
| | | buttons: ImageMidjourneyButtonsVO[] // mj æä½æé® |
| | | createTime: Date // å建æ¶é´ |
| | | finishTime: Date // 宿æ¶é´ |
| | | } |
| | | |
| | | export interface ImageDrawReqVO { |
| | | prompt: string // æç¤ºè¯ |
| | | modelId: number // 模å |
| | | style: string // å¾åçæç飿 ¼ |
| | | width: string // å¾ç宽度 |
| | | height: string // å¾çé«åº¦ |
| | | options: object // ç»å¶åæ°ï¼Map<String, String> |
| | | } |
| | | |
| | | export interface ImageMidjourneyImagineReqVO { |
| | | prompt: string // æç¤ºè¯ |
| | | modelId: number // 模å |
| | | base64Array: string[] // sizeä¸è½ä¸ºç©º |
| | | width: string // å¾ç宽度 |
| | | height: string // å¾çé«åº¦ |
| | | version: string // çæ¬ |
| | | } |
| | | |
| | | export interface ImageMidjourneyActionVO { |
| | | id: number // å¾çç¼å· |
| | | customId: string // MJ::JOB::upsample::1::85a4b4c1-8835-46c5-a15c-aea34fad1862 å¨ä½æ è¯ |
| | | } |
| | | |
| | | export interface ImageMidjourneyButtonsVO { |
| | | customId: string // MJ::JOB::upsample::1::85a4b4c1-8835-46c5-a15c-aea34fad1862 å¨ä½æ è¯ |
| | | emoji: string // 徿 emoji |
| | | label: string // Make Variations ææ¬ |
| | | style: number // æ ·å¼: 2ï¼Primaryï¼ã3ï¼Greenï¼ |
| | | } |
| | | |
| | | // AI å¾ç API |
| | | export const ImageApi = { |
| | | // è·åãæçãç»å¾å页 |
| | | getImagePageMy: async (params: any) => { |
| | | return await request.get({ url: `/ai/image/my-page`, params }) |
| | | }, |
| | | // è·åãæçãç»å¾è®°å½ |
| | | getImageMy: async (id: number) => { |
| | | return await request.get({ url: `/ai/image/get-my?id=${id}` }) |
| | | }, |
| | | // è·åãæçãç»å¾è®°å½å表 |
| | | getImageListMyByIds: async (ids: number[]) => { |
| | | return await request.get({ url: `/ai/image/my-list-by-ids`, params: { ids: ids.join(',') } }) |
| | | }, |
| | | // çæå¾ç |
| | | drawImage: async (data: ImageDrawReqVO) => { |
| | | return await request.post({ url: `/ai/image/draw`, data }) |
| | | }, |
| | | // å é¤ãæçãç»ç»è®°å½ |
| | | deleteImageMy: async (id: number) => { |
| | | return await request.delete({ url: `/ai/image/delete-my?id=${id}` }) |
| | | }, |
| | | |
| | | // ================ midjourney ä¸å± ================ |
| | | |
| | | // ãMidjourneyãçæå¾ç |
| | | midjourneyImagine: async (data: ImageMidjourneyImagineReqVO) => { |
| | | return await request.post({ url: `/ai/image/midjourney/imagine`, data }) |
| | | }, |
| | | // ãMidjourneyãAction æä½ï¼äºæ¬¡çæå¾çï¼ |
| | | midjourneyAction: async (data: ImageMidjourneyActionVO) => { |
| | | return await request.post({ url: `/ai/image/midjourney/action`, data }) |
| | | }, |
| | | |
| | | // ================ ç»å¾ç®¡ç ================ |
| | | |
| | | // æ¥è¯¢ç»ç»å页 |
| | | getImagePage: async (params: any) => { |
| | | return await request.get({ url: `/ai/image/page`, params }) |
| | | }, |
| | | |
| | | // æ´æ°ç»ç»åå¸ç¶æ |
| | | updateImage: async (data: any) => { |
| | | return await request.put({ url: '/ai/image/update', data }) |
| | | }, |
| | | |
| | | // å é¤ç»ç» |
| | | deleteImage: async (id: number) => { |
| | | return await request.delete({ url: `/ai/image/delete?id=` + id }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // AI ç¥è¯åºææ¡£ VO |
| | | export interface KnowledgeDocumentVO { |
| | | id: number // ç¼å· |
| | | knowledgeId: number // ç¥è¯åºç¼å· |
| | | name: string // ææ¡£åç§° |
| | | contentLength: number // åç¬¦æ° |
| | | tokens: number // token æ° |
| | | segmentMaxTokens: number // åçæå¤§ token æ° |
| | | retrievalCount: number // å¬åæ¬¡æ° |
| | | status: number // æ¯å¦å¯ç¨ |
| | | } |
| | | |
| | | // AI ç¥è¯åºææ¡£ API |
| | | export const KnowledgeDocumentApi = { |
| | | // æ¥è¯¢ç¥è¯åºææ¡£å页 |
| | | getKnowledgeDocumentPage: async (params: any) => { |
| | | return await request.get({ url: `/ai/knowledge/document/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ç¥è¯åºææ¡£è¯¦æ
|
| | | getKnowledgeDocument: async (id: number) => { |
| | | return await request.get({ url: `/ai/knowledge/document/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢ç¥è¯åºææ¡£ï¼åä¸ªï¼ |
| | | createKnowledgeDocument: async (data: any) => { |
| | | return await request.post({ url: `/ai/knowledge/document/create`, data }) |
| | | }, |
| | | |
| | | // æ°å¢ç¥è¯åºææ¡£ï¼å¤ä¸ªï¼ |
| | | createKnowledgeDocumentList: async (data: any) => { |
| | | return await request.post({ url: `/ai/knowledge/document/create-list`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹ç¥è¯åºææ¡£ |
| | | updateKnowledgeDocument: async (data: any) => { |
| | | return await request.put({ url: `/ai/knowledge/document/update`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹ç¥è¯åºææ¡£ç¶æ |
| | | updateKnowledgeDocumentStatus: async (data: any) => { |
| | | return await request.put({ |
| | | url: `/ai/knowledge/document/update-status`, |
| | | data |
| | | }) |
| | | }, |
| | | |
| | | // å é¤ç¥è¯åºææ¡£ |
| | | deleteKnowledgeDocument: async (id: number) => { |
| | | return await request.delete({ url: `/ai/knowledge/document/delete?id=` + id }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // AI ç¥è¯åº VO |
| | | export interface KnowledgeVO { |
| | | id: number // ç¼å· |
| | | name: string // ç¥è¯åºåç§° |
| | | description: string // ç¥è¯åºæè¿° |
| | | embeddingModelId: number // åµå
¥æ¨¡åç¼å·ï¼é«è´¨éæ¨¡å¼æ¶ç»´æ¤ |
| | | topK: number // topK |
| | | similarityThreshold: number // ç¸ä¼¼åº¦éå¼ |
| | | } |
| | | |
| | | // AI ç¥è¯åº API |
| | | export const KnowledgeApi = { |
| | | // æ¥è¯¢ç¥è¯åºå页 |
| | | getKnowledgePage: async (params: any) => { |
| | | return await request.get({ url: `/ai/knowledge/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ç¥è¯åºè¯¦æ
|
| | | getKnowledge: async (id: number) => { |
| | | return await request.get({ url: `/ai/knowledge/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢ç¥è¯åº |
| | | createKnowledge: async (data: KnowledgeVO) => { |
| | | return await request.post({ url: `/ai/knowledge/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹ç¥è¯åº |
| | | updateKnowledge: async (data: KnowledgeVO) => { |
| | | return await request.put({ url: `/ai/knowledge/update`, data }) |
| | | }, |
| | | |
| | | // å é¤ç¥è¯åº |
| | | deleteKnowledge: async (id: number) => { |
| | | return await request.delete({ url: `/ai/knowledge/delete?id=` + id }) |
| | | }, |
| | | |
| | | // è·åç¥è¯åºç®åå表 |
| | | getSimpleKnowledgeList: async () => { |
| | | return await request.get({ url: `/ai/knowledge/simple-list` }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // AI ç¥è¯åºå段 VO |
| | | export interface KnowledgeSegmentVO { |
| | | id: number // ç¼å· |
| | | documentId: number // ææ¡£ç¼å· |
| | | knowledgeId: number // ç¥è¯åºç¼å· |
| | | vectorId: string // åéåºç¼å· |
| | | content: string // åçå
容 |
| | | contentLength: number // åçå
容é¿åº¦ |
| | | tokens: number // token æ°é |
| | | retrievalCount: number // å¬åæ¬¡æ° |
| | | status: number // ææ¡£ç¶æ |
| | | createTime: number // å建æ¶é´ |
| | | } |
| | | |
| | | // AI ç¥è¯åºå段 API |
| | | export const KnowledgeSegmentApi = { |
| | | // æ¥è¯¢ç¥è¯åºå段å页 |
| | | getKnowledgeSegmentPage: async (params: any) => { |
| | | return await request.get({ url: `/ai/knowledge/segment/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ç¥è¯åºå段详æ
|
| | | getKnowledgeSegment: async (id: number) => { |
| | | return await request.get({ url: `/ai/knowledge/segment/get?id=` + id }) |
| | | }, |
| | | |
| | | // å é¤ç¥è¯åºå段 |
| | | deleteKnowledgeSegment: async (id: number) => { |
| | | return await request.delete({ url: `/ai/knowledge/segment/delete?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢ç¥è¯åºå段 |
| | | createKnowledgeSegment: async (data: KnowledgeSegmentVO) => { |
| | | return await request.post({ url: `/ai/knowledge/segment/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹ç¥è¯åºå段 |
| | | updateKnowledgeSegment: async (data: KnowledgeSegmentVO) => { |
| | | return await request.put({ url: `/ai/knowledge/segment/update`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹ç¥è¯åºåæ®µç¶æ |
| | | updateKnowledgeSegmentStatus: async (data: any) => { |
| | | return await request.put({ |
| | | url: `/ai/knowledge/segment/update-status`, |
| | | data |
| | | }) |
| | | }, |
| | | |
| | | // åçå
容 |
| | | splitContent: async (url: string, segmentMaxTokens: number) => { |
| | | return await request.get({ |
| | | url: `/ai/knowledge/segment/split`, |
| | | params: { url, segmentMaxTokens } |
| | | }) |
| | | }, |
| | | |
| | | // è·åææ¡£å¤çå表 |
| | | getKnowledgeSegmentProcessList: async (documentIds: number[]) => { |
| | | return await request.get({ |
| | | url: `/ai/knowledge/segment/get-process-list`, |
| | | params: { documentIds: documentIds.join(',') } |
| | | }) |
| | | }, |
| | | |
| | | // æç´¢ç¥è¯åºå段 |
| | | searchKnowledgeSegment: async (params: any) => { |
| | | return await request.get({ |
| | | url: `/ai/knowledge/segment/search`, |
| | | params |
| | | }) |
| | | } |
| | | } |
| New file |
| | |
| | | import { getAccessToken } from '@/utils/auth' |
| | | import { fetchEventSource } from '@microsoft/fetch-event-source' |
| | | import { config } from '@/config/axios/config' |
| | | import request from '@/config/axios' // AI æç»´å¯¼å¾ VO |
| | | |
| | | // AI æç»´å¯¼å¾ VO |
| | | export interface MindMapVO { |
| | | id: number // ç¼å· |
| | | userId: number // ç¨æ·ç¼å· |
| | | prompt: string // çæå
容æç¤º |
| | | generatedContent: string // çæçæç»´å¯¼å¾å
容 |
| | | platform: string // å¹³å° |
| | | model: string // 模å |
| | | errorMessage: string // éè¯¯ä¿¡æ¯ |
| | | } |
| | | |
| | | // AI æç»´å¯¼å¾çæ VO |
| | | export interface AiMindMapGenerateReqVO { |
| | | prompt: string |
| | | } |
| | | |
| | | export const AiMindMapApi = { |
| | | generateMindMap: ({ |
| | | data, |
| | | onClose, |
| | | onMessage, |
| | | onError, |
| | | ctrl |
| | | }: { |
| | | data: AiMindMapGenerateReqVO |
| | | onMessage?: (res: any) => void |
| | | onError?: (...args: any[]) => void |
| | | onClose?: (...args: any[]) => void |
| | | ctrl: AbortController |
| | | }) => { |
| | | const token = getAccessToken() |
| | | return fetchEventSource(`${config.base_url}/ai/mind-map/generate-stream`, { |
| | | method: 'post', |
| | | headers: { |
| | | 'Content-Type': 'application/json', |
| | | Authorization: `Bearer ${token}` |
| | | }, |
| | | openWhenHidden: true, |
| | | body: JSON.stringify(data), |
| | | onmessage: onMessage, |
| | | onerror: onError, |
| | | onclose: onClose, |
| | | signal: ctrl.signal |
| | | }) |
| | | }, |
| | | |
| | | // æ¥è¯¢æç»´å¯¼å¾å页 |
| | | getMindMapPage: async (params: any) => { |
| | | return await request.get({ url: `/ai/mind-map/page`, params }) |
| | | }, |
| | | // å é¤æç»´å¯¼å¾ |
| | | deleteMindMap: async (id: number) => { |
| | | return await request.delete({ url: `/ai/mind-map/delete?id=` + id }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // AI API å¯é¥ VO |
| | | export interface ApiKeyVO { |
| | | id: number // ç¼å· |
| | | name: string // åç§° |
| | | apiKey: string // å¯é¥ |
| | | platform: string // å¹³å° |
| | | url: string // èªå®ä¹ API å°å |
| | | status: number // ç¶æ |
| | | } |
| | | |
| | | // AI API å¯é¥ API |
| | | export const ApiKeyApi = { |
| | | // æ¥è¯¢ API å¯é¥å页 |
| | | getApiKeyPage: async (params: any) => { |
| | | return await request.get({ url: `/ai/api-key/page`, params }) |
| | | }, |
| | | |
| | | // è·å¾ API å¯é¥å表 |
| | | getApiKeySimpleList: async () => { |
| | | return await request.get({ url: `/ai/api-key/simple-list` }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ API å¯é¥è¯¦æ
|
| | | getApiKey: async (id: number) => { |
| | | return await request.get({ url: `/ai/api-key/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢ API å¯é¥ |
| | | createApiKey: async (data: ApiKeyVO) => { |
| | | return await request.post({ url: `/ai/api-key/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹ API å¯é¥ |
| | | updateApiKey: async (data: ApiKeyVO) => { |
| | | return await request.put({ url: `/ai/api-key/update`, data }) |
| | | }, |
| | | |
| | | // å é¤ API å¯é¥ |
| | | deleteApiKey: async (id: number) => { |
| | | return await request.delete({ url: `/ai/api-key/delete?id=` + id }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // AI è天è§è² VO |
| | | export interface ChatRoleVO { |
| | | id: number // è§è²ç¼å· |
| | | modelId: number // 模åç¼å· |
| | | name: string // è§è²åç§° |
| | | avatar: string // è§è²å¤´å |
| | | category: string // è§è²ç±»å« |
| | | sort: number // è§è²æåº |
| | | description: string // è§è²æè¿° |
| | | systemMessage: string // è§è²è®¾å® |
| | | welcomeMessage: string // è§è²è®¾å® |
| | | publicStatus: boolean // æ¯å¦å
¬å¼ |
| | | status: number // ç¶æ |
| | | knowledgeIds?: number[] // å¼ç¨çç¥è¯åº ID å表 |
| | | toolIds?: number[] // å¼ç¨çå·¥å
· ID å表 |
| | | mcpClientNames?: string[] // å¼ç¨ç MCP Client ååå表 |
| | | } |
| | | |
| | | // AI è天è§è² åé¡µè¯·æ± vo |
| | | export interface ChatRolePageReqVO { |
| | | name?: string // è§è²åç§° |
| | | category?: string // è§è²ç±»å« |
| | | publicStatus: boolean // æ¯å¦å
¬å¼ |
| | | pageNo: number // æ¯å¦å
¬å¼ |
| | | pageSize: number // æ¯å¦å
¬å¼ |
| | | } |
| | | |
| | | // AI è天è§è² API |
| | | export const ChatRoleApi = { |
| | | // æ¥è¯¢è天è§è²å页 |
| | | getChatRolePage: async (params: any) => { |
| | | return await request.get({ url: `/ai/chat-role/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢è天è§è²è¯¦æ
|
| | | getChatRole: async (id: number) => { |
| | | return await request.get({ url: `/ai/chat-role/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢è天è§è² |
| | | createChatRole: async (data: ChatRoleVO) => { |
| | | return await request.post({ url: `/ai/chat-role/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹è天è§è² |
| | | updateChatRole: async (data: ChatRoleVO) => { |
| | | return await request.put({ url: `/ai/chat-role/update`, data }) |
| | | }, |
| | | |
| | | // å é¤è天è§è² |
| | | deleteChatRole: async (id: number) => { |
| | | return await request.delete({ url: `/ai/chat-role/delete?id=` + id }) |
| | | }, |
| | | |
| | | // ======= chat è天 |
| | | |
| | | // è·å my role |
| | | getMyPage: async (params: ChatRolePageReqVO) => { |
| | | return await request.get({ url: `/ai/chat-role/my-page`, params }) |
| | | }, |
| | | |
| | | // è·åè§è²åç±» |
| | | getCategoryList: async () => { |
| | | return await request.get({ url: `/ai/chat-role/category-list` }) |
| | | }, |
| | | |
| | | // å建è§è² |
| | | createMy: async (data: ChatRoleVO) => { |
| | | return await request.post({ url: `/ai/chat-role/create-my`, data }) |
| | | }, |
| | | |
| | | // æ´æ°è§è² |
| | | updateMy: async (data: ChatRoleVO) => { |
| | | return await request.put({ url: `/ai/chat-role/update-my`, data }) |
| | | }, |
| | | |
| | | // å é¤è§è² my |
| | | deleteMy: async (id: number) => { |
| | | return await request.delete({ url: `/ai/chat-role/delete-my?id=` + id }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // AI 模å VO |
| | | export interface ModelVO { |
| | | id: number // ç¼å· |
| | | keyId: number // API ç§é¥ç¼å· |
| | | name: string // 模ååå |
| | | model: string // æ¨¡åæ è¯ |
| | | platform: string // 模åå¹³å° |
| | | type: number // 模åç±»å |
| | | sort: number // æåº |
| | | status: number // ç¶æ |
| | | temperature?: number // æ¸©åº¦åæ° |
| | | maxTokens?: number // åæ¡åå¤çæå¤§ Token æ°é |
| | | maxContexts?: number // ä¸ä¸æçæå¤§ Message æ°é |
| | | } |
| | | |
| | | // AI 模å API |
| | | export const ModelApi = { |
| | | // æ¥è¯¢æ¨¡åå页 |
| | | getModelPage: async (params: any) => { |
| | | return await request.get({ url: `/ai/model/page`, params }) |
| | | }, |
| | | |
| | | // è·å¾æ¨¡åå表 |
| | | getModelSimpleList: async (type?: number) => { |
| | | return await request.get({ |
| | | url: `/ai/model/simple-list`, |
| | | params: { |
| | | type |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // æ¥è¯¢æ¨¡å详æ
|
| | | getModel: async (id: number) => { |
| | | return await request.get({ url: `/ai/model/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢æ¨¡å |
| | | createModel: async (data: ModelVO) => { |
| | | return await request.post({ url: `/ai/model/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹æ¨¡å |
| | | updateModel: async (data: ModelVO) => { |
| | | return await request.put({ url: `/ai/model/update`, data }) |
| | | }, |
| | | |
| | | // å 餿¨¡å |
| | | deleteModel: async (id: number) => { |
| | | return await request.delete({ url: `/ai/model/delete?id=` + id }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // AI å·¥å
· VO |
| | | export interface ToolVO { |
| | | id: number // å·¥å
·ç¼å· |
| | | name: string // å·¥å
·åç§° |
| | | description: string // å·¥å
·æè¿° |
| | | status: number // ç¶æ |
| | | } |
| | | |
| | | // AI å·¥å
· API |
| | | export const ToolApi = { |
| | | // æ¥è¯¢å·¥å
·å页 |
| | | getToolPage: async (params: any) => { |
| | | return await request.get({ url: `/ai/tool/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢å·¥å
·è¯¦æ
|
| | | getTool: async (id: number) => { |
| | | return await request.get({ url: `/ai/tool/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢å·¥å
· |
| | | createTool: async (data: ToolVO) => { |
| | | return await request.post({ url: `/ai/tool/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹å·¥å
· |
| | | updateTool: async (data: ToolVO) => { |
| | | return await request.put({ url: `/ai/tool/update`, data }) |
| | | }, |
| | | |
| | | // å é¤å·¥å
· |
| | | deleteTool: async (id: number) => { |
| | | return await request.delete({ url: `/ai/tool/delete?id=` + id }) |
| | | }, |
| | | |
| | | // è·åå·¥å
·ç®åå表 |
| | | getToolSimpleList: async () => { |
| | | return await request.get({ url: `/ai/tool/simple-list` }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // AI é³ä¹ VO |
| | | export interface MusicVO { |
| | | id: number // ç¼å· |
| | | userId: number // ç¨æ·ç¼å· |
| | | title: string // é³ä¹åç§° |
| | | lyric: string // æè¯ |
| | | imageUrl: string // å¾çå°å |
| | | audioUrl: string // é³é¢å°å |
| | | videoUrl: string // è§é¢å°å |
| | | status: number // é³ä¹ç¶æ |
| | | gptDescriptionPrompt: string // æè¿°è¯ |
| | | prompt: string // æç¤ºè¯ |
| | | platform: string // 模åå¹³å° |
| | | model: string // 模å |
| | | generateMode: number // çææ¨¡å¼ |
| | | tags: string // é³ä¹é£æ ¼æ ç¾ |
| | | duration: number // é³ä¹æ¶é¿ |
| | | publicStatus: boolean // æ¯å¦åå¸ |
| | | taskId: string // ä»»å¡id |
| | | errorMessage: string // éè¯¯ä¿¡æ¯ |
| | | } |
| | | |
| | | // AI é³ä¹ API |
| | | export const MusicApi = { |
| | | // æ¥è¯¢é³ä¹å页 |
| | | getMusicPage: async (params: any) => { |
| | | return await request.get({ url: `/ai/music/page`, params }) |
| | | }, |
| | | |
| | | // æ´æ°é³ä¹ |
| | | updateMusic: async (data: any) => { |
| | | return await request.put({ url: '/ai/music/update', data }) |
| | | }, |
| | | |
| | | // å é¤é³ä¹ |
| | | deleteMusic: async (id: number) => { |
| | | return await request.delete({ url: `/ai/music/delete?id=` + id }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export const getWorkflowPage = async (params) => { |
| | | return await request.get({ url: '/ai/workflow/page', params }) |
| | | } |
| | | |
| | | export const getWorkflow = async (id) => { |
| | | return await request.get({ url: '/ai/workflow/get?id=' + id }) |
| | | } |
| | | |
| | | export const createWorkflow = async (data) => { |
| | | return await request.post({ url: '/ai/workflow/create', data }) |
| | | } |
| | | |
| | | export const updateWorkflow = async (data) => { |
| | | return await request.put({ url: '/ai/workflow/update', data }) |
| | | } |
| | | |
| | | export const deleteWorkflow = async (id) => { |
| | | return await request.delete({ url: '/ai/workflow/delete?id=' + id }) |
| | | } |
| | | |
| | | export const testWorkflow = async (data) => { |
| | | return await request.post({ url: '/ai/workflow/test', data }) |
| | | } |
| New file |
| | |
| | | import { fetchEventSource } from '@microsoft/fetch-event-source' |
| | | |
| | | import { getAccessToken } from '@/utils/auth' |
| | | import { config } from '@/config/axios/config' |
| | | import { AiWriteTypeEnum } from '@/views/ai/utils/constants' |
| | | import request from '@/config/axios' |
| | | |
| | | export interface WriteVO { |
| | | type: AiWriteTypeEnum.WRITING | AiWriteTypeEnum.REPLY // 1:æ°å 2:åå¤ |
| | | prompt: string // åä½å
容æç¤º 1ãæ°å 2åå¤ |
| | | originalContent: string // åæ |
| | | length: number // é¿åº¦ |
| | | format: number // æ ¼å¼ |
| | | tone: number // è¯æ° |
| | | language: number // è¯è¨ |
| | | userId?: number // ç¨æ·ç¼å· |
| | | platform?: string // å¹³å° |
| | | model?: string // 模å |
| | | generatedContent?: string // çæçå
容 |
| | | errorMessage?: string // éè¯¯ä¿¡æ¯ |
| | | createTime?: Date // å建æ¶é´ |
| | | } |
| | | |
| | | export interface AiWritePageReqVO extends PageParam { |
| | | userId?: number // ç¨æ·ç¼å· |
| | | type?: AiWriteTypeEnum // åä½ç±»å |
| | | platform?: string // å¹³å° |
| | | createTime?: [string, string] // å建æ¶é´ |
| | | } |
| | | |
| | | export interface AiWriteRespVo { |
| | | id: number |
| | | userId: number |
| | | type: number |
| | | platform: string |
| | | model: string |
| | | prompt: string |
| | | generatedContent: string |
| | | originalContent: string |
| | | length: number |
| | | format: number |
| | | tone: number |
| | | language: number |
| | | errorMessage: string |
| | | createTime: string |
| | | } |
| | | |
| | | export const WriteApi = { |
| | | writeStream: ({ |
| | | data, |
| | | onClose, |
| | | onMessage, |
| | | onError, |
| | | ctrl |
| | | }: { |
| | | data: WriteVO |
| | | onMessage?: (res: any) => void |
| | | onError?: (...args: any[]) => void |
| | | onClose?: (...args: any[]) => void |
| | | ctrl: AbortController |
| | | }) => { |
| | | const token = getAccessToken() |
| | | return fetchEventSource(`${config.base_url}/ai/write/generate-stream`, { |
| | | method: 'post', |
| | | headers: { |
| | | 'Content-Type': 'application/json', |
| | | Authorization: `Bearer ${token}` |
| | | }, |
| | | openWhenHidden: true, |
| | | body: JSON.stringify(data), |
| | | onmessage: onMessage, |
| | | onerror: onError, |
| | | onclose: onClose, |
| | | signal: ctrl.signal |
| | | }) |
| | | }, |
| | | // è·ååä½å表 |
| | | getWritePage: (params: AiWritePageReqVO) => { |
| | | return request.get<PageResult<AiWriteRespVo[]>>({ url: `/ai/write/page`, params }) |
| | | }, |
| | | // å é¤åä½ |
| | | deleteWrite(id: number) { |
| | | return request.delete({ url: `/ai/write/delete`, params: { id } }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // BPM æµç¨åç±» VO |
| | | export interface CategoryVO { |
| | | id: number // åç±»ç¼å· |
| | | name: string // åç±»å |
| | | code: string // åç±»æ å¿ |
| | | status: number // åç±»ç¶æ |
| | | sort: number // åç±»æåº |
| | | } |
| | | |
| | | // BPM æµç¨åç±» API |
| | | export const CategoryApi = { |
| | | // æ¥è¯¢æµç¨åç±»å页 |
| | | getCategoryPage: async (params: any) => { |
| | | return await request.get({ url: `/bpm/category/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢æµç¨åç±»å表 |
| | | getCategorySimpleList: async () => { |
| | | return await request.get({ url: `/bpm/category/simple-list` }) |
| | | }, |
| | | |
| | | // æ¥è¯¢æµç¨å类详æ
|
| | | getCategory: async (id: number) => { |
| | | return await request.get({ url: `/bpm/category/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢æµç¨åç±» |
| | | createCategory: async (data: CategoryVO) => { |
| | | return await request.post({ url: `/bpm/category/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹æµç¨åç±» |
| | | updateCategory: async (data: CategoryVO) => { |
| | | return await request.put({ url: `/bpm/category/update`, data }) |
| | | }, |
| | | |
| | | // æ¹éä¿®æ¹æµç¨åç±»çæåº |
| | | updateCategorySortBatch: async (ids: number[]) => { |
| | | return await request.put({ |
| | | url: `/bpm/category/update-sort-batch`, |
| | | params: { |
| | | ids: ids.join(',') |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å 餿µç¨åç±» |
| | | deleteCategory: async (id: number) => { |
| | | return await request.delete({ url: `/bpm/category/delete?id=` + id }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export const getProcessDefinition = async (id?: string, key?: string) => { |
| | | return await request.get({ |
| | | url: '/bpm/process-definition/get', |
| | | params: { id, key } |
| | | }) |
| | | } |
| | | |
| | | export const getProcessDefinitionPage = async (params) => { |
| | | return await request.get({ |
| | | url: '/bpm/process-definition/page', |
| | | params |
| | | }) |
| | | } |
| | | |
| | | export const getProcessDefinitionList = async (params) => { |
| | | return await request.get({ |
| | | url: '/bpm/process-definition/list', |
| | | params |
| | | }) |
| | | } |
| | | |
| | | export const getSimpleProcessDefinitionList = async () => { |
| | | return await request.get({ |
| | | url: '/bpm/process-definition/simple-list' |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export type FormVO = { |
| | | id: number |
| | | name: string |
| | | conf: string |
| | | fields: string[] |
| | | status: number |
| | | remark: string |
| | | createTime: string |
| | | } |
| | | |
| | | // åå»ºå·¥ä½æµç表åå®ä¹ |
| | | export const createForm = async (data: FormVO) => { |
| | | return await request.post({ |
| | | url: '/bpm/form/create', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // æ´æ°å·¥ä½æµç表åå®ä¹ |
| | | export const updateForm = async (data: FormVO) => { |
| | | return await request.put({ |
| | | url: '/bpm/form/update', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // å é¤å·¥ä½æµç表åå®ä¹ |
| | | export const deleteForm = async (id: number) => { |
| | | return await request.delete({ |
| | | url: '/bpm/form/delete?id=' + id |
| | | }) |
| | | } |
| | | |
| | | // è·å¾å·¥ä½æµç表åå®ä¹ |
| | | export const getForm = async (id: number) => { |
| | | return await request.get({ |
| | | url: '/bpm/form/get?id=' + id |
| | | }) |
| | | } |
| | | |
| | | // è·å¾å·¥ä½æµç表åå®ä¹å页 |
| | | export const getFormPage = async (params) => { |
| | | return await request.get({ |
| | | url: '/bpm/form/page', |
| | | params |
| | | }) |
| | | } |
| | | |
| | | // è·å¾å¨æè¡¨åçç²¾ç®å表 |
| | | export const getFormSimpleList = async () => { |
| | | return await request.get({ |
| | | url: '/bpm/form/simple-list' |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export type LeaveVO = { |
| | | id: number |
| | | status: number |
| | | type: number |
| | | reason: string |
| | | processInstanceId: string |
| | | startTime: string |
| | | endTime: string |
| | | createTime: string |
| | | } |
| | | |
| | | // å建请åç³è¯· |
| | | export const createLeave = async (data: LeaveVO) => { |
| | | return await request.post({ url: '/bpm/oa/leave/create', data: data }) |
| | | } |
| | | |
| | | // è·å¾è¯·åç³è¯· |
| | | export const getLeave = async (id: number) => { |
| | | return await request.get({ url: '/bpm/oa/leave/get?id=' + id }) |
| | | } |
| | | |
| | | // è·å¾è¯·åç³è¯·å页 |
| | | export const getLeavePage = async (params: PageParam) => { |
| | | return await request.get({ url: '/bpm/oa/leave/page', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export type ProcessDefinitionVO = { |
| | | id: string |
| | | version: number |
| | | deploymentTIme: string |
| | | suspensionState: number |
| | | formType?: number |
| | | formCustomCreatePath?: string |
| | | } |
| | | |
| | | export type ModelVO = { |
| | | id: number |
| | | formName: string |
| | | key: string |
| | | name: string |
| | | description: string |
| | | category: string |
| | | formType: number |
| | | formId: number |
| | | formCustomCreatePath: string |
| | | formCustomViewPath: string |
| | | processDefinition: ProcessDefinitionVO |
| | | status: number |
| | | remark: string |
| | | createTime: string |
| | | bpmnXml: string |
| | | } |
| | | |
| | | export const getModelList = async (name: string | undefined) => { |
| | | return await request.get({ url: '/bpm/model/list', params: { name } }) |
| | | } |
| | | |
| | | export const getModel = async (id: string) => { |
| | | return await request.get({ url: '/bpm/model/get?id=' + id }) |
| | | } |
| | | |
| | | export const updateModel = async (data: ModelVO) => { |
| | | return await request.put({ url: '/bpm/model/update', data: data }) |
| | | } |
| | | |
| | | // æ¹éä¿®æ¹æµç¨åç±»çæåº |
| | | export const updateModelSortBatch = async (ids: number[]) => { |
| | | return await request.put({ |
| | | url: `/bpm/model/update-sort-batch`, |
| | | params: { |
| | | ids: ids.join(',') |
| | | } |
| | | }) |
| | | } |
| | | |
| | | export const updateModelBpmn = async (data: ModelVO) => { |
| | | return await request.put({ url: '/bpm/model/update-bpmn', data: data }) |
| | | } |
| | | |
| | | // ä»»å¡ç¶æä¿®æ¹ |
| | | export const updateModelState = async (id: number, state: number) => { |
| | | const data = { |
| | | id: id, |
| | | state: state |
| | | } |
| | | return await request.put({ url: '/bpm/model/update-state', data: data }) |
| | | } |
| | | |
| | | export const createModel = async (data: ModelVO) => { |
| | | return await request.post({ url: '/bpm/model/create', data: data }) |
| | | } |
| | | |
| | | export const deleteModel = async (id: number) => { |
| | | return await request.delete({ url: '/bpm/model/delete?id=' + id }) |
| | | } |
| | | |
| | | export const deployModel = async (id: number) => { |
| | | return await request.post({ url: '/bpm/model/deploy?id=' + id }) |
| | | } |
| | | |
| | | export const cleanModel = async (id: number) => { |
| | | return await request.delete({ url: '/bpm/model/clean?id=' + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // BPM æµç¨è¡¨è¾¾å¼ VO |
| | | export interface ProcessExpressionVO { |
| | | id: number // ç¼å· |
| | | name: string // 表达å¼åå |
| | | status: number // 表达å¼ç¶æ |
| | | expression: string // è¡¨è¾¾å¼ |
| | | } |
| | | |
| | | // BPM æµç¨è¡¨è¾¾å¼ API |
| | | export const ProcessExpressionApi = { |
| | | // æ¥è¯¢BPM æµç¨è¡¨è¾¾å¼å页 |
| | | getProcessExpressionPage: async (params: any) => { |
| | | return await request.get({ url: `/bpm/process-expression/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢BPM æµç¨è¡¨è¾¾å¼è¯¦æ
|
| | | getProcessExpression: async (id: number) => { |
| | | return await request.get({ url: `/bpm/process-expression/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢BPM æµç¨è¡¨è¾¾å¼ |
| | | createProcessExpression: async (data: ProcessExpressionVO) => { |
| | | return await request.post({ url: `/bpm/process-expression/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹BPM æµç¨è¡¨è¾¾å¼ |
| | | updateProcessExpression: async (data: ProcessExpressionVO) => { |
| | | return await request.put({ url: `/bpm/process-expression/update`, data }) |
| | | }, |
| | | |
| | | // å é¤BPM æµç¨è¡¨è¾¾å¼ |
| | | deleteProcessExpression: async (id: number) => { |
| | | return await request.delete({ url: `/bpm/process-expression/delete?id=` + id }) |
| | | }, |
| | | |
| | | // 导åºBPM æµç¨è¡¨è¾¾å¼ Excel |
| | | exportProcessExpression: async (params) => { |
| | | return await request.download({ url: `/bpm/process-expression/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import { ProcessDefinitionVO } from '@/api/bpm/model' |
| | | import { NodeType, CandidateStrategy } from '@/components/SimpleProcessDesignerV2/src/consts' |
| | | export type Task = { |
| | | id: string |
| | | name: string |
| | | } |
| | | |
| | | export type ProcessInstanceVO = { |
| | | id: number |
| | | name: string |
| | | processDefinitionId: string |
| | | category: string |
| | | result: number |
| | | tasks: Task[] |
| | | fields: string[] |
| | | status: number |
| | | remark: string |
| | | businessKey: string |
| | | createTime: string |
| | | endTime: string |
| | | processDefinition?: ProcessDefinitionVO |
| | | } |
| | | |
| | | // ç¨æ·ä¿¡æ¯ |
| | | export type User = { |
| | | id: number |
| | | nickname: string |
| | | avatar: string |
| | | } |
| | | |
| | | // 审æ¹ä»»å¡ä¿¡æ¯ |
| | | export type ApprovalTaskInfo = { |
| | | id: number |
| | | ownerUser: User |
| | | assigneeUser: User |
| | | status: number |
| | | reason: string |
| | | signPicUrl: string |
| | | } |
| | | |
| | | // 审æ¹èç¹ä¿¡æ¯ |
| | | export type ApprovalNodeInfo = { |
| | | id: number |
| | | name: string |
| | | nodeType: NodeType |
| | | candidateStrategy?: CandidateStrategy |
| | | status: number |
| | | startTime?: Date |
| | | endTime?: Date |
| | | processInstanceId?: string |
| | | candidateUsers?: User[] |
| | | tasks: ApprovalTaskInfo[] |
| | | } |
| | | |
| | | export const getProcessInstanceMyPage = async (params: any) => { |
| | | return await request.get({ url: '/bpm/process-instance/my-page', params }) |
| | | } |
| | | |
| | | export const getProcessInstanceManagerPage = async (params: any) => { |
| | | return await request.get({ url: '/bpm/process-instance/manager-page', params }) |
| | | } |
| | | |
| | | export const createProcessInstance = async (data) => { |
| | | return await request.post({ url: '/bpm/process-instance/create', data: data }) |
| | | } |
| | | |
| | | export const cancelProcessInstanceByStartUser = async (id: number, reason: string) => { |
| | | const data = { |
| | | id: id, |
| | | reason: reason |
| | | } |
| | | return await request.delete({ url: '/bpm/process-instance/cancel-by-start-user', data: data }) |
| | | } |
| | | |
| | | export const cancelProcessInstanceByAdmin = async (id: number, reason: string) => { |
| | | const data = { |
| | | id: id, |
| | | reason: reason |
| | | } |
| | | return await request.delete({ url: '/bpm/process-instance/cancel-by-admin', data: data }) |
| | | } |
| | | |
| | | export const getProcessInstance = async (id: string) => { |
| | | return await request.get({ url: '/bpm/process-instance/get?id=' + id }) |
| | | } |
| | | |
| | | export const getProcessInstanceCopyPage = async (params: any) => { |
| | | return await request.get({ url: '/bpm/process-instance/copy/page', params }) |
| | | } |
| | | |
| | | // è·å审æ¹è¯¦æ
|
| | | export const getApprovalDetail = async (params: any) => { |
| | | return await request.get({ url: '/bpm/process-instance/get-approval-detail', params }) |
| | | } |
| | | |
| | | // è·åä¸ä¸ä¸ªæ§è¡çæµç¨èç¹ |
| | | export const getNextApprovalNodes = async (params: any) => { |
| | | return await request.get({ url: '/bpm/process-instance/get-next-approval-nodes', params }) |
| | | } |
| | | |
| | | // è·å表ååæ®µæé |
| | | export const getFormFieldsPermission = async (params: any) => { |
| | | return await request.get({ url: '/bpm/process-instance/get-form-fields-permission', params }) |
| | | } |
| | | |
| | | // è·åæµç¨å®ä¾ç BPMN 模åè§å¾ |
| | | export const getProcessInstanceBpmnModelView = async (id: string) => { |
| | | return await request.get({ url: '/bpm/process-instance/get-bpmn-model-view?id=' + id }) |
| | | } |
| | | |
| | | // è·åæµç¨å®ä¾æå°æ°æ® |
| | | export const getProcessInstancePrintData = async (id: string) => { |
| | | return await request.get({ url: '/bpm/process-instance/get-print-data?processInstanceId=' + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // BPM æµç¨çå¬å¨ VO |
| | | export interface ProcessListenerVO { |
| | | id: number // ç¼å· |
| | | name: string // çå¬å¨åå |
| | | type: string // çå¬å¨ç±»å |
| | | status: number // çå¬å¨ç¶æ |
| | | event: string // çå¬äºä»¶ |
| | | valueType: string // çå¬å¨å¼ç±»å |
| | | value: string // çå¬å¨å¼ |
| | | } |
| | | |
| | | // BPM æµç¨çå¬å¨ API |
| | | export const ProcessListenerApi = { |
| | | // æ¥è¯¢æµç¨çå¬å¨å页 |
| | | getProcessListenerPage: async (params: any) => { |
| | | return await request.get({ url: `/bpm/process-listener/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢æµç¨çå¬å¨è¯¦æ
|
| | | getProcessListener: async (id: number) => { |
| | | return await request.get({ url: `/bpm/process-listener/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢æµç¨çå¬å¨ |
| | | createProcessListener: async (data: ProcessListenerVO) => { |
| | | return await request.post({ url: `/bpm/process-listener/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹æµç¨çå¬å¨ |
| | | updateProcessListener: async (data: ProcessListenerVO) => { |
| | | return await request.put({ url: `/bpm/process-listener/update`, data }) |
| | | }, |
| | | |
| | | // å 餿µç¨çå¬å¨ |
| | | deleteProcessListener: async (id: number) => { |
| | | return await request.delete({ url: `/bpm/process-listener/delete?id=` + id }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | |
| | | export const updateBpmSimpleModel = async (data) => { |
| | | return await request.post({ |
| | | url: '/bpm/model/simple/update', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | export const getBpmSimpleModel = async (id) => { |
| | | return await request.get({ |
| | | url: '/bpm/model/simple/get?id=' + id |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | /** |
| | | * ä»»å¡ç¶ææä¸¾ |
| | | */ |
| | | export enum TaskStatusEnum { |
| | | /** |
| | | * è·³è¿ |
| | | */ |
| | | SKIP = -2, |
| | | /** |
| | | * æªå¼å§ |
| | | */ |
| | | NOT_START = -1, |
| | | |
| | | /** |
| | | * å¾
å®¡æ¹ |
| | | */ |
| | | WAIT = 0, |
| | | /** |
| | | * 审æ¹ä¸ |
| | | */ |
| | | RUNNING = 1, |
| | | /** |
| | | * 审æ¹éè¿ |
| | | */ |
| | | APPROVE = 2, |
| | | |
| | | /** |
| | | * 审æ¹ä¸éè¿ |
| | | */ |
| | | REJECT = 3, |
| | | |
| | | /** |
| | | * 已忶 |
| | | */ |
| | | CANCEL = 4, |
| | | /** |
| | | * å·²éå |
| | | */ |
| | | RETURN = 5, |
| | | /** |
| | | * 审æ¹éè¿ä¸ |
| | | */ |
| | | APPROVING = 7 |
| | | } |
| | | |
| | | export const getTaskTodoPage = async (params: any) => { |
| | | return await request.get({ url: '/bpm/task/todo-page', params }) |
| | | } |
| | | |
| | | export const getTaskDonePage = async (params: any) => { |
| | | return await request.get({ url: '/bpm/task/done-page', params }) |
| | | } |
| | | |
| | | export const getTaskManagerPage = async (params: any) => { |
| | | return await request.get({ url: '/bpm/task/manager-page', params }) |
| | | } |
| | | |
| | | export const approveTask = async (data: any) => { |
| | | return await request.put({ url: '/bpm/task/approve', data }) |
| | | } |
| | | |
| | | export const rejectTask = async (data: any) => { |
| | | return await request.put({ url: '/bpm/task/reject', data }) |
| | | } |
| | | |
| | | export const getTaskListByProcessInstanceId = async (processInstanceId: string) => { |
| | | return await request.get({ |
| | | url: '/bpm/task/list-by-process-instance-id?processInstanceId=' + processInstanceId |
| | | }) |
| | | } |
| | | |
| | | // è·åææå¯éåçèç¹ |
| | | export const getTaskListByReturn = async (id: string) => { |
| | | return await request.get({ url: '/bpm/task/list-by-return', params: { id } }) |
| | | } |
| | | |
| | | // éå |
| | | export const returnTask = async (data: any) => { |
| | | return await request.put({ url: '/bpm/task/return', data }) |
| | | } |
| | | |
| | | // å§æ´¾ |
| | | export const delegateTask = async (data: any) => { |
| | | return await request.put({ url: '/bpm/task/delegate', data }) |
| | | } |
| | | |
| | | // 转派 |
| | | export const transferTask = async (data: any) => { |
| | | return await request.put({ url: '/bpm/task/transfer', data }) |
| | | } |
| | | |
| | | // å ç¾ |
| | | export const signCreateTask = async (data: any) => { |
| | | return await request.put({ url: '/bpm/task/create-sign', data }) |
| | | } |
| | | |
| | | // åç¾ |
| | | export const signDeleteTask = async (data: any) => { |
| | | return await request.delete({ url: '/bpm/task/delete-sign', data }) |
| | | } |
| | | |
| | | // æé |
| | | export const copyTask = async (data: any) => { |
| | | return await request.put({ url: '/bpm/task/copy', data }) |
| | | } |
| | | |
| | | // æ¤å |
| | | export const withdrawTask = async (taskId: string) => { |
| | | return await request.put({ url: '/bpm/task/withdraw', params: { taskId } }) |
| | | } |
| | | |
| | | // è·åæçå¾
åä»»å¡ |
| | | export const myTodoTask = async (processInstanceId: string) => { |
| | | return await request.get({ url: '/bpm/task/my-todo?processInstanceId=' + processInstanceId }) |
| | | } |
| | | |
| | | // è·ååç¾ä»»å¡å表 |
| | | export const getChildrenTaskList = async (id: string) => { |
| | | return await request.get({ url: '/bpm/task/list-by-parent-task-id?parentTaskId=' + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export type UserGroupVO = { |
| | | id: number |
| | | name: string |
| | | description: string |
| | | userIds: number[] |
| | | status: number |
| | | remark: string |
| | | createTime: string |
| | | } |
| | | |
| | | // åå»ºç¨æ·ç» |
| | | export const createUserGroup = async (data: UserGroupVO) => { |
| | | return await request.post({ |
| | | url: '/bpm/user-group/create', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // æ´æ°ç¨æ·ç» |
| | | export const updateUserGroup = async (data: UserGroupVO) => { |
| | | return await request.put({ |
| | | url: '/bpm/user-group/update', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // å é¤ç¨æ·ç» |
| | | export const deleteUserGroup = async (id: number) => { |
| | | return await request.delete({ url: '/bpm/user-group/delete?id=' + id }) |
| | | } |
| | | |
| | | // è·å¾ç¨æ·ç» |
| | | export const getUserGroup = async (id: number) => { |
| | | return await request.get({ url: '/bpm/user-group/get?id=' + id }) |
| | | } |
| | | |
| | | // è·å¾ç¨æ·ç»å页 |
| | | export const getUserGroupPage = async (params) => { |
| | | return await request.get({ url: '/bpm/user-group/page', params }) |
| | | } |
| | | |
| | | // è·åç¨æ·ç»ç²¾ç®ä¿¡æ¯å表 |
| | | export const getUserGroupSimpleList = async (): Promise<UserGroupVO[]> => { |
| | | return await request.get({ url: '/bpm/user-group/simple-list' }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import { TransferReqVO } from '@/api/crm/permission' |
| | | |
| | | export interface BusinessVO { |
| | | id: number |
| | | name: string |
| | | customerId: number |
| | | customerName?: string |
| | | followUpStatus: boolean |
| | | contactLastTime: Date |
| | | contactNextTime: Date |
| | | ownerUserId: number |
| | | ownerUserName?: string // è´è´£äººçç¨æ·åç§° |
| | | ownerUserDept?: string // è´è´£äººçé¨é¨åç§° |
| | | statusTypeId: number |
| | | statusTypeName?: string |
| | | statusId: number |
| | | statusName?: string |
| | | endStatus: number |
| | | endRemark: string |
| | | dealTime: Date |
| | | totalProductPrice: number |
| | | totalPrice: number |
| | | discountPercent: number |
| | | remark: string |
| | | creator: string // å建人 |
| | | creatorName?: string // å建人åç§° |
| | | createTime: Date // å建æ¶é´ |
| | | updateTime: Date // æ´æ°æ¶é´ |
| | | products?: [ |
| | | { |
| | | id: number |
| | | productId: number |
| | | productName: string |
| | | productNo: string |
| | | productUnit: number |
| | | productPrice: number |
| | | businessPrice: number |
| | | count: number |
| | | totalPrice: number |
| | | } |
| | | ] |
| | | } |
| | | |
| | | // æ¥è¯¢ CRM åæºå表 |
| | | export const getBusinessPage = async (params) => { |
| | | return await request.get({ url: `/crm/business/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ CRM åæºå表ï¼åºäºæå®å®¢æ· |
| | | export const getBusinessPageByCustomer = async (params) => { |
| | | return await request.get({ url: `/crm/business/page-by-customer`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ CRM åæºè¯¦æ
|
| | | export const getBusiness = async (id: number) => { |
| | | return await request.get({ url: `/crm/business/get?id=` + id }) |
| | | } |
| | | |
| | | // è·å¾ CRM åæºå表ï¼ç²¾ç®ï¼ |
| | | export const getSimpleBusinessList = async () => { |
| | | return await request.get({ url: `/crm/business/simple-all-list` }) |
| | | } |
| | | |
| | | // æ°å¢ CRM åæº |
| | | export const createBusiness = async (data: BusinessVO) => { |
| | | return await request.post({ url: `/crm/business/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ CRM åæº |
| | | export const updateBusiness = async (data: BusinessVO) => { |
| | | return await request.put({ url: `/crm/business/update`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ CRM åæºç¶æ |
| | | export const updateBusinessStatus = async (data: BusinessVO) => { |
| | | return await request.put({ url: `/crm/business/update-status`, data }) |
| | | } |
| | | |
| | | // å é¤ CRM åæº |
| | | export const deleteBusiness = async (id: number) => { |
| | | return await request.delete({ url: `/crm/business/delete?id=` + id }) |
| | | } |
| | | |
| | | // å¯¼åº CRM åæº Excel |
| | | export const exportBusiness = async (params) => { |
| | | return await request.download({ url: `/crm/business/export-excel`, params }) |
| | | } |
| | | |
| | | // è系人å
³èåæºå表 |
| | | export const getBusinessPageByContact = async (params) => { |
| | | return await request.get({ url: `/crm/business/page-by-contact`, params }) |
| | | } |
| | | |
| | | // åæºè½¬ç§» |
| | | export const transferBusiness = async (data: TransferReqVO) => { |
| | | return await request.put({ url: '/crm/business/transfer', data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface BusinessStatusTypeVO { |
| | | id: number |
| | | name: string |
| | | deptIds: number[] |
| | | statuses?: { |
| | | id: number |
| | | name: string |
| | | percent: number |
| | | } |
| | | } |
| | | |
| | | export const DEFAULT_STATUSES = [ |
| | | { |
| | | endStatus: 1, |
| | | key: 'ç»æ', |
| | | name: 'èµ¢å', |
| | | percent: 100 |
| | | }, |
| | | { |
| | | endStatus: 2, |
| | | key: 'ç»æ', |
| | | name: 'è¾å', |
| | | percent: 0 |
| | | }, |
| | | { |
| | | endStatus: 3, |
| | | key: 'ç»æ', |
| | | name: 'æ æ', |
| | | percent: 0 |
| | | } |
| | | ] |
| | | |
| | | // æ¥è¯¢åæºç¶æç»å表 |
| | | export const getBusinessStatusPage = async (params: any) => { |
| | | return await request.get({ url: `/crm/business-status/page`, params }) |
| | | } |
| | | |
| | | // æ°å¢åæºç¶æç» |
| | | export const createBusinessStatus = async (data: BusinessStatusTypeVO) => { |
| | | return await request.post({ url: `/crm/business-status/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹åæºç¶æç» |
| | | export const updateBusinessStatus = async (data: BusinessStatusTypeVO) => { |
| | | return await request.put({ url: `/crm/business-status/update`, data }) |
| | | } |
| | | |
| | | // æ¥è¯¢åæºç¶æç±»å详æ
|
| | | export const getBusinessStatus = async (id: number) => { |
| | | return await request.get({ url: `/crm/business-status/get?id=` + id }) |
| | | } |
| | | |
| | | // å é¤åæºç¶æ |
| | | export const deleteBusinessStatus = async (id: number) => { |
| | | return await request.delete({ url: `/crm/business-status/delete?id=` + id }) |
| | | } |
| | | |
| | | // è·å¾åæºç¶æç»å表 |
| | | export const getBusinessStatusTypeSimpleList = async () => { |
| | | return await request.get({ url: `/crm/business-status/type-simple-list` }) |
| | | } |
| | | |
| | | // è·å¾åæºé¶æ®µå表 |
| | | export const getBusinessStatusSimpleList = async (typeId: number) => { |
| | | return await request.get({ url: `/crm/business-status/status-simple-list`, params: { typeId } }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import { TransferReqVO } from '@/api/crm/permission' |
| | | |
| | | export interface ClueVO { |
| | | id: number // ç¼å· |
| | | name: string // 线索åç§° |
| | | followUpStatus: boolean // è·è¿ç¶æ |
| | | contactLastTime: Date // æåè·è¿æ¶é´ |
| | | contactLastContent: string // æåè·è¿å
容 |
| | | contactNextTime: Date // 䏿¬¡èç³»æ¶é´ |
| | | ownerUserId: number // è´è´£äººçç¨æ·ç¼å· |
| | | ownerUserName?: string // è´è´£äººçç¨æ·åç§° |
| | | ownerUserDept?: string // è´è´£äººçé¨é¨åç§° |
| | | transformStatus: boolean // 转åç¶æ |
| | | customerId: number // 客æ·ç¼å· |
| | | customerName?: string // 客æ·åç§° |
| | | mobile: string // ææºå· |
| | | telephone: string // çµè¯ |
| | | qq: string // QQ |
| | | wechat: string // wechat |
| | | email: string // email |
| | | areaId: number // æå¨å° |
| | | areaName?: string // æå¨å°åç§° |
| | | detailAddress: string // 详ç»å°å |
| | | industryId: number // æå±è¡ä¸ |
| | | level: number // 客æ·ç级 |
| | | source: number // å®¢æ·æ¥æº |
| | | remark: string // 夿³¨ |
| | | creator: string // å建人 |
| | | creatorName?: string // å建人åç§° |
| | | createTime: Date // å建æ¶é´ |
| | | updateTime: Date // æ´æ°æ¶é´ |
| | | } |
| | | |
| | | // æ¥è¯¢çº¿ç´¢å表 |
| | | export const getCluePage = async (params: any) => { |
| | | return await request.get({ url: `/crm/clue/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢çº¿ç´¢è¯¦æ
|
| | | export const getClue = async (id: number) => { |
| | | return await request.get({ url: `/crm/clue/get?id=` + id }) |
| | | } |
| | | |
| | | // æ°å¢çº¿ç´¢ |
| | | export const createClue = async (data: ClueVO) => { |
| | | return await request.post({ url: `/crm/clue/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹çº¿ç´¢ |
| | | export const updateClue = async (data: ClueVO) => { |
| | | return await request.put({ url: `/crm/clue/update`, data }) |
| | | } |
| | | |
| | | // å é¤çº¿ç´¢ |
| | | export const deleteClue = async (id: number) => { |
| | | return await request.delete({ url: `/crm/clue/delete?id=` + id }) |
| | | } |
| | | |
| | | // 导åºçº¿ç´¢ Excel |
| | | export const exportClue = async (params) => { |
| | | return await request.download({ url: `/crm/clue/export-excel`, params }) |
| | | } |
| | | |
| | | // 线索转移 |
| | | export const transferClue = async (data: TransferReqVO) => { |
| | | return await request.put({ url: '/crm/clue/transfer', data }) |
| | | } |
| | | |
| | | // 线索转åä¸ºå®¢æ· |
| | | export const transformClue = async (id: number) => { |
| | | return await request.put({ url: '/crm/clue/transform', params: { id } }) |
| | | } |
| | | |
| | | // è·å¾åé
ç»æçãå¾
è·è¿ç线索æ°é |
| | | export const getFollowClueCount = async () => { |
| | | return await request.get({ url: '/crm/clue/follow-count' }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import { TransferReqVO } from '@/api/crm/permission' |
| | | |
| | | export interface ContactVO { |
| | | id: number // ç¼å· |
| | | name: string // è系人åç§° |
| | | customerId: number // 客æ·ç¼å· |
| | | customerName?: string // 客æ·åç§° |
| | | contactLastTime: Date // æåè·è¿æ¶é´ |
| | | contactLastContent: string // æåè·è¿å
容 |
| | | contactNextTime: Date // 䏿¬¡èç³»æ¶é´ |
| | | ownerUserId: number // è´è´£äººçç¨æ·ç¼å· |
| | | ownerUserName?: string // è´è´£äººçç¨æ·åç§° |
| | | ownerUserDept?: string // è´è´£äººçé¨é¨åç§° |
| | | mobile: string // ææºå· |
| | | telephone: string // çµè¯ |
| | | qq: string // QQ |
| | | wechat: string // wechat |
| | | email: string // email |
| | | areaId: number // æå¨å° |
| | | areaName?: string // æå¨å°åç§° |
| | | detailAddress: string // 详ç»å°å |
| | | sex: number // æ§å« |
| | | master: boolean // æ¯å¦ä¸»è系人 |
| | | post: string // èå¡ |
| | | parentId: number // ä¸çº§è系人ç¼å· |
| | | parentName?: string // ä¸çº§è系人åç§° |
| | | remark: string // 夿³¨ |
| | | creator: string // å建人 |
| | | creatorName?: string // å建人åç§° |
| | | createTime: Date // å建æ¶é´ |
| | | updateTime: Date // æ´æ°æ¶é´ |
| | | } |
| | | |
| | | export interface ContactBusinessReqVO { |
| | | contactId: number |
| | | businessIds: number[] |
| | | } |
| | | |
| | | export interface ContactBusiness2ReqVO { |
| | | businessId: number |
| | | contactIds: number[] |
| | | } |
| | | |
| | | // æ¥è¯¢ CRM è系人å表 |
| | | export const getContactPage = async (params) => { |
| | | return await request.get({ url: `/crm/contact/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ CRM è系人å表ï¼åºäºæå®å®¢æ· |
| | | export const getContactPageByCustomer = async (params: any) => { |
| | | return await request.get({ url: `/crm/contact/page-by-customer`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ CRM è系人å表ï¼åºäºæå®åæº |
| | | export const getContactPageByBusiness = async (params: any) => { |
| | | return await request.get({ url: `/crm/contact/page-by-business`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ CRM è系人详æ
|
| | | export const getContact = async (id: number) => { |
| | | return await request.get({ url: `/crm/contact/get?id=` + id }) |
| | | } |
| | | |
| | | // æ°å¢ CRM è系人 |
| | | export const createContact = async (data: ContactVO) => { |
| | | return await request.post({ url: `/crm/contact/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ CRM è系人 |
| | | export const updateContact = async (data: ContactVO) => { |
| | | return await request.put({ url: `/crm/contact/update`, data }) |
| | | } |
| | | |
| | | // å é¤ CRM è系人 |
| | | export const deleteContact = async (id: number) => { |
| | | return await request.delete({ url: `/crm/contact/delete?id=` + id }) |
| | | } |
| | | |
| | | // å¯¼åº CRM è系人 Excel |
| | | export const exportContact = async (params) => { |
| | | return await request.download({ url: `/crm/contact/export-excel`, params }) |
| | | } |
| | | |
| | | // è·å¾ CRM è系人å表ï¼ç²¾ç®ï¼ |
| | | export const getSimpleContactList = async () => { |
| | | return await request.get({ url: `/crm/contact/simple-all-list` }) |
| | | } |
| | | |
| | | // æ¹éæ°å¢èç³»äººåæºå
³è |
| | | export const createContactBusinessList = async (data: ContactBusinessReqVO) => { |
| | | return await request.post({ url: `/crm/contact/create-business-list`, data }) |
| | | } |
| | | |
| | | // æ¹éæ°å¢èç³»äººåæºå
³è |
| | | export const createContactBusinessList2 = async (data: ContactBusiness2ReqVO) => { |
| | | return await request.post({ url: `/crm/contact/create-business-list2`, data }) |
| | | } |
| | | |
| | | // è§£é¤èç³»äººåæºå
³è |
| | | export const deleteContactBusinessList = async (data: ContactBusinessReqVO) => { |
| | | return await request.delete({ url: `/crm/contact/delete-business-list`, data }) |
| | | } |
| | | |
| | | // è§£é¤èç³»äººåæºå
³è |
| | | export const deleteContactBusinessList2 = async (data: ContactBusiness2ReqVO) => { |
| | | return await request.delete({ url: `/crm/contact/delete-business-list2`, data }) |
| | | } |
| | | |
| | | // è系人转移 |
| | | export const transferContact = async (data: TransferReqVO) => { |
| | | return await request.put({ url: '/crm/contact/transfer', data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface ContractConfigVO { |
| | | notifyEnabled?: boolean |
| | | notifyDays?: number |
| | | } |
| | | |
| | | // è·åååé
ç½® |
| | | export const getContractConfig = async () => { |
| | | return await request.get({ url: `/crm/contract-config/get` }) |
| | | } |
| | | |
| | | // æ´æ°ååé
ç½® |
| | | export const saveContractConfig = async (data: ContractConfigVO) => { |
| | | return await request.put({ url: `/crm/contract-config/save`, data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import { TransferReqVO } from '@/api/crm/permission' |
| | | |
| | | export interface ContractVO { |
| | | id: number |
| | | name: string |
| | | no: string |
| | | customerId: number |
| | | customerName?: string |
| | | businessId: number |
| | | businessName: string |
| | | contactLastTime: Date |
| | | ownerUserId: number |
| | | ownerUserName?: string |
| | | ownerUserDeptName?: string |
| | | processInstanceId: number |
| | | auditStatus: number |
| | | orderDate: Date |
| | | startTime: Date |
| | | endTime: Date |
| | | totalProductPrice: number |
| | | discountPercent: number |
| | | totalPrice: number |
| | | totalReceivablePrice: number |
| | | signContactId: number |
| | | signContactName?: string |
| | | signUserId: number |
| | | signUserName: string |
| | | remark: string |
| | | createTime?: Date |
| | | creator: string |
| | | creatorName: string |
| | | updateTime?: Date |
| | | products?: [ |
| | | { |
| | | id: number |
| | | productId: number |
| | | productName: string |
| | | productNo: string |
| | | productUnit: number |
| | | productPrice: number |
| | | contractPrice: number |
| | | count: number |
| | | totalPrice: number |
| | | } |
| | | ] |
| | | } |
| | | |
| | | // æ¥è¯¢ CRM ååå表 |
| | | export const getContractPage = async (params) => { |
| | | return await request.get({ url: `/crm/contract/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ CRM è系人å表ï¼åºäºæå®å®¢æ· |
| | | export const getContractPageByCustomer = async (params: any) => { |
| | | return await request.get({ url: `/crm/contract/page-by-customer`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ CRM è系人å表ï¼åºäºæå®åæº |
| | | export const getContractPageByBusiness = async (params: any) => { |
| | | return await request.get({ url: `/crm/contract/page-by-business`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ CRM åå详æ
|
| | | export const getContract = async (id: number) => { |
| | | return await request.get({ url: `/crm/contract/get?id=` + id }) |
| | | } |
| | | |
| | | // æ¥è¯¢ CRM åå䏿å表 |
| | | export const getContractSimpleList = async (customerId: number) => { |
| | | return await request.get({ |
| | | url: `/crm/contract/simple-list?customerId=${customerId}` |
| | | }) |
| | | } |
| | | |
| | | // æ°å¢ CRM åå |
| | | export const createContract = async (data: ContractVO) => { |
| | | return await request.post({ url: `/crm/contract/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ CRM åå |
| | | export const updateContract = async (data: ContractVO) => { |
| | | return await request.put({ url: `/crm/contract/update`, data }) |
| | | } |
| | | |
| | | // å é¤ CRM åå |
| | | export const deleteContract = async (id: number) => { |
| | | return await request.delete({ url: `/crm/contract/delete?id=` + id }) |
| | | } |
| | | |
| | | // å¯¼åº CRM åå Excel |
| | | export const exportContract = async (params) => { |
| | | return await request.download({ url: `/crm/contract/export-excel`, params }) |
| | | } |
| | | |
| | | // æäº¤å®¡æ ¸ |
| | | export const submitContract = async (id: number) => { |
| | | return await request.put({ url: `/crm/contract/submit?id=${id}` }) |
| | | } |
| | | |
| | | // åå转移 |
| | | export const transferContract = async (data: TransferReqVO) => { |
| | | return await request.put({ url: '/crm/contract/transfer', data }) |
| | | } |
| | | |
| | | // è·å¾å¾
å®¡æ ¸ååæ°é |
| | | export const getAuditContractCount = async () => { |
| | | return await request.get({ url: '/crm/contract/audit-count' }) |
| | | } |
| | | |
| | | // è·å¾å³å°å°æï¼æéï¼çååæ°é |
| | | export const getRemindContractCount = async () => { |
| | | return await request.get({ url: '/crm/contract/remind-count' }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import { TransferReqVO } from '@/api/crm/permission' |
| | | |
| | | export interface CustomerVO { |
| | | id: number // ç¼å· |
| | | name: string // 客æ·åç§° |
| | | followUpStatus: boolean // è·è¿ç¶æ |
| | | contactLastTime: Date // æåè·è¿æ¶é´ |
| | | contactLastContent: string // æåè·è¿å
容 |
| | | contactNextTime: Date // 䏿¬¡èç³»æ¶é´ |
| | | ownerUserId: number // è´è´£äººçç¨æ·ç¼å· |
| | | ownerUserName?: string // è´è´£äººçç¨æ·åç§° |
| | | ownerUserDept?: string // è´è´£äººçé¨é¨åç§° |
| | | lockStatus?: boolean |
| | | dealStatus?: boolean |
| | | mobile: string // ææºå· |
| | | telephone: string // çµè¯ |
| | | qq: string // QQ |
| | | wechat: string // wechat |
| | | email: string // email |
| | | areaId: number // æå¨å° |
| | | areaName?: string // æå¨å°åç§° |
| | | detailAddress: string // 详ç»å°å |
| | | industryId: number // æå±è¡ä¸ |
| | | level: number // 客æ·ç级 |
| | | source: number // å®¢æ·æ¥æº |
| | | remark: string // 夿³¨ |
| | | creator: string // å建人 |
| | | creatorName?: string // å建人åç§° |
| | | createTime: Date // å建æ¶é´ |
| | | updateTime: Date // æ´æ°æ¶é´ |
| | | } |
| | | |
| | | // æ¥è¯¢å®¢æ·å表 |
| | | export const getCustomerPage = async (params) => { |
| | | return await request.get({ url: `/crm/customer/page`, params }) |
| | | } |
| | | |
| | | // è¿å
¥å
¬æµ·å®¢æ·æéç客æ·å表 |
| | | export const getPutPoolRemindCustomerPage = async (params) => { |
| | | return await request.get({ url: `/crm/customer/put-pool-remind-page`, params }) |
| | | } |
| | | |
| | | // è·å¾å¾
è¿å
¥å
¬æµ·å®¢æ·æ°é |
| | | export const getPutPoolRemindCustomerCount = async () => { |
| | | return await request.get({ url: `/crm/customer/put-pool-remind-count` }) |
| | | } |
| | | |
| | | // è·å¾ä»æ¥éèç³»å®¢æ·æ°é |
| | | export const getTodayContactCustomerCount = async () => { |
| | | return await request.get({ url: `/crm/customer/today-contact-count` }) |
| | | } |
| | | |
| | | // è·å¾åé
ç»æãå¾
è·è¿ç线索æ°éçå®¢æ·æ°é |
| | | export const getFollowCustomerCount = async () => { |
| | | return await request.get({ url: `/crm/customer/follow-count` }) |
| | | } |
| | | |
| | | // æ¥è¯¢å®¢æ·è¯¦æ
|
| | | export const getCustomer = async (id: number) => { |
| | | return await request.get({ url: `/crm/customer/get?id=` + id }) |
| | | } |
| | | |
| | | // æ°å¢å®¢æ· |
| | | export const createCustomer = async (data: CustomerVO) => { |
| | | return await request.post({ url: `/crm/customer/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹å®¢æ· |
| | | export const updateCustomer = async (data: CustomerVO) => { |
| | | return await request.put({ url: `/crm/customer/update`, data }) |
| | | } |
| | | |
| | | // æ´æ°å®¢æ·çæäº¤ç¶æ |
| | | export const updateCustomerDealStatus = async (id: number, dealStatus: boolean) => { |
| | | return await request.put({ url: `/crm/customer/update-deal-status`, params: { id, dealStatus } }) |
| | | } |
| | | |
| | | // å é¤å®¢æ· |
| | | export const deleteCustomer = async (id: number) => { |
| | | return await request.delete({ url: `/crm/customer/delete?id=` + id }) |
| | | } |
| | | |
| | | // 导åºå®¢æ· Excel |
| | | export const exportCustomer = async (params: any) => { |
| | | return await request.download({ url: `/crm/customer/export-excel`, params }) |
| | | } |
| | | |
| | | // ä¸è½½å®¢æ·å¯¼å
¥æ¨¡æ¿ |
| | | export const importCustomerTemplate = () => { |
| | | return request.download({ url: '/crm/customer/get-import-template' }) |
| | | } |
| | | |
| | | // 导å
¥å®¢æ· |
| | | export const handleImport = async (formData) => { |
| | | return await request.upload({ url: `/crm/customer/import`, data: formData }) |
| | | } |
| | | |
| | | // 客æ·å表 |
| | | export const getCustomerSimpleList = async () => { |
| | | return await request.get({ url: `/crm/customer/simple-list` }) |
| | | } |
| | | |
| | | // ======================= ä¸å¡æä½ ======================= |
| | | |
| | | // 客æ·è½¬ç§» |
| | | export const transferCustomer = async (data: TransferReqVO) => { |
| | | return await request.put({ url: '/crm/customer/transfer', data }) |
| | | } |
| | | |
| | | // éå®/è§£éå®¢æ· |
| | | export const lockCustomer = async (id: number, lockStatus: boolean) => { |
| | | return await request.put({ url: `/crm/customer/lock`, data: { id, lockStatus } }) |
| | | } |
| | | |
| | | // é¢åå
¬æµ·å®¢æ· |
| | | export const receiveCustomer = async (ids: any[]) => { |
| | | return await request.put({ url: '/crm/customer/receive', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // åé
å
¬æµ·ç»å¯¹åºè´è´£äºº |
| | | export const distributeCustomer = async (ids: any[], ownerUserId: number) => { |
| | | return await request.put({ |
| | | url: '/crm/customer/distribute', |
| | | data: { ids: ids, ownerUserId } |
| | | }) |
| | | } |
| | | |
| | | // å®¢æ·æ¾å
¥å
¬æµ· |
| | | export const putCustomerPool = async (id: number) => { |
| | | return await request.put({ url: `/crm/customer/put-pool?id=${id}` }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface CustomerLimitConfigVO { |
| | | id?: number |
| | | type?: number |
| | | userIds?: string |
| | | deptIds?: string |
| | | maxCount?: number |
| | | dealCountEnabled?: boolean |
| | | } |
| | | |
| | | /** |
| | | * 客æ·éå¶é
置类å |
| | | */ |
| | | export enum LimitConfType { |
| | | /** |
| | | * æ¥æå®¢æ·æ°éå¶ |
| | | */ |
| | | CUSTOMER_QUANTITY_LIMIT = 1, |
| | | /** |
| | | * éå®å®¢æ·æ°éå¶ |
| | | */ |
| | | CUSTOMER_LOCK_LIMIT = 2 |
| | | } |
| | | |
| | | // æ¥è¯¢å®¢æ·éå¶é
ç½®å表 |
| | | export const getCustomerLimitConfigPage = async (params) => { |
| | | return await request.get({ url: `/crm/customer-limit-config/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢å®¢æ·éå¶é
置详æ
|
| | | export const getCustomerLimitConfig = async (id: number) => { |
| | | return await request.get({ url: `/crm/customer-limit-config/get?id=` + id }) |
| | | } |
| | | |
| | | // æ°å¢å®¢æ·éå¶é
ç½® |
| | | export const createCustomerLimitConfig = async (data: CustomerLimitConfigVO) => { |
| | | return await request.post({ url: `/crm/customer-limit-config/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹å®¢æ·éå¶é
ç½® |
| | | export const updateCustomerLimitConfig = async (data: CustomerLimitConfigVO) => { |
| | | return await request.put({ url: `/crm/customer-limit-config/update`, data }) |
| | | } |
| | | |
| | | // å é¤å®¢æ·éå¶é
ç½® |
| | | export const deleteCustomerLimitConfig = async (id: number) => { |
| | | return await request.delete({ url: `/crm/customer-limit-config/delete?id=` + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface CustomerPoolConfigVO { |
| | | enabled?: boolean |
| | | contactExpireDays?: number |
| | | dealExpireDays?: number |
| | | notifyEnabled?: boolean |
| | | notifyDays?: number |
| | | } |
| | | |
| | | // è·å客æ·å
¬æµ·è§å设置 |
| | | export const getCustomerPoolConfig = async () => { |
| | | return await request.get({ url: `/crm/customer-pool-config/get` }) |
| | | } |
| | | |
| | | // æ´æ°å®¢æ·å
¬æµ·è§å设置 |
| | | export const saveCustomerPoolConfig = async (data: CustomerPoolConfigVO) => { |
| | | return await request.put({ url: `/crm/customer-pool-config/save`, data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // è·è¿è®°å½ VO |
| | | export interface FollowUpRecordVO { |
| | | id: number // ç¼å· |
| | | bizType: number // æ°æ®ç±»å |
| | | bizId: number // æ°æ®ç¼å· |
| | | type: number // è·è¿ç±»å |
| | | content: string // è·è¿å
容 |
| | | picUrls: string[] // å¾ç |
| | | fileUrls: string[] // éä»¶ |
| | | nextTime: Date // 䏿¬¡èç³»æ¶é´ |
| | | businessIds: number[] // å
³èçåæºç¼å·æ°ç» |
| | | businesses: { |
| | | id: number |
| | | name: string |
| | | }[] // å
³èçåæºæ°ç» |
| | | contactIds: number[] // å
³èçè系人ç¼å·æ°ç» |
| | | contacts: { |
| | | id: number |
| | | name: string |
| | | }[] // å
³èçè系人æ°ç» |
| | | creator: string |
| | | creatorName?: string |
| | | } |
| | | |
| | | // è·è¿è®°å½ API |
| | | export const FollowUpRecordApi = { |
| | | // æ¥è¯¢è·è¿è®°å½å页 |
| | | getFollowUpRecordPage: async (params: any) => { |
| | | return await request.get({ url: `/crm/follow-up-record/page`, params }) |
| | | }, |
| | | |
| | | // æ°å¢è·è¿è®°å½ |
| | | createFollowUpRecord: async (data: FollowUpRecordVO) => { |
| | | return await request.post({ url: `/crm/follow-up-record/create`, data }) |
| | | }, |
| | | |
| | | // å é¤è·è¿è®°å½ |
| | | deleteFollowUpRecord: async (id: number) => { |
| | | return await request.delete({ url: `/crm/follow-up-record/delete?id=` + id }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface OperateLogVO extends PageParam { |
| | | bizType: number |
| | | bizId: number |
| | | } |
| | | |
| | | // è·å¾æä½æ¥å¿ |
| | | export const getOperateLogPage = async (params: OperateLogVO) => { |
| | | return await request.get({ url: `/crm/operate-log/page`, params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface PermissionVO { |
| | | id?: number // æ°æ®æéç¼å· |
| | | userId: number // ç¨æ·ç¼å· |
| | | bizType: number // Crm ç±»å |
| | | bizId: number // Crm ç±»åæ°æ®ç¼å· |
| | | level: number // æéçº§å« |
| | | toBizTypes?: number[] // åæ¶æ·»å è³ |
| | | deptName?: string // é¨é¨åç§° |
| | | nickname?: string // ç¨æ·æµç§° |
| | | postNames?: string[] // å²ä½åç§°æ°ç» |
| | | createTime?: Date |
| | | ids?: number[] |
| | | } |
| | | |
| | | export interface TransferReqVO { |
| | | id: number // 模åç¼å· |
| | | newOwnerUserId: number // æ°è´è´£äººçç¨æ·ç¼å· |
| | | oldOwnerPermissionLevel?: number // èè´è´£äººå å
¥å¢éåçæéçº§å« |
| | | toBizTypes?: number[] // è½¬ç§»å®¢æ·æ¶ï¼éè¦é¢å¤æãè系人ããåæºããååãç checkbox éæ© |
| | | } |
| | | |
| | | /** |
| | | * CRM ä¸å¡ç±»åæä¸¾ |
| | | * |
| | | * @author HUIHUI |
| | | */ |
| | | export enum BizTypeEnum { |
| | | CRM_CLUE = 1, // 线索 |
| | | CRM_CUSTOMER = 2, // å®¢æ· |
| | | CRM_CONTACT = 3, // è系人 |
| | | CRM_BUSINESS = 4, // åæº |
| | | CRM_CONTRACT = 5, // åå |
| | | CRM_PRODUCT = 6, // 产å |
| | | CRM_RECEIVABLE = 7, // 忬¾ |
| | | CRM_RECEIVABLE_PLAN = 8 // 忬¾è®¡å |
| | | } |
| | | |
| | | /** |
| | | * CRM æ°æ®æéçº§å«æä¸¾ |
| | | */ |
| | | export enum PermissionLevelEnum { |
| | | OWNER = 1, // è´è´£äºº |
| | | READ = 2, // åªè¯» |
| | | WRITE = 3 // 读å |
| | | } |
| | | |
| | | // è·å¾æ°æ®æéåè¡¨ï¼æ¥è¯¢å¢éæååè¡¨ï¼ |
| | | export const getPermissionList = async (params) => { |
| | | return await request.get({ url: `/crm/permission/list`, params }) |
| | | } |
| | | |
| | | // åå»ºæ°æ®æéï¼æ°å¢å¢éæåï¼ |
| | | export const createPermission = async (data: PermissionVO) => { |
| | | return await request.post({ url: `/crm/permission/create`, data }) |
| | | } |
| | | |
| | | // ç¼è¾æ°æ®æéï¼ä¿®æ¹å¢éæåæé级å«ï¼ |
| | | export const updatePermission = async (data) => { |
| | | return await request.put({ url: `/crm/permission/update`, data }) |
| | | } |
| | | |
| | | // å 餿°æ®æéï¼å é¤å¢éæåï¼ |
| | | export const deletePermissionBatch = async (val: number[]) => { |
| | | return await request.delete({ url: '/crm/permission/delete?ids=' + val.join(',') }) |
| | | } |
| | | |
| | | // å é¤èªå·±çæ°æ®æéï¼éåºå¢éï¼ |
| | | export const deleteSelfPermission = async (id: number) => { |
| | | return await request.delete({ url: '/crm/permission/delete-self?id=' + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // TODO @zangeï¼æªå° product ä¸ï¼å»ºä¸ª category å
ï¼æªè¿å»åï¼ |
| | | export interface ProductCategoryVO { |
| | | id: number |
| | | name: string |
| | | parentId: number |
| | | } |
| | | |
| | | // æ¥è¯¢äº§åå类详æ
|
| | | export const getProductCategory = async (id: number) => { |
| | | return await request.get({ url: `/crm/product-category/get?id=` + id }) |
| | | } |
| | | |
| | | // æ°å¢äº§ååç±» |
| | | export const createProductCategory = async (data: ProductCategoryVO) => { |
| | | return await request.post({ url: `/crm/product-category/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹äº§ååç±» |
| | | export const updateProductCategory = async (data: ProductCategoryVO) => { |
| | | return await request.put({ url: `/crm/product-category/update`, data }) |
| | | } |
| | | |
| | | // å é¤äº§ååç±» |
| | | export const deleteProductCategory = async (id: number) => { |
| | | return await request.delete({ url: `/crm/product-category/delete?id=` + id }) |
| | | } |
| | | |
| | | // 产ååç±»å表 |
| | | export const getProductCategoryList = async (params) => { |
| | | return await request.get({ url: `/crm/product-category/list`, params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface ProductVO { |
| | | id: number |
| | | name: string |
| | | no: string |
| | | unit: number |
| | | price: number |
| | | status: number |
| | | categoryId: number |
| | | categoryName?: string |
| | | description: string |
| | | ownerUserId: number |
| | | } |
| | | |
| | | // æ¥è¯¢äº§åå表 |
| | | export const getProductPage = async (params) => { |
| | | return await request.get({ url: `/crm/product/page`, params }) |
| | | } |
| | | |
| | | // è·å¾äº§åç²¾ç®å表 |
| | | export const getProductSimpleList = async () => { |
| | | return await request.get({ url: `/crm/product/simple-list` }) |
| | | } |
| | | |
| | | // æ¥è¯¢äº§å详æ
|
| | | export const getProduct = async (id: number) => { |
| | | return await request.get({ url: `/crm/product/get?id=` + id }) |
| | | } |
| | | |
| | | // æ°å¢äº§å |
| | | export const createProduct = async (data: ProductVO) => { |
| | | return await request.post({ url: `/crm/product/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹äº§å |
| | | export const updateProduct = async (data: ProductVO) => { |
| | | return await request.put({ url: `/crm/product/update`, data }) |
| | | } |
| | | |
| | | // å é¤äº§å |
| | | export const deleteProduct = async (id: number) => { |
| | | return await request.delete({ url: `/crm/product/delete?id=` + id }) |
| | | } |
| | | |
| | | // 导åºäº§å Excel |
| | | export const exportProduct = async (params) => { |
| | | return await request.download({ url: `/crm/product/export-excel`, params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface ReceivableVO { |
| | | id: number |
| | | no: string |
| | | planId?: number |
| | | customerId?: number |
| | | customerName?: string |
| | | contractId?: number |
| | | contract?: { |
| | | id?: number |
| | | name?: string |
| | | no: string |
| | | totalPrice: number |
| | | } |
| | | auditStatus: number |
| | | processInstanceId: number |
| | | returnTime: Date |
| | | returnType: number |
| | | price: number |
| | | ownerUserId: number |
| | | ownerUserName?: string |
| | | remark: string |
| | | creator: string // å建人 |
| | | creatorName?: string // å建人åç§° |
| | | createTime: Date // å建æ¶é´ |
| | | updateTime: Date // æ´æ°æ¶é´ |
| | | } |
| | | |
| | | // æ¥è¯¢å款å表 |
| | | export const getReceivablePage = async (params) => { |
| | | return await request.get({ url: `/crm/receivable/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢å款å表 |
| | | export const getReceivablePageByCustomer = async (params) => { |
| | | return await request.get({ url: `/crm/receivable/page-by-customer`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢å款详æ
|
| | | export const getReceivable = async (id: number) => { |
| | | return await request.get({ url: `/crm/receivable/get?id=` + id }) |
| | | } |
| | | |
| | | // æ°å¢å款 |
| | | export const createReceivable = async (data: ReceivableVO) => { |
| | | return await request.post({ url: `/crm/receivable/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹å款 |
| | | export const updateReceivable = async (data: ReceivableVO) => { |
| | | return await request.put({ url: `/crm/receivable/update`, data }) |
| | | } |
| | | |
| | | // å é¤å款 |
| | | export const deleteReceivable = async (id: number) => { |
| | | return await request.delete({ url: `/crm/receivable/delete?id=` + id }) |
| | | } |
| | | |
| | | // 导åºå款 Excel |
| | | export const exportReceivable = async (params) => { |
| | | return await request.download({ url: `/crm/receivable/export-excel`, params }) |
| | | } |
| | | |
| | | // æäº¤å®¡æ ¸ |
| | | export const submitReceivable = async (id: number) => { |
| | | return await request.put({ url: `/crm/receivable/submit?id=${id}` }) |
| | | } |
| | | |
| | | // è·å¾å¾
å®¡æ ¸åæ¬¾æ°é |
| | | export const getAuditReceivableCount = async () => { |
| | | return await request.get({ url: '/crm/receivable/audit-count' }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface ReceivablePlanVO { |
| | | id: number |
| | | period: number |
| | | receivableId: number |
| | | price: number |
| | | returnTime: Date |
| | | remindDays: number |
| | | returnType: number |
| | | remindTime: Date |
| | | customerId: number |
| | | customerName?: string |
| | | contractId?: number |
| | | contractNo?: string |
| | | ownerUserId: number |
| | | ownerUserName?: string |
| | | remark: string |
| | | creator: string // å建人 |
| | | creatorName?: string // å建人åç§° |
| | | createTime: Date // å建æ¶é´ |
| | | updateTime: Date // æ´æ°æ¶é´ |
| | | receivable?: { |
| | | price: number |
| | | returnTime: Date |
| | | } |
| | | } |
| | | |
| | | // æ¥è¯¢å款计åå表 |
| | | export const getReceivablePlanPage = async (params) => { |
| | | return await request.get({ url: `/crm/receivable-plan/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢å款计åå表 |
| | | export const getReceivablePlanPageByCustomer = async (params) => { |
| | | return await request.get({ url: `/crm/receivable-plan/page-by-customer`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢å款计å详æ
|
| | | export const getReceivablePlan = async (id: number) => { |
| | | return await request.get({ url: `/crm/receivable-plan/get?id=` + id }) |
| | | } |
| | | |
| | | // æ¥è¯¢å款计åä¸ææ°æ® |
| | | export const getReceivablePlanSimpleList = async (customerId: number, contractId: number) => { |
| | | return await request.get({ |
| | | url: `/crm/receivable-plan/simple-list?customerId=${customerId}&contractId=${contractId}` |
| | | }) |
| | | } |
| | | |
| | | // æ°å¢å款计å |
| | | export const createReceivablePlan = async (data: ReceivablePlanVO) => { |
| | | return await request.post({ url: `/crm/receivable-plan/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹å款计å |
| | | export const updateReceivablePlan = async (data: ReceivablePlanVO) => { |
| | | return await request.put({ url: `/crm/receivable-plan/update`, data }) |
| | | } |
| | | |
| | | // å é¤å款计å |
| | | export const deleteReceivablePlan = async (id: number) => { |
| | | return await request.delete({ url: `/crm/receivable-plan/delete?id=` + id }) |
| | | } |
| | | |
| | | // 导åºå款计å Excel |
| | | export const exportReceivablePlan = async (params) => { |
| | | return await request.download({ url: `/crm/receivable-plan/export-excel`, params }) |
| | | } |
| | | |
| | | // è·å¾å¾
忬¾æéæ°é |
| | | export const getReceivablePlanRemindCount = async () => { |
| | | return await request.get({ url: '/crm/receivable-plan/remind-count' }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface CrmStatisticsCustomerSummaryByDateRespVO { |
| | | time: string |
| | | customerCreateCount: number |
| | | customerDealCount: number |
| | | } |
| | | |
| | | export interface CrmStatisticsCustomerSummaryByUserRespVO { |
| | | ownerUserName: string |
| | | customerCreateCount: number |
| | | customerDealCount: number |
| | | contractPrice: number |
| | | receivablePrice: number |
| | | } |
| | | |
| | | export interface CrmStatisticsFollowUpSummaryByDateRespVO { |
| | | time: string |
| | | followUpRecordCount: number |
| | | followUpCustomerCount: number |
| | | } |
| | | |
| | | export interface CrmStatisticsFollowUpSummaryByUserRespVO { |
| | | ownerUserName: string |
| | | followupRecordCount: number |
| | | followupCustomerCount: number |
| | | } |
| | | |
| | | export interface CrmStatisticsFollowUpSummaryByTypeRespVO { |
| | | followUpType: string |
| | | followUpRecordCount: number |
| | | } |
| | | |
| | | export interface CrmStatisticsCustomerContractSummaryRespVO { |
| | | customerName: string |
| | | contractName: string |
| | | totalPrice: number |
| | | receivablePrice: number |
| | | customerType: string |
| | | customerSource: string |
| | | ownerUserName: string |
| | | creatorUserName: string |
| | | createTime: Date |
| | | orderDate: Date |
| | | } |
| | | |
| | | export interface CrmStatisticsPoolSummaryByDateRespVO { |
| | | time: string |
| | | customerPutCount: number |
| | | customerTakeCount: number |
| | | } |
| | | |
| | | export interface CrmStatisticsPoolSummaryByUserRespVO { |
| | | ownerUserName: string |
| | | customerPutCount: number |
| | | customerTakeCount: number |
| | | } |
| | | |
| | | export interface CrmStatisticsCustomerDealCycleByDateRespVO { |
| | | time: string |
| | | customerDealCycle: number |
| | | } |
| | | |
| | | export interface CrmStatisticsCustomerDealCycleByUserRespVO { |
| | | ownerUserName: string |
| | | customerDealCycle: number |
| | | customerDealCount: number |
| | | } |
| | | |
| | | export interface CrmStatisticsCustomerDealCycleByAreaRespVO { |
| | | areaName: string |
| | | customerDealCycle: number |
| | | customerDealCount: number |
| | | } |
| | | |
| | | export interface CrmStatisticsCustomerDealCycleByProductRespVO { |
| | | productName: string |
| | | customerDealCycle: number |
| | | customerDealCount: number |
| | | } |
| | | |
| | | // 客æ·åæ API |
| | | export const StatisticsCustomerApi = { |
| | | // 1.1 å®¢æ·æ»éåæ(ææ¥æ) |
| | | getCustomerSummaryByDate: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-customer/get-customer-summary-by-date', |
| | | params |
| | | }) |
| | | }, |
| | | // 1.2 å®¢æ·æ»éåæ(æç¨æ·) |
| | | getCustomerSummaryByUser: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-customer/get-customer-summary-by-user', |
| | | params |
| | | }) |
| | | }, |
| | | // 2.1 客æ·è·è¿æ¬¡æ°åæ(ææ¥æ) |
| | | getFollowUpSummaryByDate: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-customer/get-follow-up-summary-by-date', |
| | | params |
| | | }) |
| | | }, |
| | | // 2.2 客æ·è·è¿æ¬¡æ°åæ(æç¨æ·) |
| | | getFollowUpSummaryByUser: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-customer/get-follow-up-summary-by-user', |
| | | params |
| | | }) |
| | | }, |
| | | // 3.1 è·å客æ·è·è¿æ¹å¼ç»è®¡æ° |
| | | getFollowUpSummaryByType: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-customer/get-follow-up-summary-by-type', |
| | | params |
| | | }) |
| | | }, |
| | | // 4.1 ååæè¦ä¿¡æ¯(客æ·è½¬åç页é¢) |
| | | getContractSummary: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-customer/get-contract-summary', |
| | | params |
| | | }) |
| | | }, |
| | | // 5.1 è·å客æ·å
¬æµ·åæ(ææ¥æ) |
| | | getPoolSummaryByDate: (param: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-customer/get-pool-summary-by-date', |
| | | params: param |
| | | }) |
| | | }, |
| | | // 5.2 è·å客æ·å
¬æµ·åæ(æç¨æ·) |
| | | getPoolSummaryByUser: (param: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-customer/get-pool-summary-by-user', |
| | | params: param |
| | | }) |
| | | }, |
| | | // 6.1 è·åå®¢æ·æäº¤å¨æ(ææ¥æ) |
| | | getCustomerDealCycleByDate: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-customer/get-customer-deal-cycle-by-date', |
| | | params |
| | | }) |
| | | }, |
| | | // 6.2 è·åå®¢æ·æäº¤å¨æ(æç¨æ·) |
| | | getCustomerDealCycleByUser: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-customer/get-customer-deal-cycle-by-user', |
| | | params |
| | | }) |
| | | }, |
| | | // 6.2 è·åå®¢æ·æäº¤å¨æ(æç¨æ·) |
| | | getCustomerDealCycleByArea: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-customer/get-customer-deal-cycle-by-area', |
| | | params |
| | | }) |
| | | }, |
| | | // 6.2 è·åå®¢æ·æäº¤å¨æ(æç¨æ·) |
| | | getCustomerDealCycleByProduct: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-customer/get-customer-deal-cycle-by-product', |
| | | params |
| | | }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface CrmStatisticFunnelRespVO { |
| | | customerCount: number // å®¢æ·æ° |
| | | businessCount: number // åæºæ° |
| | | businessWinCount: number // èµ¢åæ° |
| | | } |
| | | |
| | | export interface CrmStatisticsBusinessSummaryByDateRespVO { |
| | | time: string // æ¶é´ |
| | | businessCreateCount: number // åæºæ° |
| | | totalPrice: number | string // åæºéé¢ |
| | | } |
| | | |
| | | export interface CrmStatisticsBusinessInversionRateSummaryByDateRespVO { |
| | | time: string // æ¶é´ |
| | | businessCount: number // åæºæ°é |
| | | businessWinCount: number // èµ¢ååæºæ° |
| | | } |
| | | |
| | | // 客æ·åæ API |
| | | export const StatisticFunnelApi = { |
| | | // 1. è·åé宿¼æç»è®¡æ°æ® |
| | | getFunnelSummary: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-funnel/get-funnel-summary', |
| | | params |
| | | }) |
| | | }, |
| | | // 2. è·ååæºç»æç¶æç»è®¡ |
| | | getBusinessSummaryByEndStatus: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-funnel/get-business-summary-by-end-status', |
| | | params |
| | | }) |
| | | }, |
| | | // 3. è·åæ°å¢åæºåæ(ææ¥æ) |
| | | getBusinessSummaryByDate: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-funnel/get-business-summary-by-date', |
| | | params |
| | | }) |
| | | }, |
| | | // 4. è·ååæºè½¬åçåæ(ææ¥æ) |
| | | getBusinessInversionRateSummaryByDate: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-funnel/get-business-inversion-rate-summary-by-date', |
| | | params |
| | | }) |
| | | }, |
| | | // 5. è·ååæºå表(ææ¥æ) |
| | | getBusinessPageByDate: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-funnel/get-business-page-by-date', |
| | | params |
| | | }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface StatisticsPerformanceRespVO { |
| | | time: string |
| | | currentMonthCount: number |
| | | lastMonthCount: number |
| | | lastYearCount: number |
| | | } |
| | | |
| | | // æè¡ API |
| | | export const StatisticsPerformanceApi = { |
| | | // åå·¥è·å¾ååéé¢ç»è®¡ |
| | | getContractPricePerformance: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-performance/get-contract-price-performance', |
| | | params |
| | | }) |
| | | }, |
| | | // åå·¥è·å¾å款ç»è®¡ |
| | | getReceivablePricePerformance: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-performance/get-receivable-price-performance', |
| | | params |
| | | }) |
| | | }, |
| | | //åå·¥è·å¾ç¾çº¦ååæ°éç»è®¡ |
| | | getContractCountPerformance: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-performance/get-contract-count-performance', |
| | | params |
| | | }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface CrmStatisticCustomerBaseRespVO { |
| | | customerCount: number |
| | | dealCount: number |
| | | dealPortion: string | number |
| | | } |
| | | |
| | | export interface CrmStatisticCustomerIndustryRespVO extends CrmStatisticCustomerBaseRespVO { |
| | | industryId: number |
| | | industryPortion: string | number |
| | | } |
| | | |
| | | export interface CrmStatisticCustomerSourceRespVO extends CrmStatisticCustomerBaseRespVO { |
| | | source: number |
| | | sourcePortion: string | number |
| | | } |
| | | |
| | | export interface CrmStatisticCustomerLevelRespVO extends CrmStatisticCustomerBaseRespVO { |
| | | level: number |
| | | levelPortion: string | number |
| | | } |
| | | |
| | | export interface CrmStatisticCustomerAreaRespVO extends CrmStatisticCustomerBaseRespVO { |
| | | areaId: number |
| | | areaName: string |
| | | areaPortion: string | number |
| | | } |
| | | |
| | | // 客æ·åæ API |
| | | export const StatisticsPortraitApi = { |
| | | // 1. è·å客æ·è¡ä¸ç»è®¡æ°æ® |
| | | getCustomerIndustry: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-portrait/get-customer-industry-summary', |
| | | params |
| | | }) |
| | | }, |
| | | // 2. è·åå®¢æ·æ¥æºç»è®¡æ°æ® |
| | | getCustomerSource: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-portrait/get-customer-source-summary', |
| | | params |
| | | }) |
| | | }, |
| | | // 3. è·å客æ·çº§å«ç»è®¡æ°æ® |
| | | getCustomerLevel: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-portrait/get-customer-level-summary', |
| | | params |
| | | }) |
| | | }, |
| | | // 4. è·å客æ·å°åºç»è®¡æ°æ® |
| | | getCustomerArea: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-portrait/get-customer-area-summary', |
| | | params |
| | | }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface StatisticsRankRespVO { |
| | | count: number |
| | | nickname: string |
| | | deptName: string |
| | | } |
| | | |
| | | // æè¡ API |
| | | export const StatisticsRankApi = { |
| | | // è·å¾ååæè¡æ¦ |
| | | getContractPriceRank: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-rank/get-contract-price-rank', |
| | | params |
| | | }) |
| | | }, |
| | | // è·å¾å款æè¡æ¦ |
| | | getReceivablePriceRank: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-rank/get-receivable-price-rank', |
| | | params |
| | | }) |
| | | }, |
| | | // ç¾çº¦ååæè¡ |
| | | getContractCountRank: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-rank/get-contract-count-rank', |
| | | params |
| | | }) |
| | | }, |
| | | // 产åééæè¡ |
| | | getProductSalesRank: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-rank/get-product-sales-rank', |
| | | params |
| | | }) |
| | | }, |
| | | // æ°å¢å®¢æ·æ°æè¡ |
| | | getCustomerCountRank: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-rank/get-customer-count-rank', |
| | | params |
| | | }) |
| | | }, |
| | | // æ°å¢èç³»äººæ°æè¡ |
| | | getContactsCountRank: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-rank/get-contacts-count-rank', |
| | | params |
| | | }) |
| | | }, |
| | | // è·è¿æ¬¡æ°æè¡ |
| | | getFollowCountRank: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-rank/get-follow-count-rank', |
| | | params |
| | | }) |
| | | }, |
| | | // è·è¿å®¢æ·æ°æè¡ |
| | | getFollowCustomerCountRank: (params: any) => { |
| | | return request.get({ |
| | | url: '/crm/statistics-rank/get-follow-customer-count-rank', |
| | | params |
| | | }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP ç»ç®è´¦æ· VO |
| | | export interface AccountVO { |
| | | id: number // ç»ç®è´¦æ·ç¼å· |
| | | no: string // è´¦æ·ç¼ç |
| | | remark: string // 夿³¨ |
| | | status: number // å¼å¯ç¶æ |
| | | sort: number // æåº |
| | | defaultStatus: boolean // æ¯å¦é»è®¤ |
| | | name: string // è´¦æ·åç§° |
| | | } |
| | | |
| | | // ERP ç»ç®è´¦æ· API |
| | | export const AccountApi = { |
| | | // æ¥è¯¢ç»ç®è´¦æ·å页 |
| | | getAccountPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/account/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ç»ç®è´¦æ·ç²¾ç®å表 |
| | | getAccountSimpleList: async () => { |
| | | return await request.get({ url: `/erp/account/simple-list` }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ç»ç®è´¦æ·è¯¦æ
|
| | | getAccount: async (id: number) => { |
| | | return await request.get({ url: `/erp/account/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢ç»ç®è´¦æ· |
| | | createAccount: async (data: AccountVO) => { |
| | | return await request.post({ url: `/erp/account/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹ç»ç®è´¦æ· |
| | | updateAccount: async (data: AccountVO) => { |
| | | return await request.put({ url: `/erp/account/update`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹ç»ç®è´¦æ·é»è®¤ç¶æ |
| | | updateAccountDefaultStatus: async (id: number, defaultStatus: boolean) => { |
| | | return await request.put({ |
| | | url: `/erp/account/update-default-status`, |
| | | params: { |
| | | id, |
| | | defaultStatus |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å é¤ç»ç®è´¦æ· |
| | | deleteAccount: async (id: number) => { |
| | | return await request.delete({ url: `/erp/account/delete?id=` + id }) |
| | | }, |
| | | |
| | | // 导åºç»ç®è´¦æ· Excel |
| | | exportAccount: async (params: any) => { |
| | | return await request.download({ url: `/erp/account/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP 仿¬¾å VO |
| | | export interface FinancePaymentVO { |
| | | id: number // 仿¬¾åç¼å· |
| | | no: string // 仿¬¾åå· |
| | | supplierId: number // ä¾åºåç¼å· |
| | | paymentTime: Date // 仿¬¾æ¶é´ |
| | | totalPrice: number // å计éé¢ï¼åä½ï¼å
|
| | | status: number // ç¶æ |
| | | remark: string // 夿³¨ |
| | | } |
| | | |
| | | // ERP 仿¬¾å API |
| | | export const FinancePaymentApi = { |
| | | // æ¥è¯¢ä»æ¬¾åå页 |
| | | getFinancePaymentPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/finance-payment/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ä»æ¬¾å详æ
|
| | | getFinancePayment: async (id: number) => { |
| | | return await request.get({ url: `/erp/finance-payment/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢ä»æ¬¾å |
| | | createFinancePayment: async (data: FinancePaymentVO) => { |
| | | return await request.post({ url: `/erp/finance-payment/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹ä»æ¬¾å |
| | | updateFinancePayment: async (data: FinancePaymentVO) => { |
| | | return await request.put({ url: `/erp/finance-payment/update`, data }) |
| | | }, |
| | | |
| | | // æ´æ°ä»æ¬¾åçç¶æ |
| | | updateFinancePaymentStatus: async (id: number, status: number) => { |
| | | return await request.put({ |
| | | url: `/erp/finance-payment/update-status`, |
| | | params: { |
| | | id, |
| | | status |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å é¤ä»æ¬¾å |
| | | deleteFinancePayment: async (ids: number[]) => { |
| | | return await request.delete({ |
| | | url: `/erp/finance-payment/delete`, |
| | | params: { |
| | | ids: ids.join(',') |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // 导åºä»æ¬¾å Excel |
| | | exportFinancePayment: async (params: any) => { |
| | | return await request.download({ url: `/erp/finance-payment/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP æ¶æ¬¾å VO |
| | | export interface FinanceReceiptVO { |
| | | id: number // æ¶æ¬¾åç¼å· |
| | | no: string // æ¶æ¬¾åå· |
| | | customerId: number // 客æ·ç¼å· |
| | | receiptTime: Date // æ¶æ¬¾æ¶é´ |
| | | totalPrice: number // å计éé¢ï¼åä½ï¼å
|
| | | status: number // ç¶æ |
| | | remark: string // 夿³¨ |
| | | } |
| | | |
| | | // ERP æ¶æ¬¾å API |
| | | export const FinanceReceiptApi = { |
| | | // æ¥è¯¢æ¶æ¬¾åå页 |
| | | getFinanceReceiptPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/finance-receipt/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢æ¶æ¬¾å详æ
|
| | | getFinanceReceipt: async (id: number) => { |
| | | return await request.get({ url: `/erp/finance-receipt/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢æ¶æ¬¾å |
| | | createFinanceReceipt: async (data: FinanceReceiptVO) => { |
| | | return await request.post({ url: `/erp/finance-receipt/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹æ¶æ¬¾å |
| | | updateFinanceReceipt: async (data: FinanceReceiptVO) => { |
| | | return await request.put({ url: `/erp/finance-receipt/update`, data }) |
| | | }, |
| | | |
| | | // æ´æ°æ¶æ¬¾åçç¶æ |
| | | updateFinanceReceiptStatus: async (id: number, status: number) => { |
| | | return await request.put({ |
| | | url: `/erp/finance-receipt/update-status`, |
| | | params: { |
| | | id, |
| | | status |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å 餿¶æ¬¾å |
| | | deleteFinanceReceipt: async (ids: number[]) => { |
| | | return await request.delete({ |
| | | url: `/erp/finance-receipt/delete`, |
| | | params: { |
| | | ids: ids.join(',') |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å¯¼åºæ¶æ¬¾å Excel |
| | | exportFinanceReceipt: async (params: any) => { |
| | | return await request.download({ url: `/erp/finance-receipt/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP 产ååç±» VO |
| | | export interface ProductCategoryVO { |
| | | id: number // åç±»ç¼å· |
| | | parentId: number // ç¶åç±»ç¼å· |
| | | name: string // åç±»åç§° |
| | | code: string // åç±»ç¼ç |
| | | sort: number // åç±»æåº |
| | | status: number // å¼å¯ç¶æ |
| | | } |
| | | |
| | | // ERP 产ååç±» API |
| | | export const ProductCategoryApi = { |
| | | // æ¥è¯¢äº§ååç±»å表 |
| | | getProductCategoryList: async () => { |
| | | return await request.get({ url: `/erp/product-category/list` }) |
| | | }, |
| | | |
| | | // æ¥è¯¢äº§åå类精ç®å表 |
| | | getProductCategorySimpleList: async () => { |
| | | return await request.get({ url: `/erp/product-category/simple-list` }) |
| | | }, |
| | | |
| | | // æ¥è¯¢äº§åå类详æ
|
| | | getProductCategory: async (id: number) => { |
| | | return await request.get({ url: `/erp/product-category/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢äº§ååç±» |
| | | createProductCategory: async (data: ProductCategoryVO) => { |
| | | return await request.post({ url: `/erp/product-category/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹äº§ååç±» |
| | | updateProductCategory: async (data: ProductCategoryVO) => { |
| | | return await request.put({ url: `/erp/product-category/update`, data }) |
| | | }, |
| | | |
| | | // å é¤äº§ååç±» |
| | | deleteProductCategory: async (id: number) => { |
| | | return await request.delete({ url: `/erp/product-category/delete?id=` + id }) |
| | | }, |
| | | |
| | | // 导åºäº§ååç±» Excel |
| | | exportProductCategory: async (params) => { |
| | | return await request.download({ url: `/erp/product-category/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP 产å VO |
| | | export interface ProductVO { |
| | | id: number // 产åç¼å· |
| | | name: string // 产ååç§° |
| | | barCode: string // äº§åæ¡ç |
| | | categoryId: number // 产åç±»åç¼å· |
| | | unitId: number // åä½ç¼å· |
| | | unitName?: string // åä½åå |
| | | status: number // 产åç¶æ |
| | | standard: string // 产åè§æ ¼ |
| | | remark: string // 产å夿³¨ |
| | | expiryDay: number // ä¿è´¨æå¤©æ° |
| | | weight: number // ééï¼kgï¼ |
| | | purchasePrice: number // éè´ä»·æ ¼ï¼åä½ï¼å
|
| | | salePrice: number // éå®ä»·æ ¼ï¼åä½ï¼å
|
| | | minPrice: number // æä½ä»·æ ¼ï¼åä½ï¼å
|
| | | } |
| | | |
| | | // ERP 产å API |
| | | export const ProductApi = { |
| | | // æ¥è¯¢äº§åå页 |
| | | getProductPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/product/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢äº§åç²¾ç®å表 |
| | | getProductSimpleList: async () => { |
| | | return await request.get({ url: `/erp/product/simple-list` }) |
| | | }, |
| | | |
| | | // æ¥è¯¢äº§å详æ
|
| | | getProduct: async (id: number) => { |
| | | return await request.get({ url: `/erp/product/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢äº§å |
| | | createProduct: async (data: ProductVO) => { |
| | | return await request.post({ url: `/erp/product/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹äº§å |
| | | updateProduct: async (data: ProductVO) => { |
| | | return await request.put({ url: `/erp/product/update`, data }) |
| | | }, |
| | | |
| | | // å é¤äº§å |
| | | deleteProduct: async (id: number) => { |
| | | return await request.delete({ url: `/erp/product/delete?id=` + id }) |
| | | }, |
| | | |
| | | // 导åºäº§å Excel |
| | | exportProduct: async (params) => { |
| | | return await request.download({ url: `/erp/product/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP 产ååä½ VO |
| | | export interface ProductUnitVO { |
| | | id: number // åä½ç¼å· |
| | | name: string // åä½åå |
| | | status: number // åä½ç¶æ |
| | | } |
| | | |
| | | // ERP 产ååä½ API |
| | | export const ProductUnitApi = { |
| | | // æ¥è¯¢äº§ååä½å页 |
| | | getProductUnitPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/product-unit/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢äº§ååä½ç²¾ç®å表 |
| | | getProductUnitSimpleList: async () => { |
| | | return await request.get({ url: `/erp/product-unit/simple-list` }) |
| | | }, |
| | | |
| | | // æ¥è¯¢äº§ååä½è¯¦æ
|
| | | getProductUnit: async (id: number) => { |
| | | return await request.get({ url: `/erp/product-unit/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢äº§ååä½ |
| | | createProductUnit: async (data: ProductUnitVO) => { |
| | | return await request.post({ url: `/erp/product-unit/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹äº§ååä½ |
| | | updateProductUnit: async (data: ProductUnitVO) => { |
| | | return await request.put({ url: `/erp/product-unit/update`, data }) |
| | | }, |
| | | |
| | | // å é¤äº§ååä½ |
| | | deleteProductUnit: async (id: number) => { |
| | | return await request.delete({ url: `/erp/product-unit/delete?id=` + id }) |
| | | }, |
| | | |
| | | // 导åºäº§ååä½ Excel |
| | | exportProductUnit: async (params) => { |
| | | return await request.download({ url: `/erp/product-unit/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP éè´å
¥åº VO |
| | | export interface PurchaseInVO { |
| | | id: number // å
¥åºå·¥åç¼å· |
| | | no: string // éè´å
¥åºå· |
| | | customerId: number // 客æ·ç¼å· |
| | | inTime: Date // å
¥åºæ¶é´ |
| | | totalCount: number // å计æ°é |
| | | totalPrice: number // å计éé¢ï¼åä½ï¼å
|
| | | status: number // ç¶æ |
| | | remark: string // 夿³¨ |
| | | outCount: number // éè´åºåºæ°é |
| | | returnCount: number // éè´éè´§æ°é |
| | | } |
| | | |
| | | // ERP éè´å
¥åº API |
| | | export const PurchaseInApi = { |
| | | // æ¥è¯¢éè´å
¥åºå页 |
| | | getPurchaseInPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/purchase-in/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢éè´å
¥åºè¯¦æ
|
| | | getPurchaseIn: async (id: number) => { |
| | | return await request.get({ url: `/erp/purchase-in/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢éè´å
¥åº |
| | | createPurchaseIn: async (data: PurchaseInVO) => { |
| | | return await request.post({ url: `/erp/purchase-in/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹éè´å
¥åº |
| | | updatePurchaseIn: async (data: PurchaseInVO) => { |
| | | return await request.put({ url: `/erp/purchase-in/update`, data }) |
| | | }, |
| | | |
| | | // æ´æ°éè´å
¥åºçç¶æ |
| | | updatePurchaseInStatus: async (id: number, status: number) => { |
| | | return await request.put({ |
| | | url: `/erp/purchase-in/update-status`, |
| | | params: { |
| | | id, |
| | | status |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å é¤éè´å
¥åº |
| | | deletePurchaseIn: async (ids: number[]) => { |
| | | return await request.delete({ |
| | | url: `/erp/purchase-in/delete`, |
| | | params: { |
| | | ids: ids.join(',') |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // 导åºéè´å
¥åº Excel |
| | | exportPurchaseIn: async (params: any) => { |
| | | return await request.download({ url: `/erp/purchase-in/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP éè´è®¢å VO |
| | | export interface PurchaseOrderVO { |
| | | id: number // 订åå·¥åç¼å· |
| | | no: string // éè´è®¢åå· |
| | | customerId: number // 客æ·ç¼å· |
| | | orderTime: Date // è®¢åæ¶é´ |
| | | totalCount: number // å计æ°é |
| | | totalPrice: number // å计éé¢ï¼åä½ï¼å
|
| | | status: number // ç¶æ |
| | | remark: string // 夿³¨ |
| | | outCount: number // éè´åºåºæ°é |
| | | returnCount: number // éè´éè´§æ°é |
| | | } |
| | | |
| | | // ERP éè´è®¢å API |
| | | export const PurchaseOrderApi = { |
| | | // æ¥è¯¢éè´è®¢åå页 |
| | | getPurchaseOrderPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/purchase-order/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢éè´è®¢å详æ
|
| | | getPurchaseOrder: async (id: number) => { |
| | | return await request.get({ url: `/erp/purchase-order/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢éè´è®¢å |
| | | createPurchaseOrder: async (data: PurchaseOrderVO) => { |
| | | return await request.post({ url: `/erp/purchase-order/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹éè´è®¢å |
| | | updatePurchaseOrder: async (data: PurchaseOrderVO) => { |
| | | return await request.put({ url: `/erp/purchase-order/update`, data }) |
| | | }, |
| | | |
| | | // æ´æ°éè´è®¢åçç¶æ |
| | | updatePurchaseOrderStatus: async (id: number, status: number) => { |
| | | return await request.put({ |
| | | url: `/erp/purchase-order/update-status`, |
| | | params: { |
| | | id, |
| | | status |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å é¤éè´è®¢å |
| | | deletePurchaseOrder: async (ids: number[]) => { |
| | | return await request.delete({ |
| | | url: `/erp/purchase-order/delete`, |
| | | params: { |
| | | ids: ids.join(',') |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // 导åºéè´è®¢å Excel |
| | | exportPurchaseOrder: async (params: any) => { |
| | | return await request.download({ url: `/erp/purchase-order/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP éè´éè´§ VO |
| | | export interface PurchaseReturnVO { |
| | | id: number // éè´éè´§ç¼å· |
| | | no: string // éè´éè´§å· |
| | | customerId: number // 客æ·ç¼å· |
| | | returnTime: Date // éè´§æ¶é´ |
| | | totalCount: number // å计æ°é |
| | | totalPrice: number // å计éé¢ï¼åä½ï¼å
|
| | | status: number // ç¶æ |
| | | remark: string // 夿³¨ |
| | | } |
| | | |
| | | // ERP éè´éè´§ API |
| | | export const PurchaseReturnApi = { |
| | | // æ¥è¯¢éè´éè´§å页 |
| | | getPurchaseReturnPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/purchase-return/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢éè´é货详æ
|
| | | getPurchaseReturn: async (id: number) => { |
| | | return await request.get({ url: `/erp/purchase-return/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢éè´éè´§ |
| | | createPurchaseReturn: async (data: PurchaseReturnVO) => { |
| | | return await request.post({ url: `/erp/purchase-return/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹éè´éè´§ |
| | | updatePurchaseReturn: async (data: PurchaseReturnVO) => { |
| | | return await request.put({ url: `/erp/purchase-return/update`, data }) |
| | | }, |
| | | |
| | | // æ´æ°éè´éè´§çç¶æ |
| | | updatePurchaseReturnStatus: async (id: number, status: number) => { |
| | | return await request.put({ |
| | | url: `/erp/purchase-return/update-status`, |
| | | params: { |
| | | id, |
| | | status |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å é¤éè´éè´§ |
| | | deletePurchaseReturn: async (ids: number[]) => { |
| | | return await request.delete({ |
| | | url: `/erp/purchase-return/delete`, |
| | | params: { |
| | | ids: ids.join(',') |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // 导åºéè´éè´§ Excel |
| | | exportPurchaseReturn: async (params: any) => { |
| | | return await request.download({ url: `/erp/purchase-return/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP ä¾åºå VO |
| | | export interface SupplierVO { |
| | | id: number // ä¾åºåç¼å· |
| | | name: string // ä¾åºååç§° |
| | | contact: string // è系人 |
| | | mobile: string // ææºå·ç |
| | | telephone: string // èç³»çµè¯ |
| | | email: string // çµåé®ç®± |
| | | fax: string // ä¼ ç |
| | | remark: string // 夿³¨ |
| | | status: number // å¼å¯ç¶æ |
| | | sort: number // æåº |
| | | taxNo: string // 纳ç¨äººè¯å«å· |
| | | taxPercent: number // ç¨ç |
| | | bankName: string // 弿·è¡ |
| | | bankAccount: string // 弿·è´¦å· |
| | | bankAddress: string // 弿·å°å |
| | | } |
| | | |
| | | // ERP ä¾åºå API |
| | | export const SupplierApi = { |
| | | // æ¥è¯¢ä¾åºåå页 |
| | | getSupplierPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/supplier/page`, params }) |
| | | }, |
| | | |
| | | // è·å¾ä¾åºåç²¾ç®å表 |
| | | getSupplierSimpleList: async () => { |
| | | return await request.get({ url: `/erp/supplier/simple-list` }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ä¾åºå详æ
|
| | | getSupplier: async (id: number) => { |
| | | return await request.get({ url: `/erp/supplier/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢ä¾åºå |
| | | createSupplier: async (data: SupplierVO) => { |
| | | return await request.post({ url: `/erp/supplier/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹ä¾åºå |
| | | updateSupplier: async (data: SupplierVO) => { |
| | | return await request.put({ url: `/erp/supplier/update`, data }) |
| | | }, |
| | | |
| | | // å é¤ä¾åºå |
| | | deleteSupplier: async (id: number) => { |
| | | return await request.delete({ url: `/erp/supplier/delete?id=` + id }) |
| | | }, |
| | | |
| | | // 导åºä¾åºå Excel |
| | | exportSupplier: async (params) => { |
| | | return await request.download({ url: `/erp/supplier/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP å®¢æ· VO |
| | | export interface CustomerVO { |
| | | id: number // 客æ·ç¼å· |
| | | name: string // 客æ·åç§° |
| | | contact: string // è系人 |
| | | mobile: string // ææºå·ç |
| | | telephone: string // èç³»çµè¯ |
| | | email: string // çµåé®ç®± |
| | | fax: string // ä¼ ç |
| | | remark: string // 夿³¨ |
| | | status: number // å¼å¯ç¶æ |
| | | sort: number // æåº |
| | | taxNo: string // 纳ç¨äººè¯å«å· |
| | | taxPercent: number // ç¨ç |
| | | bankName: string // 弿·è¡ |
| | | bankAccount: string // 弿·è´¦å· |
| | | bankAddress: string // 弿·å°å |
| | | } |
| | | |
| | | // ERP å®¢æ· API |
| | | export const CustomerApi = { |
| | | // æ¥è¯¢å®¢æ·å页 |
| | | getCustomerPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/customer/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢å®¢æ·ç²¾ç®å表 |
| | | getCustomerSimpleList: async () => { |
| | | return await request.get({ url: `/erp/customer/simple-list` }) |
| | | }, |
| | | |
| | | // æ¥è¯¢å®¢æ·è¯¦æ
|
| | | getCustomer: async (id: number) => { |
| | | return await request.get({ url: `/erp/customer/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢å®¢æ· |
| | | createCustomer: async (data: CustomerVO) => { |
| | | return await request.post({ url: `/erp/customer/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹å®¢æ· |
| | | updateCustomer: async (data: CustomerVO) => { |
| | | return await request.put({ url: `/erp/customer/update`, data }) |
| | | }, |
| | | |
| | | // å é¤å®¢æ· |
| | | deleteCustomer: async (id: number) => { |
| | | return await request.delete({ url: `/erp/customer/delete?id=` + id }) |
| | | }, |
| | | |
| | | // 导åºå®¢æ· Excel |
| | | exportCustomer: async (params) => { |
| | | return await request.download({ url: `/erp/customer/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP éå®è®¢å VO |
| | | export interface SaleOrderVO { |
| | | id: number // 订åå·¥åç¼å· |
| | | no: string // éå®è®¢åå· |
| | | customerId: number // 客æ·ç¼å· |
| | | orderTime: Date // è®¢åæ¶é´ |
| | | totalCount: number // å计æ°é |
| | | totalPrice: number // å计éé¢ï¼åä½ï¼å
|
| | | status: number // ç¶æ |
| | | remark: string // 夿³¨ |
| | | outCount: number // éå®åºåºæ°é |
| | | returnCount: number // éå®éè´§æ°é |
| | | } |
| | | |
| | | // ERP éå®è®¢å API |
| | | export const SaleOrderApi = { |
| | | // æ¥è¯¢éå®è®¢åå页 |
| | | getSaleOrderPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/sale-order/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢éå®è®¢å详æ
|
| | | getSaleOrder: async (id: number) => { |
| | | return await request.get({ url: `/erp/sale-order/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢éå®è®¢å |
| | | createSaleOrder: async (data: SaleOrderVO) => { |
| | | return await request.post({ url: `/erp/sale-order/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹éå®è®¢å |
| | | updateSaleOrder: async (data: SaleOrderVO) => { |
| | | return await request.put({ url: `/erp/sale-order/update`, data }) |
| | | }, |
| | | |
| | | // æ´æ°éå®è®¢åçç¶æ |
| | | updateSaleOrderStatus: async (id: number, status: number) => { |
| | | return await request.put({ |
| | | url: `/erp/sale-order/update-status`, |
| | | params: { |
| | | id, |
| | | status |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å é¤éå®è®¢å |
| | | deleteSaleOrder: async (ids: number[]) => { |
| | | return await request.delete({ |
| | | url: `/erp/sale-order/delete`, |
| | | params: { |
| | | ids: ids.join(',') |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // 导åºéå®è®¢å Excel |
| | | exportSaleOrder: async (params: any) => { |
| | | return await request.download({ url: `/erp/sale-order/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP éå®åºåº VO |
| | | export interface SaleOutVO { |
| | | id: number // éå®åºåºç¼å· |
| | | no: string // éå®åºåºå· |
| | | customerId: number // 客æ·ç¼å· |
| | | outTime: Date // åºåºæ¶é´ |
| | | totalCount: number // å计æ°é |
| | | totalPrice: number // å计éé¢ï¼åä½ï¼å
|
| | | status: number // ç¶æ |
| | | remark: string // 夿³¨ |
| | | } |
| | | |
| | | // ERP éå®åºåº API |
| | | export const SaleOutApi = { |
| | | // æ¥è¯¢éå®åºåºå页 |
| | | getSaleOutPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/sale-out/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢éå®åºåºè¯¦æ
|
| | | getSaleOut: async (id: number) => { |
| | | return await request.get({ url: `/erp/sale-out/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢éå®åºåº |
| | | createSaleOut: async (data: SaleOutVO) => { |
| | | return await request.post({ url: `/erp/sale-out/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹éå®åºåº |
| | | updateSaleOut: async (data: SaleOutVO) => { |
| | | return await request.put({ url: `/erp/sale-out/update`, data }) |
| | | }, |
| | | |
| | | // æ´æ°éå®åºåºçç¶æ |
| | | updateSaleOutStatus: async (id: number, status: number) => { |
| | | return await request.put({ |
| | | url: `/erp/sale-out/update-status`, |
| | | params: { |
| | | id, |
| | | status |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å é¤éå®åºåº |
| | | deleteSaleOut: async (ids: number[]) => { |
| | | return await request.delete({ |
| | | url: `/erp/sale-out/delete`, |
| | | params: { |
| | | ids: ids.join(',') |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // 导åºéå®åºåº Excel |
| | | exportSaleOut: async (params: any) => { |
| | | return await request.download({ url: `/erp/sale-out/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP éå®éè´§ VO |
| | | export interface SaleReturnVO { |
| | | id: number // éå®éè´§ç¼å· |
| | | no: string // éå®éè´§å· |
| | | customerId: number // 客æ·ç¼å· |
| | | returnTime: Date // éè´§æ¶é´ |
| | | totalCount: number // å计æ°é |
| | | totalPrice: number // å计éé¢ï¼åä½ï¼å
|
| | | status: number // ç¶æ |
| | | remark: string // 夿³¨ |
| | | } |
| | | |
| | | // ERP éå®éè´§ API |
| | | export const SaleReturnApi = { |
| | | // æ¥è¯¢éå®éè´§å页 |
| | | getSaleReturnPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/sale-return/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢éå®é货详æ
|
| | | getSaleReturn: async (id: number) => { |
| | | return await request.get({ url: `/erp/sale-return/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢éå®éè´§ |
| | | createSaleReturn: async (data: SaleReturnVO) => { |
| | | return await request.post({ url: `/erp/sale-return/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹éå®éè´§ |
| | | updateSaleReturn: async (data: SaleReturnVO) => { |
| | | return await request.put({ url: `/erp/sale-return/update`, data }) |
| | | }, |
| | | |
| | | // æ´æ°éå®éè´§çç¶æ |
| | | updateSaleReturnStatus: async (id: number, status: number) => { |
| | | return await request.put({ |
| | | url: `/erp/sale-return/update-status`, |
| | | params: { |
| | | id, |
| | | status |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å é¤éå®éè´§ |
| | | deleteSaleReturn: async (ids: number[]) => { |
| | | return await request.delete({ |
| | | url: `/erp/sale-return/delete`, |
| | | params: { |
| | | ids: ids.join(',') |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // 导åºéå®éè´§ Excel |
| | | exportSaleReturn: async (params: any) => { |
| | | return await request.download({ url: `/erp/sale-return/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP éè´å
¨å±ç»è®¡ VO |
| | | export interface ErpPurchaseSummaryRespVO { |
| | | todayPrice: number // 仿¥éè´éé¢ |
| | | yesterdayPrice: number // æ¨æ¥éè´éé¢ |
| | | monthPrice: number // æ¬æéè´éé¢ |
| | | yearPrice: number // ä»å¹´éè´éé¢ |
| | | } |
| | | |
| | | // ERP éè´æ¶é´æ®µç»è®¡ VO |
| | | export interface ErpPurchaseTimeSummaryRespVO { |
| | | time: string // æ¶é´ |
| | | price: number // éè´éé¢ |
| | | } |
| | | |
| | | // ERP éè´ç»è®¡ API |
| | | export const PurchaseStatisticsApi = { |
| | | // è·å¾éè´ç»è®¡ |
| | | getPurchaseSummary: async (): Promise<ErpPurchaseSummaryRespVO> => { |
| | | return await request.get({ url: `/erp/purchase-statistics/summary` }) |
| | | }, |
| | | |
| | | // è·å¾éè´æ¶é´æ®µç»è®¡ |
| | | getPurchaseTimeSummary: async (): Promise<ErpPurchaseTimeSummaryRespVO[]> => { |
| | | return await request.get({ url: `/erp/purchase-statistics/time-summary` }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP éå®å
¨å±ç»è®¡ VO |
| | | export interface ErpSaleSummaryRespVO { |
| | | todayPrice: number // 仿¥éå®éé¢ |
| | | yesterdayPrice: number // æ¨æ¥éå®éé¢ |
| | | monthPrice: number // æ¬æéå®éé¢ |
| | | yearPrice: number // ä»å¹´éå®éé¢ |
| | | } |
| | | |
| | | // ERP é宿¶é´æ®µç»è®¡ VO |
| | | export interface ErpSaleTimeSummaryRespVO { |
| | | time: string // æ¶é´ |
| | | price: number // éå®éé¢ |
| | | } |
| | | |
| | | // ERP éå®ç»è®¡ API |
| | | export const SaleStatisticsApi = { |
| | | // è·å¾éå®ç»è®¡ |
| | | getSaleSummary: async (): Promise<ErpSaleSummaryRespVO> => { |
| | | return await request.get({ url: `/erp/sale-statistics/summary` }) |
| | | }, |
| | | |
| | | // è·å¾é宿¶é´æ®µç»è®¡ |
| | | getSaleTimeSummary: async (): Promise<ErpSaleTimeSummaryRespVO[]> => { |
| | | return await request.get({ url: `/erp/sale-statistics/time-summary` }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP åºåçç¹å VO |
| | | export interface StockCheckVO { |
| | | id: number // åºåºç¼å· |
| | | no: string // åºåºåå· |
| | | outTime: Date // åºåºæ¶é´ |
| | | totalCount: number // å计æ°é |
| | | totalPrice: number // å计éé¢ï¼åä½ï¼å
|
| | | status: number // ç¶æ |
| | | remark: string // 夿³¨ |
| | | } |
| | | |
| | | // ERP åºåçç¹å API |
| | | export const StockCheckApi = { |
| | | // æ¥è¯¢åºåçç¹åå页 |
| | | getStockCheckPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/stock-check/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢åºåçç¹å详æ
|
| | | getStockCheck: async (id: number) => { |
| | | return await request.get({ url: `/erp/stock-check/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢åºåçç¹å |
| | | createStockCheck: async (data: StockCheckVO) => { |
| | | return await request.post({ url: `/erp/stock-check/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹åºåçç¹å |
| | | updateStockCheck: async (data: StockCheckVO) => { |
| | | return await request.put({ url: `/erp/stock-check/update`, data }) |
| | | }, |
| | | |
| | | // æ´æ°åºåçç¹åçç¶æ |
| | | updateStockCheckStatus: async (id: number, status: number) => { |
| | | return await request.put({ |
| | | url: `/erp/stock-check/update-status`, |
| | | params: { |
| | | id, |
| | | status |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å é¤åºåçç¹å |
| | | deleteStockCheck: async (ids: number[]) => { |
| | | return await request.delete({ |
| | | url: `/erp/stock-check/delete`, |
| | | params: { |
| | | ids: ids.join(',') |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // 导åºåºåçç¹å Excel |
| | | exportStockCheck: async (params) => { |
| | | return await request.download({ url: `/erp/stock-check/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP å
¶å®å
¥åºå VO |
| | | export interface StockInVO { |
| | | id: number // å
¥åºç¼å· |
| | | no: string // å
¥åºåå· |
| | | supplierId: number // ä¾åºåç¼å· |
| | | inTime: Date // å
¥åºæ¶é´ |
| | | totalCount: number // å计æ°é |
| | | totalPrice: number // å计éé¢ï¼åä½ï¼å
|
| | | status: number // ç¶æ |
| | | remark: string // 夿³¨ |
| | | } |
| | | |
| | | // ERP å
¶å®å
¥åºå API |
| | | export const StockInApi = { |
| | | // æ¥è¯¢å
¶å®å
¥åºåå页 |
| | | getStockInPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/stock-in/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢å
¶å®å
¥åºå详æ
|
| | | getStockIn: async (id: number) => { |
| | | return await request.get({ url: `/erp/stock-in/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢å
¶å®å
¥åºå |
| | | createStockIn: async (data: StockInVO) => { |
| | | return await request.post({ url: `/erp/stock-in/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹å
¶å®å
¥åºå |
| | | updateStockIn: async (data: StockInVO) => { |
| | | return await request.put({ url: `/erp/stock-in/update`, data }) |
| | | }, |
| | | |
| | | // æ´æ°å
¶å®å
¥åºåçç¶æ |
| | | updateStockInStatus: async (id: number, status: number) => { |
| | | return await request.put({ |
| | | url: `/erp/stock-in/update-status`, |
| | | params: { |
| | | id, |
| | | status |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å é¤å
¶å®å
¥åºå |
| | | deleteStockIn: async (ids: number[]) => { |
| | | return await request.delete({ |
| | | url: `/erp/stock-in/delete`, |
| | | params: { |
| | | ids: ids.join(',') |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // 导åºå
¶å®å
¥åºå Excel |
| | | exportStockIn: async (params) => { |
| | | return await request.download({ url: `/erp/stock-in/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP åºåè°åº¦å VO |
| | | export interface StockMoveVO { |
| | | id: number // åºåºç¼å· |
| | | no: string // åºåºåå· |
| | | outTime: Date // åºåºæ¶é´ |
| | | totalCount: number // å计æ°é |
| | | totalPrice: number // å计éé¢ï¼åä½ï¼å
|
| | | status: number // ç¶æ |
| | | remark: string // 夿³¨ |
| | | } |
| | | |
| | | // ERP åºåè°åº¦å API |
| | | export const StockMoveApi = { |
| | | // æ¥è¯¢åºåè°åº¦åå页 |
| | | getStockMovePage: async (params: any) => { |
| | | return await request.get({ url: `/erp/stock-move/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢åºåè°åº¦å详æ
|
| | | getStockMove: async (id: number) => { |
| | | return await request.get({ url: `/erp/stock-move/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢åºåè°åº¦å |
| | | createStockMove: async (data: StockMoveVO) => { |
| | | return await request.post({ url: `/erp/stock-move/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹åºåè°åº¦å |
| | | updateStockMove: async (data: StockMoveVO) => { |
| | | return await request.put({ url: `/erp/stock-move/update`, data }) |
| | | }, |
| | | |
| | | // æ´æ°åºåè°åº¦åçç¶æ |
| | | updateStockMoveStatus: async (id: number, status: number) => { |
| | | return await request.put({ |
| | | url: `/erp/stock-move/update-status`, |
| | | params: { |
| | | id, |
| | | status |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å é¤åºåè°åº¦å |
| | | deleteStockMove: async (ids: number[]) => { |
| | | return await request.delete({ |
| | | url: `/erp/stock-move/delete`, |
| | | params: { |
| | | ids: ids.join(',') |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // 导åºåºåè°åº¦å Excel |
| | | exportStockMove: async (params) => { |
| | | return await request.download({ url: `/erp/stock-move/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP å
¶å®åºåºå VO |
| | | export interface StockOutVO { |
| | | id: number // åºåºç¼å· |
| | | no: string // åºåºåå· |
| | | customerId: number // 客æ·ç¼å· |
| | | outTime: Date // åºåºæ¶é´ |
| | | totalCount: number // å计æ°é |
| | | totalPrice: number // å计éé¢ï¼åä½ï¼å
|
| | | status: number // ç¶æ |
| | | remark: string // 夿³¨ |
| | | } |
| | | |
| | | // ERP å
¶å®åºåºå API |
| | | export const StockOutApi = { |
| | | // æ¥è¯¢å
¶å®åºåºåå页 |
| | | getStockOutPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/stock-out/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢å
¶å®åºåºå详æ
|
| | | getStockOut: async (id: number) => { |
| | | return await request.get({ url: `/erp/stock-out/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢å
¶å®åºåºå |
| | | createStockOut: async (data: StockOutVO) => { |
| | | return await request.post({ url: `/erp/stock-out/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹å
¶å®åºåºå |
| | | updateStockOut: async (data: StockOutVO) => { |
| | | return await request.put({ url: `/erp/stock-out/update`, data }) |
| | | }, |
| | | |
| | | // æ´æ°å
¶å®åºåºåçç¶æ |
| | | updateStockOutStatus: async (id: number, status: number) => { |
| | | return await request.put({ |
| | | url: `/erp/stock-out/update-status`, |
| | | params: { |
| | | id, |
| | | status |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å é¤å
¶å®åºåºå |
| | | deleteStockOut: async (ids: number[]) => { |
| | | return await request.delete({ |
| | | url: `/erp/stock-out/delete`, |
| | | params: { |
| | | ids: ids.join(',') |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // 导åºå
¶å®åºåºå Excel |
| | | exportStockOut: async (params) => { |
| | | return await request.download({ url: `/erp/stock-out/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP 产ååºåæç» VO |
| | | export interface StockRecordVO { |
| | | id: number // ç¼å· |
| | | productId: number // 产åç¼å· |
| | | warehouseId: number // ä»åºç¼å· |
| | | count: number // åºå
¥åºæ°é |
| | | totalCount: number // æ»åºåé |
| | | bizType: number // ä¸å¡ç±»å |
| | | bizId: number // ä¸å¡ç¼å· |
| | | bizItemId: number // ä¸å¡é¡¹ç¼å· |
| | | bizNo: string // ä¸å¡åå· |
| | | } |
| | | |
| | | // ERP 产ååºåæç» API |
| | | export const StockRecordApi = { |
| | | // æ¥è¯¢äº§ååºåæç»å页 |
| | | getStockRecordPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/stock-record/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢äº§ååºåæç»è¯¦æ
|
| | | getStockRecord: async (id: number) => { |
| | | return await request.get({ url: `/erp/stock-record/get?id=` + id }) |
| | | }, |
| | | |
| | | // 导åºäº§ååºåæç» Excel |
| | | exportStockRecord: async (params) => { |
| | | return await request.download({ url: `/erp/stock-record/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP 产ååºå VO |
| | | export interface StockVO { |
| | | // ç¼å· |
| | | id: number |
| | | // 产åç¼å· |
| | | productId: number |
| | | // ä»åºç¼å· |
| | | warehouseId: number |
| | | // åºåæ°é |
| | | count: number |
| | | } |
| | | |
| | | // ERP 产ååºå API |
| | | export const StockApi = { |
| | | // æ¥è¯¢äº§ååºåå页 |
| | | getStockPage: async (params: any) => { |
| | | return await request.get({ url: `/erp/stock/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢äº§ååºå详æ
|
| | | getStock: async (id: number) => { |
| | | return await request.get({ url: `/erp/stock/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ¥è¯¢äº§ååºå详æ
|
| | | getStock2: async (productId: number, warehouseId: number) => { |
| | | return await request.get({ url: `/erp/stock/get`, params: { productId, warehouseId } }) |
| | | }, |
| | | |
| | | // è·å¾äº§ååºåæ°é |
| | | getStockCount: async (productId: number) => { |
| | | return await request.get({ url: `/erp/stock/get-count`, params: { productId } }) |
| | | }, |
| | | |
| | | // 导åºäº§ååºå Excel |
| | | exportStock: async (params) => { |
| | | return await request.download({ url: `/erp/stock/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ERP ä»åº VO |
| | | export interface WarehouseVO { |
| | | id: number // ä»åºç¼å· |
| | | name: string // ä»åºåç§° |
| | | address: string // ä»åºå°å |
| | | sort: number // æåº |
| | | remark: string // 夿³¨ |
| | | principal: string // è´è´£äºº |
| | | warehousePrice: number // ä»å¨è´¹ï¼åä½ï¼å
|
| | | truckagePrice: number // æ¬è¿è´¹ï¼åä½ï¼å
|
| | | status: number // å¼å¯ç¶æ |
| | | defaultStatus: boolean // æ¯å¦é»è®¤ |
| | | } |
| | | |
| | | // ERP ä»åº API |
| | | export const WarehouseApi = { |
| | | // æ¥è¯¢ä»åºå页 |
| | | getWarehousePage: async (params: any) => { |
| | | return await request.get({ url: `/erp/warehouse/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ä»åºç²¾ç®å表 |
| | | getWarehouseSimpleList: async () => { |
| | | return await request.get({ url: `/erp/warehouse/simple-list` }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ä»åºè¯¦æ
|
| | | getWarehouse: async (id: number) => { |
| | | return await request.get({ url: `/erp/warehouse/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢ä»åº |
| | | createWarehouse: async (data: WarehouseVO) => { |
| | | return await request.post({ url: `/erp/warehouse/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹ä»åº |
| | | updateWarehouse: async (data: WarehouseVO) => { |
| | | return await request.put({ url: `/erp/warehouse/update`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹ä»åºé»è®¤ç¶æ |
| | | updateWarehouseDefaultStatus: async (id: number, defaultStatus: boolean) => { |
| | | return await request.put({ |
| | | url: `/erp/warehouse/update-default-status`, |
| | | params: { |
| | | id, |
| | | defaultStatus |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å é¤ä»åº |
| | | deleteWarehouse: async (id: number) => { |
| | | return await request.delete({ url: `/erp/warehouse/delete?id=` + id }) |
| | | }, |
| | | |
| | | // 导åºä»åº Excel |
| | | exportWarehouse: async (params) => { |
| | | return await request.download({ url: `/erp/warehouse/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface ApiAccessLogVO { |
| | | id: number |
| | | traceId: string |
| | | userId: number |
| | | userType: number |
| | | applicationName: string |
| | | requestMethod: string |
| | | requestParams: string |
| | | responseBody: string |
| | | requestUrl: string |
| | | userIp: string |
| | | userAgent: string |
| | | operateModule: string |
| | | operateName: string |
| | | operateType: number |
| | | beginTime: Date |
| | | endTime: Date |
| | | duration: number |
| | | resultCode: number |
| | | resultMsg: string |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢å表API è®¿é®æ¥å¿ |
| | | export const getApiAccessLogPage = (params: PageParam) => { |
| | | return request.get({ url: '/infra/api-access-log/page', params }) |
| | | } |
| | | |
| | | // 导åºAPI è®¿é®æ¥å¿ |
| | | export const exportApiAccessLog = (params) => { |
| | | return request.download({ url: '/infra/api-access-log/export-excel', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface ApiErrorLogVO { |
| | | id: number |
| | | traceId: string |
| | | userId: number |
| | | userType: number |
| | | applicationName: string |
| | | requestMethod: string |
| | | requestParams: string |
| | | requestUrl: string |
| | | userIp: string |
| | | userAgent: string |
| | | exceptionTime: Date |
| | | exceptionName: string |
| | | exceptionMessage: string |
| | | exceptionRootCauseMessage: string |
| | | exceptionStackTrace: string |
| | | exceptionClassName: string |
| | | exceptionFileName: string |
| | | exceptionMethodName: string |
| | | exceptionLineNumber: number |
| | | processUserId: number |
| | | processStatus: number |
| | | processTime: Date |
| | | resultCode: number |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢å表API è®¿é®æ¥å¿ |
| | | export const getApiErrorLogPage = (params: PageParam) => { |
| | | return request.get({ url: '/infra/api-error-log/page', params }) |
| | | } |
| | | |
| | | // æ´æ° API é误æ¥å¿çå¤çç¶æ |
| | | export const updateApiErrorLogPage = (id: number, processStatus: number) => { |
| | | return request.put({ |
| | | url: '/infra/api-error-log/update-status?id=' + id + '&processStatus=' + processStatus |
| | | }) |
| | | } |
| | | |
| | | // 导åºAPI è®¿é®æ¥å¿ |
| | | export const exportApiErrorLog = (params) => { |
| | | return request.download({ |
| | | url: '/infra/api-error-log/export-excel', |
| | | params |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export type CodegenTableVO = { |
| | | id: number |
| | | tableId: number |
| | | isParentMenuIdValid: boolean |
| | | dataSourceConfigId: number |
| | | scene: number |
| | | tableName: string |
| | | tableComment: string |
| | | remark: string |
| | | moduleName: string |
| | | businessName: string |
| | | className: string |
| | | classComment: string |
| | | author: string |
| | | createTime: Date |
| | | updateTime: Date |
| | | templateType: number |
| | | parentMenuId: number |
| | | } |
| | | |
| | | export type CodegenColumnVO = { |
| | | id: number |
| | | tableId: number |
| | | columnName: string |
| | | dataType: string |
| | | columnComment: string |
| | | nullable: number |
| | | primaryKey: number |
| | | ordinalPosition: number |
| | | javaType: string |
| | | javaField: string |
| | | dictType: string |
| | | example: string |
| | | createOperation: number |
| | | updateOperation: number |
| | | listOperation: number |
| | | listOperationCondition: string |
| | | listOperationResult: number |
| | | htmlType: string |
| | | } |
| | | |
| | | export type DatabaseTableVO = { |
| | | name: string |
| | | comment: string |
| | | } |
| | | |
| | | export type CodegenPreviewVO = { |
| | | filePath: string |
| | | code: string |
| | | } |
| | | |
| | | export type CodegenUpdateReqVO = { |
| | | table: CodegenTableVO | any |
| | | columns: CodegenColumnVO[] |
| | | } |
| | | |
| | | // æ¥è¯¢å表代ç çæè¡¨å®ä¹ |
| | | export const getCodegenTableList = (dataSourceConfigId: number) => { |
| | | return request.get({ url: '/infra/codegen/table/list?dataSourceConfigId=' + dataSourceConfigId }) |
| | | } |
| | | |
| | | // æ¥è¯¢å表代ç çæè¡¨å®ä¹ |
| | | export const getCodegenTablePage = (params: PageParam) => { |
| | | return request.get({ url: '/infra/codegen/table/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢è¯¦æ
代ç çæè¡¨å®ä¹ |
| | | export const getCodegenTable = (id: number) => { |
| | | return request.get({ url: '/infra/codegen/detail?tableId=' + id }) |
| | | } |
| | | |
| | | // ä¿®æ¹ä»£ç çæè¡¨å®ä¹ |
| | | export const updateCodegenTable = (data: CodegenUpdateReqVO) => { |
| | | return request.put({ url: '/infra/codegen/update', data }) |
| | | } |
| | | |
| | | // åºäºæ°æ®åºçè¡¨ç»æï¼åæ¥æ°æ®åºç表ååæ®µå®ä¹ |
| | | export const syncCodegenFromDB = (id: number) => { |
| | | return request.put({ url: '/infra/codegen/sync-from-db?tableId=' + id }) |
| | | } |
| | | |
| | | // é¢è§çæä»£ç |
| | | export const previewCodegen = (id: number) => { |
| | | return request.get({ url: '/infra/codegen/preview?tableId=' + id }) |
| | | } |
| | | |
| | | // ä¸è½½çæä»£ç |
| | | export const downloadCodegen = (id: number) => { |
| | | return request.download({ url: '/infra/codegen/download?tableId=' + id }) |
| | | } |
| | | |
| | | // è·å¾è¡¨å®ä¹ |
| | | export const getSchemaTableList = (params) => { |
| | | return request.get({ url: '/infra/codegen/db/table/list', params }) |
| | | } |
| | | |
| | | // åºäºæ°æ®åºçè¡¨ç»æï¼å建代ç çæå¨ç表å®ä¹ |
| | | export const createCodegenList = (data) => { |
| | | return request.post({ url: '/infra/codegen/create-list', data }) |
| | | } |
| | | |
| | | // å é¤ä»£ç çæè¡¨å®ä¹ |
| | | export const deleteCodegenTable = (id: number) => { |
| | | return request.delete({ url: '/infra/codegen/delete?tableId=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤ä»£ç çæè¡¨å®ä¹ |
| | | export const deleteCodegenTableList = (ids: number[]) => { |
| | | return request.delete({ url: '/infra/codegen/delete-list', params: { tableIds: ids.join(',') } }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface ConfigVO { |
| | | id: number | undefined |
| | | category: string |
| | | name: string |
| | | key: string |
| | | value: string |
| | | type: number |
| | | visible: boolean |
| | | remark: string |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢åæ°å表 |
| | | export const getConfigPage = (params: PageParam) => { |
| | | return request.get({ url: '/infra/config/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢åæ°è¯¦æ
|
| | | export const getConfig = (id: number) => { |
| | | return request.get({ url: '/infra/config/get?id=' + id }) |
| | | } |
| | | |
| | | // æ ¹æ®åæ°é®åæ¥è¯¢åæ°å¼ |
| | | export const getConfigKey = (configKey: string) => { |
| | | return request.get({ url: '/infra/config/get-value-by-key?key=' + configKey }) |
| | | } |
| | | |
| | | // æ°å¢åæ° |
| | | export const createConfig = (data: ConfigVO) => { |
| | | return request.post({ url: '/infra/config/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹åæ° |
| | | export const updateConfig = (data: ConfigVO) => { |
| | | return request.put({ url: '/infra/config/update', data }) |
| | | } |
| | | |
| | | // å é¤åæ° |
| | | export const deleteConfig = (id: number) => { |
| | | return request.delete({ url: '/infra/config/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤åæ° |
| | | export const deleteConfigList = (ids: number[]) => { |
| | | return request.delete({ url: '/infra/config/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // 导åºåæ° |
| | | export const exportConfig = (params) => { |
| | | return request.download({ url: '/infra/config/export-excel', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface DataSourceConfigVO { |
| | | id: number | undefined |
| | | name: string |
| | | url: string |
| | | username: string |
| | | password: string |
| | | createTime?: Date |
| | | } |
| | | |
| | | // æ°å¢æ°æ®æºé
ç½® |
| | | export const createDataSourceConfig = (data: DataSourceConfigVO) => { |
| | | return request.post({ url: '/infra/data-source-config/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹æ°æ®æºé
ç½® |
| | | export const updateDataSourceConfig = (data: DataSourceConfigVO) => { |
| | | return request.put({ url: '/infra/data-source-config/update', data }) |
| | | } |
| | | |
| | | // å 餿°æ®æºé
ç½® |
| | | export const deleteDataSourceConfig = (id: number) => { |
| | | return request.delete({ url: '/infra/data-source-config/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå 餿°æ®æºé
ç½® |
| | | export const deleteDataSourceConfigList = (ids: number[]) => { |
| | | return request.delete({ url: '/infra/data-source-config/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // æ¥è¯¢æ°æ®æºé
置详æ
|
| | | export const getDataSourceConfig = (id: number) => { |
| | | return request.get({ url: '/infra/data-source-config/get?id=' + id }) |
| | | } |
| | | |
| | | // æ¥è¯¢æ°æ®æºé
ç½®å表 |
| | | export const getDataSourceConfigList = () => { |
| | | return request.get({ url: '/infra/data-source-config/list' }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import type { Dayjs } from 'dayjs' |
| | | |
| | | /** 示ä¾èç³»äººä¿¡æ¯ */ |
| | | export interface Demo01Contact { |
| | | id: number // ç¼å· |
| | | name?: string // åå |
| | | sex?: number // æ§å« |
| | | birthday?: string | Dayjs // åºçå¹´ |
| | | description?: string // ç®ä» |
| | | avatar: string // 头å |
| | | } |
| | | |
| | | // 示ä¾è系人 API |
| | | export const Demo01ContactApi = { |
| | | // æ¥è¯¢ç¤ºä¾è系人å页 |
| | | getDemo01ContactPage: async (params: any) => { |
| | | return await request.get({ url: `/infra/demo01-contact/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ç¤ºä¾è系人详æ
|
| | | getDemo01Contact: async (id: number) => { |
| | | return await request.get({ url: `/infra/demo01-contact/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢ç¤ºä¾è系人 |
| | | createDemo01Contact: async (data: Demo01Contact) => { |
| | | return await request.post({ url: `/infra/demo01-contact/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹ç¤ºä¾è系人 |
| | | updateDemo01Contact: async (data: Demo01Contact) => { |
| | | return await request.put({ url: `/infra/demo01-contact/update`, data }) |
| | | }, |
| | | |
| | | // å é¤ç¤ºä¾è系人 |
| | | deleteDemo01Contact: async (id: number) => { |
| | | return await request.delete({ url: `/infra/demo01-contact/delete?id=` + id }) |
| | | }, |
| | | |
| | | /** æ¹éå é¤ç¤ºä¾è系人 */ |
| | | deleteDemo01ContactList: async (ids: number[]) => { |
| | | return await request.delete({ url: `/infra/demo01-contact/delete-list?ids=${ids.join(',')}` }) |
| | | }, |
| | | |
| | | // 导åºç¤ºä¾è系人 Excel |
| | | exportDemo01Contact: async (params) => { |
| | | return await request.download({ url: `/infra/demo01-contact/export-excel`, params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface Demo02CategoryVO { |
| | | id: number |
| | | name: string |
| | | parentId: number |
| | | } |
| | | |
| | | // æ¥è¯¢ç¤ºä¾åç±»å表 |
| | | export const getDemo02CategoryList = async () => { |
| | | return await request.get({ url: `/infra/demo02-category/list` }) |
| | | } |
| | | |
| | | // æ¥è¯¢ç¤ºä¾å类详æ
|
| | | export const getDemo02Category = async (id: number) => { |
| | | return await request.get({ url: `/infra/demo02-category/get?id=` + id }) |
| | | } |
| | | |
| | | // æ°å¢ç¤ºä¾åç±» |
| | | export const createDemo02Category = async (data: Demo02CategoryVO) => { |
| | | return await request.post({ url: `/infra/demo02-category/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ç¤ºä¾åç±» |
| | | export const updateDemo02Category = async (data: Demo02CategoryVO) => { |
| | | return await request.put({ url: `/infra/demo02-category/update`, data }) |
| | | } |
| | | |
| | | // å é¤ç¤ºä¾åç±» |
| | | export const deleteDemo02Category = async (id: number) => { |
| | | return await request.delete({ url: `/infra/demo02-category/delete?id=` + id }) |
| | | } |
| | | |
| | | // 导åºç¤ºä¾åç±» Excel |
| | | export const exportDemo02Category = async (params) => { |
| | | return await request.download({ url: `/infra/demo02-category/export-excel`, params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import type { Dayjs } from 'dayjs'; |
| | | |
| | | /** å¦ç课ç¨ä¿¡æ¯ */ |
| | | export interface Demo03Course { |
| | | id: number; // ç¼å· |
| | | studentId?: number; // å¦çç¼å· |
| | | name?: string; // åå |
| | | score?: number; // åæ° |
| | | } |
| | | |
| | | /** å¦çççº§ä¿¡æ¯ */ |
| | | export interface Demo03Grade { |
| | | id: number; // ç¼å· |
| | | studentId?: number; // å¦çç¼å· |
| | | name?: string; // åå |
| | | teacher?: string; // ç主任 |
| | | } |
| | | |
| | | /** å¦çä¿¡æ¯ */ |
| | | export interface Demo03Student { |
| | | id: number; // ç¼å· |
| | | name?: string; // åå |
| | | sex?: number; // æ§å« |
| | | birthday?: string | Dayjs; // åºçæ¥æ |
| | | description?: string; // ç®ä» |
| | | } |
| | | |
| | | // å¦ç API |
| | | export const Demo03StudentApi = { |
| | | // æ¥è¯¢å¦çå页 |
| | | getDemo03StudentPage: async (params: any) => { |
| | | return await request.get({ url: `/infra/demo03-student-erp/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢å¦ç详æ
|
| | | getDemo03Student: async (id: number) => { |
| | | return await request.get({ url: `/infra/demo03-student-erp/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢å¦ç |
| | | createDemo03Student: async (data: Demo03Student) => { |
| | | return await request.post({ url: `/infra/demo03-student-erp/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹å¦ç |
| | | updateDemo03Student: async (data: Demo03Student) => { |
| | | return await request.put({ url: `/infra/demo03-student-erp/update`, data }) |
| | | }, |
| | | |
| | | // å é¤å¦ç |
| | | deleteDemo03Student: async (id: number) => { |
| | | return await request.delete({ url: `/infra/demo03-student-erp/delete?id=` + id }) |
| | | }, |
| | | |
| | | /** æ¹éå é¤å¦ç */ |
| | | deleteDemo03StudentList: async (ids: number[]) => { |
| | | return await request.delete({ url: `/infra/demo03-student-erp/delete-list?ids=${ids.join(',')}` }) |
| | | }, |
| | | |
| | | // 导åºå¦ç Excel |
| | | exportDemo03Student: async (params) => { |
| | | return await request.download({ url: `/infra/demo03-student-erp/export-excel`, params }) |
| | | }, |
| | | |
| | | // ==================== å表ï¼å¦ç课ç¨ï¼ ==================== |
| | | |
| | | // è·å¾å¦ç课ç¨å页 |
| | | getDemo03CoursePage: async (params) => { |
| | | return await request.get({ url: `/infra/demo03-student-erp/demo03-course/page`, params }) |
| | | }, |
| | | // æ°å¢å¦çè¯¾ç¨ |
| | | createDemo03Course: async (data: Demo03Course) => { |
| | | return await request.post({ url: `/infra/demo03-student-erp/demo03-course/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹å¦çè¯¾ç¨ |
| | | updateDemo03Course: async (data: Demo03Course) => { |
| | | return await request.put({ url: `/infra/demo03-student-erp/demo03-course/update`, data }) |
| | | }, |
| | | |
| | | // å é¤å¦çè¯¾ç¨ |
| | | deleteDemo03Course: async (id: number) => { |
| | | return await request.delete({ url: `/infra/demo03-student-erp/demo03-course/delete?id=` + id }) |
| | | }, |
| | | |
| | | /** æ¹éå é¤å¦çè¯¾ç¨ */ |
| | | deleteDemo03CourseList: async (ids: number[]) => { |
| | | return await request.delete({ url: `/infra/demo03-student-erp/demo03-course/delete-list?ids=${ids.join(',')}` }) |
| | | }, |
| | | |
| | | // è·å¾å¦çè¯¾ç¨ |
| | | getDemo03Course: async (id: number) => { |
| | | return await request.get({ url: `/infra/demo03-student-erp/demo03-course/get?id=` + id }) |
| | | }, |
| | | |
| | | // ==================== å表ï¼å¦çççº§ï¼ ==================== |
| | | |
| | | // è·å¾å¦çç级å页 |
| | | getDemo03GradePage: async (params) => { |
| | | return await request.get({ url: `/infra/demo03-student-erp/demo03-grade/page`, params }) |
| | | }, |
| | | // æ°å¢å¦çç级 |
| | | createDemo03Grade: async (data: Demo03Grade) => { |
| | | return await request.post({ url: `/infra/demo03-student-erp/demo03-grade/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹å¦çç级 |
| | | updateDemo03Grade: async (data: Demo03Grade) => { |
| | | return await request.put({ url: `/infra/demo03-student-erp/demo03-grade/update`, data }) |
| | | }, |
| | | |
| | | // å é¤å¦çç级 |
| | | deleteDemo03Grade: async (id: number) => { |
| | | return await request.delete({ url: `/infra/demo03-student-erp/demo03-grade/delete?id=` + id }) |
| | | }, |
| | | |
| | | /** æ¹éå é¤å¦çç级 */ |
| | | deleteDemo03GradeList: async (ids: number[]) => { |
| | | return await request.delete({ url: `/infra/demo03-student-erp/demo03-grade/delete-list?ids=${ids.join(',')}` }) |
| | | }, |
| | | |
| | | // è·å¾å¦çç级 |
| | | getDemo03Grade: async (id: number) => { |
| | | return await request.get({ url: `/infra/demo03-student-erp/demo03-grade/get?id=` + id }) |
| | | }, |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import type { Dayjs } from 'dayjs'; |
| | | |
| | | /** å¦ç课ç¨ä¿¡æ¯ */ |
| | | export interface Demo03Course { |
| | | id: number; // ç¼å· |
| | | studentId?: number; // å¦çç¼å· |
| | | name?: string; // åå |
| | | score?: number; // åæ° |
| | | } |
| | | |
| | | /** å¦çççº§ä¿¡æ¯ */ |
| | | export interface Demo03Grade { |
| | | id: number; // ç¼å· |
| | | studentId?: number; // å¦çç¼å· |
| | | name?: string; // åå |
| | | teacher?: string; // ç主任 |
| | | } |
| | | |
| | | /** å¦çä¿¡æ¯ */ |
| | | export interface Demo03Student { |
| | | id: number; // ç¼å· |
| | | name?: string; // åå |
| | | sex?: number; // æ§å« |
| | | birthday?: string | Dayjs; // åºçæ¥æ |
| | | description?: string; // ç®ä» |
| | | demo03courses?: Demo03Course[] |
| | | demo03grade?: Demo03Grade |
| | | } |
| | | |
| | | // å¦ç API |
| | | export const Demo03StudentApi = { |
| | | // æ¥è¯¢å¦çå页 |
| | | getDemo03StudentPage: async (params: any) => { |
| | | return await request.get({ url: `/infra/demo03-student-inner/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢å¦ç详æ
|
| | | getDemo03Student: async (id: number) => { |
| | | return await request.get({ url: `/infra/demo03-student-inner/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢å¦ç |
| | | createDemo03Student: async (data: Demo03Student) => { |
| | | return await request.post({ url: `/infra/demo03-student-inner/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹å¦ç |
| | | updateDemo03Student: async (data: Demo03Student) => { |
| | | return await request.put({ url: `/infra/demo03-student-inner/update`, data }) |
| | | }, |
| | | |
| | | // å é¤å¦ç |
| | | deleteDemo03Student: async (id: number) => { |
| | | return await request.delete({ url: `/infra/demo03-student-inner/delete?id=` + id }) |
| | | }, |
| | | |
| | | /** æ¹éå é¤å¦ç */ |
| | | deleteDemo03StudentList: async (ids: number[]) => { |
| | | return await request.delete({ url: `/infra/demo03-student-inner/delete-list?ids=${ids.join(',')}` }) |
| | | }, |
| | | |
| | | // 导åºå¦ç Excel |
| | | exportDemo03Student: async (params) => { |
| | | return await request.download({ url: `/infra/demo03-student-inner/export-excel`, params }) |
| | | }, |
| | | |
| | | // ==================== å表ï¼å¦ç课ç¨ï¼ ==================== |
| | | |
| | | // è·å¾å¦ç课ç¨å表 |
| | | getDemo03CourseListByStudentId: async (studentId) => { |
| | | return await request.get({ url: `/infra/demo03-student-inner/demo03-course/list-by-student-id?studentId=` + studentId }) |
| | | }, |
| | | |
| | | // ==================== å表ï¼å¦çççº§ï¼ ==================== |
| | | |
| | | // è·å¾å¦çç级 |
| | | getDemo03GradeByStudentId: async (studentId) => { |
| | | return await request.get({ url: `/infra/demo03-student-inner/demo03-grade/get-by-student-id?studentId=` + studentId }) |
| | | }, |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import type { Dayjs } from 'dayjs'; |
| | | |
| | | /** å¦ç课ç¨ä¿¡æ¯ */ |
| | | export interface Demo03Course { |
| | | id: number; // ç¼å· |
| | | studentId?: number; // å¦çç¼å· |
| | | name?: string; // åå |
| | | score?: number; // åæ° |
| | | } |
| | | |
| | | /** å¦çççº§ä¿¡æ¯ */ |
| | | export interface Demo03Grade { |
| | | id: number; // ç¼å· |
| | | studentId?: number; // å¦çç¼å· |
| | | name?: string; // åå |
| | | teacher?: string; // ç主任 |
| | | } |
| | | |
| | | /** å¦çä¿¡æ¯ */ |
| | | export interface Demo03Student { |
| | | id: number; // ç¼å· |
| | | name?: string; // åå |
| | | sex?: number; // æ§å« |
| | | birthday?: string | Dayjs; // åºçæ¥æ |
| | | description?: string; // ç®ä» |
| | | demo03courses?: Demo03Course[] |
| | | demo03grade?: Demo03Grade |
| | | } |
| | | |
| | | // å¦ç API |
| | | export const Demo03StudentApi = { |
| | | // æ¥è¯¢å¦çå页 |
| | | getDemo03StudentPage: async (params: any) => { |
| | | return await request.get({ url: `/infra/demo03-student-normal/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢å¦ç详æ
|
| | | getDemo03Student: async (id: number) => { |
| | | return await request.get({ url: `/infra/demo03-student-normal/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢å¦ç |
| | | createDemo03Student: async (data: Demo03Student) => { |
| | | return await request.post({ url: `/infra/demo03-student-normal/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹å¦ç |
| | | updateDemo03Student: async (data: Demo03Student) => { |
| | | return await request.put({ url: `/infra/demo03-student-normal/update`, data }) |
| | | }, |
| | | |
| | | // å é¤å¦ç |
| | | deleteDemo03Student: async (id: number) => { |
| | | return await request.delete({ url: `/infra/demo03-student-normal/delete?id=` + id }) |
| | | }, |
| | | |
| | | /** æ¹éå é¤å¦ç */ |
| | | deleteDemo03StudentList: async (ids: number[]) => { |
| | | return await request.delete({ url: `/infra/demo03-student-normal/delete-list?ids=${ids.join(',')}` }) |
| | | }, |
| | | |
| | | // 导åºå¦ç Excel |
| | | exportDemo03Student: async (params) => { |
| | | return await request.download({ url: `/infra/demo03-student-normal/export-excel`, params }) |
| | | }, |
| | | |
| | | // ==================== å表ï¼å¦ç课ç¨ï¼ ==================== |
| | | |
| | | // è·å¾å¦ç课ç¨å表 |
| | | getDemo03CourseListByStudentId: async (studentId) => { |
| | | return await request.get({ url: `/infra/demo03-student-normal/demo03-course/list-by-student-id?studentId=` + studentId }) |
| | | }, |
| | | |
| | | // ==================== å表ï¼å¦çççº§ï¼ ==================== |
| | | |
| | | // è·å¾å¦çç级 |
| | | getDemo03GradeByStudentId: async (studentId) => { |
| | | return await request.get({ url: `/infra/demo03-student-normal/demo03-grade/get-by-student-id?studentId=` + studentId }) |
| | | }, |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // æä»¶é¢ç¾åå°å Response VO |
| | | export interface FilePresignedUrlRespVO { |
| | | // æä»¶é
ç½®ç¼å· |
| | | configId: number |
| | | // æä»¶ä¸ä¼ URL |
| | | uploadUrl: string |
| | | // æä»¶ URL |
| | | url: string |
| | | // æä»¶è·¯å¾ |
| | | path: string |
| | | } |
| | | |
| | | // æ¥è¯¢æä»¶å表 |
| | | export const getFilePage = (params: PageParam) => { |
| | | return request.get({ url: '/infra/file/page', params }) |
| | | } |
| | | |
| | | // å 餿件 |
| | | export const deleteFile = (id: number) => { |
| | | return request.delete({ url: '/infra/file/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå 餿件 |
| | | export const deleteFileList = (ids: number[]) => { |
| | | return request.delete({ url: '/infra/file/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // è·åæä»¶é¢ç¾åå°å |
| | | export const getFilePresignedUrl = (name: string, directory?: string) => { |
| | | return request.get<FilePresignedUrlRespVO>({ |
| | | url: '/infra/file/presigned-url', |
| | | params: { name, directory } |
| | | }) |
| | | } |
| | | |
| | | // å建æä»¶ |
| | | export const createFile = (data: any) => { |
| | | return request.post({ url: '/infra/file/create', data }) |
| | | } |
| | | |
| | | // ä¸ä¼ æä»¶ |
| | | export const updateFile = (data: any, onUploadProgress?: Function) => { |
| | | return request.upload({ url: '/infra/file/upload', data, onUploadProgress }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface FileClientConfig { |
| | | basePath: string |
| | | host?: string |
| | | port?: number |
| | | username?: string |
| | | password?: string |
| | | mode?: string |
| | | endpoint?: string |
| | | bucket?: string |
| | | accessKey?: string |
| | | accessSecret?: string |
| | | enablePathStyleAccess?: boolean |
| | | enablePublicAccess?: boolean |
| | | region?: string |
| | | domain: string |
| | | } |
| | | |
| | | export interface FileConfigVO { |
| | | id: number |
| | | name: string |
| | | storage?: number |
| | | master: boolean |
| | | visible: boolean |
| | | config: FileClientConfig |
| | | remark: string |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢æä»¶é
ç½®å表 |
| | | export const getFileConfigPage = (params: PageParam) => { |
| | | return request.get({ url: '/infra/file-config/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢æä»¶é
置详æ
|
| | | export const getFileConfig = (id: number) => { |
| | | return request.get({ url: '/infra/file-config/get?id=' + id }) |
| | | } |
| | | |
| | | // æ´æ°æä»¶é
置为主é
ç½® |
| | | export const updateFileConfigMaster = (id: number) => { |
| | | return request.put({ url: '/infra/file-config/update-master?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢æä»¶é
ç½® |
| | | export const createFileConfig = (data: FileConfigVO) => { |
| | | return request.post({ url: '/infra/file-config/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹æä»¶é
ç½® |
| | | export const updateFileConfig = (data: FileConfigVO) => { |
| | | return request.put({ url: '/infra/file-config/update', data }) |
| | | } |
| | | |
| | | // å 餿件é
ç½® |
| | | export const deleteFileConfig = (id: number) => { |
| | | return request.delete({ url: '/infra/file-config/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå 餿件é
ç½® |
| | | export const deleteFileConfigList = (ids: number[]) => { |
| | | return request.delete({ url: '/infra/file-config/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // æµè¯æä»¶é
ç½® |
| | | export const testFileConfig = (id: number) => { |
| | | return request.get({ url: '/infra/file-config/test?id=' + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface JobVO { |
| | | id: number |
| | | name: string |
| | | status: number |
| | | handlerName: string |
| | | handlerParam: string |
| | | cronExpression: string |
| | | retryCount: number |
| | | retryInterval: number |
| | | monitorTimeout: number |
| | | createTime: Date |
| | | } |
| | | |
| | | // ä»»å¡å表 |
| | | export const getJobPage = (params: PageParam) => { |
| | | return request.get({ url: '/infra/job/page', params }) |
| | | } |
| | | |
| | | // ä»»å¡è¯¦æ
|
| | | export const getJob = (id: number) => { |
| | | return request.get({ url: '/infra/job/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢ä»»å¡ |
| | | export const createJob = (data: JobVO) => { |
| | | return request.post({ url: '/infra/job/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹å®æ¶ä»»å¡è°åº¦ |
| | | export const updateJob = (data: JobVO) => { |
| | | return request.put({ url: '/infra/job/update', data }) |
| | | } |
| | | |
| | | // å é¤å®æ¶ä»»å¡è°åº¦ |
| | | export const deleteJob = (id: number) => { |
| | | return request.delete({ url: '/infra/job/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤å®æ¶ä»»å¡è°åº¦ |
| | | export const deleteJobList = (ids: number[]) => { |
| | | return request.delete({ url: '/infra/job/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // 导åºå®æ¶ä»»å¡è°åº¦ |
| | | export const exportJob = (params) => { |
| | | return request.download({ url: '/infra/job/export-excel', params }) |
| | | } |
| | | |
| | | // ä»»å¡ç¶æä¿®æ¹ |
| | | export const updateJobStatus = (id: number, status: number) => { |
| | | const params = { |
| | | id, |
| | | status |
| | | } |
| | | return request.put({ url: '/infra/job/update-status', params }) |
| | | } |
| | | |
| | | // 宿¶ä»»å¡ç«å³æ§è¡ä¸æ¬¡ |
| | | export const runJob = (id: number) => { |
| | | return request.put({ url: '/infra/job/trigger?id=' + id }) |
| | | } |
| | | |
| | | // è·å¾å®æ¶ä»»å¡çä¸ n 次æ§è¡æ¶é´ |
| | | export const getJobNextTimes = (id: number) => { |
| | | return request.get({ url: '/infra/job/get_next_times?id=' + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface JobLogVO { |
| | | id: number |
| | | jobId: number |
| | | handlerName: string |
| | | handlerParam: string |
| | | cronExpression: string |
| | | executeIndex: string |
| | | beginTime: Date |
| | | endTime: Date |
| | | duration: string |
| | | status: number |
| | | createTime: string |
| | | result: string |
| | | } |
| | | |
| | | // 任塿¥å¿å表 |
| | | export const getJobLogPage = (params: PageParam) => { |
| | | return request.get({ url: '/infra/job-log/page', params }) |
| | | } |
| | | |
| | | // 任塿¥å¿è¯¦æ
|
| | | export const getJobLog = (id: number) => { |
| | | return request.get({ url: '/infra/job-log/get?id=' + id }) |
| | | } |
| | | |
| | | // 导åºå®æ¶ä»»å¡æ¥å¿ |
| | | export const exportJobLog = (params) => { |
| | | return request.download({ |
| | | url: '/infra/job-log/export-excel', |
| | | params |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | /** |
| | | * è·åredis çæ§ä¿¡æ¯ |
| | | */ |
| | | export const getCache = () => { |
| | | return request.get({ url: '/infra/redis/get-monitor-info' }) |
| | | } |
| New file |
| | |
| | | export interface RedisMonitorInfoVO { |
| | | info: RedisInfoVO |
| | | dbSize: number |
| | | commandStats: RedisCommandStatsVO[] |
| | | } |
| | | |
| | | export interface RedisInfoVO { |
| | | io_threaded_reads_processed: string |
| | | tracking_clients: string |
| | | uptime_in_seconds: string |
| | | cluster_connections: string |
| | | current_cow_size: string |
| | | maxmemory_human: string |
| | | aof_last_cow_size: string |
| | | master_replid2: string |
| | | mem_replication_backlog: string |
| | | aof_rewrite_scheduled: string |
| | | total_net_input_bytes: string |
| | | rss_overhead_ratio: string |
| | | hz: string |
| | | current_cow_size_age: string |
| | | redis_build_id: string |
| | | errorstat_BUSYGROUP: string |
| | | aof_last_bgrewrite_status: string |
| | | multiplexing_api: string |
| | | client_recent_max_output_buffer: string |
| | | allocator_resident: string |
| | | mem_fragmentation_bytes: string |
| | | aof_current_size: string |
| | | repl_backlog_first_byte_offset: string |
| | | tracking_total_prefixes: string |
| | | redis_mode: string |
| | | redis_git_dirty: string |
| | | aof_delayed_fsync: string |
| | | allocator_rss_bytes: string |
| | | repl_backlog_histlen: string |
| | | io_threads_active: string |
| | | rss_overhead_bytes: string |
| | | total_system_memory: string |
| | | loading: string |
| | | evicted_keys: string |
| | | maxclients: string |
| | | cluster_enabled: string |
| | | redis_version: string |
| | | repl_backlog_active: string |
| | | mem_aof_buffer: string |
| | | allocator_frag_bytes: string |
| | | io_threaded_writes_processed: string |
| | | instantaneous_ops_per_sec: string |
| | | used_memory_human: string |
| | | total_error_replies: string |
| | | role: string |
| | | maxmemory: string |
| | | used_memory_lua: string |
| | | rdb_current_bgsave_time_sec: string |
| | | used_memory_startup: string |
| | | used_cpu_sys_main_thread: string |
| | | lazyfree_pending_objects: string |
| | | aof_pending_bio_fsync: string |
| | | used_memory_dataset_perc: string |
| | | allocator_frag_ratio: string |
| | | arch_bits: string |
| | | used_cpu_user_main_thread: string |
| | | mem_clients_normal: string |
| | | expired_time_cap_reached_count: string |
| | | unexpected_error_replies: string |
| | | mem_fragmentation_ratio: string |
| | | aof_last_rewrite_time_sec: string |
| | | master_replid: string |
| | | aof_rewrite_in_progress: string |
| | | lru_clock: string |
| | | maxmemory_policy: string |
| | | run_id: string |
| | | latest_fork_usec: string |
| | | tracking_total_items: string |
| | | total_commands_processed: string |
| | | expired_keys: string |
| | | errorstat_ERR: string |
| | | used_memory: string |
| | | module_fork_in_progress: string |
| | | errorstat_WRONGPASS: string |
| | | aof_buffer_length: string |
| | | dump_payload_sanitizations: string |
| | | mem_clients_slaves: string |
| | | keyspace_misses: string |
| | | server_time_usec: string |
| | | executable: string |
| | | lazyfreed_objects: string |
| | | db0: string |
| | | used_memory_peak_human: string |
| | | keyspace_hits: string |
| | | rdb_last_cow_size: string |
| | | aof_pending_rewrite: string |
| | | used_memory_overhead: string |
| | | active_defrag_hits: string |
| | | tcp_port: string |
| | | uptime_in_days: string |
| | | used_memory_peak_perc: string |
| | | current_save_keys_processed: string |
| | | blocked_clients: string |
| | | total_reads_processed: string |
| | | expire_cycle_cpu_milliseconds: string |
| | | sync_partial_err: string |
| | | used_memory_scripts_human: string |
| | | aof_current_rewrite_time_sec: string |
| | | aof_enabled: string |
| | | process_supervised: string |
| | | master_repl_offset: string |
| | | used_memory_dataset: string |
| | | used_cpu_user: string |
| | | rdb_last_bgsave_status: string |
| | | tracking_total_keys: string |
| | | atomicvar_api: string |
| | | allocator_rss_ratio: string |
| | | client_recent_max_input_buffer: string |
| | | clients_in_timeout_table: string |
| | | aof_last_write_status: string |
| | | mem_allocator: string |
| | | used_memory_scripts: string |
| | | used_memory_peak: string |
| | | process_id: string |
| | | master_failover_state: string |
| | | errorstat_NOAUTH: string |
| | | used_cpu_sys: string |
| | | repl_backlog_size: string |
| | | connected_slaves: string |
| | | current_save_keys_total: string |
| | | gcc_version: string |
| | | total_system_memory_human: string |
| | | sync_full: string |
| | | connected_clients: string |
| | | module_fork_last_cow_size: string |
| | | total_writes_processed: string |
| | | allocator_active: string |
| | | total_net_output_bytes: string |
| | | pubsub_channels: string |
| | | current_fork_perc: string |
| | | active_defrag_key_hits: string |
| | | rdb_changes_since_last_save: string |
| | | instantaneous_input_kbps: string |
| | | used_memory_rss_human: string |
| | | configured_hz: string |
| | | expired_stale_perc: string |
| | | active_defrag_misses: string |
| | | used_cpu_sys_children: string |
| | | number_of_cached_scripts: string |
| | | sync_partial_ok: string |
| | | used_memory_lua_human: string |
| | | rdb_last_save_time: string |
| | | pubsub_patterns: string |
| | | slave_expires_tracked_keys: string |
| | | redis_git_sha1: string |
| | | used_memory_rss: string |
| | | rdb_last_bgsave_time_sec: string |
| | | os: string |
| | | mem_not_counted_for_evict: string |
| | | active_defrag_running: string |
| | | rejected_connections: string |
| | | aof_rewrite_buffer_length: string |
| | | total_forks: string |
| | | active_defrag_key_misses: string |
| | | allocator_allocated: string |
| | | aof_base_size: string |
| | | instantaneous_output_kbps: string |
| | | second_repl_offset: string |
| | | rdb_bgsave_in_progress: string |
| | | used_cpu_user_children: string |
| | | total_connections_received: string |
| | | migrate_cached_sockets: string |
| | | } |
| | | |
| | | export interface RedisCommandStatsVO { |
| | | command: string |
| | | calls: number |
| | | usec: number |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | /** IoT åè¦é
ç½®ä¿¡æ¯ */ |
| | | export interface AlertConfig { |
| | | id: number // é
ç½®ç¼å· |
| | | name?: string // é
ç½®åç§° |
| | | description: string // é
ç½®æè¿° |
| | | level?: number // åè¦çº§å« |
| | | status?: number // é
ç½®ç¶æ |
| | | sceneRuleIds: string // å
³èçåºæ¯èå¨è§åç¼å·æ°ç» |
| | | receiveUserIds: string // æ¥æ¶çç¨æ·ç¼å·æ°ç» |
| | | receiveTypes: string // æ¥æ¶çç±»åæ°ç» |
| | | } |
| | | |
| | | // IoT åè¦é
ç½® API |
| | | export const AlertConfigApi = { |
| | | // æ¥è¯¢åè¦é
ç½®å页 |
| | | getAlertConfigPage: async (params: any) => { |
| | | return await request.get({ url: `/iot/alert-config/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢åè¦é
置详æ
|
| | | getAlertConfig: async (id: number) => { |
| | | return await request.get({ url: `/iot/alert-config/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢åè¦é
ç½® |
| | | createAlertConfig: async (data: AlertConfig) => { |
| | | return await request.post({ url: `/iot/alert-config/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹åè¦é
ç½® |
| | | updateAlertConfig: async (data: AlertConfig) => { |
| | | return await request.put({ url: `/iot/alert-config/update`, data }) |
| | | }, |
| | | |
| | | // å é¤åè¦é
ç½® |
| | | deleteAlertConfig: async (id: number) => { |
| | | return await request.delete({ url: `/iot/alert-config/delete?id=` + id }) |
| | | }, |
| | | |
| | | // è·ååè¦é
ç½®ç®åå表 |
| | | getSimpleAlertConfigList: async () => { |
| | | return await request.get({ url: `/iot/alert-config/simple-list` }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | /** IoT åè¦è®°å½ä¿¡æ¯ */ |
| | | export interface AlertRecord { |
| | | id: number // è®°å½ç¼å· |
| | | configId: number // åè¦é
ç½®ç¼å· |
| | | configName: string // åè¦åç§° |
| | | configLevel: number // åè¦çº§å« |
| | | productId: number // 产åç¼å· |
| | | deviceId: number // 设å¤ç¼å· |
| | | deviceMessage: any // 触åçè®¾å¤æ¶æ¯ |
| | | processStatus?: boolean // æ¯å¦å¤ç |
| | | processRemark: string // å¤çç»æï¼å¤æ³¨ï¼ |
| | | } |
| | | |
| | | // IoT åè¦è®°å½ API |
| | | export const AlertRecordApi = { |
| | | // æ¥è¯¢åè¦è®°å½å页 |
| | | getAlertRecordPage: async (params: any) => { |
| | | return await request.get({ url: `/iot/alert-record/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢åè¦è®°å½è¯¦æ
|
| | | getAlertRecord: async (id: number) => { |
| | | return await request.get({ url: `/iot/alert-record/get?id=` + id }) |
| | | }, |
| | | |
| | | // å¤çåè¦è®°å½ |
| | | processAlertRecord: async (id: number, processRemark: string) => { |
| | | return await request.put({ |
| | | url: `/iot/alert-record/process`, |
| | | data: { id, processRemark } |
| | | }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // IoT è®¾å¤ VO |
| | | export interface DeviceVO { |
| | | id: number // è®¾å¤ IDï¼ä¸»é®ï¼èªå¢ |
| | | deviceName: string // 设å¤åç§° |
| | | productId: number // 产åç¼å· |
| | | productKey: string // äº§åæ è¯ |
| | | deviceType: number // 设å¤ç±»å |
| | | nickname: string // 设å¤å¤æ³¨åç§° |
| | | gatewayId: number // ç½å
³è®¾å¤ ID |
| | | state: number // 设å¤ç¶æ |
| | | onlineTime: Date // æåä¸çº¿æ¶é´ |
| | | offlineTime: Date // æå离线æ¶é´ |
| | | activeTime: Date // è®¾å¤æ¿æ´»æ¶é´ |
| | | createTime: Date // å建æ¶é´ |
| | | ip: string // 设å¤ç IP å°å |
| | | firmwareVersion: string // 设å¤çåºä»¶çæ¬ |
| | | deviceSecret: string // 设å¤å¯é¥ï¼ç¨äºè®¾å¤è®¤è¯ï¼éå®å
¨åå¨ |
| | | mqttClientId: string // MQTT 客æ·ç«¯ ID |
| | | mqttUsername: string // MQTT ç¨æ·å |
| | | mqttPassword: string // MQTT å¯ç |
| | | authType: string // 认è¯ç±»å |
| | | locationType: number // å®ä½ç±»å |
| | | latitude?: number // 设å¤ä½ç½®ç纬度 |
| | | longitude?: number // 设å¤ä½ç½®çç»åº¦ |
| | | areaId: number // å°åºç¼ç |
| | | address: string // 设å¤è¯¦ç»å°å |
| | | serialNumber: string // 设å¤åºåå· |
| | | config: string // 设å¤é
ç½® |
| | | groupIds?: number[] // æ·»å åç» ID |
| | | } |
| | | |
| | | // IoT 设å¤å±æ§è¯¦ç» VO |
| | | export interface IotDevicePropertyDetailRespVO { |
| | | identifier: string // 屿§æ è¯ç¬¦ |
| | | value: string // ææ°å¼ |
| | | updateTime: Date // æ´æ°æ¶é´ |
| | | name: string // 屿§åç§° |
| | | dataType: string // æ°æ®ç±»å |
| | | dataSpecs: any // æ°æ®å®ä¹ |
| | | dataSpecsList: any[] // æ°æ®å®ä¹å表 |
| | | } |
| | | |
| | | // IoT 设å¤å±æ§ VO |
| | | export interface IotDevicePropertyRespVO { |
| | | identifier: string // 屿§æ è¯ç¬¦ |
| | | value: string // ææ°å¼ |
| | | updateTime: Date // æ´æ°æ¶é´ |
| | | } |
| | | |
| | | // TODO @èè¿ï¼è°æ´å° constants |
| | | // IoT 设å¤ç¶ææä¸¾ |
| | | export enum DeviceStateEnum { |
| | | INACTIVE = 0, // æªæ¿æ´» |
| | | ONLINE = 1, // å¨çº¿ |
| | | OFFLINE = 2 // 离线 |
| | | } |
| | | |
| | | // 设å¤è®¤è¯åæ° VO |
| | | export interface IotDeviceAuthInfoVO { |
| | | clientId: string // 客æ·ç«¯ ID |
| | | username: string // ç¨æ·å |
| | | password: string // å¯ç |
| | | } |
| | | |
| | | // IoT 设å¤åéæ¶æ¯ Request VO |
| | | export interface IotDeviceMessageSendReqVO { |
| | | deviceId: number // 设å¤ç¼å· |
| | | method: string // è¯·æ±æ¹æ³ |
| | | params?: any // 请æ±åæ° |
| | | } |
| | | |
| | | // è®¾å¤ API |
| | | export const DeviceApi = { |
| | | // æ¥è¯¢è®¾å¤å页 |
| | | getDevicePage: async (params: any) => { |
| | | return await request.get({ url: `/iot/device/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢è®¾å¤è¯¦æ
|
| | | getDevice: async (id: number) => { |
| | | return await request.get({ url: `/iot/device/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢è®¾å¤ |
| | | createDevice: async (data: DeviceVO) => { |
| | | return await request.post({ url: `/iot/device/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹è®¾å¤ |
| | | updateDevice: async (data: DeviceVO) => { |
| | | return await request.put({ url: `/iot/device/update`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹è®¾å¤åç» |
| | | updateDeviceGroup: async (data: { ids: number[]; groupIds: number[] }) => { |
| | | return await request.put({ url: `/iot/device/update-group`, data }) |
| | | }, |
| | | |
| | | // å é¤åä¸ªè®¾å¤ |
| | | deleteDevice: async (id: number) => { |
| | | return await request.delete({ url: `/iot/device/delete?id=` + id }) |
| | | }, |
| | | |
| | | // å é¤å¤ä¸ªè®¾å¤ |
| | | deleteDeviceList: async (ids: number[]) => { |
| | | return await request.delete({ url: `/iot/device/delete-list`, params: { ids: ids.join(',') } }) |
| | | }, |
| | | |
| | | // 导åºè®¾å¤ |
| | | exportDeviceExcel: async (params: any) => { |
| | | return await request.download({ url: `/iot/device/export-excel`, params }) |
| | | }, |
| | | |
| | | // è·åè®¾å¤æ°é |
| | | getDeviceCount: async (productId: number) => { |
| | | return await request.get({ url: `/iot/device/count?productId=` + productId }) |
| | | }, |
| | | |
| | | // è·å设å¤çç²¾ç®ä¿¡æ¯å表 |
| | | getSimpleDeviceList: async (deviceType?: number, productId?: number) => { |
| | | return await request.get({ url: `/iot/device/simple-list?`, params: { deviceType, productId } }) |
| | | }, |
| | | |
| | | // æ ¹æ®äº§åç¼å·ï¼è·å设å¤çç²¾ç®ä¿¡æ¯å表 |
| | | getDeviceListByProductId: async (productId: number) => { |
| | | return await request.get({ url: `/iot/device/simple-list?`, params: { productId } }) |
| | | }, |
| | | |
| | | // è·å导å
¥æ¨¡æ¿ |
| | | importDeviceTemplate: async () => { |
| | | return await request.download({ url: `/iot/device/get-import-template` }) |
| | | }, |
| | | |
| | | // è·å设å¤å±æ§ææ°æ°æ® |
| | | getLatestDeviceProperties: async (params: any) => { |
| | | return await request.get({ url: `/iot/device/property/get-latest`, params }) |
| | | }, |
| | | |
| | | // è·å设å¤å±æ§å岿°æ® |
| | | getHistoryDevicePropertyList: async (params: any) => { |
| | | return await request.get({ url: `/iot/device/property/history-list`, params }) |
| | | }, |
| | | |
| | | // è·å设å¤è®¤è¯ä¿¡æ¯ |
| | | getDeviceAuthInfo: async (id: number) => { |
| | | return await request.get({ url: `/iot/device/get-auth-info`, params: { id } }) |
| | | }, |
| | | |
| | | // æ¥è¯¢è®¾å¤æ¶æ¯å页 |
| | | getDeviceMessagePage: async (params: any) => { |
| | | return await request.get({ url: `/iot/device/message/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢è®¾å¤æ¶æ¯é
对å页 |
| | | getDeviceMessagePairPage: async (params: any) => { |
| | | return await request.get({ url: `/iot/device/message/pair-page`, params }) |
| | | }, |
| | | |
| | | // åéè®¾å¤æ¶æ¯ |
| | | sendDeviceMessage: async (params: IotDeviceMessageSendReqVO) => { |
| | | return await request.post({ url: `/iot/device/message/send`, data: params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // IoT 设å¤åç» VO |
| | | export interface DeviceGroupVO { |
| | | id: number // åç» ID |
| | | name: string // åç»åå |
| | | status: number // åç»ç¶æ |
| | | description: string // åç»æè¿° |
| | | deviceCount?: number // è®¾å¤æ°é |
| | | } |
| | | |
| | | // IoT 设å¤åç» API |
| | | export const DeviceGroupApi = { |
| | | // æ¥è¯¢è®¾å¤åç»å页 |
| | | getDeviceGroupPage: async (params: any) => { |
| | | return await request.get({ url: `/iot/device-group/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢è®¾å¤åç»è¯¦æ
|
| | | getDeviceGroup: async (id: number) => { |
| | | return await request.get({ url: `/iot/device-group/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢è®¾å¤åç» |
| | | createDeviceGroup: async (data: DeviceGroupVO) => { |
| | | return await request.post({ url: `/iot/device-group/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹è®¾å¤åç» |
| | | updateDeviceGroup: async (data: DeviceGroupVO) => { |
| | | return await request.put({ url: `/iot/device-group/update`, data }) |
| | | }, |
| | | |
| | | // å é¤è®¾å¤åç» |
| | | deleteDeviceGroup: async (id: number) => { |
| | | return await request.delete({ url: `/iot/device-group/delete?id=` + id }) |
| | | }, |
| | | |
| | | // è·å设å¤åç»çç²¾ç®ä¿¡æ¯å表 |
| | | getSimpleDeviceGroupList: async () => { |
| | | return await request.get({ url: `/iot/device-group/simple-list` }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | /** IoT OTA åºä»¶ä¿¡æ¯ */ |
| | | export interface IoTOtaFirmware { |
| | | id?: number // åºä»¶ç¼å· |
| | | name?: string // åºä»¶åç§° |
| | | description?: string // åºä»¶æè¿° |
| | | version?: string // çæ¬å· |
| | | productId?: number // 产åç¼å· |
| | | productName?: string // 产ååç§° |
| | | fileUrl?: string // åºä»¶æä»¶ URL |
| | | fileSize?: number // åºä»¶æä»¶å¤§å° |
| | | fileDigestAlgorithm?: string // åºä»¶æä»¶ç¾åç®æ³ |
| | | fileDigestValue?: string // åºä»¶æä»¶ç¾åç»æ |
| | | createTime?: Date // å建æ¶é´ |
| | | } |
| | | |
| | | // IoT OTA åºä»¶ API |
| | | export const IoTOtaFirmwareApi = { |
| | | // æ¥è¯¢ OTA åºä»¶å页 |
| | | getOtaFirmwarePage: async (params: any) => { |
| | | return await request.get({ url: `/iot/ota/firmware/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ OTA åºä»¶è¯¦æ
|
| | | getOtaFirmware: async (id: number) => { |
| | | return await request.get({ url: `/iot/ota/firmware/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢ OTA åºä»¶ |
| | | createOtaFirmware: async (data: IoTOtaFirmware) => { |
| | | return await request.post({ url: `/iot/ota/firmware/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹ OTA åºä»¶ |
| | | updateOtaFirmware: async (data: IoTOtaFirmware) => { |
| | | return await request.put({ url: `/iot/ota/firmware/update`, data }) |
| | | }, |
| | | |
| | | // å é¤ OTA åºä»¶ |
| | | deleteOtaFirmware: async (id: number) => { |
| | | return await request.delete({ url: `/iot/ota/firmware/delete?id=` + id }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | /** IoT OTA ä»»å¡ä¿¡æ¯ */ |
| | | export interface OtaTask { |
| | | id?: number // ä»»å¡ç¼å· |
| | | name: string // ä»»å¡åç§° |
| | | description?: string // ä»»å¡æè¿° |
| | | firmwareId?: number // åºä»¶ç¼å· |
| | | status: number // ä»»å¡ç¶æ |
| | | deviceScope?: number // å级èå´ |
| | | deviceIds?: number[] // æå®è®¾å¤IDå表ï¼å½å级èå´ä¸ºæå®è®¾å¤æ¶ä½¿ç¨ï¼ |
| | | deviceTotalCount?: number // è®¾å¤æ»å
±æ°é |
| | | deviceSuccessCount?: number // è®¾å¤æåæ°é |
| | | createTime?: Date // å建æ¶é´ |
| | | } |
| | | |
| | | // IoT OTA ä»»å¡ API |
| | | export const IoTOtaTaskApi = { |
| | | // æ¥è¯¢ OTA å级任å¡å页 |
| | | getOtaTaskPage: async (params: any) => { |
| | | return await request.get({ url: `/iot/ota/task/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ OTA å级任å¡è¯¦æ
|
| | | getOtaTask: async (id: number) => { |
| | | return await request.get({ url: `/iot/ota/task/get?id=` + id }) |
| | | }, |
| | | |
| | | // å建 OTA åçº§ä»»å¡ |
| | | createOtaTask: async (data: OtaTask) => { |
| | | return await request.post({ url: `/iot/ota/task/create`, data }) |
| | | }, |
| | | |
| | | // åæ¶ OTA åçº§ä»»å¡ |
| | | cancelOtaTask: async (id: number) => { |
| | | return await request.post({ url: `/iot/ota/task/cancel?id=` + id }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | /** IoT OTA ä»»å¡è®°å½ä¿¡æ¯ */ |
| | | export interface OtaTaskRecord { |
| | | id?: number // å级记å½ç¼å· |
| | | firmwareId?: number // åºä»¶ç¼å· |
| | | firmwareVersion?: string // åºä»¶çæ¬ |
| | | taskId?: number // ä»»å¡ç¼å· |
| | | deviceId?: string // 设å¤ç¼å· |
| | | deviceName?: string // 设å¤åç§° |
| | | currentVersion?: string // å½åçæ¬ |
| | | fromFirmwareId?: number // æ¥æºçåºä»¶ç¼å· |
| | | fromFirmwareVersion?: string // æ¥æºçåºä»¶çæ¬ |
| | | status?: number // åçº§ç¶æ |
| | | progress?: number // å级è¿åº¦ï¼ç¾åæ¯ |
| | | description?: string // å级è¿åº¦æè¿° |
| | | updateTime?: Date // æ´æ°æ¶é´ |
| | | } |
| | | |
| | | // IoT OTA ä»»å¡è®°å½ API |
| | | export const IoTOtaTaskRecordApi = { |
| | | getOtaTaskRecordStatusStatistics: async (firmwareId?: number, taskId?: number) => { |
| | | const params: any = {} |
| | | if (firmwareId) params.firmwareId = firmwareId |
| | | if (taskId) params.taskId = taskId |
| | | return await request.get({ url: `/iot/ota/task/record/get-status-statistics`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ OTA ä»»å¡è®°å½å页 |
| | | getOtaTaskRecordPage: async (params: any) => { |
| | | return await request.get({ url: `/iot/ota/task/record/page`, params }) |
| | | }, |
| | | |
| | | // åæ¶ OTA ä»»å¡è®°å½ |
| | | cancelOtaTaskRecord: async (id: number) => { |
| | | return await request.put({ url: `/iot/ota/task/record/cancel?id=` + id }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // IoT 产ååç±» VO |
| | | export interface ProductCategoryVO { |
| | | id: number // åç±» ID |
| | | name: string // åç±»åå |
| | | sort: number // åç±»æåº |
| | | status: number // åç±»ç¶æ |
| | | description: string // åç±»æè¿° |
| | | } |
| | | |
| | | // IoT 产ååç±» API |
| | | export const ProductCategoryApi = { |
| | | // æ¥è¯¢äº§ååç±»å页 |
| | | getProductCategoryPage: async (params: any) => { |
| | | return await request.get({ url: `/iot/product-category/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢äº§åå类详æ
|
| | | getProductCategory: async (id: number) => { |
| | | return await request.get({ url: `/iot/product-category/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢äº§ååç±» |
| | | createProductCategory: async (data: ProductCategoryVO) => { |
| | | return await request.post({ url: `/iot/product-category/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹äº§ååç±» |
| | | updateProductCategory: async (data: ProductCategoryVO) => { |
| | | return await request.put({ url: `/iot/product-category/update`, data }) |
| | | }, |
| | | |
| | | // å é¤äº§ååç±» |
| | | deleteProductCategory: async (id: number) => { |
| | | return await request.delete({ url: `/iot/product-category/delete?id=` + id }) |
| | | }, |
| | | |
| | | /** è·å产åå类精ç®å表 */ |
| | | getSimpleProductCategoryList: () => { |
| | | return request.get({ url: '/iot/product-category/simple-list' }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // IoT 产å VO |
| | | export interface ProductVO { |
| | | id: number // 产åç¼å· |
| | | name: string // 产ååç§° |
| | | productKey: string // äº§åæ è¯ |
| | | protocolId: number // åè®®ç¼å· |
| | | categoryId: number // 产åæå±åç±»æ è¯ç¬¦ |
| | | categoryName?: string // 产åæå±åç±»åç§° |
| | | icon: string // 产å徿 |
| | | picUrl: string // 产åå¾ç |
| | | description: string // 产åæè¿° |
| | | status: number // 产åç¶æ |
| | | deviceType: number // 设å¤ç±»å |
| | | locationType: number // 设å¤ç±»å |
| | | netType: number // èç½æ¹å¼ |
| | | codecType: string // æ°æ®æ ¼å¼ï¼ç¼è§£ç å¨ç±»åï¼ |
| | | deviceCount: number // è®¾å¤æ°é |
| | | createTime: Date // å建æ¶é´ |
| | | } |
| | | |
| | | // IOT 产å设å¤ç±»åæä¸¾ç±» 0: ç´è¿è®¾å¤, 1: ç½å
³å设å¤, 2: ç½å
³è®¾å¤ |
| | | export enum DeviceTypeEnum { |
| | | DEVICE = 0, // ç´è¿è®¾å¤ |
| | | GATEWAY_SUB = 1, // ç½å
³åè®¾å¤ |
| | | GATEWAY = 2 // ç½å
³è®¾å¤ |
| | | } |
| | | // IOT 产åå®ä½ç±»åæä¸¾ç±» 0: æå¨å®ä½, 1: IP å®ä½, 2: å®ä½æ¨¡åå®ä½ |
| | | export enum LocationTypeEnum { |
| | | IP = 1, // IP å®ä½ |
| | | MODULE = 2, // 设å¤å®ä½ |
| | | MANUAL = 3 // æå¨å®ä½ |
| | | } |
| | | // IOT æ°æ®æ ¼å¼ï¼ç¼è§£ç å¨ç±»åï¼æä¸¾ç±» |
| | | export enum CodecTypeEnum { |
| | | ALINK = 'Alink' // é¿éäº Alink åè®® |
| | | } |
| | | |
| | | // IoT 产å API |
| | | export const ProductApi = { |
| | | // æ¥è¯¢äº§åå页 |
| | | getProductPage: async (params: any) => { |
| | | return await request.get({ url: `/iot/product/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢äº§å详æ
|
| | | getProduct: async (id: number) => { |
| | | return await request.get({ url: `/iot/product/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢äº§å |
| | | createProduct: async (data: ProductVO) => { |
| | | return await request.post({ url: `/iot/product/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹äº§å |
| | | updateProduct: async (data: ProductVO) => { |
| | | return await request.put({ url: `/iot/product/update`, data }) |
| | | }, |
| | | |
| | | // å é¤äº§å |
| | | deleteProduct: async (id: number) => { |
| | | return await request.delete({ url: `/iot/product/delete?id=` + id }) |
| | | }, |
| | | |
| | | // 导åºäº§å Excel |
| | | exportProduct: async (params) => { |
| | | return await request.download({ url: `/iot/product/export-excel`, params }) |
| | | }, |
| | | |
| | | // æ´æ°äº§åç¶æ |
| | | updateProductStatus: async (id: number, status: number) => { |
| | | return await request.put({ url: `/iot/product/update-status?id=` + id + `&status=` + status }) |
| | | }, |
| | | |
| | | // æ¥è¯¢äº§åï¼ç²¾ç®ï¼å表 |
| | | getSimpleProductList() { |
| | | return request.get({ url: '/iot/product/simple-list' }) |
| | | }, |
| | | |
| | | // æ ¹æ® ProductKey è·å产åä¿¡æ¯ |
| | | getProductByKey: async (productKey: string) => { |
| | | return await request.get({ url: `/iot/product/get-by-key`, params: { productKey } }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | /** IoT æ°æ®æµè½¬è§åä¿¡æ¯ */ |
| | | export interface DataRule { |
| | | id: number // åºæ¯ç¼å· |
| | | name?: string // åºæ¯åç§° |
| | | description: string // åºæ¯æè¿° |
| | | status?: number // åºæ¯ç¶æ |
| | | sourceConfigs?: any[] // æ°æ®æºé
ç½®æ°ç» |
| | | sinkIds?: number[] // æ°æ®ç®çç¼å·æ°ç» |
| | | } |
| | | |
| | | // IoT æ°æ®æµè½¬è§å API |
| | | export const DataRuleApi = { |
| | | // æ¥è¯¢æ°æ®æµè½¬è§åå页 |
| | | getDataRulePage: async (params: any) => { |
| | | return await request.get({ url: `/iot/data-rule/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢æ°æ®æµè½¬è§å详æ
|
| | | getDataRule: async (id: number) => { |
| | | return await request.get({ url: `/iot/data-rule/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢æ°æ®æµè½¬è§å |
| | | createDataRule: async (data: DataRule) => { |
| | | return await request.post({ url: `/iot/data-rule/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹æ°æ®æµè½¬è§å |
| | | updateDataRule: async (data: DataRule) => { |
| | | return await request.put({ url: `/iot/data-rule/update`, data }) |
| | | }, |
| | | |
| | | // å 餿°æ®æµè½¬è§å |
| | | deleteDataRule: async (id: number) => { |
| | | return await request.delete({ url: `/iot/data-rule/delete?id=` + id }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // IoT æ°æ®æµè½¬ç®ç VO |
| | | export interface DataSinkVO { |
| | | id?: number // æ¡¥æ¢ç¼å· |
| | | name?: string // æ¡¥æ¢åç§° |
| | | description?: string // æ¡¥æ¢æè¿° |
| | | status?: number // æ¡¥æ¢ç¶æ |
| | | direction?: number // æ¡¥æ¢æ¹å |
| | | type?: number // æ¡¥æ¢ç±»å |
| | | config?: |
| | | | HttpConfig |
| | | | MqttConfig |
| | | | RocketMQConfig |
| | | | KafkaMQConfig |
| | | | RabbitMQConfig |
| | | | RedisStreamMQConfig // æ¡¥æ¢é
ç½® |
| | | } |
| | | |
| | | interface Config { |
| | | type: string |
| | | } |
| | | |
| | | /** HTTP é
ç½® */ |
| | | export interface HttpConfig extends Config { |
| | | url: string |
| | | method: string |
| | | headers: Record<string, string> |
| | | query: Record<string, string> |
| | | body: string |
| | | } |
| | | |
| | | /** MQTT é
ç½® */ |
| | | export interface MqttConfig extends Config { |
| | | url: string |
| | | username: string |
| | | password: string |
| | | clientId: string |
| | | topic: string |
| | | } |
| | | |
| | | /** RocketMQ é
ç½® */ |
| | | export interface RocketMQConfig extends Config { |
| | | nameServer: string |
| | | accessKey: string |
| | | secretKey: string |
| | | group: string |
| | | topic: string |
| | | tags: string |
| | | } |
| | | |
| | | /** Kafka é
ç½® */ |
| | | export interface KafkaMQConfig extends Config { |
| | | bootstrapServers: string |
| | | username: string |
| | | password: string |
| | | ssl: boolean |
| | | topic: string |
| | | } |
| | | |
| | | /** RabbitMQ é
ç½® */ |
| | | export interface RabbitMQConfig extends Config { |
| | | host: string |
| | | port: number |
| | | virtualHost: string |
| | | username: string |
| | | password: string |
| | | exchange: string |
| | | routingKey: string |
| | | queue: string |
| | | } |
| | | |
| | | /** Redis Stream MQ é
ç½® */ |
| | | export interface RedisStreamMQConfig extends Config { |
| | | host: string |
| | | port: number |
| | | password: string |
| | | database: number |
| | | topic: string |
| | | } |
| | | |
| | | /** æ°æ®æµè½¬ç®çç±»å */ |
| | | export const IotDataSinkTypeEnum = { |
| | | HTTP: 1, |
| | | TCP: 2, |
| | | WEBSOCKET: 3, |
| | | MQTT: 10, |
| | | DATABASE: 20, |
| | | REDIS_STREAM: 21, |
| | | ROCKETMQ: 30, |
| | | RABBITMQ: 31, |
| | | KAFKA: 32 |
| | | } as const |
| | | |
| | | // æ°æ®æµè½¬ç®ç API |
| | | export const DataSinkApi = { |
| | | // æ¥è¯¢æ°æ®æµè½¬ç®çå页 |
| | | getDataSinkPage: async (params: any) => { |
| | | return await request.get({ url: `/iot/data-sink/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢æ°æ®æµè½¬ç®ç详æ
|
| | | getDataSink: async (id: number) => { |
| | | return await request.get({ url: `/iot/data-sink/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢æ°æ®æµè½¬ç®ç |
| | | createDataSink: async (data: DataSinkVO) => { |
| | | return await request.post({ url: `/iot/data-sink/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹æ°æ®æµè½¬ç®ç |
| | | updateDataSink: async (data: DataSinkVO) => { |
| | | return await request.put({ url: `/iot/data-sink/update`, data }) |
| | | }, |
| | | |
| | | // å 餿°æ®æµè½¬ç®ç |
| | | deleteDataSink: async (id: number) => { |
| | | return await request.delete({ url: `/iot/data-sink/delete?id=` + id }) |
| | | }, |
| | | |
| | | // æ¥è¯¢æ°æ®æµè½¬ç®çï¼ç²¾ç®ï¼å表 |
| | | getDataSinkSimpleList() { |
| | | return request.get({ url: '/iot/data-sink/simple-list' }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // åºæ¯èå¨ |
| | | export interface IotSceneRule { |
| | | id?: number // åºæ¯ç¼å· |
| | | name: string // åºæ¯åç§° |
| | | description?: string // åºæ¯æè¿° |
| | | status: number // åºæ¯ç¶æï¼0-å¼å¯ï¼1-å
³é |
| | | triggers: Trigger[] // 触å卿°ç» |
| | | actions: Action[] // æ§è¡å¨æ°ç» |
| | | } |
| | | |
| | | // 触åå¨ç»æ |
| | | export interface Trigger { |
| | | type: number // 触åç±»å |
| | | productId?: number // 产åç¼å· |
| | | deviceId?: number // 设å¤ç¼å· |
| | | identifier?: string // ç©æ¨¡åæ è¯ç¬¦ |
| | | operator?: string // æä½ç¬¦ |
| | | value?: string // åæ°å¼ |
| | | cronExpression?: string // CRON è¡¨è¾¾å¼ |
| | | conditionGroups?: TriggerCondition[][] // æ¡ä»¶ç»ï¼äºç»´æ°ç»ï¼ |
| | | } |
| | | |
| | | // è§¦åæ¡ä»¶ç»æ |
| | | export interface TriggerCondition { |
| | | type: number // æ¡ä»¶ç±»åï¼1-设å¤ç¶æï¼2-设å¤å±æ§ï¼3-å½åæ¶é´ |
| | | productId?: number // 产åç¼å· |
| | | deviceId?: number // 设å¤ç¼å· |
| | | identifier?: string // æ è¯ç¬¦ |
| | | operator: string // æä½ç¬¦ |
| | | param: string // åæ° |
| | | } |
| | | |
| | | // æ§è¡å¨ç»æ |
| | | export interface Action { |
| | | type: number // æ§è¡ç±»å |
| | | productId?: number // 产åç¼å· |
| | | deviceId?: number // 设å¤ç¼å· |
| | | identifier?: string // ç©æ¨¡åæ è¯ç¬¦ï¼æå¡è°ç¨æ¶ä½¿ç¨ï¼ |
| | | params?: string // 请æ±åæ° |
| | | alertConfigId?: number // åè¦é
ç½®ç¼å· |
| | | } |
| | | |
| | | // IoT åºæ¯èå¨ API |
| | | export const RuleSceneApi = { |
| | | // æ¥è¯¢åºæ¯èå¨å页 |
| | | getRuleScenePage: async (params: any) => { |
| | | return await request.get({ url: `/iot/scene-rule/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢åºæ¯èå¨è¯¦æ
|
| | | getRuleScene: async (id: number) => { |
| | | return await request.get({ url: `/iot/scene-rule/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢åºæ¯èå¨ |
| | | createRuleScene: async (data: IotSceneRule) => { |
| | | return await request.post({ url: `/iot/scene-rule/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹åºæ¯èå¨ |
| | | updateRuleScene: async (data: IotSceneRule) => { |
| | | return await request.put({ url: `/iot/scene-rule/update`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹åºæ¯èå¨ |
| | | updateRuleSceneStatus: async (id: number, status: number) => { |
| | | return await request.put({ |
| | | url: `/iot/scene-rule/update-status`, |
| | | data: { |
| | | id, |
| | | status |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | // å é¤åºæ¯èå¨ |
| | | deleteRuleScene: async (id: number) => { |
| | | return await request.delete({ url: `/iot/scene-rule/delete?id=` + id }) |
| | | }, |
| | | |
| | | // è·ååºæ¯èå¨ç®åå表 |
| | | getSimpleRuleSceneList: async () => { |
| | | return await request.get({ url: `/iot/scene-rule/simple-list` }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | /** IoT ç»è®¡æ°æ®ç±»å */ |
| | | export interface IotStatisticsSummaryRespVO { |
| | | productCategoryCount: number |
| | | productCount: number |
| | | deviceCount: number |
| | | deviceMessageCount: number |
| | | productCategoryTodayCount: number |
| | | productTodayCount: number |
| | | deviceTodayCount: number |
| | | deviceMessageTodayCount: number |
| | | deviceOnlineCount: number |
| | | deviceOfflineCount: number |
| | | deviceInactiveCount: number |
| | | productCategoryDeviceCounts: Record<string, number> |
| | | } |
| | | |
| | | /** æ¶é´æ³-æ°å¼çé®å¼å¯¹ç±»å */ |
| | | interface TimeValueItem { |
| | | [key: string]: number |
| | | } |
| | | |
| | | /** IoT æ¶æ¯ç»è®¡æ°æ®ç±»å */ |
| | | export interface IotStatisticsDeviceMessageSummaryRespVO { |
| | | statType: number |
| | | upstreamCounts: TimeValueItem[] |
| | | downstreamCounts: TimeValueItem[] |
| | | } |
| | | |
| | | /** æ°çæ¶æ¯ç»è®¡æ°æ®é¡¹ */ |
| | | export interface IotStatisticsDeviceMessageSummaryByDateRespVO { |
| | | time: string |
| | | upstreamCount: number |
| | | downstreamCount: number |
| | | } |
| | | |
| | | /** æ°çæ¶æ¯ç»è®¡æ¥å£åæ° */ |
| | | export interface IotStatisticsDeviceMessageReqVO { |
| | | interval: number |
| | | times?: string[] |
| | | } |
| | | |
| | | // IoT æ°æ®ç»è®¡ API |
| | | export const StatisticsApi = { |
| | | // æ¥è¯¢å
¨å±çæ°æ®ç»è®¡ |
| | | getStatisticsSummary: async () => { |
| | | return await request.get<IotStatisticsSummaryRespVO>({ |
| | | url: `/iot/statistics/get-summary` |
| | | }) |
| | | }, |
| | | |
| | | // è·åè®¾å¤æ¶æ¯çæ°æ®ç»è®¡ |
| | | getDeviceMessageSummaryByDate: async (params: IotStatisticsDeviceMessageReqVO) => { |
| | | return await request.get<IotStatisticsDeviceMessageSummaryByDateRespVO[]>({ |
| | | url: `/iot/statistics/get-device-message-summary-by-date`, |
| | | params |
| | | }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import { isEmpty } from '@/utils/is' |
| | | |
| | | /** |
| | | * IoT 产åç©æ¨¡å |
| | | */ |
| | | export interface ThingModelData { |
| | | id?: number // ç©æ¨¡ååè½ç¼å· |
| | | identifier?: string // åè½æ è¯ |
| | | name?: string // åè½åç§° |
| | | description?: string // åè½æè¿° |
| | | productId?: number // 产åç¼å· |
| | | productKey?: string // äº§åæ è¯ |
| | | dataType: string // æ°æ®ç±»åï¼ä¸ dataSpecs ç dataType ä¿æä¸è´ |
| | | type: number // åè½ç±»å |
| | | property: ThingModelProperty // 屿§ |
| | | event?: ThingModelEvent // äºä»¶ |
| | | service?: ThingModelService // æå¡ |
| | | } |
| | | |
| | | /** |
| | | * ThingModelProperty ç±»å |
| | | */ |
| | | export interface ThingModelProperty { |
| | | [key: string]: any |
| | | } |
| | | |
| | | /** |
| | | * ThingModelEvent ç±»å |
| | | */ |
| | | export interface ThingModelEvent { |
| | | [key: string]: any |
| | | } |
| | | |
| | | /** |
| | | * ThingModelService ç±»å |
| | | */ |
| | | export interface ThingModelService { |
| | | [key: string]: any |
| | | } |
| | | |
| | | /** dataSpecs æ°å¼åæ°æ®ç»æ */ |
| | | export interface DataSpecsNumberData { |
| | | dataType: 'int' | 'float' | 'double' // æ°æ®ç±»åï¼åå¼ä¸º INTãFLOAT æ DOUBLE |
| | | max: string // æå¤§å¼ï¼å¿
é¡»ä¸ dataType 设置ä¸è´ï¼ä¸ä¸º STRING ç±»å |
| | | min: string // æå°å¼ï¼å¿
é¡»ä¸ dataType 设置ä¸è´ï¼ä¸ä¸º STRING ç±»å |
| | | step: string // æ¥é¿ï¼å¿
é¡»ä¸ dataType 设置ä¸è´ï¼ä¸ä¸º STRING ç±»å |
| | | precise?: string // 精度ï¼å½ dataType 为 FLOAT æ DOUBLE æ¶å¯é |
| | | defaultValue?: string // é»è®¤å¼ï¼å¯é |
| | | unit: string // åä½çç¬¦å· |
| | | unitName: string // åä½çåç§° |
| | | } |
| | | |
| | | /** dataSpecs æä¸¾åæ°æ®ç»æ */ |
| | | export interface DataSpecsEnumOrBoolData { |
| | | dataType: 'enum' | 'bool' |
| | | defaultValue?: string // é»è®¤å¼ï¼å¯é |
| | | name: string // æä¸¾é¡¹çåç§° |
| | | value: number | undefined // æä¸¾å¼ |
| | | } |
| | | |
| | | /** ç©æ¨¡åTSLååºæ°æ®ç»æ */ |
| | | export interface IotThingModelTSLResp { |
| | | productId: number |
| | | productKey: string |
| | | properties: ThingModelProperty[] |
| | | events: ThingModelEvent[] |
| | | services: ThingModelService[] |
| | | } |
| | | |
| | | /** ç©æ¨¡å屿§ */ |
| | | export interface ThingModelProperty { |
| | | identifier: string |
| | | name: string |
| | | accessMode: string |
| | | required?: boolean |
| | | dataType: string |
| | | description?: string |
| | | dataSpecs?: ThingModelProperty |
| | | dataSpecsList?: ThingModelProperty[] |
| | | } |
| | | |
| | | /** ç©æ¨¡åäºä»¶ */ |
| | | export interface ThingModelEvent { |
| | | identifier: string |
| | | name: string |
| | | required?: boolean |
| | | type: string |
| | | description?: string |
| | | outputParams?: ThingModelParam[] |
| | | method?: string |
| | | } |
| | | |
| | | /** ç©æ¨¡åæå¡ */ |
| | | export interface ThingModelService { |
| | | identifier: string |
| | | name: string |
| | | required?: boolean |
| | | callType: string |
| | | description?: string |
| | | inputParams?: ThingModelParam[] |
| | | outputParams?: ThingModelParam[] |
| | | method?: string |
| | | } |
| | | |
| | | /** ç©æ¨¡ååæ° */ |
| | | export interface ThingModelParam { |
| | | identifier: string |
| | | name: string |
| | | direction: string |
| | | paraOrder?: number |
| | | dataType: string |
| | | dataSpecs?: ThingModelProperty |
| | | dataSpecsList?: ThingModelProperty[] |
| | | } |
| | | |
| | | /** æ°å¼åæ°æ®è§è */ |
| | | export interface ThingModelNumericDataSpec { |
| | | dataType: 'int' | 'float' | 'double' |
| | | max: string |
| | | min: string |
| | | step: string |
| | | precise?: string |
| | | defaultValue?: string |
| | | unit?: string |
| | | unitName?: string |
| | | } |
| | | |
| | | /** å¸å°/æä¸¾åæ°æ®è§è */ |
| | | export interface ThingModelBoolOrEnumDataSpecs { |
| | | dataType: 'bool' | 'enum' |
| | | name: string |
| | | value: number |
| | | } |
| | | |
| | | /** ææ¬/æ¶é´åæ°æ®è§è */ |
| | | export interface ThingModelDateOrTextDataSpecs { |
| | | dataType: 'text' | 'date' |
| | | length?: number |
| | | defaultValue?: string |
| | | } |
| | | |
| | | /** æ°ç»åæ°æ®è§è */ |
| | | export interface ThingModelArrayDataSpecs { |
| | | dataType: 'array' |
| | | size: number |
| | | childDataType: string |
| | | dataSpecsList?: ThingModelProperty[] |
| | | } |
| | | |
| | | /** ç»æä½åæ°æ®è§è */ |
| | | export interface ThingModelStructDataSpecs { |
| | | dataType: 'struct' |
| | | identifier: string |
| | | name: string |
| | | accessMode: string |
| | | required?: boolean |
| | | childDataType: string |
| | | dataSpecs?: ThingModelProperty |
| | | dataSpecsList?: ThingModelProperty[] |
| | | } |
| | | |
| | | // IoT 产åç©æ¨¡å API |
| | | export const ThingModelApi = { |
| | | // æ¥è¯¢äº§åç©æ¨¡åå页 |
| | | getThingModelPage: async (params: any) => { |
| | | return await request.get({ url: `/iot/thing-model/page`, params }) |
| | | }, |
| | | |
| | | // è·å¾äº§åç©æ¨¡åå表 |
| | | getThingModelList: async (params: any) => { |
| | | return await request.get({ url: `/iot/thing-model/list`, params }) |
| | | }, |
| | | |
| | | // è·å¾äº§åç©æ¨¡å TSL |
| | | getThingModelTSLByProductId: async (productId: number) => { |
| | | return await request.get({ |
| | | url: `/iot/thing-model/get-tsl?productId=${productId}` |
| | | }) |
| | | }, |
| | | |
| | | // æ¥è¯¢äº§åç©æ¨¡å详æ
|
| | | getThingModel: async (id: number) => { |
| | | return await request.get({ url: `/iot/thing-model/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢äº§åç©æ¨¡å |
| | | createThingModel: async (data: ThingModelData) => { |
| | | return await request.post({ url: `/iot/thing-model/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹äº§åç©æ¨¡å |
| | | updateThingModel: async (data: ThingModelData) => { |
| | | return await request.put({ url: `/iot/thing-model/update`, data }) |
| | | }, |
| | | |
| | | // å é¤äº§åç©æ¨¡å |
| | | deleteThingModel: async (id: number) => { |
| | | return await request.delete({ url: `/iot/thing-model/delete?id=` + id }) |
| | | } |
| | | } |
| | | |
| | | /** å
Œ
±æ ¡éªè§å */ |
| | | export const ThingModelFormRules = { |
| | | name: [ |
| | | { required: true, message: 'åè½åç§°ä¸è½ä¸ºç©º', trigger: 'blur' }, |
| | | { |
| | | pattern: /^[\u4e00-\u9fa5a-zA-Z0-9][\u4e00-\u9fa5a-zA-Z0-9\-_/\.]{0,29}$/, |
| | | message: |
| | | 'æ¯æä¸æã大å°ååæ¯ãæ¥æãæ°åãçå线ãä¸åçº¿ãææ åå°æ°ç¹ï¼å¿
须以䏿ãè±æææ°åå¼å¤´ï¼ä¸è¶
è¿ 30 个å符', |
| | | trigger: 'blur' |
| | | } |
| | | ], |
| | | type: [{ required: true, message: 'åè½ç±»åä¸è½ä¸ºç©º', trigger: 'blur' }], |
| | | identifier: [ |
| | | { required: true, message: 'æ è¯ç¬¦ä¸è½ä¸ºç©º', trigger: 'blur' }, |
| | | { |
| | | pattern: /^[a-zA-Z0-9_]{1,50}$/, |
| | | message: 'æ¯æå¤§å°ååæ¯ãæ°ååä¸å线ï¼ä¸è¶
è¿ 50 个å符', |
| | | trigger: 'blur' |
| | | }, |
| | | { |
| | | validator: (_: any, value: string, callback: any) => { |
| | | const reservedKeywords = ['set', 'get', 'post', 'property', 'event', 'time', 'value'] |
| | | if (reservedKeywords.includes(value)) { |
| | | callback( |
| | | new Error( |
| | | 'set, get, post, property, event, time, value æ¯ç³»ç»ä¿çåæ®µï¼ä¸è½ç¨äºæ è¯ç¬¦å®ä¹' |
| | | ) |
| | | ) |
| | | } else if (/^\d+$/.test(value)) { |
| | | callback(new Error('æ è¯ç¬¦ä¸è½æ¯çº¯æ°å')) |
| | | } else { |
| | | callback() |
| | | } |
| | | }, |
| | | trigger: 'blur' |
| | | } |
| | | ], |
| | | 'property.dataSpecs.childDataType': [{ required: true, message: 'å
ç´ ç±»åä¸è½ä¸ºç©º' }], |
| | | 'property.dataSpecs.size': [ |
| | | { required: true, message: 'å
ç´ ä¸ªæ°ä¸è½ä¸ºç©º' }, |
| | | { |
| | | validator: (_: any, value: any, callback: any) => { |
| | | if (isEmpty(value)) { |
| | | callback(new Error('å
ç´ ä¸ªæ°ä¸è½ä¸ºç©º')) |
| | | return |
| | | } |
| | | if (isNaN(Number(value))) { |
| | | callback(new Error('å
ç´ ä¸ªæ°å¿
é¡»æ¯æ°å')) |
| | | return |
| | | } |
| | | callback() |
| | | }, |
| | | trigger: 'blur' |
| | | } |
| | | ], |
| | | 'property.dataSpecs.length': [ |
| | | { required: true, message: '请è¾å
¥ææ¬åèé¿åº¦', trigger: 'blur' }, |
| | | { |
| | | validator: (_: any, value: any, callback: any) => { |
| | | if (isEmpty(value)) { |
| | | callback(new Error('ææ¬é¿åº¦ä¸è½ä¸ºç©º')) |
| | | return |
| | | } |
| | | if (isNaN(Number(value))) { |
| | | callback(new Error('ææ¬é¿åº¦å¿
é¡»æ¯æ°å')) |
| | | return |
| | | } |
| | | callback() |
| | | }, |
| | | trigger: 'blur' |
| | | } |
| | | ], |
| | | 'property.accessMode': [{ required: true, message: 'è¯·éæ©è¯»åç±»å', trigger: 'change' }] |
| | | } |
| | | |
| | | /** æ ¡éªå¸å°å¼åç§° */ |
| | | export const validateBoolName = (_: any, value: string, callback: any) => { |
| | | if (isEmpty(value)) { |
| | | callback(new Error('å¸å°å¼åç§°ä¸è½ä¸ºç©º')) |
| | | return |
| | | } |
| | | // æ£æ¥å¼å¤´å符 |
| | | if (!/^[\u4e00-\u9fa5a-zA-Z0-9]/.test(value)) { |
| | | callback(new Error('å¸å°å¼åç§°å¿
须以䏿ãè±æåæ¯ææ°åå¼å¤´')) |
| | | return |
| | | } |
| | | // æ£æ¥æ´ä½æ ¼å¼ |
| | | if (!/^[\u4e00-\u9fa5a-zA-Z0-9][a-zA-Z0-9\u4e00-\u9fa5_-]*$/.test(value)) { |
| | | callback(new Error('å¸å°å¼åç§°åªè½å
å«ä¸æãè±æåæ¯ãæ°åãä¸å线åçå线')) |
| | | return |
| | | } |
| | | // æ£æ¥é¿åº¦ï¼ä¸ä¸ªä¸æç®ä¸ä¸ªåç¬¦ï¼ |
| | | if (value.length > 20) { |
| | | callback(new Error('å¸å°å¼åç§°é¿åº¦ä¸è½è¶
è¿ 20 个å符')) |
| | | return |
| | | } |
| | | |
| | | callback() |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import type { RegisterVO, UserLoginVO } from './types' |
| | | |
| | | export interface SmsCodeVO { |
| | | mobile: string |
| | | scene: number |
| | | } |
| | | |
| | | export interface SmsLoginVO { |
| | | mobile: string |
| | | code: string |
| | | } |
| | | |
| | | // ç»å½ |
| | | export const login = (data: UserLoginVO) => { |
| | | return request.post({ |
| | | url: '/system/auth/login', |
| | | data, |
| | | headers: { |
| | | isEncrypt: false |
| | | } |
| | | }) |
| | | } |
| | | |
| | | // 注å |
| | | export const register = (data: RegisterVO) => { |
| | | return request.post({ url: '/system/auth/register', data }) |
| | | } |
| | | |
| | | // 使ç¨ç§æ·åï¼è·å¾ç§æ·ç¼å· |
| | | export const getTenantIdByName = (name: string) => { |
| | | return request.get({ url: '/system/tenant/get-id-by-name?name=' + name }) |
| | | } |
| | | |
| | | // 使ç¨ç§æ·ååï¼è·å¾ç§æ·ä¿¡æ¯ |
| | | export const getTenantByWebsite = (website: string) => { |
| | | return request.get({ url: '/system/tenant/get-by-website?website=' + website }) |
| | | } |
| | | |
| | | // ç»åº |
| | | export const loginOut = () => { |
| | | return request.post({ url: '/system/auth/logout' }) |
| | | } |
| | | |
| | | // è·åç¨æ·æéä¿¡æ¯ |
| | | export const getInfo = () => { |
| | | return request.get({ url: '/system/auth/get-permission-info' }) |
| | | } |
| | | |
| | | //è·åç»å½éªè¯ç |
| | | export const sendSmsCode = (data: SmsCodeVO) => { |
| | | return request.post({ url: '/system/auth/send-sms-code', data }) |
| | | } |
| | | |
| | | // çä¿¡éªè¯ç ç»å½ |
| | | export const smsLogin = (data: SmsLoginVO) => { |
| | | return request.post({ url: '/system/auth/sms-login', data }) |
| | | } |
| | | |
| | | // 社交快æ·ç»å½ï¼ä½¿ç¨ code ææç |
| | | export function socialLogin(type: string, code: string, state: string) { |
| | | return request.post({ |
| | | url: '/system/auth/social-login', |
| | | data: { |
| | | type, |
| | | code, |
| | | state |
| | | } |
| | | }) |
| | | } |
| | | |
| | | // 社交ææç跳转 |
| | | export const socialAuthRedirect = (type: number, redirectUri: string) => { |
| | | return request.get({ |
| | | url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri |
| | | }) |
| | | } |
| | | // è·åéªè¯å¾ç以å token |
| | | export const getCode = (data: any) => { |
| | | return request.postOriginal({ url: 'system/captcha/get', data }) |
| | | } |
| | | |
| | | // æ»å¨æè
ç¹ééªè¯ |
| | | export const reqCheck = (data: any) => { |
| | | return request.postOriginal({ url: 'system/captcha/check', data }) |
| | | } |
| | | |
| | | // éè¿çä¿¡éç½®å¯ç |
| | | export const smsResetPassword = (data: any) => { |
| | | return request.post({ url: '/system/auth/reset-password', data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // è·å¾ææä¿¡æ¯ |
| | | export const getAuthorize = (clientId: string) => { |
| | | return request.get({ url: '/system/oauth2/authorize?clientId=' + clientId }) |
| | | } |
| | | |
| | | // åèµ·ææ |
| | | export const authorize = ( |
| | | responseType: string, |
| | | clientId: string, |
| | | redirectUri: string, |
| | | state: string, |
| | | autoApprove: boolean, |
| | | checkedScopes: string[], |
| | | uncheckedScopes: string[] |
| | | ) => { |
| | | // æå»º scopes |
| | | const scopes = {} |
| | | for (const scope of checkedScopes) { |
| | | scopes[scope] = true |
| | | } |
| | | for (const scope of uncheckedScopes) { |
| | | scopes[scope] = false |
| | | } |
| | | // åèµ·è¯·æ± |
| | | return request.post({ |
| | | url: '/system/oauth2/authorize', |
| | | headers: { |
| | | 'Content-Type': 'application/x-www-form-urlencoded' |
| | | }, |
| | | params: { |
| | | response_type: responseType, |
| | | client_id: clientId, |
| | | redirect_uri: redirectUri, |
| | | state: state, |
| | | auto_approve: autoApprove, |
| | | scope: JSON.stringify(scopes) |
| | | } |
| | | }) |
| | | } |
| New file |
| | |
| | | export type UserLoginVO = { |
| | | username: string |
| | | password: string |
| | | captchaVerification: string |
| | | socialType?: string |
| | | socialCode?: string |
| | | socialState?: string |
| | | } |
| | | |
| | | export type TokenType = { |
| | | id: number // ç¼å· |
| | | accessToken: string // 访é®ä»¤ç |
| | | refreshToken: string // å·æ°ä»¤ç |
| | | userId: number // ç¨æ·ç¼å· |
| | | userType: number //ç¨æ·ç±»å |
| | | clientId: string //客æ·ç«¯ç¼å· |
| | | expiresTime: number //è¿ææ¶é´ |
| | | } |
| | | |
| | | export type UserVO = { |
| | | id: number |
| | | username: string |
| | | nickname: string |
| | | deptId: number |
| | | email: string |
| | | mobile: string |
| | | sex: number |
| | | avatar: string |
| | | loginIp: string |
| | | loginDate: string |
| | | } |
| | | |
| | | export type RegisterVO = { |
| | | tenantName: string |
| | | username: string |
| | | password: string |
| | | captchaVerification: string |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface BannerVO { |
| | | id: number |
| | | title: string |
| | | picUrl: string |
| | | status: number |
| | | url: string |
| | | position: number |
| | | sort: number |
| | | memo: string |
| | | } |
| | | |
| | | // æ¥è¯¢Banner管çå表 |
| | | export const getBannerPage = async (params) => { |
| | | return await request.get({ url: `/promotion/banner/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢Banner管ç详æ
|
| | | export const getBanner = async (id: number) => { |
| | | return await request.get({ url: `/promotion/banner/get?id=` + id }) |
| | | } |
| | | |
| | | // æ°å¢Banner管ç |
| | | export const createBanner = async (data: BannerVO) => { |
| | | return await request.post({ url: `/promotion/banner/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹Banner管ç |
| | | export const updateBanner = async (data: BannerVO) => { |
| | | return await request.put({ url: `/promotion/banner/update`, data }) |
| | | } |
| | | |
| | | // å é¤Banner管ç |
| | | export const deleteBanner = async (id: number) => { |
| | | return await request.delete({ url: `/promotion/banner/delete?id=` + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | /** |
| | | * åååç |
| | | */ |
| | | export interface BrandVO { |
| | | /** |
| | | * åçç¼å· |
| | | */ |
| | | id?: number |
| | | /** |
| | | * åçåç§° |
| | | */ |
| | | name: string |
| | | /** |
| | | * åçå¾ç |
| | | */ |
| | | picUrl: string |
| | | /** |
| | | * åçæåº |
| | | */ |
| | | sort?: number |
| | | /** |
| | | * åçæè¿° |
| | | */ |
| | | description?: string |
| | | /** |
| | | * å¼å¯ç¶æ |
| | | */ |
| | | status: number |
| | | } |
| | | |
| | | // å建åååç |
| | | export const createBrand = (data: BrandVO) => { |
| | | return request.post({ url: '/product/brand/create', data }) |
| | | } |
| | | |
| | | // æ´æ°åååç |
| | | export const updateBrand = (data: BrandVO) => { |
| | | return request.put({ url: '/product/brand/update', data }) |
| | | } |
| | | |
| | | // å é¤åååç |
| | | export const deleteBrand = (id: number) => { |
| | | return request.delete({ url: `/product/brand/delete?id=${id}` }) |
| | | } |
| | | |
| | | // è·å¾åååç |
| | | export const getBrand = (id: number) => { |
| | | return request.get({ url: `/product/brand/get?id=${id}` }) |
| | | } |
| | | |
| | | // è·å¾åååçå表 |
| | | export const getBrandParam = (params: PageParam) => { |
| | | return request.get({ url: '/product/brand/page', params }) |
| | | } |
| | | |
| | | // è·å¾åååçç²¾ç®ä¿¡æ¯å表 |
| | | export const getSimpleBrandList = () => { |
| | | return request.get({ url: '/product/brand/list-all-simple' }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | /** |
| | | * 产ååç±» |
| | | */ |
| | | export interface CategoryVO { |
| | | /** |
| | | * åç±»ç¼å· |
| | | */ |
| | | id?: number |
| | | /** |
| | | * ç¶åç±»ç¼å· |
| | | */ |
| | | parentId?: number |
| | | /** |
| | | * åç±»åç§° |
| | | */ |
| | | name: string |
| | | /** |
| | | * ç§»å¨ç«¯åç±»å¾ |
| | | */ |
| | | picUrl: string |
| | | /** |
| | | * åç±»æåº |
| | | */ |
| | | sort: number |
| | | /** |
| | | * å¼å¯ç¶æ |
| | | */ |
| | | status: number |
| | | } |
| | | |
| | | // å建åååç±» |
| | | export const createCategory = (data: CategoryVO) => { |
| | | return request.post({ url: '/product/category/create', data }) |
| | | } |
| | | |
| | | // æ´æ°åååç±» |
| | | export const updateCategory = (data: CategoryVO) => { |
| | | return request.put({ url: '/product/category/update', data }) |
| | | } |
| | | |
| | | // å é¤åååç±» |
| | | export const deleteCategory = (id: number) => { |
| | | return request.delete({ url: `/product/category/delete?id=${id}` }) |
| | | } |
| | | |
| | | // è·å¾åååç±» |
| | | export const getCategory = (id: number) => { |
| | | return request.get({ url: `/product/category/get?id=${id}` }) |
| | | } |
| | | |
| | | // è·å¾åååç±»å表 |
| | | export const getCategoryList = (params: any) => { |
| | | return request.get({ url: '/product/category/list', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface CommentVO { |
| | | id: number |
| | | userId: number |
| | | userNickname: string |
| | | userAvatar: string |
| | | anonymous: boolean |
| | | orderId: number |
| | | orderItemId: number |
| | | spuId: number |
| | | spuName: string |
| | | skuId: number |
| | | visible: boolean |
| | | scores: number |
| | | descriptionScores: number |
| | | benefitScores: number |
| | | content: string |
| | | picUrls: string |
| | | replyStatus: boolean |
| | | replyUserId: number |
| | | replyContent: string |
| | | replyTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢ååè¯è®ºå表 |
| | | export const getCommentPage = async (params) => { |
| | | return await request.get({ url: `/product/comment/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ååè¯è®ºè¯¦æ
|
| | | export const getComment = async (id: number) => { |
| | | return await request.get({ url: `/product/comment/get?id=` + id }) |
| | | } |
| | | |
| | | // æ·»å èªè¯ |
| | | export const createComment = async (data: CommentVO) => { |
| | | return await request.post({ url: `/product/comment/create`, data }) |
| | | } |
| | | |
| | | // æ¾ç¤º / éèè¯è®º |
| | | export const updateCommentVisible = async (data: any) => { |
| | | return await request.put({ url: `/product/comment/update-visible`, data }) |
| | | } |
| | | |
| | | // åå®¶åå¤ |
| | | export const replyComment = async (data: any) => { |
| | | return await request.put({ url: `/product/comment/reply`, data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface Favorite { |
| | | id?: number |
| | | userId?: string // ç¨æ·ç¼å· |
| | | spuId?: number | null // åå SPU ç¼å· |
| | | } |
| | | |
| | | // è·å¾ ProductFavorite å表 |
| | | export const getFavoritePage = (params: PageParam) => { |
| | | return request.get({ url: '/product/favorite/page', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | /** |
| | | * è·å¾ååæµè§è®°å½å页 |
| | | * |
| | | * @param params 请æ±åæ° |
| | | */ |
| | | export const getBrowseHistoryPage = (params: any) => { |
| | | return request.get({ url: '/product/browse-history/page', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | /** |
| | | * åå屿§ |
| | | */ |
| | | export interface PropertyVO { |
| | | id?: number |
| | | /** åç§° */ |
| | | name: string |
| | | /** 夿³¨ */ |
| | | remark?: string |
| | | } |
| | | |
| | | /** |
| | | * 屿§å¼ |
| | | */ |
| | | export interface PropertyValueVO { |
| | | id?: number |
| | | /** 屿§é¡¹çç¼å· */ |
| | | propertyId?: number |
| | | /** åç§° */ |
| | | name: string |
| | | /** 夿³¨ */ |
| | | remark?: string |
| | | } |
| | | |
| | | // ------------------------ 屿§é¡¹ ------------------- |
| | | |
| | | // åå»ºå±æ§é¡¹ |
| | | export const createProperty = (data: PropertyVO) => { |
| | | return request.post({ url: '/product/property/create', data }) |
| | | } |
| | | |
| | | // æ´æ°å±æ§é¡¹ |
| | | export const updateProperty = (data: PropertyVO) => { |
| | | return request.put({ url: '/product/property/update', data }) |
| | | } |
| | | |
| | | // å é¤å±æ§é¡¹ |
| | | export const deleteProperty = (id: number) => { |
| | | return request.delete({ url: `/product/property/delete?id=${id}` }) |
| | | } |
| | | |
| | | // è·å¾å±æ§é¡¹ |
| | | export const getProperty = (id: number): Promise<PropertyVO> => { |
| | | return request.get({ url: `/product/property/get?id=${id}` }) |
| | | } |
| | | |
| | | // è·å¾å±æ§é¡¹å页 |
| | | export const getPropertyPage = (params: PageParam) => { |
| | | return request.get({ url: '/product/property/page', params }) |
| | | } |
| | | |
| | | // è·å¾å±æ§é¡¹ç²¾ç®å表 |
| | | export const getPropertySimpleList = (): Promise<PropertyVO[]> => { |
| | | return request.get({ url: '/product/property/simple-list' }) |
| | | } |
| | | |
| | | // ------------------------ 屿§å¼ ------------------- |
| | | |
| | | // è·å¾å±æ§å¼å页 |
| | | export const getPropertyValuePage = (params: PageParam & any) => { |
| | | return request.get({ url: '/product/property/value/page', params }) |
| | | } |
| | | |
| | | // è·å¾å±æ§å¼ |
| | | export const getPropertyValue = (id: number): Promise<PropertyValueVO> => { |
| | | return request.get({ url: `/product/property/value/get?id=${id}` }) |
| | | } |
| | | |
| | | // åå»ºå±æ§å¼ |
| | | export const createPropertyValue = (data: PropertyValueVO) => { |
| | | return request.post({ url: '/product/property/value/create', data }) |
| | | } |
| | | |
| | | // æ´æ°å±æ§å¼ |
| | | export const updatePropertyValue = (data: PropertyValueVO) => { |
| | | return request.put({ url: '/product/property/value/update', data }) |
| | | } |
| | | |
| | | // å é¤å±æ§å¼ |
| | | export const deletePropertyValue = (id: number) => { |
| | | return request.delete({ url: `/product/property/value/delete?id=${id}` }) |
| | | } |
| | | |
| | | // è·å¾å±æ§å¼ç²¾ç®å表 |
| | | export const getPropertyValueSimpleList = (propertyId: number): Promise<PropertyValueVO[]> => { |
| | | return request.get({ url: '/product/property/value/simple-list', params: { propertyId } }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface Property { |
| | | propertyId?: number // 屿§ç¼å· |
| | | propertyName?: string // 屿§åç§° |
| | | valueId?: number // 屿§å¼ç¼å· |
| | | valueName?: string // 屿§å¼åç§° |
| | | } |
| | | |
| | | export interface Sku { |
| | | id?: number // åå SKU ç¼å· |
| | | name?: string // åå SKU åç§° |
| | | spuId?: number // SPU ç¼å· |
| | | properties?: Property[] // 屿§æ°ç» |
| | | price?: number | string // ååä»·æ ¼ |
| | | marketPrice?: number | string // å¸åºä»· |
| | | costPrice?: number | string // ææ¬ä»· |
| | | barCode?: string // ååæ¡ç |
| | | picUrl?: string // å¾çå°å |
| | | stock?: number // åºå |
| | | weight?: number // ååééï¼åä½ï¼kg åå
|
| | | volume?: number // ååä½ç§¯ï¼åä½ï¼m^3 平米 |
| | | firstBrokeragePrice?: number | string // ä¸çº§åéçä½£é |
| | | secondBrokeragePrice?: number | string // äºçº§åéçä½£é |
| | | salesCount?: number // ååéé |
| | | } |
| | | |
| | | export interface GiveCouponTemplate { |
| | | id?: number |
| | | name?: string // 伿 å¸åç§° |
| | | } |
| | | |
| | | export interface Spu { |
| | | id?: number |
| | | name?: string // åååç§° |
| | | categoryId?: number // åååç±» |
| | | keyword?: string // å
³é®å |
| | | unit?: number | undefined // åä½ |
| | | picUrl?: string // ååå°é¢å¾ |
| | | sliderPicUrls?: string[] // ååè½®æå¾ |
| | | introduction?: string // ååç®ä» |
| | | deliveryTypes?: number[] // é
éæ¹å¼ |
| | | deliveryTemplateId?: number | undefined // è¿è´¹æ¨¡ç |
| | | brandId?: number // åååçç¼å· |
| | | specType?: boolean // ååè§æ ¼ |
| | | subCommissionType?: boolean // åéç±»å |
| | | skus?: Sku[] // skuæ°ç» |
| | | description?: string // åå详æ
|
| | | sort?: number // ååæåº |
| | | giveIntegral?: number // èµ é积å |
| | | virtualSalesCount?: number // èæéé |
| | | price?: number // ååä»·æ ¼ |
| | | combinationPrice?: number // ååæ¼å¢ä»·æ ¼ |
| | | seckillPrice?: number // ååç§æä»·æ ¼ |
| | | salesCount?: number // ååéé |
| | | marketPrice?: number // å¸åºä»· |
| | | costPrice?: number // ææ¬ä»· |
| | | stock?: number // åååºå |
| | | createTime?: Date // ååå建æ¶é´ |
| | | status?: number // ååç¶æ |
| | | } |
| | | |
| | | // è·å¾ Spu å表 |
| | | export const getSpuPage = (params: PageParam) => { |
| | | return request.get({ url: '/product/spu/page', params }) |
| | | } |
| | | |
| | | // è·å¾ Spu å表 tabsCount |
| | | export const getTabsCount = () => { |
| | | return request.get({ url: '/product/spu/get-count' }) |
| | | } |
| | | |
| | | // å建åå Spu |
| | | export const createSpu = (data: Spu) => { |
| | | return request.post({ url: '/product/spu/create', data }) |
| | | } |
| | | |
| | | // æ´æ°åå Spu |
| | | export const updateSpu = (data: Spu) => { |
| | | return request.put({ url: '/product/spu/update', data }) |
| | | } |
| | | |
| | | // æ´æ°åå Spu status |
| | | export const updateStatus = (data: { id: number; status: number }) => { |
| | | return request.put({ url: '/product/spu/update-status', data }) |
| | | } |
| | | |
| | | // è·å¾åå Spu |
| | | export const getSpu = (id: number) => { |
| | | return request.get({ url: `/product/spu/get-detail?id=${id}` }) |
| | | } |
| | | |
| | | // è·å¾åå Spu 详æ
å表 |
| | | export const getSpuDetailList = (ids: number[]) => { |
| | | return request.get({ url: `/product/spu/list?spuIds=${ids}` }) |
| | | } |
| | | |
| | | // å é¤åå Spu |
| | | export const deleteSpu = (id: number) => { |
| | | return request.delete({ url: `/product/spu/delete?id=${id}` }) |
| | | } |
| | | |
| | | // 导åºåå Spu Excel |
| | | export const exportSpu = async (params: any) => { |
| | | return await request.download({ url: '/product/spu/export-excel', params }) |
| | | } |
| | | |
| | | // è·å¾åå SPU ç²¾ç®å表 |
| | | export const getSpuSimpleList = async () => { |
| | | return request.get({ url: '/product/spu/list-all-simple' }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface ArticleVO { |
| | | id: number |
| | | categoryId: number |
| | | title: string |
| | | author: string |
| | | picUrl: string |
| | | introduction: string |
| | | browseCount: string |
| | | sort: number |
| | | status: number |
| | | spuId: number |
| | | recommendHot: boolean |
| | | recommendBanner: boolean |
| | | content: string |
| | | } |
| | | |
| | | // æ¥è¯¢æç« 管çå表 |
| | | export const getArticlePage = async (params: any) => { |
| | | return await request.get({ url: `/promotion/article/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢æç« 管ç详æ
|
| | | export const getArticle = async (id: number) => { |
| | | return await request.get({ url: `/promotion/article/get?id=` + id }) |
| | | } |
| | | |
| | | // æ°å¢æç« 管ç |
| | | export const createArticle = async (data: ArticleVO) => { |
| | | return await request.post({ url: `/promotion/article/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹æç« ç®¡ç |
| | | export const updateArticle = async (data: ArticleVO) => { |
| | | return await request.put({ url: `/promotion/article/update`, data }) |
| | | } |
| | | |
| | | // å é¤æç« ç®¡ç |
| | | export const deleteArticle = async (id: number) => { |
| | | return await request.delete({ url: `/promotion/article/delete?id=` + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface ArticleCategoryVO { |
| | | id: number |
| | | name: string |
| | | picUrl: string |
| | | status: number |
| | | sort: number |
| | | } |
| | | |
| | | // æ¥è¯¢æç« åç±»å表 |
| | | export const getArticleCategoryPage = async (params) => { |
| | | return await request.get({ url: `/promotion/article-category/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢æç« å类精ç®ä¿¡æ¯å表 |
| | | export const getSimpleArticleCategoryList = async () => { |
| | | return await request.get({ url: `/promotion/article-category/list-all-simple` }) |
| | | } |
| | | |
| | | // æ¥è¯¢æç« å类详æ
|
| | | export const getArticleCategory = async (id: number) => { |
| | | return await request.get({ url: `/promotion/article-category/get?id=` + id }) |
| | | } |
| | | |
| | | // æ°å¢æç« åç±» |
| | | export const createArticleCategory = async (data: ArticleCategoryVO) => { |
| | | return await request.post({ url: `/promotion/article-category/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹æç« åç±» |
| | | export const updateArticleCategory = async (data: ArticleCategoryVO) => { |
| | | return await request.put({ url: `/promotion/article-category/update`, data }) |
| | | } |
| | | |
| | | // å é¤æç« åç±» |
| | | export const deleteArticleCategory = async (id: number) => { |
| | | return await request.delete({ url: `/promotion/article-category/delete?id=` + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import { Sku, Spu } from '@/api/mall/product/spu' |
| | | |
| | | export interface BargainActivityVO { |
| | | id?: number |
| | | name?: string |
| | | startTime?: Date |
| | | endTime?: Date |
| | | status?: number |
| | | helpMaxCount?: number // è¾¾å°è¯¥äººæ°ï¼æè½ç å°ä½ä»· |
| | | bargainCount?: number // æå¤§å¸®ç æ¬¡æ° |
| | | totalLimitCount?: number // æå¤§è´ä¹°æ¬¡æ° |
| | | spuId: number |
| | | skuId: number |
| | | bargainFirstPrice: number // ç ä»·èµ·å§ä»·æ ¼ï¼åä½å |
| | | bargainMinPrice: number // ç ä»·åºä»· |
| | | stock: number // æ´»å¨åºå |
| | | randomMinPrice?: number // ç¨æ·æ¯æ¬¡ç ä»·çæå°éé¢ï¼åä½ï¼å |
| | | randomMaxPrice?: number // ç¨æ·æ¯æ¬¡ç ä»·çæå¤§éé¢ï¼åä½ï¼å |
| | | } |
| | | |
| | | // ç ä»·æ´»å¨æé屿§ãéæ©çååå屿§çæ¶åä½¿ç¨æ¹ä¾¿ä½¿ç¨æ´»å¨çéç¨å°è£
|
| | | export interface BargainProductVO { |
| | | spuId: number |
| | | skuId: number |
| | | bargainFirstPrice: number // ç ä»·èµ·å§ä»·æ ¼ï¼åä½å |
| | | bargainMinPrice: number // ç ä»·åºä»· |
| | | stock: number // æ´»å¨åºå |
| | | } |
| | | |
| | | // æ©å± Sku é
ç½® |
| | | export type SkuExtension = Sku & { |
| | | productConfig: BargainProductVO |
| | | } |
| | | |
| | | export interface SpuExtension extends Spu { |
| | | skus: SkuExtension[] // éåç±»å |
| | | } |
| | | |
| | | // æ¥è¯¢ç ä»·æ´»å¨å表 |
| | | export const getBargainActivityPage = async (params: any) => { |
| | | return await request.get({ url: '/promotion/bargain-activity/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ç ä»·æ´»å¨è¯¦æ
|
| | | export const getBargainActivity = async (id: number) => { |
| | | return await request.get({ url: '/promotion/bargain-activity/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢ç ä»·æ´»å¨ |
| | | export const createBargainActivity = async (data: BargainActivityVO) => { |
| | | return await request.post({ url: '/promotion/bargain-activity/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ç ä»·æ´»å¨ |
| | | export const updateBargainActivity = async (data: BargainActivityVO) => { |
| | | return await request.put({ url: '/promotion/bargain-activity/update', data }) |
| | | } |
| | | |
| | | // å
³éç ä»·æ´»å¨ |
| | | export const closeBargainActivity = async (id: number) => { |
| | | return await request.put({ url: '/promotion/bargain-activity/close?id=' + id }) |
| | | } |
| | | |
| | | // å é¤ç ä»·æ´»å¨ |
| | | export const deleteBargainActivity = async (id: number) => { |
| | | return await request.delete({ url: '/promotion/bargain-activity/delete?id=' + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface BargainHelpVO { |
| | | id: number |
| | | record: number |
| | | userId: number |
| | | reducePrice: number |
| | | endTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢ç ä»·è®°å½å表 |
| | | export const getBargainHelpPage = async (params) => { |
| | | return await request.get({ url: `/promotion/bargain-help/page`, params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface BargainRecordVO { |
| | | id: number |
| | | activityId: number |
| | | userId: number |
| | | spuId: number |
| | | skuId: number |
| | | bargainFirstPrice: number |
| | | bargainPrice: number |
| | | status: number |
| | | orderId: number |
| | | endTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢ç ä»·è®°å½å表 |
| | | export const getBargainRecordPage = async (params) => { |
| | | return await request.get({ url: `/promotion/bargain-record/page`, params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import { Sku, Spu } from '@/api/mall/product/spu' |
| | | |
| | | export interface CombinationActivityVO { |
| | | id?: number |
| | | name?: string |
| | | spuId?: number |
| | | totalLimitCount?: number |
| | | singleLimitCount?: number |
| | | startTime?: Date |
| | | endTime?: Date |
| | | userSize?: number |
| | | totalCount?: number |
| | | successCount?: number |
| | | orderUserCount?: number |
| | | virtualGroup?: number |
| | | status?: number |
| | | limitDuration?: number |
| | | combinationPrice?: number |
| | | products: CombinationProductVO[] |
| | | } |
| | | |
| | | // æ¼å¢æ´»å¨æé屿§ |
| | | export interface CombinationProductVO { |
| | | spuId: number |
| | | skuId: number |
| | | combinationPrice: number // æ¼å¢ä»·æ ¼ |
| | | } |
| | | |
| | | // æ©å± Sku é
ç½® |
| | | export type SkuExtension = Sku & { |
| | | productConfig: CombinationProductVO |
| | | } |
| | | |
| | | export interface SpuExtension extends Spu { |
| | | skus: SkuExtension[] // éåç±»å |
| | | } |
| | | |
| | | // æ¥è¯¢æ¼å¢æ´»å¨å表 |
| | | export const getCombinationActivityPage = async (params: any) => { |
| | | return await request.get({ url: '/promotion/combination-activity/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢æ¼å¢æ´»å¨è¯¦æ
|
| | | export const getCombinationActivity = async (id: number) => { |
| | | return await request.get({ url: '/promotion/combination-activity/get?id=' + id }) |
| | | } |
| | | |
| | | // è·å¾æ¼å¢æ´»å¨å表ï¼åºäºæ´»å¨ç¼å·æ°ç» |
| | | export const getCombinationActivityListByIds = (ids: number[]) => { |
| | | return request.get({ url: `/promotion/combination-activity/list-by-ids?ids=${ids}` }) |
| | | } |
| | | |
| | | // æ°å¢æ¼å¢æ´»å¨ |
| | | export const createCombinationActivity = async (data: CombinationActivityVO) => { |
| | | return await request.post({ url: '/promotion/combination-activity/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹æ¼å¢æ´»å¨ |
| | | export const updateCombinationActivity = async (data: CombinationActivityVO) => { |
| | | return await request.put({ url: '/promotion/combination-activity/update', data }) |
| | | } |
| | | |
| | | // å
³éæ¼å¢æ´»å¨ |
| | | export const closeCombinationActivity = async (id: number) => { |
| | | return await request.put({ url: '/promotion/combination-activity/close?id=' + id }) |
| | | } |
| | | |
| | | // å 餿¼å¢æ´»å¨ |
| | | export const deleteCombinationActivity = async (id: number) => { |
| | | return await request.delete({ url: '/promotion/combination-activity/delete?id=' + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface CombinationRecordVO { |
| | | id: number // æ¼å¢è®°å½ç¼å· |
| | | activityId: number // æ¼å¢æ´»å¨ç¼å· |
| | | nickname: string // ç¨æ·æµç§° |
| | | avatar: string // ç¨æ·å¤´å |
| | | headId: number // å¢é¿ç¼å· |
| | | expireTime: string // è¿ææ¶é´ |
| | | userSize: number // å¯åå¢äººæ° |
| | | userCount: number // å·²åå¢äººæ° |
| | | status: number // æ¼å¢ç¶æ |
| | | spuName: string // åååå |
| | | picUrl: string // ååå¾ç |
| | | virtualGroup: boolean // æ¯å¦èææå¢ |
| | | startTime: string // å¼å§æ¶é´ (订å仿¬¾åå¼å§çæ¶é´) |
| | | endTime: string // ç»ææ¶é´ï¼æå¢æ¶é´/失败æ¶é´ï¼ |
| | | } |
| | | |
| | | // æ¥è¯¢æ¼å¢è®°å½å表 |
| | | export const getCombinationRecordPage = async (params: any) => { |
| | | return await request.get({ url: '/promotion/combination-record/page', params }) |
| | | } |
| | | |
| | | // è·å¾æ¼å¢è®°å½çæ¦è¦ä¿¡æ¯ |
| | | export const getCombinationRecordSummary = async () => { |
| | | return await request.get({ url: '/promotion/combination-record/get-summary' }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // TODO @dhb52ï¼vo ç¼ºå° |
| | | |
| | | // å é¤ä¼æ åµ |
| | | export const deleteCoupon = async (id: number) => { |
| | | return request.delete({ |
| | | url: `/promotion/coupon/delete?id=${id}` |
| | | }) |
| | | } |
| | | |
| | | // è·å¾ä¼æ åµå页 |
| | | export const getCouponPage = async (params: PageParam) => { |
| | | return request.get({ |
| | | url: '/promotion/coupon/page', |
| | | params: params |
| | | }) |
| | | } |
| | | |
| | | // åé伿 å¸ |
| | | export const sendCoupon = async (data: any) => { |
| | | return request.post({ |
| | | url: '/promotion/coupon/send', |
| | | data: data |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface CouponTemplateVO { |
| | | id: number |
| | | name: string |
| | | status: number |
| | | totalCount: number |
| | | takeLimitCount: number |
| | | takeType: number |
| | | usePrice: number |
| | | productScope: number |
| | | productScopeValues: number[] |
| | | validityType: number |
| | | validStartTime: Date |
| | | validEndTime: Date |
| | | fixedStartTerm: number |
| | | fixedEndTerm: number |
| | | discountType: number |
| | | discountPercent: number |
| | | discountPrice: number |
| | | discountLimitPrice: number |
| | | takeCount: number |
| | | useCount: number |
| | | } |
| | | |
| | | // åå»ºä¼æ 嵿¨¡æ¿ |
| | | export function createCouponTemplate(data: CouponTemplateVO) { |
| | | return request.post({ |
| | | url: '/promotion/coupon-template/create', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // æ´æ°ä¼æ 嵿¨¡æ¿ |
| | | export function updateCouponTemplate(data: CouponTemplateVO) { |
| | | return request.put({ |
| | | url: '/promotion/coupon-template/update', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // æ´æ°ä¼æ 嵿¨¡æ¿çç¶æ |
| | | export function updateCouponTemplateStatus(id: number, status: [0, 1]) { |
| | | const data = { |
| | | id, |
| | | status |
| | | } |
| | | return request.put({ |
| | | url: '/promotion/coupon-template/update-status', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // å é¤ä¼æ 嵿¨¡æ¿ |
| | | export function deleteCouponTemplate(id: number) { |
| | | return request.delete({ |
| | | url: '/promotion/coupon-template/delete?id=' + id |
| | | }) |
| | | } |
| | | |
| | | // è·å¾ä¼æ 嵿¨¡æ¿ |
| | | export function getCouponTemplate(id: number) { |
| | | return request.get({ |
| | | url: '/promotion/coupon-template/get?id=' + id |
| | | }) |
| | | } |
| | | |
| | | // è·å¾ä¼æ 嵿¨¡æ¿å页 |
| | | export function getCouponTemplatePage(params: PageParam) { |
| | | return request.get({ |
| | | url: '/promotion/coupon-template/page', |
| | | params: params |
| | | }) |
| | | } |
| | | |
| | | // è·å¾ä¼æ 嵿¨¡æ¿å页 |
| | | export function getCouponTemplateList(ids: number[]): Promise<CouponTemplateVO[]> { |
| | | return request.get({ |
| | | url: `/promotion/coupon-template/list?ids=${ids}` |
| | | }) |
| | | } |
| | | |
| | | // 导åºä¼æ 嵿¨¡æ¿ Excel |
| | | export function exportCouponTemplateExcel(params: PageParam) { |
| | | return request.get({ |
| | | url: '/promotion/coupon-template/export-excel', |
| | | params: params, |
| | | responseType: 'blob' |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import { Sku, Spu } from '@/api/mall/product/spu' |
| | | |
| | | export interface DiscountActivityVO { |
| | | id?: number |
| | | spuId?: number |
| | | name?: string |
| | | status?: number |
| | | remark?: string |
| | | startTime?: Date |
| | | endTime?: Date |
| | | products?: DiscountProductVO[] |
| | | } |
| | | // éæ¶ææ£ç¸å
³ 屿§ |
| | | export interface DiscountProductVO { |
| | | spuId: number |
| | | skuId: number |
| | | discountType: number |
| | | discountPercent: number |
| | | discountPrice: number |
| | | } |
| | | |
| | | // æ©å± Sku é
ç½® |
| | | export type SkuExtension = Sku & { |
| | | productConfig: DiscountProductVO |
| | | } |
| | | |
| | | export interface SpuExtension extends Spu { |
| | | skus: SkuExtension[] // éåç±»å |
| | | } |
| | | |
| | | // æ¥è¯¢éæ¶ææ£æ´»å¨å表 |
| | | export const getDiscountActivityPage = async (params) => { |
| | | return await request.get({ url: '/promotion/discount-activity/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢éæ¶ææ£æ´»å¨è¯¦æ
|
| | | export const getDiscountActivity = async (id: number) => { |
| | | return await request.get({ url: '/promotion/discount-activity/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢éæ¶ææ£æ´»å¨ |
| | | export const createDiscountActivity = async (data: DiscountActivityVO) => { |
| | | return await request.post({ url: '/promotion/discount-activity/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹éæ¶ææ£æ´»å¨ |
| | | export const updateDiscountActivity = async (data: DiscountActivityVO) => { |
| | | return await request.put({ url: '/promotion/discount-activity/update', data }) |
| | | } |
| | | |
| | | // å
³ééæ¶ææ£æ´»å¨ |
| | | export const closeDiscountActivity = async (id: number) => { |
| | | return await request.put({ url: '/promotion/discount-activity/close?id=' + id }) |
| | | } |
| | | |
| | | // å é¤éæ¶ææ£æ´»å¨ |
| | | export const deleteDiscountActivity = async (id: number) => { |
| | | return await request.delete({ url: '/promotion/discount-activity/delete?id=' + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface DiyPageVO { |
| | | id?: number |
| | | templateId?: number |
| | | name: string |
| | | remark: string |
| | | previewPicUrls: string[] |
| | | property: string |
| | | } |
| | | |
| | | // æ¥è¯¢è£
修页é¢å表 |
| | | export const getDiyPagePage = async (params: any) => { |
| | | return await request.get({ url: `/promotion/diy-page/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢è£
修页é¢è¯¦æ
|
| | | export const getDiyPage = async (id: number) => { |
| | | return await request.get({ url: `/promotion/diy-page/get?id=` + id }) |
| | | } |
| | | |
| | | // æ°å¢è£
ä¿®é¡µé¢ |
| | | export const createDiyPage = async (data: DiyPageVO) => { |
| | | return await request.post({ url: `/promotion/diy-page/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹è£
ä¿®é¡µé¢ |
| | | export const updateDiyPage = async (data: DiyPageVO) => { |
| | | return await request.put({ url: `/promotion/diy-page/update`, data }) |
| | | } |
| | | |
| | | // å é¤è£
ä¿®é¡µé¢ |
| | | export const deleteDiyPage = async (id: number) => { |
| | | return await request.delete({ url: `/promotion/diy-page/delete?id=` + id }) |
| | | } |
| | | |
| | | // è·å¾è£
修页é¢å±æ§ |
| | | export const getDiyPageProperty = async (id: number) => { |
| | | return await request.get({ url: `/promotion/diy-page/get-property?id=` + id }) |
| | | } |
| | | |
| | | // æ´æ°è£
修页é¢å±æ§ |
| | | export const updateDiyPageProperty = async (data: DiyPageVO) => { |
| | | return await request.put({ url: `/promotion/diy-page/update-property`, data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import { DiyPageVO } from '@/api/mall/promotion/diy/page' |
| | | |
| | | export interface DiyTemplateVO { |
| | | id?: number |
| | | name: string |
| | | used: boolean |
| | | usedTime?: Date |
| | | remark: string |
| | | previewPicUrls: string[] |
| | | property: string |
| | | } |
| | | |
| | | export interface DiyTemplatePropertyVO extends DiyTemplateVO { |
| | | pages: DiyPageVO[] |
| | | } |
| | | |
| | | // æ¥è¯¢è£
修模æ¿å表 |
| | | export const getDiyTemplatePage = async (params: any) => { |
| | | return await request.get({ url: `/promotion/diy-template/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢è£
修模æ¿è¯¦æ
|
| | | export const getDiyTemplate = async (id: number) => { |
| | | return await request.get({ url: `/promotion/diy-template/get?id=` + id }) |
| | | } |
| | | |
| | | // æ°å¢è£
ä¿®æ¨¡æ¿ |
| | | export const createDiyTemplate = async (data: DiyTemplateVO) => { |
| | | return await request.post({ url: `/promotion/diy-template/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹è£
ä¿®æ¨¡æ¿ |
| | | export const updateDiyTemplate = async (data: DiyTemplateVO) => { |
| | | return await request.put({ url: `/promotion/diy-template/update`, data }) |
| | | } |
| | | |
| | | // å é¤è£
ä¿®æ¨¡æ¿ |
| | | export const deleteDiyTemplate = async (id: number) => { |
| | | return await request.delete({ url: `/promotion/diy-template/delete?id=` + id }) |
| | | } |
| | | |
| | | // 使ç¨è£
ä¿®æ¨¡æ¿ |
| | | export const useDiyTemplate = async (id: number) => { |
| | | return await request.put({ url: `/promotion/diy-template/use?id=` + id }) |
| | | } |
| | | |
| | | // è·å¾è£
修模æ¿å±æ§ |
| | | export const getDiyTemplateProperty = async (id: number) => { |
| | | return await request.get<DiyTemplatePropertyVO>({ |
| | | url: `/promotion/diy-template/get-property?id=` + id |
| | | }) |
| | | } |
| | | |
| | | // æ´æ°è£
修模æ¿å±æ§ |
| | | export const updateDiyTemplateProperty = async (data: DiyTemplateVO) => { |
| | | return await request.put({ url: `/promotion/diy-template/update-property`, data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface KeFuConversationRespVO { |
| | | id: number // ç¼å· |
| | | userId: number // ä¼è¯æå±ç¨æ· |
| | | userAvatar: string // ä¼è¯æå±ç¨æ·å¤´å |
| | | userNickname: string // ä¼è¯æå±ç¨æ·æµç§° |
| | | lastMessageTime: Date // æåè天æ¶é´ |
| | | lastMessageContent: string // æåè天å
容 |
| | | lastMessageContentType: number // æååéçæ¶æ¯ç±»å |
| | | adminPinned: boolean // 管ç端置顶 |
| | | userDeleted: boolean // ç¨æ·æ¯å¦å¯è§ |
| | | adminDeleted: boolean // 管ç忝å¦å¯è§ |
| | | adminUnreadMessageCount: number // 管çåæªè¯»æ¶æ¯æ° |
| | | createTime?: string // å建æ¶é´ |
| | | } |
| | | |
| | | // 客æä¼è¯ API |
| | | export const KeFuConversationApi = { |
| | | // è·å¾å®¢æä¼è¯å表 |
| | | getConversationList: async () => { |
| | | return await request.get({ url: '/promotion/kefu-conversation/list' }) |
| | | }, |
| | | // è·å¾å®¢æä¼è¯ |
| | | getConversation: async (id: number) => { |
| | | return await request.get({ url: `/promotion/kefu-conversation/get?id=` + id }) |
| | | }, |
| | | // 客æä¼è¯ç½®é¡¶ |
| | | updateConversationPinned: async (data: any) => { |
| | | return await request.put({ |
| | | url: '/promotion/kefu-conversation/update-conversation-pinned', |
| | | data |
| | | }) |
| | | }, |
| | | // å é¤å®¢æä¼è¯ |
| | | deleteConversation: async (id: number) => { |
| | | return await request.delete({ url: `/promotion/kefu-conversation/delete?id=${id}` }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface KeFuMessageRespVO { |
| | | id: number // ç¼å· |
| | | conversationId: number // ä¼è¯ç¼å· |
| | | senderId: number // åé人ç¼å· |
| | | senderAvatar: string // åé人头å |
| | | senderType: number // åé人类å |
| | | receiverId: number // æ¥æ¶äººç¼å· |
| | | receiverType: number // æ¥æ¶äººç±»å |
| | | contentType: number // æ¶æ¯ç±»å |
| | | content: string // æ¶æ¯ |
| | | readStatus: boolean // æ¯å¦å·²è¯» |
| | | createTime: Date // å建æ¶é´ |
| | | } |
| | | |
| | | // 客æä¼è¯ API |
| | | export const KeFuMessageApi = { |
| | | // åéå®¢ææ¶æ¯ |
| | | sendKeFuMessage: async (data: any) => { |
| | | return await request.post({ |
| | | url: '/promotion/kefu-message/send', |
| | | data |
| | | }) |
| | | }, |
| | | // æ´æ°å®¢ææ¶æ¯å·²è¯»ç¶æ |
| | | updateKeFuMessageReadStatus: async (conversationId: number) => { |
| | | return await request.put({ |
| | | url: '/promotion/kefu-message/update-read-status?conversationId=' + conversationId |
| | | }) |
| | | }, |
| | | // è·å¾æ¶æ¯åè¡¨ï¼æµå¼å è½½ï¼ |
| | | getKeFuMessageList: async (params: any) => { |
| | | return await request.get({ url: '/promotion/kefu-message/list', params }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import { Sku, Spu } from '@/api/mall/product/spu' // 积åååæ´»å¨ VO |
| | | |
| | | // 积åååæ´»å¨ VO |
| | | export interface PointActivityVO { |
| | | id: number // 积åååæ´»å¨ç¼å· |
| | | spuId: number // 积åååæ´»å¨åå |
| | | status: number // æ´»å¨ç¶æ |
| | | stock: number // 积åååæ´»å¨åºå |
| | | totalStock: number // 积åååæ´»å¨æ»åºå |
| | | remark?: string // 夿³¨ |
| | | sort: number // æåº |
| | | createTime: string // å建æ¶é´ |
| | | products: PointProductVO[] // 积ååååå |
| | | |
| | | // ========== åååæ®µ ========== |
| | | spuName: string // åååç§° |
| | | picUrl: string // ååä¸»å¾ |
| | | marketPrice: number // ååå¸åºä»·ï¼åä½ï¼å |
| | | |
| | | //======================= æ¾ç¤ºæéå
æ¢ç§¯åæå°ç sku ä¿¡æ¯ ======================= |
| | | point: number // å
æ¢ç§¯å |
| | | price: number // å
æ¢éé¢ï¼åä½ï¼å |
| | | } |
| | | |
| | | // ç§ææ´»å¨æé屿§ |
| | | export interface PointProductVO { |
| | | id?: number // 积åååååç¼å· |
| | | activityId?: number // 积åååæ´»å¨ id |
| | | spuId?: number // åå SPU ç¼å· |
| | | skuId: number // åå SKU ç¼å· |
| | | count: number // å¯å
æ¢æ°é |
| | | point: number // å
æ¢ç§¯å |
| | | price: number // å
æ¢éé¢ï¼åä½ï¼å |
| | | stock: number // 积ååååååºå |
| | | activityStatus?: number // 积åååååç¶æ |
| | | } |
| | | |
| | | // æ©å± Sku é
ç½® |
| | | export type SkuExtension = Sku & { |
| | | productConfig: PointProductVO |
| | | } |
| | | |
| | | export interface SpuExtension extends Spu { |
| | | skus: SkuExtension[] // éåç±»å |
| | | } |
| | | |
| | | export interface SpuExtension0 extends Spu { |
| | | pointStock: number // 积åååæ´»å¨åºå |
| | | pointTotalStock: number // 积åååæ´»å¨æ»åºå |
| | | point: number // å
æ¢ç§¯å |
| | | pointPrice: number // å
æ¢éé¢ï¼åä½ï¼å |
| | | } |
| | | |
| | | // 积åååæ´»å¨ API |
| | | export const PointActivityApi = { |
| | | // æ¥è¯¢ç§¯åååæ´»å¨å页 |
| | | getPointActivityPage: async (params: any) => { |
| | | return await request.get({ url: `/promotion/point-activity/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ç§¯åååæ´»å¨è¯¦æ
|
| | | getPointActivity: async (id: number) => { |
| | | return await request.get({ url: `/promotion/point-activity/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ç§¯åååæ´»å¨å表ï¼åºäºæ´»å¨ç¼å·æ°ç» |
| | | getPointActivityListByIds: async (ids: number[]) => { |
| | | return request.get({ url: `/promotion/point-activity/list-by-ids?ids=${ids}` }) |
| | | }, |
| | | |
| | | // æ°å¢ç§¯åååæ´»å¨ |
| | | createPointActivity: async (data: PointActivityVO) => { |
| | | return await request.post({ url: `/promotion/point-activity/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹ç§¯åååæ´»å¨ |
| | | updatePointActivity: async (data: PointActivityVO) => { |
| | | return await request.put({ url: `/promotion/point-activity/update`, data }) |
| | | }, |
| | | |
| | | // å é¤ç§¯åååæ´»å¨ |
| | | deletePointActivity: async (id: number) => { |
| | | return await request.delete({ url: `/promotion/point-activity/delete?id=` + id }) |
| | | }, |
| | | |
| | | // å
³éç§ææ´»å¨ |
| | | closePointActivity: async (id: number) => { |
| | | return await request.put({ url: '/promotion/point-activity/close?id=' + id }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface RewardActivityVO { |
| | | id?: number |
| | | name?: string |
| | | startTime?: Date |
| | | endTime?: Date |
| | | startAndEndTime?: Date[] // åªåç«¯ä½¿ç¨ |
| | | remark?: string |
| | | conditionType?: number |
| | | productScope?: number |
| | | rules: RewardRule[] |
| | | // å¦ä¸ä»
ç¨äºè¡¨åï¼ä¸æäº¤ |
| | | productScopeValues?: number[] // ååèå´ï¼å¼ä¸ºåç±»ç¼å·å表ãååç¼å·å表 |
| | | productCategoryIds?: number[] |
| | | productSpuIds?: number[] |
| | | } |
| | | |
| | | // 伿 è§å |
| | | export interface RewardRule { |
| | | limit?: number |
| | | discountPrice?: number |
| | | freeDelivery?: boolean |
| | | point: number |
| | | giveCouponTemplateCounts?: { |
| | | [key: number]: number |
| | | } |
| | | } |
| | | |
| | | // æ°å¢æ»¡åéæ´»å¨ |
| | | export const createRewardActivity = async (data: RewardActivityVO) => { |
| | | return await request.post({ url: '/promotion/reward-activity/create', data }) |
| | | } |
| | | |
| | | // æ´æ°æ»¡åéæ´»å¨ |
| | | export const updateRewardActivity = async (data: RewardActivityVO) => { |
| | | return await request.put({ url: '/promotion/reward-activity/update', data }) |
| | | } |
| | | |
| | | // æ¥è¯¢æ»¡åéæ´»å¨å表 |
| | | export const getRewardActivityPage = async (params) => { |
| | | return await request.get({ url: '/promotion/reward-activity/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢æ»¡åéæ´»å¨è¯¦æ
|
| | | export const getReward = async (id: number) => { |
| | | return await request.get({ url: '/promotion/reward-activity/get?id=' + id }) |
| | | } |
| | | |
| | | // å 餿»¡åéæ´»å¨ |
| | | export const deleteRewardActivity = async (id: number) => { |
| | | return await request.delete({ url: '/promotion/reward-activity/delete?id=' + id }) |
| | | } |
| | | |
| | | // å
³é满åéæ´»å¨ |
| | | export const closeRewardActivity = async (id: number) => { |
| | | return await request.put({ url: '/promotion/reward-activity/close?id=' + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import { Sku, Spu } from '@/api/mall/product/spu' |
| | | |
| | | export interface SeckillActivityVO { |
| | | id?: number |
| | | spuId?: number |
| | | name?: string |
| | | status?: number |
| | | remark?: string |
| | | startTime?: Date |
| | | endTime?: Date |
| | | sort?: number |
| | | configIds?: string |
| | | orderCount?: number |
| | | userCount?: number |
| | | totalPrice?: number |
| | | totalLimitCount?: number |
| | | singleLimitCount?: number |
| | | stock?: number |
| | | totalStock?: number |
| | | seckillPrice?: number |
| | | products?: SeckillProductVO[] |
| | | } |
| | | |
| | | // ç§ææ´»å¨æé屿§ |
| | | export interface SeckillProductVO { |
| | | skuId: number |
| | | spuId: number |
| | | seckillPrice: number |
| | | stock: number |
| | | } |
| | | |
| | | // æ©å± Sku é
ç½® |
| | | export type SkuExtension = Sku & { |
| | | productConfig: SeckillProductVO |
| | | } |
| | | |
| | | export interface SpuExtension extends Spu { |
| | | skus: SkuExtension[] // éåç±»å |
| | | } |
| | | |
| | | // æ¥è¯¢ç§ææ´»å¨å表 |
| | | export const getSeckillActivityPage = async (params) => { |
| | | return await request.get({ url: '/promotion/seckill-activity/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ç§ææ´»å¨å表ï¼åºäºæ´»å¨ç¼å·æ°ç» |
| | | export const getSeckillActivityListByIds = (ids: number[]) => { |
| | | return request.get({ url: `/promotion/seckill-activity/list-by-ids?ids=${ids}` }) |
| | | } |
| | | |
| | | // æ¥è¯¢ç§ææ´»å¨è¯¦æ
|
| | | export const getSeckillActivity = async (id: number) => { |
| | | return await request.get({ url: '/promotion/seckill-activity/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢ç§ææ´»å¨ |
| | | export const createSeckillActivity = async (data: SeckillActivityVO) => { |
| | | return await request.post({ url: '/promotion/seckill-activity/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ç§ææ´»å¨ |
| | | export const updateSeckillActivity = async (data: SeckillActivityVO) => { |
| | | return await request.put({ url: '/promotion/seckill-activity/update', data }) |
| | | } |
| | | |
| | | // å
³éç§ææ´»å¨ |
| | | export const closeSeckillActivity = async (id: number) => { |
| | | return await request.put({ url: '/promotion/seckill-activity/close?id=' + id }) |
| | | } |
| | | |
| | | // å é¤ç§ææ´»å¨ |
| | | export const deleteSeckillActivity = async (id: number) => { |
| | | return await request.delete({ url: '/promotion/seckill-activity/delete?id=' + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // ç§ææ¶æ®µ VO |
| | | export interface SeckillConfigVO { |
| | | id: number // ç¼å· |
| | | name: string // ç§ææ¶æ®µåç§° |
| | | startTime: string // å¼å§æ¶é´ç¹ |
| | | endTime: string // ç»ææ¶é´ç¹ |
| | | sliderPicUrls: string[] // ç§æè½®æå¾ |
| | | status: number // æ´»å¨ç¶æ |
| | | } |
| | | |
| | | // ç§ææ¶æ®µ API |
| | | export const SeckillConfigApi = { |
| | | // æ¥è¯¢ç§ææ¶æ®µå页 |
| | | getSeckillConfigPage: async (params: any) => { |
| | | return await request.get({ url: `/promotion/seckill-config/page`, params }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ç§ææ¶æ®µå表 |
| | | getSimpleSeckillConfigList: async () => { |
| | | return await request.get({ url: `/promotion/seckill-config/list` }) |
| | | }, |
| | | |
| | | // æ¥è¯¢ç§ææ¶æ®µè¯¦æ
|
| | | getSeckillConfig: async (id: number) => { |
| | | return await request.get({ url: `/promotion/seckill-config/get?id=` + id }) |
| | | }, |
| | | |
| | | // æ°å¢ç§ææ¶æ®µ |
| | | createSeckillConfig: async (data: SeckillConfigVO) => { |
| | | return await request.post({ url: `/promotion/seckill-config/create`, data }) |
| | | }, |
| | | |
| | | // ä¿®æ¹ç§ææ¶æ®µ |
| | | updateSeckillConfig: async (data: SeckillConfigVO) => { |
| | | return await request.put({ url: `/promotion/seckill-config/update`, data }) |
| | | }, |
| | | |
| | | // å é¤ç§ææ¶æ®µ |
| | | deleteSeckillConfig: async (id: number) => { |
| | | return await request.delete({ url: `/promotion/seckill-config/delete?id=` + id }) |
| | | }, |
| | | |
| | | // ä¿®æ¹æ¶æ®µé
ç½®ç¶æ |
| | | updateSeckillConfigStatus: async (id: number, status: number) => { |
| | | const data = { |
| | | id, |
| | | status |
| | | } |
| | | return request.put({ url: '/promotion/seckill-config/update-status', data: data }) |
| | | } |
| | | } |
| New file |
| | |
| | | /** æ°æ®å¯¹ç
§ Response VO */ |
| | | export interface DataComparisonRespVO<T> { |
| | | value: T |
| | | reference: T |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import dayjs from 'dayjs' |
| | | import { DataComparisonRespVO } from '@/api/mall/statistics/common' |
| | | import { formatDate } from '@/utils/formatTime' |
| | | |
| | | /** ä¼ååæ Request VO */ |
| | | export interface MemberAnalyseReqVO { |
| | | times: dayjs.ConfigType[] |
| | | } |
| | | |
| | | /** ä¼ååæ Response VO */ |
| | | export interface MemberAnalyseRespVO { |
| | | visitUserCount: number |
| | | orderUserCount: number |
| | | payUserCount: number |
| | | atv: number |
| | | comparison: DataComparisonRespVO<MemberAnalyseComparisonRespVO> |
| | | } |
| | | |
| | | /** ä¼ååæå¯¹ç
§æ°æ® Response VO */ |
| | | export interface MemberAnalyseComparisonRespVO { |
| | | registerUserCount: number |
| | | visitUserCount: number |
| | | rechargeUserCount: number |
| | | } |
| | | |
| | | /** ä¼åå°åºç»è®¡ Response VO */ |
| | | export interface MemberAreaStatisticsRespVO { |
| | | areaId: number |
| | | areaName: string |
| | | userCount: number |
| | | orderCreateUserCount: number |
| | | orderPayUserCount: number |
| | | orderPayPrice: number |
| | | } |
| | | |
| | | /** ä¼åæ§å«ç»è®¡ Response VO */ |
| | | export interface MemberSexStatisticsRespVO { |
| | | sex: number |
| | | userCount: number |
| | | } |
| | | |
| | | /** ä¼åç»è®¡ Response VO */ |
| | | export interface MemberSummaryRespVO { |
| | | userCount: number |
| | | rechargeUserCount: number |
| | | rechargePrice: number |
| | | expensePrice: number |
| | | } |
| | | |
| | | /** ä¼åç»ç«¯ç»è®¡ Response VO */ |
| | | export interface MemberTerminalStatisticsRespVO { |
| | | terminal: number |
| | | userCount: number |
| | | } |
| | | |
| | | /** ä¼åæ°éç»è®¡ Response VO */ |
| | | export interface MemberCountRespVO { |
| | | /** ç¨æ·è®¿é®é */ |
| | | visitUserCount: string |
| | | /** 注åç¨æ·æ°é */ |
| | | registerUserCount: number |
| | | } |
| | | |
| | | /** ä¼åæ³¨åæ°é Response VO */ |
| | | export interface MemberRegisterCountRespVO { |
| | | date: string |
| | | count: number |
| | | } |
| | | |
| | | // æ¥è¯¢ä¼åç»è®¡ |
| | | export const getMemberSummary = () => { |
| | | return request.get<MemberSummaryRespVO>({ |
| | | url: '/statistics/member/summary' |
| | | }) |
| | | } |
| | | |
| | | // æ¥è¯¢ä¼ååææ°æ® |
| | | export const getMemberAnalyse = (params: MemberAnalyseReqVO) => { |
| | | return request.get<MemberAnalyseRespVO>({ |
| | | url: '/statistics/member/analyse', |
| | | params: { times: [formatDate(params.times[0]), formatDate(params.times[1])] } |
| | | }) |
| | | } |
| | | |
| | | // æç
§çä»½ï¼æ¥è¯¢ä¼åç»è®¡å表 |
| | | export const getMemberAreaStatisticsList = () => { |
| | | return request.get<MemberAreaStatisticsRespVO[]>({ |
| | | url: '/statistics/member/area-statistics-list' |
| | | }) |
| | | } |
| | | |
| | | // æç
§æ§å«ï¼æ¥è¯¢ä¼åç»è®¡å表 |
| | | export const getMemberSexStatisticsList = () => { |
| | | return request.get<MemberSexStatisticsRespVO[]>({ |
| | | url: '/statistics/member/sex-statistics-list' |
| | | }) |
| | | } |
| | | |
| | | // æç
§ç»ç«¯ï¼æ¥è¯¢ä¼åç»è®¡å表 |
| | | export const getMemberTerminalStatisticsList = () => { |
| | | return request.get<MemberTerminalStatisticsRespVO[]>({ |
| | | url: '/statistics/member/terminal-statistics-list' |
| | | }) |
| | | } |
| | | |
| | | // è·å¾ç¨æ·æ°éé对ç
§ |
| | | export const getUserCountComparison = () => { |
| | | return request.get<DataComparisonRespVO<MemberCountRespVO>>({ |
| | | url: '/statistics/member/user-count-comparison' |
| | | }) |
| | | } |
| | | |
| | | // è·å¾ä¼åæ³¨åæ°éå表 |
| | | export const getMemberRegisterCountList = ( |
| | | beginTime: dayjs.ConfigType, |
| | | endTime: dayjs.ConfigType |
| | | ) => { |
| | | return request.get<MemberRegisterCountRespVO[]>({ |
| | | url: '/statistics/member/register-count-list', |
| | | params: { times: [formatDate(beginTime), formatDate(endTime)] } |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | /** æ¯ä»ç»è®¡ */ |
| | | export interface PaySummaryRespVO { |
| | | /** å
å¼éé¢ï¼åä½å */ |
| | | rechargePrice: number |
| | | } |
| | | |
| | | /** è·åé±å
å
å¼éé¢ */ |
| | | export const getWalletRechargePrice = async () => { |
| | | return await request.get<PaySummaryRespVO>({ url: `/statistics/pay/summary` }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import { DataComparisonRespVO } from '@/api/mall/statistics/common' |
| | | |
| | | export interface ProductStatisticsVO { |
| | | id: number |
| | | day: string |
| | | spuId: number |
| | | spuName: string |
| | | spuPicUrl: string |
| | | browseCount: number |
| | | browseUserCount: number |
| | | favoriteCount: number |
| | | cartCount: number |
| | | orderCount: number |
| | | orderPayCount: number |
| | | orderPayPrice: number |
| | | afterSaleCount: number |
| | | afterSaleRefundPrice: number |
| | | browseConvertPercent: number |
| | | } |
| | | |
| | | // ååç»è®¡ API |
| | | export const ProductStatisticsApi = { |
| | | // è·å¾ååç»è®¡åæ |
| | | getProductStatisticsAnalyse: (params: any) => { |
| | | return request.get<DataComparisonRespVO<ProductStatisticsVO>>({ |
| | | url: '/statistics/product/analyse', |
| | | params |
| | | }) |
| | | }, |
| | | // è·å¾ååç¶åµæç» |
| | | getProductStatisticsList: (params: any) => { |
| | | return request.get<ProductStatisticsVO[]>({ |
| | | url: '/statistics/product/list', |
| | | params |
| | | }) |
| | | }, |
| | | // 导åºè·å¾ååç¶åµæç» Excel |
| | | exportProductStatisticsExcel: (params: any) => { |
| | | return request.download({ |
| | | url: '/statistics/product/export-excel', |
| | | params |
| | | }) |
| | | }, |
| | | // è·å¾ååæè¡æ¦å页 |
| | | getProductStatisticsRankPage: async (params: any) => { |
| | | return await request.get({ |
| | | url: `/statistics/product/rank-page`, |
| | | params |
| | | }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import dayjs from 'dayjs' |
| | | import { formatDate } from '@/utils/formatTime' |
| | | import { DataComparisonRespVO } from '@/api/mall/statistics/common' |
| | | |
| | | /** 交æç»è®¡ Response VO */ |
| | | export interface TradeSummaryRespVO { |
| | | yesterdayOrderCount: number |
| | | monthOrderCount: number |
| | | yesterdayPayPrice: number |
| | | monthPayPrice: number |
| | | } |
| | | |
| | | /** 交æç¶åµ Request VO */ |
| | | export interface TradeTrendReqVO { |
| | | times: [dayjs.ConfigType, dayjs.ConfigType] |
| | | } |
| | | |
| | | /** 交æç¶åµç»è®¡ Response VO */ |
| | | export interface TradeTrendSummaryRespVO { |
| | | time: string |
| | | turnoverPrice: number |
| | | orderPayPrice: number |
| | | rechargePrice: number |
| | | expensePrice: number |
| | | walletPayPrice: number |
| | | brokerageSettlementPrice: number |
| | | afterSaleRefundPrice: number |
| | | } |
| | | |
| | | /** 交æè®¢åæ°é Response VO */ |
| | | export interface TradeOrderCountRespVO { |
| | | /** å¾
åè´§ */ |
| | | undelivered?: number |
| | | /** å¾
æ ¸é */ |
| | | pickUp?: number |
| | | /** 鿬¾ä¸ */ |
| | | afterSaleApply?: number |
| | | /** æç°å¾
å®¡æ ¸ */ |
| | | auditingWithdraw?: number |
| | | } |
| | | |
| | | /** 交æè®¢åç»è®¡ Response VO */ |
| | | export interface TradeOrderSummaryRespVO { |
| | | /** æ¯ä»è®¢åååæ° */ |
| | | orderPayCount?: number |
| | | /** æ»æ¯ä»éé¢ï¼åä½ï¼å */ |
| | | orderPayPrice?: number |
| | | } |
| | | |
| | | /** 订åéè¶å¿ç»è®¡ Response VO */ |
| | | export interface TradeOrderTrendRespVO { |
| | | /** æ¥æ */ |
| | | date: string |
| | | /** è®¢åæ°é */ |
| | | orderPayCount: number |
| | | /** è®¢åæ¯ä»éé¢ */ |
| | | orderPayPrice: number |
| | | } |
| | | |
| | | // æ¥è¯¢äº¤æç»è®¡ |
| | | export const getTradeStatisticsSummary = () => { |
| | | return request.get<DataComparisonRespVO<TradeSummaryRespVO>>({ |
| | | url: '/statistics/trade/summary' |
| | | }) |
| | | } |
| | | |
| | | // è·å¾äº¤æç¶åµç»è®¡ |
| | | export const getTradeStatisticsAnalyse = (params: TradeTrendReqVO) => { |
| | | return request.get<DataComparisonRespVO<TradeTrendSummaryRespVO>>({ |
| | | url: '/statistics/trade/analyse', |
| | | params: formatDateParam(params) |
| | | }) |
| | | } |
| | | |
| | | // è·å¾äº¤æç¶åµæç» |
| | | export const getTradeStatisticsList = (params: TradeTrendReqVO) => { |
| | | return request.get<TradeTrendSummaryRespVO[]>({ |
| | | url: '/statistics/trade/list', |
| | | params: formatDateParam(params) |
| | | }) |
| | | } |
| | | |
| | | // 导åºäº¤æç¶åµæç» |
| | | export const exportTradeStatisticsExcel = (params: TradeTrendReqVO) => { |
| | | return request.download({ |
| | | url: '/statistics/trade/export-excel', |
| | | params: formatDateParam(params) |
| | | }) |
| | | } |
| | | |
| | | // è·å¾äº¤æè®¢åæ°é |
| | | export const getOrderCount = async () => { |
| | | return await request.get<TradeOrderCountRespVO>({ url: `/statistics/trade/order-count` }) |
| | | } |
| | | |
| | | // è·å¾äº¤æè®¢åæ°é对ç
§ |
| | | export const getOrderComparison = async () => { |
| | | return await request.get<DataComparisonRespVO<TradeOrderSummaryRespVO>>({ |
| | | url: `/statistics/trade/order-comparison` |
| | | }) |
| | | } |
| | | |
| | | // è·å¾è®¢åéè¶å¿ç»è®¡ |
| | | export const getOrderCountTrendComparison = ( |
| | | type: number, |
| | | beginTime: dayjs.ConfigType, |
| | | endTime: dayjs.ConfigType |
| | | ) => { |
| | | return request.get<DataComparisonRespVO<TradeOrderTrendRespVO>[]>({ |
| | | url: '/statistics/trade/order-count-trend', |
| | | params: { type, beginTime: formatDate(beginTime), endTime: formatDate(endTime) } |
| | | }) |
| | | } |
| | | |
| | | /** æ¶é´åæ°éè¦æ ¼å¼å, ç¡®ä¿æ¥å£è½è¯å« */ |
| | | const formatDateParam = (params: TradeTrendReqVO) => { |
| | | return { times: [formatDate(params.times[0]), formatDate(params.times[1])] } as TradeTrendReqVO |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface TradeAfterSaleVO { |
| | | id?: number | null // å®åç¼å·ï¼ä¸»é®èªå¢ |
| | | no?: string // å®ååå· |
| | | status?: number | null // 鿬¾ç¶æ |
| | | way?: number | null // å®åæ¹å¼ |
| | | type?: number | null // å®åç±»å |
| | | userId?: number | null // ç¨æ·ç¼å· |
| | | applyReason?: string // ç³è¯·åå |
| | | applyDescription?: string // è¡¥å
æè¿° |
| | | applyPicUrls?: string[] // è¡¥å
åè¯å¾ç |
| | | orderId?: number | null // 交æè®¢åç¼å· |
| | | orderNo?: string // è®¢åæµæ°´å· |
| | | orderItemId?: number | null // 交æè®¢å项ç¼å· |
| | | spuId?: number | null // åå SPU ç¼å· |
| | | spuName?: string // åå SPU åç§° |
| | | skuId?: number | null // åå SKU ç¼å· |
| | | properties?: ProductPropertiesVO[] // 屿§æ°ç» |
| | | picUrl?: string // ååå¾ç |
| | | count?: number | null // éè´§ååæ°é |
| | | auditTime?: Date // å®¡æ¹æ¶é´ |
| | | auditUserId?: number | null // 审æ¹äºº |
| | | auditReason?: string // 审æ¹å¤æ³¨ |
| | | refundPrice?: number | null // 鿬¾éé¢ï¼åä½ï¼åã |
| | | payRefundId?: number | null // æ¯ä»é款ç¼å· |
| | | refundTime?: Date // 鿬¾æ¶é´ |
| | | logisticsId?: number | null // éè´§ç©æµå
¬å¸ç¼å· |
| | | logisticsNo?: string // éè´§ç©æµåå· |
| | | deliveryTime?: Date // éè´§æ¶é´ |
| | | receiveTime?: Date // æ¶è´§æ¶é´ |
| | | receiveReason?: string // æ¶è´§å¤æ³¨ |
| | | } |
| | | |
| | | export interface ProductPropertiesVO { |
| | | propertyId?: number | null // 屿§çç¼å· |
| | | propertyName?: string // 屿§çåç§° |
| | | valueId?: number | null //屿§å¼çç¼å· |
| | | valueName?: string // 屿§å¼çåç§° |
| | | } |
| | | |
| | | // è·å¾äº¤æå®åå页 |
| | | export const getAfterSalePage = async (params) => { |
| | | return await request.get({ url: `/trade/after-sale/page`, params }) |
| | | } |
| | | |
| | | // è·å¾äº¤æå®å详æ
|
| | | export const getAfterSale = async (id: any) => { |
| | | return await request.get({ url: `/trade/after-sale/get-detail?id=${id}` }) |
| | | } |
| | | |
| | | // åæå®å |
| | | export const agree = async (id: any) => { |
| | | return await request.put({ url: `/trade/after-sale/agree?id=${id}` }) |
| | | } |
| | | |
| | | // æç»å®å |
| | | export const disagree = async (data: any) => { |
| | | return await request.put({ url: `/trade/after-sale/disagree`, data }) |
| | | } |
| | | |
| | | // 确认æ¶è´§ |
| | | export const receive = async (id: any) => { |
| | | return await request.put({ url: `/trade/after-sale/receive?id=${id}` }) |
| | | } |
| | | |
| | | // æç»æ¶è´§ |
| | | export const refuse = async (id: any) => { |
| | | return await request.put({ url: `/trade/after-sale/refuse?id=${id}` }) |
| | | } |
| | | |
| | | // ç¡®è®¤éæ¬¾ |
| | | export const refund = async (id: any) => { |
| | | return await request.put({ url: `/trade/after-sale/refund?id=${id}` }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // æ¥è¯¢ä½£éè®°å½å表 |
| | | export const getBrokerageRecordPage = async (params: any) => { |
| | | return await request.get({ url: `/trade/brokerage-record/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ä½£éè®°å½è¯¦æ
|
| | | export const getBrokerageRecord = async (id: number) => { |
| | | return await request.get({ url: `/trade/brokerage-record/get?id=` + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface BrokerageUserVO { |
| | | id: number |
| | | bindUserId: number |
| | | bindUserTime: Date |
| | | brokerageEnabled: boolean |
| | | brokerageTime: Date |
| | | price: number |
| | | frozenPrice: number |
| | | |
| | | nickname: string |
| | | avatar: string |
| | | } |
| | | |
| | | // å建åéç¨æ· |
| | | export const createBrokerageUser = (data: any) => { |
| | | return request.post({ url: '/trade/brokerage-user/create', data }) |
| | | } |
| | | |
| | | // æ¥è¯¢åéç¨æ·å表 |
| | | export const getBrokerageUserPage = async (params: any) => { |
| | | return await request.get({ url: `/trade/brokerage-user/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢åéç¨æ·è¯¦æ
|
| | | export const getBrokerageUser = async (id: number) => { |
| | | return await request.get({ url: `/trade/brokerage-user/get?id=` + id }) |
| | | } |
| | | |
| | | // ä¿®æ¹æ¨å¹¿å |
| | | export const updateBindUser = async (data: any) => { |
| | | return await request.put({ url: `/trade/brokerage-user/update-bind-user`, data }) |
| | | } |
| | | |
| | | // æ¸
餿¨å¹¿å |
| | | export const clearBindUser = async (data: any) => { |
| | | return await request.put({ url: `/trade/brokerage-user/clear-bind-user`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹æ¨å¹¿èµæ ¼ |
| | | export const updateBrokerageEnabled = async (data: any) => { |
| | | return await request.put({ url: `/trade/brokerage-user/update-brokerage-enable`, data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface BrokerageWithdrawVO { |
| | | id: number |
| | | userId: number |
| | | price: number |
| | | feePrice: number |
| | | totalPrice: number |
| | | type: number |
| | | userName: string |
| | | userAccount: string |
| | | bankName: string |
| | | bankAddress: string |
| | | qrCodeUrl: string |
| | | status: number |
| | | auditReason: string |
| | | auditTime: Date |
| | | remark: string |
| | | payTransferId?: number |
| | | transferChannelCode?: string |
| | | transferTime?: Date |
| | | transferErrorMsg?: string |
| | | } |
| | | |
| | | // æ¥è¯¢ä½£éæç°å表 |
| | | export const getBrokerageWithdrawPage = async (params: any) => { |
| | | return await request.get({ url: `/trade/brokerage-withdraw/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ä½£éæç°è¯¦æ
|
| | | export const getBrokerageWithdraw = async (id: number) => { |
| | | return await request.get({ url: `/trade/brokerage-withdraw/get?id=` + id }) |
| | | } |
| | | |
| | | // ä½£éæç° - éè¿ç³è¯· |
| | | export const approveBrokerageWithdraw = async (id: number) => { |
| | | return await request.put({ url: `/trade/brokerage-withdraw/approve?id=` + id }) |
| | | } |
| | | |
| | | // å®¡æ ¸ä½£éæç° - 驳åç³è¯· |
| | | export const rejectBrokerageWithdraw = async (data: BrokerageWithdrawVO) => { |
| | | return await request.put({ url: `/trade/brokerage-withdraw/reject`, data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface ConfigVO { |
| | | brokerageEnabled: boolean |
| | | brokerageEnabledCondition: number |
| | | brokerageBindMode: number |
| | | brokeragePosterUrls: string |
| | | brokerageFirstPercent: number |
| | | brokerageSecondPercent: number |
| | | brokerageWithdrawMinPrice: number |
| | | brokerageFrozenDays: number |
| | | brokerageWithdrawTypes: string |
| | | } |
| | | |
| | | // æ¥è¯¢äº¤æä¸å¿é
置详æ
|
| | | export const getTradeConfig = async () => { |
| | | return await request.get({ url: `/trade/config/get` }) |
| | | } |
| | | |
| | | // ä¿å交æä¸å¿é
ç½® |
| | | export const saveTradeConfig = async (data: ConfigVO) => { |
| | | return await request.put({ url: `/trade/config/save`, data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface DeliveryExpressVO { |
| | | id: number |
| | | code: string |
| | | name: string |
| | | logo: string |
| | | sort: number |
| | | status: number |
| | | } |
| | | |
| | | // æ¥è¯¢å¿«éå
¬å¸å表 |
| | | export const getDeliveryExpressPage = async (params: PageParam) => { |
| | | return await request.get({ url: '/trade/delivery/express/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢å¿«éå
¬å¸è¯¦æ
|
| | | export const getDeliveryExpress = async (id: number) => { |
| | | return await request.get({ url: '/trade/delivery/express/get?id=' + id }) |
| | | } |
| | | |
| | | // è·å¾å¿«éå
¬å¸ç²¾ç®ä¿¡æ¯å表 |
| | | export const getSimpleDeliveryExpressList = () => { |
| | | return request.get({ url: '/trade/delivery/express/list-all-simple' }) |
| | | } |
| | | |
| | | // æ°å¢å¿«éå
¬å¸ |
| | | export const createDeliveryExpress = async (data: DeliveryExpressVO) => { |
| | | return await request.post({ url: '/trade/delivery/express/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹å¿«éå
¬å¸ |
| | | export const updateDeliveryExpress = async (data: DeliveryExpressVO) => { |
| | | return await request.put({ url: '/trade/delivery/express/update', data }) |
| | | } |
| | | |
| | | // å é¤å¿«éå
¬å¸ |
| | | export const deleteDeliveryExpress = async (id: number) => { |
| | | return await request.delete({ url: '/trade/delivery/express/delete?id=' + id }) |
| | | } |
| | | |
| | | // 导åºå¿«éå
¬å¸ Excel |
| | | export const exportDeliveryExpressApi = async (params) => { |
| | | return await request.download({ url: '/trade/delivery/express/export-excel', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface DeliveryExpressTemplateVO { |
| | | id: number |
| | | name: string |
| | | chargeMode: number |
| | | sort: number |
| | | templateCharge: ExpressTemplateChargeVO[] |
| | | templateFree: ExpressTemplateFreeVO[] |
| | | } |
| | | |
| | | export declare type ExpressTemplateChargeVO = { |
| | | areaIds: number[] |
| | | startCount: number |
| | | startPrice: number |
| | | extraCount: number |
| | | extraPrice: number |
| | | } |
| | | |
| | | export declare type ExpressTemplateFreeVO = { |
| | | areaIds: number[] |
| | | freeCount: number |
| | | freePrice: number |
| | | } |
| | | |
| | | // æ¥è¯¢å¿«éè¿è´¹æ¨¡æ¿å表 |
| | | export const getDeliveryExpressTemplatePage = async (params: PageParam) => { |
| | | return await request.get({ url: '/trade/delivery/express-template/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢å¿«éè¿è´¹æ¨¡æ¿è¯¦æ
|
| | | export const getDeliveryExpressTemplate = async (id: number) => { |
| | | return await request.get({ url: '/trade/delivery/express-template/get?id=' + id }) |
| | | } |
| | | |
| | | // æ¥è¯¢å¿«éè¿è´¹æ¨¡æ¿è¯¦æ
|
| | | export const getSimpleTemplateList = async () => { |
| | | return await request.get({ url: '/trade/delivery/express-template/list-all-simple' }) |
| | | } |
| | | |
| | | // æ°å¢å¿«éè¿è´¹æ¨¡æ¿ |
| | | export const createDeliveryExpressTemplate = async (data: DeliveryExpressTemplateVO) => { |
| | | return await request.post({ url: '/trade/delivery/express-template/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹å¿«éè¿è´¹æ¨¡æ¿ |
| | | export const updateDeliveryExpressTemplate = async (data: DeliveryExpressTemplateVO) => { |
| | | return await request.put({ url: '/trade/delivery/express-template/update', data }) |
| | | } |
| | | |
| | | // å é¤å¿«éè¿è´¹æ¨¡æ¿ |
| | | export const deleteDeliveryExpressTemplate = async (id: number) => { |
| | | return await request.delete({ url: '/trade/delivery/express-template/delete?id=' + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface DeliveryPickUpStoreVO { |
| | | id: number |
| | | name: string |
| | | introduction: string |
| | | phone: string |
| | | areaId: number |
| | | detailAddress: string |
| | | logo: string |
| | | openingTime: string |
| | | closingTime: string |
| | | latitude: number |
| | | longitude: number |
| | | status: number |
| | | verifyUserIds: number[] // ç»å®ç¨æ·ç¼å·ç»æ° |
| | | } |
| | | |
| | | // æ¥è¯¢èªæé¨åºå表 |
| | | export const getDeliveryPickUpStorePage = async (params: any) => { |
| | | return await request.get({ url: '/trade/delivery/pick-up-store/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢èªæé¨åºè¯¦æ
|
| | | export const getDeliveryPickUpStore = async (id: number) => { |
| | | return await request.get({ url: '/trade/delivery/pick-up-store/get?id=' + id }) |
| | | } |
| | | |
| | | // æ¥è¯¢èªæé¨åºç²¾ç®å表 |
| | | export const getSimpleDeliveryPickUpStoreList = async (): Promise<DeliveryPickUpStoreVO[]> => { |
| | | return await request.get({ url: '/trade/delivery/pick-up-store/simple-list' }) |
| | | } |
| | | |
| | | // æ°å¢èªæé¨åº |
| | | export const createDeliveryPickUpStore = async (data: DeliveryPickUpStoreVO) => { |
| | | return await request.post({ url: '/trade/delivery/pick-up-store/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹èªæé¨åº |
| | | export const updateDeliveryPickUpStore = async (data: DeliveryPickUpStoreVO) => { |
| | | return await request.put({ url: '/trade/delivery/pick-up-store/update', data }) |
| | | } |
| | | |
| | | // å é¤èªæé¨åº |
| | | export const deleteDeliveryPickUpStore = async (id: number) => { |
| | | return await request.delete({ url: '/trade/delivery/pick-up-store/delete?id=' + id }) |
| | | } |
| | | |
| | | // ç»å®èªæåºå |
| | | export const bindStoreStaffId = async (data: any) => { |
| | | return await request.post({ url: '/trade/delivery/pick-up-store/bind', data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface OrderVO { |
| | | // ========== 订ååºæ¬ä¿¡æ¯ ========== |
| | | id?: number | null // 订åç¼å· |
| | | no?: string // è®¢åæµæ°´å· |
| | | createTime?: Date | null // ä¸åæ¶é´ |
| | | type?: number | null // 订åç±»å |
| | | terminal?: number | null // è®¢åæ¥æº |
| | | userId?: number | null // ç¨æ·ç¼å· |
| | | userIp?: string // ç¨æ· IP |
| | | userRemark?: string // ç¨æ·å¤æ³¨ |
| | | status?: number | null // 订åç¶æ |
| | | productCount?: number | null // è´ä¹°çååæ°é |
| | | finishTime?: Date | null // 订å宿æ¶é´ |
| | | cancelTime?: Date | null // 订ååæ¶æ¶é´ |
| | | cancelType?: number | null // åæ¶ç±»å |
| | | remark?: string // å家夿³¨ |
| | | |
| | | // ========== ä»·æ ¼ + æ¯ä»åºæ¬ä¿¡æ¯ ========== |
| | | payOrderId?: number | null // æ¯ä»è®¢åç¼å· |
| | | payStatus?: boolean // æ¯å¦å·²æ¯ä» |
| | | payTime?: Date | null // 仿¬¾æ¶é´ |
| | | payChannelCode?: string // æ¯ä»æ¸ é |
| | | totalPrice?: number | null // åååä»·ï¼æ»ï¼ |
| | | discountPrice?: number | null // 订å伿 ï¼æ»ï¼ |
| | | deliveryPrice?: number | null // è¿è´¹éé¢ |
| | | adjustPrice?: number | null // 订åè°ä»·ï¼æ»ï¼ |
| | | payPrice?: number | null // åºä»éé¢ï¼æ»ï¼ |
| | | // ========== æ¶ä»¶ + ç©æµåºæ¬ä¿¡æ¯ ========== |
| | | deliveryType?: number | null // åè´§æ¹å¼ |
| | | pickUpStoreId?: number // èªæé¨åºç¼å· |
| | | pickUpVerifyCode?: string // èªææ ¸éç |
| | | deliveryTemplateId?: number | null // é
鿍¡æ¿ç¼å· |
| | | logisticsId?: number | null // åè´§ç©æµå
¬å¸ç¼å· |
| | | logisticsNo?: string // åè´§ç©æµåå· |
| | | deliveryTime?: Date | null // åè´§æ¶é´ |
| | | receiveTime?: Date | null // æ¶è´§æ¶é´ |
| | | receiverName?: string // æ¶ä»¶äººåç§° |
| | | receiverMobile?: string // æ¶ä»¶äººææº |
| | | receiverPostCode?: number | null // æ¶ä»¶äººé®ç¼ |
| | | receiverAreaId?: number | null // æ¶ä»¶äººå°åºç¼å· |
| | | receiverAreaName?: string //æ¶ä»¶äººå°åºåå |
| | | receiverDetailAddress?: string // æ¶ä»¶äººè¯¦ç»å°å |
| | | |
| | | // ========== å®ååºæ¬ä¿¡æ¯ ========== |
| | | afterSaleStatus?: number | null // å®åç¶æ |
| | | refundPrice?: number | null // 鿬¾éé¢ |
| | | |
| | | // ========== è¥éåºæ¬ä¿¡æ¯ ========== |
| | | couponId?: number | null // 伿 åµç¼å· |
| | | couponPrice?: number | null // 伿 åµåå
éé¢ |
| | | pointPrice?: number | null // ç§¯åæµæ£çéé¢ |
| | | vipPrice?: number | null // VIP åå
éé¢ |
| | | |
| | | items?: OrderItemRespVO[] // 订å项å表 |
| | | // ä¸åç¨æ·ä¿¡æ¯ |
| | | user?: { |
| | | id?: number | null |
| | | nickname?: string |
| | | avatar?: string |
| | | } |
| | | // æ¨å¹¿ç¨æ·ä¿¡æ¯ |
| | | brokerageUser?: { |
| | | id?: number | null |
| | | nickname?: string |
| | | avatar?: string |
| | | } |
| | | // 订åæä½æ¥å¿ |
| | | logs?: OrderLogRespVO[] |
| | | } |
| | | |
| | | export interface OrderLogRespVO { |
| | | content?: string |
| | | createTime?: Date |
| | | userType?: number |
| | | } |
| | | |
| | | export interface OrderItemRespVO { |
| | | // ========== 订åé¡¹åºæ¬ä¿¡æ¯ ========== |
| | | id?: number | null // ç¼å· |
| | | userId?: number | null // ç¨æ·ç¼å· |
| | | orderId?: number | null // 订åç¼å· |
| | | // ========== åååºæ¬ä¿¡æ¯ ========== |
| | | spuId?: number | null // åå SPU ç¼å· |
| | | spuName?: string //åå SPU åç§° |
| | | skuId?: number | null // åå SKU ç¼å· |
| | | picUrl?: string //ååå¾ç |
| | | count?: number | null //è´ä¹°æ°é |
| | | // ========== ä»·æ ¼ + æ¯ä»åºæ¬ä¿¡æ¯ ========== |
| | | originalPrice?: number | null //åååä»·ï¼æ»ï¼ |
| | | originalUnitPrice?: number | null //åååä»·ï¼åï¼ |
| | | discountPrice?: number | null //åå伿 ï¼æ»ï¼ |
| | | payPrice?: number | null //ååå®ä»éé¢ï¼æ»ï¼ |
| | | orderPartPrice?: number | null //å订ååæéé¢ï¼æ»ï¼ |
| | | orderDividePrice?: number | null //åæåå订åå®ä»éé¢ï¼æ»ï¼ |
| | | // ========== è¥éåºæ¬ä¿¡æ¯ ========== |
| | | // TODO èè¿ï¼å¨ææ¸ä¸ä¸ |
| | | // ========== å®ååºæ¬ä¿¡æ¯ ========== |
| | | afterSaleStatus?: number | null // å®åç¶æ |
| | | properties?: ProductPropertiesVO[] //屿§æ°ç» |
| | | } |
| | | |
| | | export interface ProductPropertiesVO { |
| | | propertyId?: number | null // 屿§çç¼å· |
| | | propertyName?: string // 屿§çåç§° |
| | | valueId?: number | null //屿§å¼çç¼å· |
| | | valueName?: string // 屿§å¼çåç§° |
| | | } |
| | | |
| | | /** 交æè®¢åç»è®¡ */ |
| | | export interface TradeOrderSummaryRespVO { |
| | | /** è®¢åæ°é */ |
| | | orderCount?: number |
| | | /** 订åéé¢ */ |
| | | orderPayPrice?: string |
| | | /** 鿬¾åæ° */ |
| | | afterSaleCount?: number |
| | | /** 鿬¾éé¢ */ |
| | | afterSalePrice?: string |
| | | } |
| | | |
| | | // æ¥è¯¢äº¤æè®¢åå表 |
| | | export const getOrderPage = async (params: any) => { |
| | | return await request.get({ url: `/trade/order/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢äº¤æè®¢åç»è®¡ |
| | | export const getOrderSummary = async (params: any) => { |
| | | return await request.get<TradeOrderSummaryRespVO>({ url: `/trade/order/summary`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢äº¤æè®¢å详æ
|
| | | export const getOrder = async (id: number | null) => { |
| | | return await request.get({ url: `/trade/order/get-detail?id=` + id }) |
| | | } |
| | | |
| | | // æ¥è¯¢äº¤æè®¢åç©æµè¯¦æ
|
| | | export const getExpressTrackList = async (id: number | null) => { |
| | | return await request.get({ url: `/trade/order/get-express-track-list?id=` + id }) |
| | | } |
| | | |
| | | export interface DeliveryVO { |
| | | id?: number // 订åç¼å· |
| | | logisticsId: number | null // ç©æµå
¬å¸ç¼å· |
| | | logisticsNo: string // ç©æµç¼å· |
| | | } |
| | | |
| | | // 订ååè´§ |
| | | export const deliveryOrder = async (data: DeliveryVO) => { |
| | | return await request.put({ url: `/trade/order/delivery`, data }) |
| | | } |
| | | |
| | | // 订å夿³¨ |
| | | export const updateOrderRemark = async (data: any) => { |
| | | return await request.put({ url: `/trade/order/update-remark`, data }) |
| | | } |
| | | |
| | | // 订åè°ä»· |
| | | export const updateOrderPrice = async (data: any) => { |
| | | return await request.put({ url: `/trade/order/update-price`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹è®¢åå°å |
| | | export const updateOrderAddress = async (data: any) => { |
| | | return await request.put({ url: `/trade/order/update-address`, data }) |
| | | } |
| | | |
| | | // è®¢åæ ¸é |
| | | export const pickUpOrder = async (id: number) => { |
| | | return await request.put({ url: `/trade/order/pick-up-by-id?id=${id}` }) |
| | | } |
| | | |
| | | // è®¢åæ ¸é |
| | | export const pickUpOrderByVerifyCode = async (pickUpVerifyCode: string) => { |
| | | return await request.put({ |
| | | url: `/trade/order/pick-up-by-verify-code`, |
| | | params: { pickUpVerifyCode } |
| | | }) |
| | | } |
| | | |
| | | // æ¥è¯¢æ ¸éç 对åºç订å |
| | | export const getOrderByPickUpVerifyCode = async (pickUpVerifyCode: string) => { |
| | | return await request.get<OrderVO>({ |
| | | url: `/trade/order/get-by-pick-up-verify-code`, |
| | | params: { pickUpVerifyCode } |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface AddressVO { |
| | | id: number |
| | | name: string |
| | | mobile: string |
| | | areaId: number |
| | | detailAddress: string |
| | | defaultStatus: boolean |
| | | } |
| | | |
| | | // æ¥è¯¢ç¨æ·æ¶ä»¶å°åå表 |
| | | export const getAddressList = async (params) => { |
| | | return await request.get({ url: `/member/address/list`, params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface ConfigVO { |
| | | id: number |
| | | pointTradeDeductEnable: number |
| | | pointTradeDeductUnitPrice: number |
| | | pointTradeDeductMaxPrice: number |
| | | pointTradeGivePoint: number |
| | | } |
| | | |
| | | // æ¥è¯¢ç§¯å设置详æ
|
| | | export const getConfig = async () => { |
| | | return await request.get({ url: `/member/config/get` }) |
| | | } |
| | | |
| | | // æ°å¢ä¿®æ¹ç§¯å设置 |
| | | export const saveConfig = async (data: ConfigVO) => { |
| | | return await request.put({ url: `/member/config/save`, data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface ExperienceRecordVO { |
| | | id: number |
| | | userId: number |
| | | bizId: string |
| | | bizType: number |
| | | title: string |
| | | description: string |
| | | experience: number |
| | | totalExperience: number |
| | | } |
| | | |
| | | // æ¥è¯¢ä¼åç»éªè®°å½å表 |
| | | export const getExperienceRecordPage = async (params) => { |
| | | return await request.get({ url: `/member/experience-record/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ä¼åç»éªè®°å½è¯¦æ
|
| | | export const getExperienceRecord = async (id: number) => { |
| | | return await request.get({ url: `/member/experience-record/get?id=` + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface GroupVO { |
| | | id: number |
| | | name: string |
| | | remark: string |
| | | status: number |
| | | } |
| | | |
| | | // æ¥è¯¢ç¨æ·åç»å表 |
| | | export const getGroupPage = async (params: any) => { |
| | | return await request.get({ url: `/member/group/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ç¨æ·åç»è¯¦æ
|
| | | export const getGroup = async (id: number) => { |
| | | return await request.get({ url: `/member/group/get?id=` + id }) |
| | | } |
| | | |
| | | // æ°å¢ç¨æ·åç» |
| | | export const createGroup = async (data: GroupVO) => { |
| | | return await request.post({ url: `/member/group/create`, data }) |
| | | } |
| | | |
| | | // æ¥è¯¢ç¨æ·åç» - ç²¾ç®ä¿¡æ¯å表 |
| | | export const getSimpleGroupList = async () => { |
| | | return await request.get({ url: `/member/group/list-all-simple` }) |
| | | } |
| | | |
| | | // ä¿®æ¹ç¨æ·åç» |
| | | export const updateGroup = async (data: GroupVO) => { |
| | | return await request.put({ url: `/member/group/update`, data }) |
| | | } |
| | | |
| | | // å é¤ç¨æ·åç» |
| | | export const deleteGroup = async (id: number) => { |
| | | return await request.delete({ url: `/member/group/delete?id=` + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface LevelVO { |
| | | id: number |
| | | name: string |
| | | experience: number |
| | | value: number |
| | | discountPercent: number |
| | | icon: string |
| | | bgUrl: string |
| | | status: number |
| | | } |
| | | |
| | | // æ¥è¯¢ä¼åç级å表 |
| | | export const getLevelList = async (params) => { |
| | | return await request.get({ url: `/member/level/list`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ä¼åç级详æ
|
| | | export const getLevel = async (id: number) => { |
| | | return await request.get({ url: `/member/level/get?id=` + id }) |
| | | } |
| | | |
| | | // æ¥è¯¢ä¼åç级 - ç²¾ç®ä¿¡æ¯å表 |
| | | export const getSimpleLevelList = async () => { |
| | | return await request.get({ url: `/member/level/list-all-simple` }) |
| | | } |
| | | |
| | | // æ°å¢ä¼åç级 |
| | | export const createLevel = async (data: LevelVO) => { |
| | | return await request.post({ url: `/member/level/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ä¼åç级 |
| | | export const updateLevel = async (data: LevelVO) => { |
| | | return await request.put({ url: `/member/level/update`, data }) |
| | | } |
| | | |
| | | // å é¤ä¼åç级 |
| | | export const deleteLevel = async (id: number) => { |
| | | return await request.delete({ url: `/member/level/delete?id=` + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface RecordVO { |
| | | id: number |
| | | bizId: string |
| | | bizType: string |
| | | title: string |
| | | description: string |
| | | point: number |
| | | totalPoint: number |
| | | userId: number |
| | | createDate: Date |
| | | } |
| | | |
| | | // æ¥è¯¢ç¨æ·ç§¯åè®°å½å表 |
| | | export const getRecordPage = async (params) => { |
| | | return await request.get({ url: `/member/point/record/page`, params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface SignInConfigVO { |
| | | id?: number |
| | | day?: number |
| | | point?: number |
| | | experience?: number |
| | | status?: number |
| | | } |
| | | |
| | | // æ¥è¯¢ç§¯åç¾å°è§åå表 |
| | | export const getSignInConfigList = async () => { |
| | | return await request.get({ url: `/member/sign-in/config/list` }) |
| | | } |
| | | |
| | | // æ¥è¯¢ç§¯åç¾å°è§å详æ
|
| | | export const getSignInConfig = async (id: number) => { |
| | | return await request.get({ url: `/member/sign-in/config/get?id=` + id }) |
| | | } |
| | | |
| | | // æ°å¢ç§¯åç¾å°è§å |
| | | export const createSignInConfig = async (data: SignInConfigVO) => { |
| | | return await request.post({ url: `/member/sign-in/config/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ç§¯åç¾å°è§å |
| | | export const updateSignInConfig = async (data: SignInConfigVO) => { |
| | | return await request.put({ url: `/member/sign-in/config/update`, data }) |
| | | } |
| | | |
| | | // å é¤ç§¯åç¾å°è§å |
| | | export const deleteSignInConfig = async (id: number) => { |
| | | return await request.delete({ url: `/member/sign-in/config/delete?id=` + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface SignInRecordVO { |
| | | id: number |
| | | userId: number |
| | | day: number |
| | | point: number |
| | | } |
| | | |
| | | // æ¥è¯¢ç¨æ·ç¾å°ç§¯åå表 |
| | | export const getSignInRecordPage = async (params) => { |
| | | return await request.get({ url: `/member/sign-in/record/page`, params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface TagVO { |
| | | id: number |
| | | name: string |
| | | } |
| | | |
| | | // æ¥è¯¢ä¼åæ ç¾å表 |
| | | export const getMemberTagPage = async (params: any) => { |
| | | return await request.get({ url: `/member/tag/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ä¼åæ ç¾è¯¦æ
|
| | | export const getMemberTag = async (id: number) => { |
| | | return await request.get({ url: `/member/tag/get?id=` + id }) |
| | | } |
| | | |
| | | // æ¥è¯¢ä¼åæ ç¾ - ç²¾ç®ä¿¡æ¯å表 |
| | | export const getSimpleTagList = async () => { |
| | | return await request.get({ url: `/member/tag/list-all-simple` }) |
| | | } |
| | | |
| | | // æ°å¢ä¼åæ ç¾ |
| | | export const createMemberTag = async (data: TagVO) => { |
| | | return await request.post({ url: `/member/tag/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ä¼åæ ç¾ |
| | | export const updateMemberTag = async (data: TagVO) => { |
| | | return await request.put({ url: `/member/tag/update`, data }) |
| | | } |
| | | |
| | | // å é¤ä¼åæ ç¾ |
| | | export const deleteMemberTag = async (id: number) => { |
| | | return await request.delete({ url: `/member/tag/delete?id=` + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface UserVO { |
| | | id: number |
| | | avatar: string | undefined |
| | | birthday: number | undefined |
| | | createTime: number | undefined |
| | | loginDate: number | undefined |
| | | loginIp: string |
| | | mark: string |
| | | mobile: string |
| | | name: string | undefined |
| | | nickname: string | undefined |
| | | registerIp: string |
| | | sex: number |
| | | status: number |
| | | areaId: number | undefined |
| | | areaName: string | undefined |
| | | levelName: string | null |
| | | point: number | undefined | null |
| | | totalPoint: number | undefined | null |
| | | experience: number | null | undefined |
| | | } |
| | | |
| | | // æ¥è¯¢ä¼åç¨æ·å表 |
| | | export const getUserPage = async (params) => { |
| | | return await request.get({ url: `/member/user/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ä¼åç¨æ·è¯¦æ
|
| | | export const getUser = async (id: number) => { |
| | | return await request.get({ url: `/member/user/get?id=` + id }) |
| | | } |
| | | |
| | | // ä¿®æ¹ä¼åç¨æ· |
| | | export const updateUser = async (data: UserVO) => { |
| | | return await request.put({ url: `/member/user/update`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ä¼åç¨æ·ç级 |
| | | export const updateUserLevel = async (data: any) => { |
| | | return await request.put({ url: `/member/user/update-level`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ä¼åç¨æ·ç§¯å |
| | | export const updateUserPoint = async (data: any) => { |
| | | return await request.put({ url: `/member/user/update-point`, data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface AccountVO { |
| | | id: number |
| | | name: string |
| | | } |
| | | |
| | | // å建å
¬ä¼å·è´¦å· |
| | | export const createAccount = async (data) => { |
| | | return await request.post({ url: '/mp/account/create', data }) |
| | | } |
| | | |
| | | // æ´æ°å
¬ä¼å·è´¦å· |
| | | export const updateAccount = async (data) => { |
| | | return request.put({ url: '/mp/account/update', data: data }) |
| | | } |
| | | |
| | | // å é¤å
¬ä¼å·è´¦å· |
| | | export const deleteAccount = async (id) => { |
| | | return request.delete({ url: '/mp/account/delete?id=' + id, method: 'delete' }) |
| | | } |
| | | |
| | | // è·å¾å
¬ä¼å·è´¦å· |
| | | export const getAccount = async (id) => { |
| | | return request.get({ url: '/mp/account/get?id=' + id }) |
| | | } |
| | | |
| | | // è·å¾å
¬ä¼å·è´¦å·å页 |
| | | export const getAccountPage = async (query) => { |
| | | return request.get({ url: '/mp/account/page', params: query }) |
| | | } |
| | | |
| | | // è·åå
¬ä¼å·è´¦å·ç²¾ç®ä¿¡æ¯å表 |
| | | export const getSimpleAccountList = async () => { |
| | | return request.get({ url: '/mp/account/list-all-simple' }) |
| | | } |
| | | |
| | | // çæå
¬ä¼å·äºç»´ç |
| | | export const generateAccountQrCode = async (id) => { |
| | | return request.put({ url: '/mp/account/generate-qr-code?id=' + id }) |
| | | } |
| | | |
| | | // æ¸
空å
¬ä¼å· API é
é¢ |
| | | export const clearAccountQuota = async (id) => { |
| | | return request.put({ url: '/mp/account/clear-quota?id=' + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // å建å
¬ä¼å·çèªå¨åå¤ |
| | | export const createAutoReply = (data) => { |
| | | return request.post({ |
| | | url: '/mp/auto-reply/create', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // æ´æ°å
¬ä¼å·çèªå¨åå¤ |
| | | export const updateAutoReply = (data) => { |
| | | return request.put({ |
| | | url: '/mp/auto-reply/update', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // å é¤å
¬ä¼å·çèªå¨åå¤ |
| | | export const deleteAutoReply = (id) => { |
| | | return request.delete({ |
| | | url: '/mp/auto-reply/delete?id=' + id |
| | | }) |
| | | } |
| | | |
| | | // è·å¾å
¬ä¼å·çèªå¨åå¤ |
| | | export const getAutoReply = (id) => { |
| | | return request.get({ |
| | | url: '/mp/auto-reply/get?id=' + id |
| | | }) |
| | | } |
| | | |
| | | // è·å¾å
¬ä¼å·çèªå¨åå¤å页 |
| | | export const getAutoReplyPage = (query) => { |
| | | return request.get({ |
| | | url: '/mp/auto-reply/page', |
| | | params: query |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // è·å¾å
¬ä¼å·è稿å页 |
| | | export const getDraftPage = (query) => { |
| | | return request.get({ |
| | | url: '/mp/draft/page', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // å建å
¬ä¼å·è稿 |
| | | export const createDraft = (accountId, articles) => { |
| | | return request.post({ |
| | | url: '/mp/draft/create?accountId=' + accountId, |
| | | data: { |
| | | articles |
| | | } |
| | | }) |
| | | } |
| | | |
| | | // æ´æ°å
¬ä¼å·è稿 |
| | | export const updateDraft = (accountId, mediaId, articles) => { |
| | | return request.put({ |
| | | url: '/mp/draft/update?accountId=' + accountId + '&mediaId=' + mediaId, |
| | | method: 'put', |
| | | data: articles |
| | | }) |
| | | } |
| | | |
| | | // å é¤å
¬ä¼å·è稿 |
| | | export const deleteDraft = (accountId, mediaId) => { |
| | | return request.delete({ |
| | | url: '/mp/draft/delete?accountId=' + accountId + '&mediaId=' + mediaId |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // è·å¾å
¬ä¼å·ç´ æå页 |
| | | export const getFreePublishPage = (query) => { |
| | | return request.get({ |
| | | url: '/mp/free-publish/page', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // å é¤å
¬ä¼å·ç´ æ |
| | | export const deleteFreePublish = (accountId, articleId) => { |
| | | return request.delete({ |
| | | url: '/mp/free-publish/delete?accountId=' + accountId + '&articleId=' + articleId |
| | | }) |
| | | } |
| | | |
| | | // åå¸å
¬ä¼å·ç´ æ |
| | | export const submitFreePublish = (accountId, mediaId) => { |
| | | return request.post({ |
| | | url: '/mp/free-publish/submit?accountId=' + accountId + '&mediaId=' + mediaId |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // è·å¾å
¬ä¼å·ç´ æå页 |
| | | export const getMaterialPage = (query) => { |
| | | return request.get({ |
| | | url: '/mp/material/page', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // å é¤å
¬ä¼å·æ°¸ä¹
ç´ æ |
| | | export const deletePermanentMaterial = (id) => { |
| | | return request.delete({ |
| | | url: '/mp/material/delete-permanent?id=' + id |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // è·å¾å
¬ä¼å·èåå表 |
| | | export const getMenuList = (accountId) => { |
| | | return request.get({ |
| | | url: '/mp/menu/list?accountId=' + accountId |
| | | }) |
| | | } |
| | | |
| | | // ä¿åå
¬ä¼å·èå |
| | | export const saveMenu = (accountId, menus) => { |
| | | return request.post({ |
| | | url: '/mp/menu/save', |
| | | data: { |
| | | accountId, |
| | | menus |
| | | } |
| | | }) |
| | | } |
| | | |
| | | // å é¤å
¬ä¼å·èå |
| | | export const deleteMenu = (accountId) => { |
| | | return request.delete({ |
| | | url: '/mp/menu/delete?accountId=' + accountId |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // è·å¾å
¬ä¼å·æ¶æ¯å页 |
| | | export const getMessagePage = (query: PageParam) => { |
| | | return request.get({ |
| | | url: '/mp/message/page', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // ç»ç²ä¸åéæ¶æ¯ |
| | | export const sendMessage = (data) => { |
| | | return request.post({ |
| | | url: '/mp/message/send', |
| | | data: data |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // æ¶æ¯æ¨¡æ¿ VO |
| | | export interface MsgTemplateVO { |
| | | id: number // 模çä¸»é® |
| | | accountId: number // å
¬ä¼å·è´¦å·çç¼å· |
| | | appId: string // appId |
| | | templateId: string // å
¬ä¼å·æ¨¡æ¿ ID |
| | | title: string // æ é¢ |
| | | content: string // 模æ¿å
容 |
| | | example: string // 模æ¿ç¤ºä¾ |
| | | primaryIndustry: string // æ¨¡æ¿æå±è¡ä¸çä¸çº§è¡ä¸ |
| | | deputyIndustry: string // æ¨¡æ¿æå±è¡ä¸çäºçº§è¡ä¸ |
| | | createTime: Date // å建æ¶é´ |
| | | } |
| | | |
| | | // åéæ¶æ¯æ¨¡æ¿è¯·æ± VO |
| | | export interface MsgTemplateSendVO { |
| | | id: number // 模æ¿ç¼å· |
| | | userId: number // ç¨æ·ç¼å· |
| | | data?: string // æ¨¡æ¿æ°æ®ï¼JSON æ ¼å¼åç¬¦ä¸²ï¼ |
| | | url?: string // è·³è½¬é¾æ¥ |
| | | miniProgramAppId?: string // å°ç¨åº appId |
| | | miniProgramPagePath?: string // å°ç¨åºé¡µé¢è·¯å¾ |
| | | miniprogram?: string // å°ç¨åºä¿¡æ¯ï¼JSON æ ¼å¼åç¬¦ä¸²ï¼ |
| | | } |
| | | |
| | | // å
¬ä¼å·æ¶æ¯æ¨¡æ¿ API |
| | | export const MessageTemplateApi = { |
| | | // æ¥è¯¢æ¶æ¯æ¨¡æ¿å页 |
| | | getMessageTemplateList: async (params: any) => { |
| | | return await request.get({ url: `/mp/message-template/list`, params }) |
| | | }, |
| | | |
| | | // å 餿¶æ¯æ¨¡æ¿ |
| | | deleteMessageTemplate: async (id: number) => { |
| | | return await request.delete({ url: `/mp/message-template/delete?id=` + id }) |
| | | }, |
| | | |
| | | // 忥å
¬ä¼å·æ¨¡æ¿ |
| | | syncMessageTemplate: async (accountId: number) => { |
| | | return await request.post({ url: `/mp/message-template/sync?accountId=` + accountId }) |
| | | }, |
| | | |
| | | // åéæ¶æ¯æ¨¡æ¿ |
| | | sendMessageTemplate: async (data: MsgTemplateSendVO) => { |
| | | return await request.post({ url: `/mp/message-template/send`, data }) |
| | | } |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // è·åæ¶æ¯å鿦嵿°æ® |
| | | export const getUpstreamMessage = (query) => { |
| | | return request.get({ |
| | | url: '/mp/statistics/upstream-message', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // ç¨æ·å¢åæ°æ® |
| | | export const getUserSummary = (query) => { |
| | | return request.get({ |
| | | url: '/mp/statistics/user-summary', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // è·å¾ç¨æ·ç´¯è®¡æ°æ® |
| | | export const getUserCumulate = (query) => { |
| | | return request.get({ |
| | | url: '/mp/statistics/user-cumulate', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // è·å¾æ¥å£åææ°æ® |
| | | export const getInterfaceSummary = (query) => { |
| | | return request.get({ |
| | | url: '/mp/statistics/interface-summary', |
| | | params: query |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface TagVO { |
| | | id?: number |
| | | name: string |
| | | accountId: number |
| | | createTime: Date |
| | | } |
| | | |
| | | // å建å
¬ä¼å·æ ç¾ |
| | | export const createTag = (data: TagVO) => { |
| | | return request.post({ |
| | | url: '/mp/tag/create', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // æ´æ°å
¬ä¼å·æ ç¾ |
| | | export const updateTag = (data: TagVO) => { |
| | | return request.put({ |
| | | url: '/mp/tag/update', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // å é¤å
¬ä¼å·æ ç¾ |
| | | export const deleteTag = (id: number) => { |
| | | return request.delete({ |
| | | url: '/mp/tag/delete?id=' + id |
| | | }) |
| | | } |
| | | |
| | | // è·å¾å
¬ä¼å·æ ç¾ |
| | | export const getTag = (id: number) => { |
| | | return request.get({ |
| | | url: '/mp/tag/get?id=' + id |
| | | }) |
| | | } |
| | | |
| | | // è·å¾å
¬ä¼å·æ ç¾å页 |
| | | export const getTagPage = (query: PageParam) => { |
| | | return request.get({ |
| | | url: '/mp/tag/page', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // è·åå
¬ä¼å·æ ç¾ç²¾ç®ä¿¡æ¯å表 |
| | | export const getSimpleTagList = () => { |
| | | return request.get({ |
| | | url: '/mp/tag/list-all-simple' |
| | | }) |
| | | } |
| | | |
| | | // 忥å
¬ä¼å·æ ç¾ |
| | | export const syncTag = (accountId: number) => { |
| | | return request.post({ |
| | | url: '/mp/tag/sync?accountId=' + accountId |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // æ´æ°å
¬ä¼å·ç²ä¸ |
| | | export const updateUser = (data) => { |
| | | return request.put({ |
| | | url: '/mp/user/update', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // è·å¾å
¬ä¼å·ç²ä¸ |
| | | export const getUser = (id) => { |
| | | return request.get({ |
| | | url: '/mp/user/get?id=' + id |
| | | }) |
| | | } |
| | | |
| | | // è·å¾å
¬ä¼å·ç²ä¸å页 |
| | | export const getUserPage = (query) => { |
| | | return request.get({ |
| | | url: '/mp/user/page', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // 忥å
¬ä¼å·ç²ä¸ |
| | | export const syncUser = (accountId) => { |
| | | return request.post({ |
| | | url: '/mp/user/sync?accountId=' + accountId |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface AppVO { |
| | | id: number |
| | | appKey: string |
| | | name: string |
| | | status: number |
| | | remark: string |
| | | payNotifyUrl: string |
| | | refundNotifyUrl: string |
| | | transferNotifyUrl: string |
| | | merchantId: number |
| | | merchantName: string |
| | | createTime: Date |
| | | } |
| | | |
| | | export interface AppPageReqVO extends PageParam { |
| | | name?: string |
| | | status?: number |
| | | remark?: string |
| | | payNotifyUrl?: string |
| | | refundNotifyUrl?: string |
| | | transferNotifyUrl?: string |
| | | merchantName?: string |
| | | createTime?: Date[] |
| | | } |
| | | |
| | | export interface AppUpdateStatusReqVO { |
| | | id: number |
| | | status: number |
| | | } |
| | | |
| | | // æ¥è¯¢å表æ¯ä»åºç¨ |
| | | export const getAppPage = (params: AppPageReqVO) => { |
| | | return request.get({ url: '/pay/app/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢è¯¦æ
æ¯ä»åºç¨ |
| | | export const getApp = (id: number) => { |
| | | return request.get({ url: '/pay/app/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢æ¯ä»åºç¨ |
| | | export const createApp = (data: AppVO) => { |
| | | return request.post({ url: '/pay/app/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹æ¯ä»åºç¨ |
| | | export const updateApp = (data: AppVO) => { |
| | | return request.put({ url: '/pay/app/update', data }) |
| | | } |
| | | |
| | | // æ¯ä»åºç¨ä¿¡æ¯ç¶æä¿®æ¹ |
| | | export const changeAppStatus = (data: AppUpdateStatusReqVO) => { |
| | | return request.put({ url: '/pay/app/update-status', data: data }) |
| | | } |
| | | |
| | | // å 餿¯ä»åºç¨ |
| | | export const deleteApp = (id: number) => { |
| | | return request.delete({ url: '/pay/app/delete?id=' + id }) |
| | | } |
| | | |
| | | // è·å¾æ¯ä»åºç¨å表 |
| | | export const getAppList = () => { |
| | | return request.get({ |
| | | url: '/pay/app/list' |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface ChannelVO { |
| | | id: number |
| | | code: string |
| | | config: string |
| | | status: number |
| | | remark: string |
| | | feeRate: number |
| | | appId: number |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢å表æ¯ä»æ¸ é |
| | | export const getChannelPage = (params: PageParam) => { |
| | | return request.get({ url: '/pay/channel/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢è¯¦æ
æ¯ä»æ¸ é |
| | | export const getChannel = (appId: string, code: string) => { |
| | | const params = { |
| | | appId: appId, |
| | | code: code |
| | | } |
| | | return request.get({ url: '/pay/channel/get', params: params }) |
| | | } |
| | | |
| | | // æ°å¢æ¯ä»æ¸ é |
| | | export const createChannel = (data: ChannelVO) => { |
| | | return request.post({ url: '/pay/channel/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹æ¯ä»æ¸ é |
| | | export const updateChannel = (data: ChannelVO) => { |
| | | return request.put({ url: '/pay/channel/update', data }) |
| | | } |
| | | |
| | | // å 餿¯ä»æ¸ é |
| | | export const deleteChannel = (id: number) => { |
| | | return request.delete({ url: '/pay/channel/delete?id=' + id }) |
| | | } |
| | | |
| | | // å¯¼åºæ¯ä»æ¸ é |
| | | export const exportChannel = (params) => { |
| | | return request.download({ url: '/pay/channel/export-excel', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface DemoOrderVO { |
| | | spuId: number |
| | | createTime: Date |
| | | } |
| | | |
| | | // å建示ä¾è®¢å |
| | | export function createDemoOrder(data: DemoOrderVO) { |
| | | return request.post({ |
| | | url: '/pay/demo-order/create', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // è·å¾ç¤ºä¾è®¢åå页 |
| | | export function getDemoOrderPage(query: PageParam) { |
| | | return request.get({ |
| | | url: '/pay/demo-order/page', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // 鿬¾ç¤ºä¾è®¢å |
| | | export function refundDemoOrder(id: number) { |
| | | return request.put({ |
| | | url: '/pay/demo-order/refund?id=' + id |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface PayDemoWithdrawVO { |
| | | id?: number |
| | | subject: string |
| | | price: number |
| | | userName: string |
| | | userAccount: string |
| | | type: number |
| | | status?: number |
| | | payTransferId?: number |
| | | transferChannelCode?: string |
| | | transferTime?: Date |
| | | transferErrorMsg?: string |
| | | } |
| | | |
| | | // æ¥è¯¢ç¤ºä¾æç°åå表 |
| | | export const getDemoWithdrawPage = (params: PageParam) => { |
| | | return request.get({ url: '/pay/demo-withdraw/page', params }) |
| | | } |
| | | |
| | | // åå»ºç¤ºä¾æç°å |
| | | export const createDemoWithdraw = (data: PayDemoWithdrawVO) => { |
| | | return request.post({ url: '/pay/demo-withdraw/create', data }) |
| | | } |
| | | |
| | | // åèµ·æç°å转账 |
| | | export const transferDemoWithdraw = (id: number) => { |
| | | return request.post({ url: '/pay/demo-withdraw/transfer', params: { id } }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // è·å¾æ¯ä»éç¥æç» |
| | | export const getNotifyTaskDetail = (id) => { |
| | | return request.get({ |
| | | url: '/pay/notify/get-detail?id=' + id |
| | | }) |
| | | } |
| | | |
| | | // è·å¾æ¯ä»éç¥å页 |
| | | export const getNotifyTaskPage = (query) => { |
| | | return request.get({ |
| | | url: '/pay/notify/page', |
| | | params: query |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface OrderVO { |
| | | id: number |
| | | merchantId: number |
| | | appId: number |
| | | channelId: number |
| | | channelCode: string |
| | | merchantOrderId: string |
| | | subject: string |
| | | body: string |
| | | notifyUrl: string |
| | | notifyStatus: number |
| | | amount: number |
| | | channelFeeRate: number |
| | | channelFeeAmount: number |
| | | status: number |
| | | userIp: string |
| | | expireTime: Date |
| | | successTime: Date |
| | | notifyTime: Date |
| | | successExtensionId: number |
| | | refundStatus: number |
| | | refundTimes: number |
| | | refundAmount: number |
| | | channelUserId: string |
| | | channelOrderNo: string |
| | | createTime: Date |
| | | } |
| | | |
| | | export interface OrderPageReqVO extends PageParam { |
| | | merchantId?: number |
| | | appId?: number |
| | | channelId?: number |
| | | channelCode?: string |
| | | merchantOrderId?: string |
| | | subject?: string |
| | | body?: string |
| | | notifyUrl?: string |
| | | notifyStatus?: number |
| | | amount?: number |
| | | channelFeeRate?: number |
| | | channelFeeAmount?: number |
| | | status?: number |
| | | expireTime?: Date[] |
| | | successTime?: Date[] |
| | | notifyTime?: Date[] |
| | | successExtensionId?: number |
| | | refundStatus?: number |
| | | refundTimes?: number |
| | | channelUserId?: string |
| | | channelOrderNo?: string |
| | | createTime?: Date[] |
| | | } |
| | | |
| | | export interface OrderExportReqVO { |
| | | merchantId?: number |
| | | appId?: number |
| | | channelId?: number |
| | | channelCode?: string |
| | | merchantOrderId?: string |
| | | subject?: string |
| | | body?: string |
| | | notifyUrl?: string |
| | | notifyStatus?: number |
| | | amount?: number |
| | | channelFeeRate?: number |
| | | channelFeeAmount?: number |
| | | status?: number |
| | | expireTime?: Date[] |
| | | successTime?: Date[] |
| | | notifyTime?: Date[] |
| | | successExtensionId?: number |
| | | refundStatus?: number |
| | | refundTimes?: number |
| | | channelUserId?: string |
| | | channelOrderNo?: string |
| | | createTime?: Date[] |
| | | } |
| | | |
| | | // æ¥è¯¢å表æ¯ä»è®¢å |
| | | export const getOrderPage = async (params: OrderPageReqVO) => { |
| | | return await request.get({ url: '/pay/order/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢è¯¦æ
æ¯ä»è®¢å |
| | | export const getOrder = async (id: number, sync?: boolean) => { |
| | | return await request.get({ |
| | | url: '/pay/order/get', |
| | | params: { |
| | | id, |
| | | sync |
| | | } |
| | | }) |
| | | } |
| | | |
| | | // è·å¾æ¯ä»è®¢åçæç» |
| | | export const getOrderDetail = async (id: number) => { |
| | | return await request.get({ url: '/pay/order/get-detail?id=' + id }) |
| | | } |
| | | |
| | | // æäº¤æ¯ä»è®¢å |
| | | export const submitOrder = async (data: any) => { |
| | | return await request.post({ url: '/pay/order/submit', data }) |
| | | } |
| | | |
| | | // å¯¼åºæ¯ä»è®¢å |
| | | export const exportOrder = async (params: OrderExportReqVO) => { |
| | | return await request.download({ url: '/pay/order/export-excel', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface RefundVO { |
| | | id: number |
| | | merchantId: number |
| | | appId: number |
| | | channelId: number |
| | | channelCode: string |
| | | orderId: string |
| | | tradeNo: string |
| | | merchantOrderId: string |
| | | merchantRefundNo: string |
| | | notifyUrl: string |
| | | notifyStatus: number |
| | | status: number |
| | | type: number |
| | | payAmount: number |
| | | refundAmount: number |
| | | reason: string |
| | | userIp: string |
| | | channelOrderNo: string |
| | | channelRefundNo: string |
| | | channelErrorCode: string |
| | | channelErrorMsg: string |
| | | channelExtras: string |
| | | expireTime: Date |
| | | successTime: Date |
| | | notifyTime: Date |
| | | createTime: Date |
| | | } |
| | | |
| | | export interface RefundPageReqVO extends PageParam { |
| | | merchantId?: number |
| | | appId?: number |
| | | channelId?: number |
| | | channelCode?: string |
| | | orderId?: string |
| | | tradeNo?: string |
| | | merchantOrderId?: string |
| | | merchantRefundNo?: string |
| | | notifyUrl?: string |
| | | notifyStatus?: number |
| | | status?: number |
| | | type?: number |
| | | payAmount?: number |
| | | refundAmount?: number |
| | | reason?: string |
| | | userIp?: string |
| | | channelOrderNo?: string |
| | | channelRefundNo?: string |
| | | channelErrorCode?: string |
| | | channelErrorMsg?: string |
| | | channelExtras?: string |
| | | expireTime?: Date[] |
| | | successTime?: Date[] |
| | | notifyTime?: Date[] |
| | | createTime?: Date[] |
| | | } |
| | | |
| | | export interface PayRefundExportReqVO { |
| | | merchantId?: number |
| | | appId?: number |
| | | channelId?: number |
| | | channelCode?: string |
| | | orderId?: string |
| | | tradeNo?: string |
| | | merchantOrderId?: string |
| | | merchantRefundNo?: string |
| | | notifyUrl?: string |
| | | notifyStatus?: number |
| | | status?: number |
| | | type?: number |
| | | payAmount?: number |
| | | refundAmount?: number |
| | | reason?: string |
| | | userIp?: string |
| | | channelOrderNo?: string |
| | | channelRefundNo?: string |
| | | channelErrorCode?: string |
| | | channelErrorMsg?: string |
| | | channelExtras?: string |
| | | expireTime?: Date[] |
| | | successTime?: Date[] |
| | | notifyTime?: Date[] |
| | | createTime?: Date[] |
| | | } |
| | | |
| | | // æ¥è¯¢åè¡¨éæ¬¾è®¢å |
| | | export const getRefundPage = (params: RefundPageReqVO) => { |
| | | return request.get({ url: '/pay/refund/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢è¯¦æ
鿬¾è®¢å |
| | | export const getRefund = (id: number) => { |
| | | return request.get({ url: '/pay/refund/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢é款订å |
| | | export const createRefund = (data: RefundVO) => { |
| | | return request.post({ url: '/pay/refund/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹é款订å |
| | | export const updateRefund = (data: RefundVO) => { |
| | | return request.put({ url: '/pay/refund/update', data }) |
| | | } |
| | | |
| | | // å é¤é款订å |
| | | export const deleteRefund = (id: number) => { |
| | | return request.delete({ url: '/pay/refund/delete?id=' + id }) |
| | | } |
| | | |
| | | // 导åºé款订å |
| | | export const exportRefund = (params: PayRefundExportReqVO) => { |
| | | return request.download({ url: '/pay/refund/export-excel', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // æ¥è¯¢è½¬è´¦åå表 |
| | | export const getTransferPage = async (params: PageParam) => { |
| | | return await request.get({ url: `/pay/transfer/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢è½¬è´¦å详æ
|
| | | export const getTransfer = async (id: number) => { |
| | | return await request.get({ url: '/pay/transfer/get?id=' + id }) |
| | | } |
| | | |
| | | // 导åºè½¬è´¦å |
| | | export const exportTransfer = async (params: PageParam) => { |
| | | return await request.download({ url: '/pay/transfer/export-excel', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | /** ç¨æ·é±å
æ¥è¯¢åæ° */ |
| | | export interface PayWalletUserReqVO { |
| | | userId: number |
| | | } |
| | | |
| | | /** é±å
VO */ |
| | | export interface WalletVO { |
| | | id: number |
| | | userId: number |
| | | userType: number |
| | | balance: number |
| | | totalExpense: number |
| | | totalRecharge: number |
| | | freezePrice: number |
| | | } |
| | | |
| | | /** æ¥è¯¢ç¨æ·é±å
详æ
*/ |
| | | export const getWallet = async (params: PayWalletUserReqVO) => { |
| | | return await request.get<WalletVO>({ url: `/pay/wallet/get`, params }) |
| | | } |
| | | |
| | | /** æ¥è¯¢ä¼åé±å
å表 */ |
| | | export const getWalletPage = async (params: any) => { |
| | | return await request.get({ url: `/pay/wallet/page`, params }) |
| | | } |
| | | |
| | | /** ä¿®æ¹ä¼åé±å
ä½é¢ */ |
| | | export const updateWalletBalance = async (data: any) => { |
| | | return await request.put({ url: `/pay/wallet/update-balance`, data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface WalletRechargePackageVO { |
| | | id: number |
| | | name: string |
| | | payPrice: number |
| | | bonusPrice: number |
| | | status: number |
| | | } |
| | | |
| | | // æ¥è¯¢å¥é¤å
å¼å表 |
| | | export const getWalletRechargePackagePage = async (params) => { |
| | | return await request.get({ url: '/pay/wallet-recharge-package/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢å¥é¤å
å¼è¯¦æ
|
| | | export const getWalletRechargePackage = async (id: number) => { |
| | | return await request.get({ url: '/pay/wallet-recharge-package/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢å¥é¤å
å¼ |
| | | export const createWalletRechargePackage = async (data: WalletRechargePackageVO) => { |
| | | return await request.post({ url: '/pay/wallet-recharge-package/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹å¥é¤å
å¼ |
| | | export const updateWalletRechargePackage = async (data: WalletRechargePackageVO) => { |
| | | return await request.put({ url: '/pay/wallet-recharge-package/update', data }) |
| | | } |
| | | |
| | | // å é¤å¥é¤å
å¼ |
| | | export const deleteWalletRechargePackage = async (id: number) => { |
| | | return await request.delete({ url: '/pay/wallet-recharge-package/delete?id=' + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface WalletTransactionVO { |
| | | id: number |
| | | walletId: number |
| | | title: string |
| | | price: number |
| | | balance: number |
| | | } |
| | | |
| | | // æ¥è¯¢ä¼åé±å
æµæ°´å表 |
| | | export const getWalletTransactionPage = async (params) => { |
| | | return await request.get({ url: `/pay/wallet-transaction/page`, params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // è·å¾å°åºæ |
| | | export const getAreaTree = async () => { |
| | | return await request.get({ url: '/system/area/tree' }) |
| | | } |
| | | |
| | | // è·å¾ IP 对åºçå°åºå |
| | | export const getAreaByIp = async (ip: string) => { |
| | | return await request.get({ url: '/system/area/get-by-ip?ip=' + ip }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface DeptVO { |
| | | id: number |
| | | name: string |
| | | parentId: number |
| | | status: number |
| | | sort: number |
| | | leaderUserId: number |
| | | phone: string |
| | | email: string |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢é¨é¨ï¼ç²¾ç®)å表 |
| | | export const getSimpleDeptList = (): Promise<DeptVO[]> => { |
| | | return request.get({ url: '/system/dept/simple-list' }) |
| | | } |
| | | |
| | | // æ¥è¯¢é¨é¨å表 |
| | | export const getDeptList = (params: any) => { |
| | | return request.get({ url: '/system/dept/list', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢é¨é¨å页 |
| | | export const getDeptPage = async (params: PageParam) => { |
| | | return await request.get({ url: '/system/dept/list', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢é¨é¨è¯¦æ
|
| | | export const getDept = (id: number) => { |
| | | return request.get({ url: '/system/dept/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢é¨é¨ |
| | | export const createDept = (data: DeptVO) => { |
| | | return request.post({ url: '/system/dept/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹é¨é¨ |
| | | export const updateDept = (data: DeptVO) => { |
| | | return request.put({ url: '/system/dept/update', data }) |
| | | } |
| | | |
| | | // å é¤é¨é¨ |
| | | export const deleteDept = async (id: number) => { |
| | | return await request.delete({ url: '/system/dept/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤é¨é¨ |
| | | export const deleteDeptList = async (ids: number[]) => { |
| | | return await request.delete({ url: '/system/dept/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface DictDataVO { |
| | | id: number |
| | | sort: number |
| | | label: string |
| | | value: string |
| | | dictType: string |
| | | status: number |
| | | colorType: string |
| | | cssClass: string |
| | | remark: string |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢åå
¸æ°æ®ï¼ç²¾ç®)å表 |
| | | export const getSimpleDictDataList = () => { |
| | | return request.get({ url: '/system/dict-data/simple-list' }) |
| | | } |
| | | |
| | | // æ¥è¯¢åå
¸æ°æ®å表 |
| | | export const getDictDataPage = (params: PageParam) => { |
| | | return request.get({ url: '/system/dict-data/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢åå
¸æ°æ®è¯¦æ
|
| | | export const getDictData = (id: number) => { |
| | | return request.get({ url: '/system/dict-data/get?id=' + id }) |
| | | } |
| | | |
| | | // æ ¹æ®åå
¸ç±»åæ¥è¯¢åå
¸æ°æ® |
| | | export const getDictDataByType = (dictType: string) => { |
| | | return request.get({ url: '/system/dict-data/type?type=' + dictType }) |
| | | } |
| | | |
| | | // æ°å¢åå
¸æ°æ® |
| | | export const createDictData = (data: DictDataVO) => { |
| | | return request.post({ url: '/system/dict-data/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹åå
¸æ°æ® |
| | | export const updateDictData = (data: DictDataVO) => { |
| | | return request.put({ url: '/system/dict-data/update', data }) |
| | | } |
| | | |
| | | // å é¤åå
¸æ°æ® |
| | | export const deleteDictData = (id: number) => { |
| | | return request.delete({ url: '/system/dict-data/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤åå
¸æ°æ® |
| | | export const deleteDictDataList = (ids: number[]) => { |
| | | return request.delete({ url: '/system/dict-data/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // 导åºåå
¸æ°æ® |
| | | export const exportDictData = (params: any) => { |
| | | return request.download({ url: '/system/dict-data/export-excel', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface DictTypeVO { |
| | | id: number |
| | | name: string |
| | | type: string |
| | | status: number |
| | | remark: string |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢åå
¸ï¼ç²¾ç®)å表 |
| | | export const getSimpleDictTypeList = (): Promise<DictTypeVO[]> => { |
| | | return request.get({ url: '/system/dict-type/simple-list' }) |
| | | } |
| | | |
| | | // æ¥è¯¢åå
¸å表 |
| | | export const getDictTypePage = (params: PageParam) => { |
| | | return request.get({ url: '/system/dict-type/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢åå
¸è¯¦æ
|
| | | export const getDictType = (id: number) => { |
| | | return request.get({ url: '/system/dict-type/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢åå
¸ |
| | | export const createDictType = (data: DictTypeVO) => { |
| | | return request.post({ url: '/system/dict-type/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹åå
¸ |
| | | export const updateDictType = (data: DictTypeVO) => { |
| | | return request.put({ url: '/system/dict-type/update', data }) |
| | | } |
| | | |
| | | // å é¤åå
¸ |
| | | export const deleteDictType = (id: number) => { |
| | | return request.delete({ url: '/system/dict-type/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤åå
¸ç±»å |
| | | export const deleteDictTypeList = (ids: number[]) => { |
| | | return request.delete({ url: '/system/dict-type/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // 导åºåå
¸ |
| | | export const exportDictType = (params) => { |
| | | return request.download({ |
| | | url: '/system/dict-type/export-excel', |
| | | params |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface LoginLogVO { |
| | | id: number |
| | | logType: number |
| | | traceId: number |
| | | userId: number |
| | | userType: number |
| | | username: string |
| | | result: number |
| | | status: number |
| | | userIp: string |
| | | userAgent: string |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢ç»å½æ¥å¿å表 |
| | | export const getLoginLogPage = (params: PageParam) => { |
| | | return request.get({ url: '/system/login-log/page', params }) |
| | | } |
| | | |
| | | // 导åºç»å½æ¥å¿ |
| | | export const exportLoginLog = (params) => { |
| | | return request.download({ url: '/system/login-log/export-excel', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface MailAccountVO { |
| | | id: number |
| | | mail: string |
| | | username: string |
| | | password: string |
| | | host: string |
| | | port: number |
| | | sslEnable: boolean |
| | | starttlsEnable: boolean |
| | | } |
| | | |
| | | // æ¥è¯¢é®ç®±è´¦å·å表 |
| | | export const getMailAccountPage = async (params: PageParam) => { |
| | | return await request.get({ url: '/system/mail-account/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢é®ç®±è´¦å·è¯¦æ
|
| | | export const getMailAccount = async (id: number) => { |
| | | return await request.get({ url: '/system/mail-account/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢é®ç®±è´¦å· |
| | | export const createMailAccount = async (data: MailAccountVO) => { |
| | | return await request.post({ url: '/system/mail-account/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹é®ç®±è´¦å· |
| | | export const updateMailAccount = async (data: MailAccountVO) => { |
| | | return await request.put({ url: '/system/mail-account/update', data }) |
| | | } |
| | | |
| | | // å é¤é®ç®±è´¦å· |
| | | export const deleteMailAccount = async (id: number) => { |
| | | return await request.delete({ url: '/system/mail-account/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤é®ç®±è´¦å· |
| | | export const deleteMailAccountList = async (ids: number[]) => { |
| | | return await request.delete({ url: '/system/mail-account/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // è·å¾é®ç®±è´¦å·ç²¾ç®å表 |
| | | export const getSimpleMailAccountList = async () => { |
| | | return request.get({ url: '/system/mail-account/simple-list' }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface MailLogVO { |
| | | id: number |
| | | userId: number |
| | | userType: number |
| | | toMails: string[] |
| | | ccMails?: string[] |
| | | bccMails?: string[] |
| | | accountId: number |
| | | fromMail: string |
| | | templateId: number |
| | | templateCode: string |
| | | templateNickname: string |
| | | templateTitle: string |
| | | templateContent: string |
| | | templateParams: string |
| | | sendStatus: number |
| | | sendTime: Date |
| | | sendMessageId: string |
| | | sendException: string |
| | | } |
| | | |
| | | // æ¥è¯¢é®ä»¶æ¥å¿å表 |
| | | export const getMailLogPage = async (params: PageParam) => { |
| | | return await request.get({ url: '/system/mail-log/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢é®ä»¶æ¥å¿è¯¦æ
|
| | | export const getMailLog = async (id: number) => { |
| | | return await request.get({ url: '/system/mail-log/get?id=' + id }) |
| | | } |
| | | |
| | | // 导åºé®ä»¶æ¥å¿ |
| | | export const exportMailLog = (params) => { |
| | | return request.download({ url: '/system/mail-log/export-excel', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface MailTemplateVO { |
| | | id?: number |
| | | name: string |
| | | code: string |
| | | accountId: number |
| | | nickname: string |
| | | title: string |
| | | content: string |
| | | status: number |
| | | } |
| | | |
| | | export interface MailSendReqVO { |
| | | toMails: string[] |
| | | ccMails?: string[] |
| | | bccMails?: string[] |
| | | templateCode: string |
| | | templateParams: Map<String, Object> |
| | | } |
| | | |
| | | // æ¥è¯¢é®ä»¶æ¨¡çå表 |
| | | export const getMailTemplatePage = async (params: PageParam) => { |
| | | return await request.get({ url: '/system/mail-template/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢é®ä»¶æ¨¡ç详æ
|
| | | export const getMailTemplate = async (id: number) => { |
| | | return await request.get({ url: '/system/mail-template/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢é®ä»¶æ¨¡ç |
| | | export const createMailTemplate = async (data: MailTemplateVO) => { |
| | | return await request.post({ url: '/system/mail-template/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹é®ä»¶æ¨¡ç |
| | | export const updateMailTemplate = async (data: MailTemplateVO) => { |
| | | return await request.put({ url: '/system/mail-template/update', data }) |
| | | } |
| | | |
| | | // å é¤é®ä»¶æ¨¡ç |
| | | export const deleteMailTemplate = async (id: number) => { |
| | | return await request.delete({ url: '/system/mail-template/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤é®ä»¶æ¨¡ç |
| | | export const deleteMailTemplateList = async (ids: number[]) => { |
| | | return await request.delete({ |
| | | url: '/system/mail-template/delete-list', |
| | | params: { ids: ids.join(',') } |
| | | }) |
| | | } |
| | | |
| | | // åéé®ä»¶ |
| | | export const sendMail = (data: MailSendReqVO) => { |
| | | return request.post({ url: '/system/mail-template/send-mail', data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface MenuVO { |
| | | id: number |
| | | name: string |
| | | permission: string |
| | | type: number |
| | | sort: number |
| | | parentId: number |
| | | path: string |
| | | icon: string |
| | | component: string |
| | | componentName?: string |
| | | status: number |
| | | visible: boolean |
| | | keepAlive: boolean |
| | | alwaysShow?: boolean |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢èåï¼ç²¾ç®ï¼å表 |
| | | export const getSimpleMenusList = () => { |
| | | return request.get({ url: '/system/menu/simple-list' }) |
| | | } |
| | | |
| | | // æ¥è¯¢èåå表 |
| | | export const getMenuList = (params) => { |
| | | return request.get({ url: '/system/menu/list', params }) |
| | | } |
| | | |
| | | // è·åèå详æ
|
| | | export const getMenu = (id: number) => { |
| | | return request.get({ url: '/system/menu/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢èå |
| | | export const createMenu = (data: MenuVO) => { |
| | | return request.post({ url: '/system/menu/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹èå |
| | | export const updateMenu = (data: MenuVO) => { |
| | | return request.put({ url: '/system/menu/update', data }) |
| | | } |
| | | |
| | | // å é¤èå |
| | | export const deleteMenu = (id: number) => { |
| | | return request.delete({ url: '/system/menu/delete?id=' + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface NoticeVO { |
| | | id: number | undefined |
| | | title: string |
| | | type: number |
| | | content: string |
| | | status: number |
| | | remark: string |
| | | creator: string |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢å
¬åå表 |
| | | export const getNoticePage = (params: PageParam) => { |
| | | return request.get({ url: '/system/notice/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢å
¬å详æ
|
| | | export const getNotice = (id: number) => { |
| | | return request.get({ url: '/system/notice/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢å
Œ |
| | | export const createNotice = (data: NoticeVO) => { |
| | | return request.post({ url: '/system/notice/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹å
Œ |
| | | export const updateNotice = (data: NoticeVO) => { |
| | | return request.put({ url: '/system/notice/update', data }) |
| | | } |
| | | |
| | | // å é¤å
Œ |
| | | export const deleteNotice = (id: number) => { |
| | | return request.delete({ url: '/system/notice/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤å
Œ |
| | | export const deleteNoticeList = (ids: number[]) => { |
| | | return request.delete({ url: '/system/notice/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // æ¨éå
Œ |
| | | export const pushNotice = (id: number) => { |
| | | return request.post({ url: '/system/notice/push?id=' + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | import qs from 'qs' |
| | | |
| | | export interface NotifyMessageVO { |
| | | id: number |
| | | userId: number |
| | | userType: number |
| | | templateId: number |
| | | templateCode: string |
| | | templateNickname: string |
| | | templateContent: string |
| | | templateType: number |
| | | templateParams: string |
| | | readStatus: boolean |
| | | readTime: Date |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢ç«å
ä¿¡æ¶æ¯å表 |
| | | export const getNotifyMessagePage = async (params: PageParam) => { |
| | | return await request.get({ url: '/system/notify-message/page', params }) |
| | | } |
| | | |
| | | // è·å¾æçç«å
ä¿¡å页 |
| | | export const getMyNotifyMessagePage = async (params: PageParam) => { |
| | | return await request.get({ url: '/system/notify-message/my-page', params }) |
| | | } |
| | | |
| | | // æ¹éæ 记已读 |
| | | export const updateNotifyMessageRead = async (ids) => { |
| | | return await request.put({ |
| | | url: '/system/notify-message/update-read?' + qs.stringify({ ids: ids }, { indices: false }) |
| | | }) |
| | | } |
| | | |
| | | // æ è®°ææç«å
信为已读 |
| | | export const updateAllNotifyMessageRead = async () => { |
| | | return await request.put({ url: '/system/notify-message/update-all-read' }) |
| | | } |
| | | |
| | | // è·åå½åç¨æ·çææ°ç«å
ä¿¡å表 |
| | | export const getUnreadNotifyMessageList = async () => { |
| | | return await request.get({ url: '/system/notify-message/get-unread-list' }) |
| | | } |
| | | |
| | | // è·å¾å½åç¨æ·çæªè¯»ç«å
ä¿¡æ°é |
| | | export const getUnreadNotifyMessageCount = async () => { |
| | | return await request.get({ url: '/system/notify-message/get-unread-count' }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface NotifyTemplateVO { |
| | | id?: number |
| | | name: string |
| | | nickname: string |
| | | code: string |
| | | content: string |
| | | type?: number |
| | | params: string |
| | | status: number |
| | | remark: string |
| | | } |
| | | |
| | | export interface NotifySendReqVO { |
| | | userId: number | null |
| | | templateCode: string |
| | | templateParams: Map<String, Object> |
| | | } |
| | | |
| | | // æ¥è¯¢ç«å
信模æ¿å表 |
| | | export const getNotifyTemplatePage = async (params: PageParam) => { |
| | | return await request.get({ url: '/system/notify-template/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ç«å
信模æ¿è¯¦æ
|
| | | export const getNotifyTemplate = async (id: number) => { |
| | | return await request.get({ url: '/system/notify-template/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢ç«å
ä¿¡æ¨¡æ¿ |
| | | export const createNotifyTemplate = async (data: NotifyTemplateVO) => { |
| | | return await request.post({ url: '/system/notify-template/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ç«å
ä¿¡æ¨¡æ¿ |
| | | export const updateNotifyTemplate = async (data: NotifyTemplateVO) => { |
| | | return await request.put({ url: '/system/notify-template/update', data }) |
| | | } |
| | | |
| | | // å é¤ç«å
ä¿¡æ¨¡æ¿ |
| | | export const deleteNotifyTemplate = async (id: number) => { |
| | | return await request.delete({ url: '/system/notify-template/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤ç«å
ä¿¡æ¨¡æ¿ |
| | | export const deleteNotifyTemplateList = async (ids: number[]) => { |
| | | return await request.delete({ url: '/system/notify-template/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // åéç«å
ä¿¡ |
| | | export const sendNotify = (data: NotifySendReqVO) => { |
| | | return request.post({ url: '/system/notify-template/send-notify', data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface OAuth2ClientVO { |
| | | id: number |
| | | clientId: string |
| | | secret: string |
| | | name: string |
| | | logo: string |
| | | description: string |
| | | status: number |
| | | accessTokenValiditySeconds: number |
| | | refreshTokenValiditySeconds: number |
| | | redirectUris: string[] |
| | | autoApprove: boolean |
| | | authorizedGrantTypes: string[] |
| | | scopes: string[] |
| | | authorities: string[] |
| | | resourceIds: string[] |
| | | additionalInformation: string |
| | | isAdditionalInformationJson: boolean |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢ OAuth2 客æ·ç«¯çå表 |
| | | export const getOAuth2ClientPage = (params: PageParam) => { |
| | | return request.get({ url: '/system/oauth2-client/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ OAuth2 客æ·ç«¯ç详æ
|
| | | export const getOAuth2Client = (id: number) => { |
| | | return request.get({ url: '/system/oauth2-client/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢ OAuth2 客æ·ç«¯ |
| | | export const createOAuth2Client = (data: OAuth2ClientVO) => { |
| | | return request.post({ url: '/system/oauth2-client/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ OAuth2 客æ·ç«¯ |
| | | export const updateOAuth2Client = (data: OAuth2ClientVO) => { |
| | | return request.put({ url: '/system/oauth2-client/update', data }) |
| | | } |
| | | |
| | | // å é¤ OAuth2 |
| | | export const deleteOAuth2Client = (id: number) => { |
| | | return request.delete({ url: '/system/oauth2-client/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤ OAuth2 客æ·ç«¯ |
| | | export const deleteOAuth2ClientList = (ids: number[]) => { |
| | | return request.delete({ url: '/system/oauth2-client/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface OAuth2TokenVO { |
| | | id: number |
| | | accessToken: string |
| | | refreshToken: string |
| | | userId: number |
| | | userType: number |
| | | clientId: string |
| | | createTime: Date |
| | | expiresTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢ tokenå表 |
| | | export const getAccessTokenPage = (params: PageParam) => { |
| | | return request.get({ url: '/system/oauth2-token/page', params }) |
| | | } |
| | | |
| | | // å é¤ token |
| | | export const deleteAccessToken = (accessToken: string) => { |
| | | return request.delete({ url: '/system/oauth2-token/delete?accessToken=' + accessToken }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export type OperateLogVO = { |
| | | id: number |
| | | traceId: string |
| | | userType: number |
| | | userId: number |
| | | userName: string |
| | | type: string |
| | | subType: string |
| | | bizId: number |
| | | action: string |
| | | extra: string |
| | | requestMethod: string |
| | | requestUrl: string |
| | | userIp: string |
| | | userAgent: string |
| | | creator: string |
| | | creatorName: string |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢æä½æ¥å¿å表 |
| | | export const getOperateLogPage = (params: PageParam) => { |
| | | return request.get({ url: '/system/operate-log/page', params }) |
| | | } |
| | | // å¯¼åºæä½æ¥å¿ |
| | | export const exportOperateLog = (params: any) => { |
| | | return request.download({ url: '/system/operate-log/export-excel', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface PermissionAssignUserRoleReqVO { |
| | | userId: number |
| | | roleIds: number[] |
| | | } |
| | | |
| | | export interface PermissionAssignRoleMenuReqVO { |
| | | roleId: number |
| | | menuIds: number[] |
| | | } |
| | | |
| | | export interface PermissionAssignRoleDataScopeReqVO { |
| | | roleId: number |
| | | dataScope: number |
| | | dataScopeDeptIds: number[] |
| | | } |
| | | |
| | | // æ¥è¯¢è§è²æ¥æçèåæé |
| | | export const getRoleMenuList = async (roleId: number) => { |
| | | return await request.get({ url: '/system/permission/list-role-menus?roleId=' + roleId }) |
| | | } |
| | | |
| | | // èµäºè§è²èåæé |
| | | export const assignRoleMenu = async (data: PermissionAssignRoleMenuReqVO) => { |
| | | return await request.post({ url: '/system/permission/assign-role-menu', data }) |
| | | } |
| | | |
| | | // èµäºè§è²æ°æ®æé |
| | | export const assignRoleDataScope = async (data: PermissionAssignRoleDataScopeReqVO) => { |
| | | return await request.post({ url: '/system/permission/assign-role-data-scope', data }) |
| | | } |
| | | |
| | | // æ¥è¯¢ç¨æ·æ¥æçè§è²æ°ç» |
| | | export const getUserRoleList = async (userId: number) => { |
| | | return await request.get({ url: '/system/permission/list-user-roles?userId=' + userId }) |
| | | } |
| | | |
| | | // èµäºç¨æ·è§è² |
| | | export const assignUserRole = async (data: PermissionAssignUserRoleReqVO) => { |
| | | return await request.post({ url: '/system/permission/assign-user-role', data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface PostVO { |
| | | id?: number |
| | | name: string |
| | | code: string |
| | | sort: number |
| | | status: number |
| | | remark: string |
| | | createTime?: Date |
| | | } |
| | | |
| | | // æ¥è¯¢å²ä½å表 |
| | | export const getPostPage = async (params: PageParam) => { |
| | | return await request.get({ url: '/system/post/page', params }) |
| | | } |
| | | |
| | | // è·åå²ä½ç²¾ç®ä¿¡æ¯å表 |
| | | export const getSimplePostList = async (): Promise<PostVO[]> => { |
| | | return await request.get({ url: '/system/post/simple-list' }) |
| | | } |
| | | |
| | | // æ¥è¯¢å²ä½è¯¦æ
|
| | | export const getPost = async (id: number) => { |
| | | return await request.get({ url: '/system/post/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢å²ä½ |
| | | export const createPost = async (data: PostVO) => { |
| | | return await request.post({ url: '/system/post/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹å²ä½ |
| | | export const updatePost = async (data: PostVO) => { |
| | | return await request.put({ url: '/system/post/update', data }) |
| | | } |
| | | |
| | | // å é¤å²ä½ |
| | | export const deletePost = async (id: number) => { |
| | | return await request.delete({ url: '/system/post/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤å²ä½ |
| | | export const deletePostList = async (ids: number[]) => { |
| | | return await request.delete({ url: '/system/post/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // 导åºå²ä½ |
| | | export const exportPost = async (params) => { |
| | | return await request.download({ url: '/system/post/export-excel', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface RoleVO { |
| | | id: number |
| | | name: string |
| | | code: string |
| | | sort: number |
| | | status: number |
| | | type: number |
| | | dataScope: number |
| | | dataScopeDeptIds: number[] |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢è§è²å表 |
| | | export const getRolePage = async (params: PageParam) => { |
| | | return await request.get({ url: '/system/role/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢è§è²ï¼ç²¾ç®)å表 |
| | | export const getSimpleRoleList = async (): Promise<RoleVO[]> => { |
| | | return await request.get({ url: '/system/role/simple-list' }) |
| | | } |
| | | |
| | | // æ¥è¯¢è§è²è¯¦æ
|
| | | export const getRole = async (id: number) => { |
| | | return await request.get({ url: '/system/role/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢è§è² |
| | | export const createRole = async (data: RoleVO) => { |
| | | return await request.post({ url: '/system/role/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹è§è² |
| | | export const updateRole = async (data: RoleVO) => { |
| | | return await request.put({ url: '/system/role/update', data }) |
| | | } |
| | | |
| | | // å é¤è§è² |
| | | export const deleteRole = async (id: number) => { |
| | | return await request.delete({ url: '/system/role/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤è§è² |
| | | export const deleteRoleList = async (ids: number[]) => { |
| | | return await request.delete({ url: '/system/role/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // 导åºè§è² |
| | | export const exportRole = (params: any) => { |
| | | return request.download({ |
| | | url: '/system/role/export-excel', |
| | | params |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface SmsChannelVO { |
| | | id: number |
| | | code: string |
| | | status: number |
| | | signature: string |
| | | remark: string |
| | | apiKey: string |
| | | apiSecret: string |
| | | callbackUrl: string |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢çä¿¡æ¸ éå表 |
| | | export const getSmsChannelPage = (params: PageParam) => { |
| | | return request.get({ url: '/system/sms-channel/page', params }) |
| | | } |
| | | |
| | | // è·å¾çä¿¡æ¸ éç²¾ç®å表 |
| | | export function getSimpleSmsChannelList() { |
| | | return request.get({ url: '/system/sms-channel/simple-list' }) |
| | | } |
| | | |
| | | // æ¥è¯¢çä¿¡æ¸ é详æ
|
| | | export const getSmsChannel = (id: number) => { |
| | | return request.get({ url: '/system/sms-channel/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢çä¿¡æ¸ é |
| | | export const createSmsChannel = (data: SmsChannelVO) => { |
| | | return request.post({ url: '/system/sms-channel/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹çä¿¡æ¸ é |
| | | export const updateSmsChannel = (data: SmsChannelVO) => { |
| | | return request.put({ url: '/system/sms-channel/update', data }) |
| | | } |
| | | |
| | | // å é¤çä¿¡æ¸ é |
| | | export const deleteSmsChannel = (id: number) => { |
| | | return request.delete({ url: '/system/sms-channel/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤çä¿¡æ¸ é |
| | | export const deleteSmsChannelList = (ids: number[]) => { |
| | | return request.delete({ url: '/system/sms-channel/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface SmsLogVO { |
| | | id: number | null |
| | | channelId: number | null |
| | | channelCode: string |
| | | templateId: number | null |
| | | templateCode: string |
| | | templateType: number | null |
| | | templateContent: string |
| | | templateParams: Map<string, object> | null |
| | | apiTemplateId: string |
| | | mobile: string |
| | | userId: number | null |
| | | userType: number | null |
| | | sendStatus: number | null |
| | | sendTime: Date | null |
| | | apiSendCode: string |
| | | apiSendMsg: string |
| | | apiRequestId: string |
| | | apiSerialNo: string |
| | | receiveStatus: number | null |
| | | receiveTime: Date | null |
| | | apiReceiveCode: string |
| | | apiReceiveMsg: string |
| | | createTime: Date | null |
| | | } |
| | | |
| | | // æ¥è¯¢çä¿¡æ¥å¿å表 |
| | | export const getSmsLogPage = (params: PageParam) => { |
| | | return request.get({ url: '/system/sms-log/page', params }) |
| | | } |
| | | |
| | | // 导åºçä¿¡æ¥å¿ |
| | | export const exportSmsLog = (params) => { |
| | | return request.download({ url: '/system/sms-log/export-excel', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface SmsTemplateVO { |
| | | id?: number |
| | | type?: number |
| | | status: number |
| | | code: string |
| | | name: string |
| | | content: string |
| | | remark: string |
| | | apiTemplateId: string |
| | | channelId?: number |
| | | channelCode?: string |
| | | params?: string[] |
| | | createTime?: Date |
| | | } |
| | | |
| | | export interface SendSmsReqVO { |
| | | mobile: string |
| | | templateCode: string |
| | | templateParams: Map<String, Object> |
| | | } |
| | | |
| | | // æ¥è¯¢ç信模æ¿å表 |
| | | export const getSmsTemplatePage = (params: PageParam) => { |
| | | return request.get({ url: '/system/sms-template/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ç信模æ¿è¯¦æ
|
| | | export const getSmsTemplate = (id: number) => { |
| | | return request.get({ url: '/system/sms-template/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢çä¿¡æ¨¡æ¿ |
| | | export const createSmsTemplate = (data: SmsTemplateVO) => { |
| | | return request.post({ url: '/system/sms-template/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹çä¿¡æ¨¡æ¿ |
| | | export const updateSmsTemplate = (data: SmsTemplateVO) => { |
| | | return request.put({ url: '/system/sms-template/update', data }) |
| | | } |
| | | |
| | | // å é¤çä¿¡æ¨¡æ¿ |
| | | export const deleteSmsTemplate = (id: number) => { |
| | | return request.delete({ url: '/system/sms-template/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤çä¿¡æ¨¡æ¿ |
| | | export const deleteSmsTemplateList = (ids: number[]) => { |
| | | return request.delete({ url: '/system/sms-template/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // 导åºçä¿¡æ¨¡æ¿ |
| | | export const exportSmsTemplate = (params) => { |
| | | return request.download({ |
| | | url: '/system/sms-template/export-excel', |
| | | params |
| | | }) |
| | | } |
| | | |
| | | // åéçä¿¡ |
| | | export const sendSms = (data: SendSmsReqVO) => { |
| | | return request.post({ url: '/system/sms-template/send-sms', data }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface SocialClientVO { |
| | | id: number |
| | | name: string |
| | | socialType: number |
| | | userType: number |
| | | clientId: string |
| | | clientSecret: string |
| | | agentId: string |
| | | publicKey: string |
| | | status: number |
| | | } |
| | | |
| | | // æ¥è¯¢ç¤¾äº¤å®¢æ·ç«¯å表 |
| | | export const getSocialClientPage = async (params) => { |
| | | return await request.get({ url: `/system/social-client/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ç¤¾äº¤å®¢æ·ç«¯è¯¦æ
|
| | | export const getSocialClient = async (id: number) => { |
| | | return await request.get({ url: `/system/social-client/get?id=` + id }) |
| | | } |
| | | |
| | | // æ°å¢ç¤¾äº¤å®¢æ·ç«¯ |
| | | export const createSocialClient = async (data: SocialClientVO) => { |
| | | return await request.post({ url: `/system/social-client/create`, data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ç¤¾äº¤å®¢æ·ç«¯ |
| | | export const updateSocialClient = async (data: SocialClientVO) => { |
| | | return await request.put({ url: `/system/social-client/update`, data }) |
| | | } |
| | | |
| | | // å é¤ç¤¾äº¤å®¢æ·ç«¯ |
| | | export const deleteSocialClient = async (id: number) => { |
| | | return await request.delete({ url: `/system/social-client/delete?id=` + id }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface SocialUserVO { |
| | | id: number |
| | | type: number |
| | | openid: string |
| | | token: string |
| | | rawTokenInfo: string |
| | | nickname: string |
| | | avatar: string |
| | | rawUserInfo: string |
| | | code: string |
| | | state: string |
| | | } |
| | | |
| | | // æ¥è¯¢ç¤¾äº¤ç¨æ·å表 |
| | | export const getSocialUserPage = async (params: any) => { |
| | | return await request.get({ url: `/system/social-user/page`, params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ç¤¾äº¤ç¨æ·è¯¦æ
|
| | | export const getSocialUser = async (id: number) => { |
| | | return await request.get({ url: `/system/social-user/get?id=` + id }) |
| | | } |
| | | |
| | | // è·å¾ç»å®ç¤¾äº¤ç¨æ·å表 |
| | | export const getBindSocialUserList = async () => { |
| | | return await request.get({ url: '/system/social-user/get-bind-list' }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface TenantVO { |
| | | id: number |
| | | name: string |
| | | contactName: string |
| | | contactMobile: string |
| | | status: number |
| | | domain: string |
| | | packageId: number |
| | | username: string |
| | | password: string |
| | | expireTime: Date |
| | | accountCount: number |
| | | websites: string[] |
| | | createTime: Date |
| | | } |
| | | |
| | | export interface TenantPageReqVO extends PageParam { |
| | | name?: string |
| | | contactName?: string |
| | | contactMobile?: string |
| | | status?: number |
| | | createTime?: Date[] |
| | | } |
| | | |
| | | export interface TenantExportReqVO { |
| | | name?: string |
| | | contactName?: string |
| | | contactMobile?: string |
| | | status?: number |
| | | createTime?: Date[] |
| | | } |
| | | |
| | | // æ¥è¯¢ç§æ·å表 |
| | | export const getTenantPage = (params: TenantPageReqVO) => { |
| | | return request.get({ url: '/system/tenant/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ç§æ·è¯¦æ
|
| | | export const getTenant = (id: number) => { |
| | | return request.get({ url: '/system/tenant/get?id=' + id }) |
| | | } |
| | | |
| | | // è·åç§æ·ç²¾ç®ä¿¡æ¯å表 |
| | | export const getTenantList = () => { |
| | | return request.get({ url: '/system/tenant/simple-list' }) |
| | | } |
| | | |
| | | // æ°å¢ç§æ· |
| | | export const createTenant = (data: TenantVO) => { |
| | | return request.post({ url: '/system/tenant/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ç§æ· |
| | | export const updateTenant = (data: TenantVO) => { |
| | | return request.put({ url: '/system/tenant/update', data }) |
| | | } |
| | | |
| | | // å é¤ç§æ· |
| | | export const deleteTenant = (id: number) => { |
| | | return request.delete({ url: '/system/tenant/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤ç§æ· |
| | | export const deleteTenantList = (ids: number[]) => { |
| | | return request.delete({ url: '/system/tenant/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // 导åºç§æ· |
| | | export const exportTenant = (params: TenantExportReqVO) => { |
| | | return request.download({ url: '/system/tenant/export-excel', params }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface TenantPackageVO { |
| | | id: number |
| | | name: string |
| | | status: number |
| | | remark: string |
| | | creator: string |
| | | updater: string |
| | | updateTime: string |
| | | menuIds: number[] |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢ç§æ·å¥é¤å表 |
| | | export const getTenantPackagePage = (params: PageParam) => { |
| | | return request.get({ url: '/system/tenant-package/page', params }) |
| | | } |
| | | |
| | | // è·å¾ç§æ· |
| | | export const getTenantPackage = (id: number) => { |
| | | return request.get({ url: '/system/tenant-package/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢ç§æ·å¥é¤ |
| | | export const createTenantPackage = (data: TenantPackageVO) => { |
| | | return request.post({ url: '/system/tenant-package/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ç§æ·å¥é¤ |
| | | export const updateTenantPackage = (data: TenantPackageVO) => { |
| | | return request.put({ url: '/system/tenant-package/update', data }) |
| | | } |
| | | |
| | | // å é¤ç§æ·å¥é¤ |
| | | export const deleteTenantPackage = (id: number) => { |
| | | return request.delete({ url: '/system/tenant-package/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤ç§æ·å¥é¤ |
| | | export const deleteTenantPackageList = (ids: number[]) => { |
| | | return request.delete({ url: '/system/tenant-package/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // è·åç§æ·å¥é¤ç²¾ç®ä¿¡æ¯å表 |
| | | export const getTenantPackageList = () => { |
| | | return request.get({ url: '/system/tenant-package/simple-list' }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface UserVO { |
| | | id: number |
| | | username: string |
| | | nickname: string |
| | | deptId: number |
| | | postIds: string[] |
| | | email: string |
| | | mobile: string |
| | | sex: number |
| | | avatar: string |
| | | loginIp: string |
| | | status: number |
| | | remark: string |
| | | loginDate: Date |
| | | createTime: Date |
| | | } |
| | | |
| | | // æ¥è¯¢ç¨æ·ç®¡çå表 |
| | | export const getUserPage = (params: PageParam) => { |
| | | return request.get({ url: '/system/user/page', params }) |
| | | } |
| | | |
| | | // æ¥è¯¢ç¨æ·è¯¦æ
|
| | | export const getUser = (id: number) => { |
| | | return request.get({ url: '/system/user/get?id=' + id }) |
| | | } |
| | | |
| | | // æ°å¢ç¨æ· |
| | | export const createUser = (data: UserVO) => { |
| | | return request.post({ url: '/system/user/create', data }) |
| | | } |
| | | |
| | | // ä¿®æ¹ç¨æ· |
| | | export const updateUser = (data: UserVO) => { |
| | | return request.put({ url: '/system/user/update', data }) |
| | | } |
| | | |
| | | // å é¤ç¨æ· |
| | | export const deleteUser = (id: number) => { |
| | | return request.delete({ url: '/system/user/delete?id=' + id }) |
| | | } |
| | | |
| | | // æ¹éå é¤ç¨æ· |
| | | export const deleteUserList = (ids: number[]) => { |
| | | return request.delete({ url: '/system/user/delete-list', params: { ids: ids.join(',') } }) |
| | | } |
| | | |
| | | // 导åºç¨æ· |
| | | export const exportUser = (params: any) => { |
| | | return request.download({ url: '/system/user/export-excel', params }) |
| | | } |
| | | |
| | | // ä¸è½½ç¨æ·å¯¼å
¥æ¨¡æ¿ |
| | | export const importUserTemplate = () => { |
| | | return request.download({ url: '/system/user/get-import-template' }) |
| | | } |
| | | |
| | | // ç¨æ·å¯ç éç½® |
| | | export const resetUserPassword = (id: number, password: string) => { |
| | | const data = { |
| | | id, |
| | | password |
| | | } |
| | | return request.put({ url: '/system/user/update-password', data: data }) |
| | | } |
| | | |
| | | // ç¨æ·ç¶æä¿®æ¹ |
| | | export const updateUserStatus = (id: number, status: number) => { |
| | | const data = { |
| | | id, |
| | | status |
| | | } |
| | | return request.put({ url: '/system/user/update-status', data: data }) |
| | | } |
| | | |
| | | // è·åç¨æ·ç²¾ç®ä¿¡æ¯å表 |
| | | export const getSimpleUserList = (): Promise<UserVO[]> => { |
| | | return request.get({ url: '/system/user/simple-list' }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | export interface ProfileVO { |
| | | id: number |
| | | username: string |
| | | nickname: string |
| | | dept: { |
| | | id: number |
| | | name: string |
| | | } |
| | | roles: { |
| | | id: number |
| | | name: string |
| | | }[] |
| | | posts: { |
| | | id: number |
| | | name: string |
| | | }[] |
| | | email: string |
| | | mobile: string |
| | | sex: number |
| | | avatar: string |
| | | status: number |
| | | remark: string |
| | | loginIp: string |
| | | loginDate: Date |
| | | createTime: Date |
| | | } |
| | | |
| | | export interface UserProfileUpdateReqVO { |
| | | nickname?: string |
| | | email?: string |
| | | mobile?: string |
| | | sex?: number |
| | | avatar?: string |
| | | } |
| | | |
| | | // æ¥è¯¢ç¨æ·ä¸ªäººä¿¡æ¯ |
| | | export const getUserProfile = () => { |
| | | return request.get({ url: '/system/user/profile/get' }) |
| | | } |
| | | |
| | | // ä¿®æ¹ç¨æ·ä¸ªäººä¿¡æ¯ |
| | | export const updateUserProfile = (data: UserProfileUpdateReqVO) => { |
| | | return request.put({ url: '/system/user/profile/update', data }) |
| | | } |
| | | |
| | | // ç¨æ·å¯ç éç½® |
| | | export const updateUserPassword = (oldPassword: string, newPassword: string) => { |
| | | return request.put({ |
| | | url: '/system/user/profile/update-password', |
| | | data: { |
| | | oldPassword: oldPassword, |
| | | newPassword: newPassword |
| | | } |
| | | }) |
| | | } |
| New file |
| | |
| | | import request from '@/config/axios' |
| | | |
| | | // 社交ç»å®ï¼ä½¿ç¨ code ææç |
| | | export const socialBind = (type, code, state) => { |
| | | return request.post({ |
| | | url: '/system/social-user/bind', |
| | | data: { |
| | | type, |
| | | code, |
| | | state |
| | | } |
| | | }) |
| | | } |
| | | |
| | | // åæ¶ç¤¾äº¤ç»å® |
| | | export const socialUnbind = (type, openid) => { |
| | | return request.delete({ |
| | | url: '/system/social-user/unbind', |
| | | data: { |
| | | type, |
| | | openid |
| | | } |
| | | }) |
| | | } |
| | | |
| | | // 社交ææç跳转 |
| | | export const socialAuthRedirect = (type, redirectUri) => { |
| | | return request.get({ |
| | | url: '/system/auth/social-auth-redirect?type=' + type + '&redirectUri=' + redirectUri |
| | | }) |
| | | } |
| New file |
| | |
| | | <?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="1715606039621" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4256" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M878.250667 981.333333H375.338667a104.661333 104.661333 0 0 1-104.661334-104.661333V375.338667a104.661333 104.661333 0 0 1 104.661334-104.661334h502.912a104.661333 104.661333 0 0 1 104.661333 104.661334v502.912C981.333333 934.485333 934.485333 981.333333 878.250667 981.333333zM375.338667 364.373333a10.666667 10.666667 0 0 0-10.922667 10.965334v502.912c0 6.229333 4.693333 10.922667 10.922667 10.922666h502.912a10.666667 10.666667 0 0 0 10.922666-10.922666V375.338667a10.666667 10.666667 0 0 0-10.922666-10.922667H375.338667z" fill="#ffffff" p-id="4257"></path><path d="M192.597333 753.322667H147.328A104.661333 104.661333 0 0 1 42.666667 648.661333V147.328A104.661333 104.661333 0 0 1 147.328 42.666667H650.24a104.661333 104.661333 0 0 1 104.618667 104.661333v49.962667c0 26.538667-20.309333 46.848-46.848 46.848a46.037333 46.037333 0 0 1-46.848-46.848V147.328a10.666667 10.666667 0 0 0-10.922667-10.965333H147.328a10.666667 10.666667 0 0 0-10.965333 10.965333V650.24c0 6.229333 4.693333 10.922667 10.965333 10.922667h45.269333c26.538667 0 46.848 20.309333 46.848 46.848 0 26.538667-21.845333 45.312-46.848 45.312z" fill="#ffffff" p-id="4258"></path></svg> |
| New file |
| | |
| | | <?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="1715352878351" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1499" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M624.5 786.3c92.9 0 168.2-75.3 168.2-168.2V309c0-92.4-75.3-168.2-168.2-168.2H303.6c-92.4 0-168.2 75.3-168.2 168.2v309.1c0 92.4 75.3 168.2 168.2 168.2h320.9zM178.2 618.1V309c0-69.4 56.1-125.5 125.5-125.5h320.9c69.4 0 125.5 56.1 125.5 125.5v309.1c0 69.4-56.1 125.5-125.5 125.5h-321c-69.4 0-125.4-56.1-125.4-125.5z" p-id="1500" fill="#8a8a8a"></path><path d="M849.8 295.1v361.5c0 102.7-83.6 186.3-186.3 186.3H279.1v42.7h384.4c126.3 0 229.1-102.8 229.1-229.1V295.1h-42.8zM307.9 361.8h312.3c11.8 0 21.4-9.6 21.4-21.4 0-11.8-9.6-21.4-21.4-21.4H307.9c-11.8 0-21.4 9.6-21.4 21.4 0 11.9 9.6 21.4 21.4 21.4zM307.9 484.6h312.3c11.8 0 21.4-9.6 21.4-21.4 0-11.8-9.6-21.4-21.4-21.4H307.9c-11.8 0-21.4 9.6-21.4 21.4 0 11.9 9.6 21.4 21.4 21.4z" p-id="1501" fill="#8a8a8a"></path><path d="M620.2 607.4c11.8 0 21.4-9.6 21.4-21.4 0-11.8-9.6-21.4-21.4-21.4H307.9c-11.8 0-21.4 9.6-21.4 21.4 0 11.8 9.6 21.4 21.4 21.4h312.3z" p-id="1502" fill="#8a8a8a"></path></svg> |
| New file |
| | |
| | | <?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="1715354120346" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3256" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M907.1 263.7H118.9c-9.1 0-16.4-7.3-16.4-16.4s7.3-16.4 16.4-16.4H907c9.1 0 16.4 7.3 16.4 16.4s-7.3 16.4-16.3 16.4z" fill="#8a8a8a" p-id="3257"></path><path d="M772.5 928.3H257.4c-27.7 0-50.2-22.5-50.2-50.2V247.2c0-9.1 7.3-16.4 16.4-16.4H801c12.1 0 21.9 9.8 21.9 21.9v625.2c0 27.8-22.6 50.4-50.4 50.4zM240 263.7v614.4c0 9.6 7.8 17.4 17.4 17.4h515.2c9.7 0 17.5-7.9 17.5-17.5V263.7H240zM657.4 131.1H368.6c-9.1 0-16.4-7.3-16.4-16.4s7.3-16.4 16.4-16.4h288.7c9.1 0 16.4 7.3 16.4 16.4s-7.3 16.4-16.3 16.4z" fill="#8a8a8a" p-id="3258"></path><path d="M416 754.5c-9.1 0-16.4-7.3-16.4-16.4V517.8c0-9.1 7.3-16.4 16.4-16.4s16.4 7.3 16.4 16.4V738c0.1 9.1-7.3 16.5-16.4 16.5z" fill="#8a8a8a" p-id="3259"></path><path d="M416 465.2c-9.1 0-16.4-7.3-16.4-16.4v-59.4c0-9.1 7.3-16.4 16.4-16.4s16.4 7.3 16.4 16.4v59.4c0.1 9.1-7.3 16.4-16.4 16.4zM604.9 754.5c-9.1 0-16.4-7.3-16.4-16.4v-67.2c0-9.1 7.3-16.4 16.4-16.4s16.4 7.3 16.4 16.4V738c0 9.1-7.3 16.5-16.4 16.5z" fill="#8a8a8a" opacity=".4" p-id="3260"></path><path d="M604.9 619.1c-9.1 0-16.4-7.3-16.4-16.4V389.4c0-9.1 7.3-16.4 16.4-16.4s16.4 7.3 16.4 16.4v213.3c0 9.1-7.3 16.4-16.4 16.4z" fill="#8a8a8a" p-id="3261"></path></svg> |
| New file |
| | |
| | | <?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="1716345268026" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5622" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M956.408445 419.226665a250.670939 250.670939 0 0 0-22.425219-209.609236A263.163526 263.163526 0 0 0 652.490412 85.715535 259.784384 259.784384 0 0 0 457.728923 0.008192a261.422756 261.422756 0 0 0-249.44216 178.582564 258.453206 258.453206 0 0 0-172.848261 123.901894c-57.03583 96.868753-44.031251 219.132275 32.153053 302.279661a250.670939 250.670939 0 0 0 22.32282 209.609237 263.163526 263.163526 0 0 0 281.595213 123.901893A259.067596 259.067596 0 0 0 566.271077 1023.990784a260.60357 260.60357 0 0 0 249.339762-178.889759 258.453206 258.453206 0 0 0 172.848261-123.901893c57.445423-96.868753 44.13365-218.82508-32.050655-302.074865zM566.578272 957.124721c-45.362429 0-89.496079-15.666934-124.516283-44.543243 1.638372-0.921584 4.198329-2.150363 6.143895-3.481541l206.537289-117.757998a32.35785 32.35785 0 0 0 16.895713-29.081105V474.82892l87.243317 49.97035c1.023983 0.307195 1.638372 1.228779 1.638372 2.252762v238.075953c0 105.8798-86.936122 191.689541-193.942303 191.996736zM148.588578 781.102113a189.846373 189.846373 0 0 1-23.346803-128.612213c1.535974 1.023983 4.09593 2.559956 6.143895 3.48154L337.922959 773.729439c10.444622 6.143896 23.346803 6.143896 34.098621 0l252.30931-143.664758v99.531108c0 1.023983-0.307195 1.945567-1.331177 2.559956l-208.892449 118.986778a196.297463 196.297463 0 0 1-265.518686-70.04041zM94.112704 335.97688c22.630015-39.013737 58.367008-68.81163 101.16948-84.171369V494.591784c0 11.7758 6.45109 22.93721 16.793315 28.978707l252.30931 143.767156L377.141493 716.796006a3.174346 3.174346 0 0 1-2.867152 0.307195l-208.892448-118.986777A190.870355 190.870355 0 0 1 94.215102 335.874482z m717.607001 164.861198L559.410394 357.070922 646.653711 307.20297a3.174346 3.174346 0 0 1 2.969549-0.307195l208.892449 118.986777a190.358364 190.358364 0 0 1 70.961994 262.139544 194.556693 194.556693 0 0 1-101.16948 84.171369V529.407192a31.538664 31.538664 0 0 0-16.588518-28.671513z m87.03852-129.329002c-1.74077-1.023983-4.300727-2.559956-6.246294-3.48154l-206.639687-117.757999a34.09862 34.09862 0 0 0-33.996222 0L399.566711 393.934295v-99.531108c0-1.023983 0.307195-1.945567 1.331178-2.559956l208.892449-119.089176a195.990268 195.990268 0 0 1 265.518686 70.450003c22.732414 38.706542 31.129071 84.171369 23.346803 128.305018zM352.258716 548.862861l-87.243317-49.560757a2.457558 2.457558 0 0 1-1.638372-2.252762V258.870991c0-105.8798 87.243317-191.996736 194.556692-191.689541a194.556693 194.556693 0 0 1 124.209089 44.543243c-1.638372 0.921584-4.198329 2.252762-6.143896 3.48154l-206.639687 117.757999a31.948257 31.948257 0 0 0-16.793315 29.081105l-0.307194 286.715126z m47.307995-100.759887L512 384.001664l112.535687 63.998912v127.997824l-112.228492 63.998912-112.535687-63.998912-0.307195-127.997824z" p-id="5623" fill="#707070"></path></svg> |
| New file |
| | |
| | | { |
| | | "type": "FeatureCollection", |
| | | "features": [ |
| | | { |
| | | "type": "Feature", |
| | | "id": "710000", |
| | | "properties": { |
| | | "id": "710000", |
| | | "cp": [121.509062, 24.044332], |
| | | "name": "å°æ¹¾", |
| | | "childNum": 6 |
| | | }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@°Ã¯Ã"], |
| | | [ |
| | | "@@ÆÄ´ÃÆÃɼģºðÊ\\ÆsÃNÅÃÄäÂnÃÆ¤ÉÄÇÄÄ´ÂĤÇŨxÄÄ®ÇÆºÃ²ÆÂÂâîĮXŦţƸZûÃÂÆÆGĨÄMó·ÄcëÆÉlÃÆ¯Ö¹Ã
Å^÷ÂÂÅÅÇÆÄÂÃÃ¥ÉGÉ¿@ÄÆÂÂ¥ÄWǬÃĶÅâ" |
| | | ], |
| | | ["@@\\p|WoYG¿¥IÂj@¢"], |
| | | ["@@Â
¡Â@ÂÂV^RqÂBÂbAÂnTXeRz¤L«³I"], |
| | | ["@@ÃEEÂÂkWqë @Â"], |
| | | ["@@fced"], |
| | | ["@@¯ÉÃèÂaì¯ÃÇIġĽ"], |
| | | ["@@çûÄëÄÂhòÅ "] |
| | | ], |
| | | "encodeOffsets": [ |
| | | [[122886, 24033]], |
| | | [[123335, 22980]], |
| | | [[122375, 24193]], |
| | | [[122518, 24117]], |
| | | [[124427, 22618]], |
| | | [[124862, 26043]], |
| | | [[126259, 26318]], |
| | | [[127671, 26683]] |
| | | ] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "130000", |
| | | "properties": { |
| | | "id": "130000", |
| | | "cp": [114.502461, 38.045474], |
| | | "name": "æ²³å", |
| | | "childNum": 3 |
| | | }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@o~ÂZ]ªrºc_ħ²G¼s`jßnüsÃÂÅNX_ÂM`ýÃnUKÂ
ÄÂÄs¤Â©yrý§uÄ£ÂÂcÂJÂÂe"], |
| | | ["@@U`Ts¿mÃÂ"], |
| | | [ |
| | | "@@oºÆÃdÂeVÂDJj£ÂJ|Ã
dzÃÂFt~ÂKŨ¸IÃv|¢r}èÂÂonbÂ}`RÃÃn°ÃdòÂ^®ÂlnÃèÄlðÃÂÃ]ªÃ}ÂÂLiıÃÂ`^°Ã¶p®ÄDcÂÅ`ÂÂZöêqvFÃÂÂN®ÄTH®¦O¾ÂIbÃã´BÄɢŴÃÃȦpÂÄÃXR·nndO¤ÂOÃÄÆÂQgµFo|gÈÄSWb©osx|hYhÂgÅfmÃÄ©nºÂTÃÂSp¢dYĤ¶UÄjlÂÇpäìë|³kÃfw²Xjz~ÃqbTÂÃÂÄŨ@|oMÂÂzv¢ZrÃVw¬ŧĸf°ÃTªqÂs{S¯r æÃlNd®²Ä ÇiGÄÂJ¼lr}~K¨ŸÆÃWöÂÂÃÂzR¤lêmÄLÃÂÂÂ@¡|q]SvKÂÃcwpÃÃÂÂÄ¿ÂÄènĪWÂlÄkT}ÂJ¤~ÂÃTÂÂdÂÂpddʾĬÂÂÂBVtÂEâôPÄÆÃ¨@~ÂkÂü\\rÃÄÃæW_§¼F´©òDòjÂÂÂYÃrbÄÄøÅG{Æ|¦ðrb|ÃH`pÊkvÂGpuARhÃÃǶgÄÂTÂǼƹS£¨¡ù³ÅÃ]¿ÃyÂÂôEP xX¶Â¹ÃÂO¡ÂgáIwÃé¦Ã
BÂÃ|ðÂ
N«úmH¯ÂÂâÂDùÂyÅÂŲIÃuĨD¸dÉÂÂÂFÂÂÂÂOhÂÄ©OÂÂiÃ`ww^ÂÃkÂÂÃH«ÆÇ¤ÅĺtFuÂ
{Z}Ã@U´Â
ÊLg®¯Oı°Ãw ^ÂÂÂVbÃsÂÂmAÂ
ê]]w§ÂRRl£Âȵu¯b{ÃDÄïÿȧÂuT£ġÂÄÅÆÄÂQ¨fVÂÆÂÆ
nÂa@³@ÂÄÂyýÂIĹÃKÂÅfÄŰóÂxV@tÂÂÆ¯ÂJÂ]eÂR¾fe|rHAÂ|h~ÄÆl§ÃÂlTÃb ÃoÂÃ
bbx³^zÂÃͶSj®AÂyÃhðk`«PÂÂõEFÂìY¨Ļrõqi¼ÂWi°§ÂÂñ´°^[ÂÃ|Ä O@ÃxO\\tÂa\\tÄtû{Ä¡ÂȧXýĪÃjùÃRbÂÂ^ÃÂfK[ÃÂdÄYfÃÃTyÂuUSyÅÅů@Oi½ÂéÅ
ÂaVcŧax¹XŻácÂÂWU£ôãºQ¨÷ÃwsÂ¥qEHÂÃ|ÂÂÅ¡YQoÅÃyáÄ£MðoÅ¥ÂÃÂP¡mÂÂWO¡ÂvÂ{ôvîÄÃISpÃhp¨ ÂjÂdeÅQÃjÂX³à ÂÄ[n`Yp@UÂÂcM`ÂRKhÂEbÂÂpÅlNut®EtqÂnsÃÂgAÂÂiúÂÂoHÂqCXÂÂhfguÂ~ÃÂWP½¢G^}¯Ã
Ä«GCÂÂÃ^ãziMáļMTÃÆrMc|O_¯Ŵ|ÂmorDkO\\mÄJfl@c̬¢aĦtRıþùÆ^juųÅKÂÂUFyÂÂÆÂ
ÂÄ«Ã÷Ä
VÃqÆ¥V¿aÈd³ÂBÂqPBmÂaÃÄŻģmÂÃ
®V¹d^KÂKoÂnYg¯XhqaÂLduÂ¥ÂÃpÇ
¡KÄ
Ã
ÂkÄÄÄhqÂ}HyÃÂ]¹ǧ£Â
Ã÷¿qáµ§ÂÂg¤o^á¾ZE¤i`ij{nÂÂOl»ÂWÃÄįhgÂÂF[¿¡ÂÃkOüš_ÂÂÅ«ÂiÂDZà UtÄGylÂ}ÂÂÃM}ÂjpEC~¡FtoQiÂÂHkÂk{ÂÃmïÂ" |
| | | ] |
| | | ], |
| | | "encodeOffsets": [[[119712, 40641]], [[121616, 39981]], [[116462, 37237]]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "140000", |
| | | "properties": { |
| | | "id": "140000", |
| | | "cp": [111.849248, 36.857014], |
| | | "name": "山西", |
| | | "childNum": 1 |
| | | }, |
| | | "geometry": { |
| | | "type": "Polygon", |
| | | "coordinates": [ |
| | | "@@ÃÄ©ÃÂSÂra}ÃÂyWix±Ãe´lèÂÃÃÇokÂÄiµVZģ¡coÂÂTSùĪmnÃÅeÂhZg{gtwªpXaÄThÈp{¶Eh®RÄÆP¿£ÂPÂmc¸mQÃWÂÄÈ¥oÃ
îɡųAÄä³aÃÂJ½¥PGÂÄ
SMÂÂÂ
EÃ
ruµéÂÂYÃÂÂÅ_dÂÄCoÂõ]¯Â_²ÃjÄÂK~©Ã
Ã^ÃÂkïçÄmÃÂk]±ÂcïÃÃmQÃ~_aÂpmÂ
Â~ç¡qÂÂu{JÃ
ŧ·ÂLs}ÂEyÃÃcI{¤IiÂCfUcÂÆÃp§]Ä«vD@¡SõMÂÃ
wuÂYY¡DbÃc¡hÂÃ]nkoQdaMç~eDÂÃtT©±@¥ù@áÂZcW|WqOJmÄ©l«ħÅvOëIqÂÄVÂÂ¥ÂD[mI~âcehiÃ]Æ~Ä¥qX·eÆ·Ân±Â}vÂ[ÄÄÂÅ]_ÂÅÂ`¹§ÃÅIÂo©bÂs^}Ãt±ū«³p£ÿ·Wµ|¡¥ÄFÃsÃÂÂ¥Å
xÂÃdÃ{ºvÄ´ÃêÃɲ¶Âü¨|ÃÆ¸ÂµÈ²ÂLLÃºÃÆÂ¤ÏÄÄV`Â_bªÂS^|ÂdÂzY|dzÂ¥pÂZbã¶ÃK}tĦÃÅÆ ÂPYznÂÃvX¶ÄnÂ Ä ÂÃÂzý¦ªÂ÷ÂÃĸÃÂUȸÂdòÃJð´ÂìúNM¬ÂXZ´Â¤ÅǸ_tldIÂ{¦ÆÃ°Ä Ȥ¥NehXnÂYGÂÂR° ƬDj¬¸|CÄÂKqºfÆiĺ©ª~ÄOQª ¤@ìǦɲæBÂÃÂTŸÂÊÅÄÂÂÄ´ÅÂÈÂÃÿÈlŤÄöÂtÂýî¼ĨXhÂÂÂ|ªM¤Ãz" |
| | | ], |
| | | "encodeOffsets": [[116874, 41716]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "150000", |
| | | "properties": { |
| | | "id": "150000", |
| | | "cp": [111.670801, 41.818311], |
| | | "name": "å
èå¤", |
| | | "childNum": 2 |
| | | }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | [ |
| | | "@@¯ÂPqÂFBÂ
Â|S³C|kñÂHÂÂdÂiÃÂ¥ÂsÂÅÃ
ÂÂ
PóÃÃE^ÂÃ
Ppy_YtSÂÂhQ·aHwsOnÅÃÂs©iqjÂÂÂUSiº]ïW«gW¡AÂÂRë¥_ÂsgÃnUI«mÂÂ
ÂÂ]jÂvV¼ÂeuhwqAÂÂaWÂÂ_µjÂ
ȍjioQR¹ÄÃÃt@r³[ÃlÄÃ^ÃÃáGÂÂOUÃÂOB±ÂXÂkÃ
¹£k|e]olÂÂkVüÃqtaÃõjgã§U^ÂÂRLÂÃnX°ÃÂBzÂÂ^~wfvÂypVÂ Â¯ÂÆ«ÄËÈ«ÆÅ·É¿Ã¿Ä¿ÆËÄÿÃÇÃÃÅó©ÇÈÅÂÄMÃÃEyxÂþp]ÃvïèÂvÂÆnÃÄ´Ã@ÂÂÂV~ÄÂv¦wÄtÂÄjyÃDXÃxGQuv_Âi¦aBçwÂËwD©{ÂtÄmQÂ{EJ§KPÅÆÆ¿Â¥Â@ÂsCTÂÃ}ÉwÂÆy±ÂgÂÃÂ}T[÷kÃ禫Â
SÃ¥¸ëBX½ÂHáÃ
µÃÄtSÂÃÃa[ƣ°¯Â¦ÂPï¡Â]£ġÂÂÂÃk®G²ÂèQ°óMq}EÂóÆÃ\\ÂÂÂ@áügQÃÂuÂ¥FÂÂTÿJûÂ]|mvÄÃYuaÂ^WoÃa·ÂzÄ
ÃotöCLÆi¯¤mÆHǤîìɾÅìTdÃ¥wsRÂÃgÄųúÂÃġäÃ}Q¶Â¿AÂÂÂ[¡Â{dÃuQAÂÂMÂxVÂvMOmÄl«ct[wº_ÂÃÃÂÂÂjbãĦS_éÂQZÂ_lwgOiýe`YYLq§IÃÂdz£ÃÃ[êuÆÂ³ÃTÂs·bÂÃĽäÄ[Âb[ÂÅfãcn¥îC¿÷µ[ÅÃQÂÅÂÄm¿Ã^£mJVmÂÂÂL[{Ã_£ÂFÂ¥ÃÂ{ŹA}Â
ÃWu©Ã
aųijƳhB{·TQqÃIÄ·ÃÂZÄ©Yc|M¡Â
LÂÂeVUóK_ÂÂQWkÂ_ĥ¿ãZ»X\\Ä´uUÂèÂlG®ÄÅTÄ ÄDÅÂOrÃdÂÃÃz]±Â
Å©ÂÃ
Â]ÂÃ
Ã}UÃ¥©TÄÂïxgckfWgi\\ÃÄÂ¥HkµEÂë{»ÃetcG±ahUiñiWsÉ·cÂÂCÂÃk]wÈ|Äa}wÂ
VaÄá ÂÂG°ùnM¬¯Â{ÃÂÃÃAÂÂ¥ÃêJxâÂhP¢ÃºµÂwWOÂóFÂÂÃz^ÃÅÃú´§¢T¤ǻƺSÂÄÂǵhÃÃ
QgvBHouÂÊl_o¿Ga{ïq{Â¥|ſĿHÄ÷aÄÃqÂZÂÂñiñC³ªÂÂ
»E`¨åXÄÃqÃû[lÂ}Âç@ÄÆÃ³O¿¡ÂFUsÂAÂÂʽīccÂocÂÂÂÃS}£ÂIS~ÄlÂkÄ©XçmÂÄÂ
ÅÃÂoÃdxÃuL^T{r@¢ÂÂÃÂÄKén£kQÂÂyÂÃ
õÃXÅ·ÆL§~}kq»ÂIHÄÇ
jÄ»ÃÃoÂå°qTÂt|r©ÃS¯·eŨÄx«Ã[eM¿yuÂÂpN~¹ÃyN£{©ÂÂgÂħWûþsÂÉÅ¡Ç
_ÃÄɱÄ
ÂijÄÂÊÅÅ·ÂSÂÃÂA±åǥÉ@ë£R©Ä
P©}ĹªÆj¹erÂÂLDÄ·{i«ƫC£µsKCÂÂ
GS|úþXÂgpÂ{ÃX¿ÂÄ{ƱÈñZáÄyoÃhAÂÂ}Å
ÄfdÅÂ_¹ÂY°ÄǩáH¯¶oMQqð¡ÃÂ|ÂÃ`ÆÅX½·óÃÂÂxÄįÃ
cQÂÂÂÂs«tÈÇ
FÂÂÂÂù^iÂÂt«Ä¯[ÂhÂÂAi©á¥ÃÄÃl|¹y¯YȵÆÂñÂǵïÂÄÂÄ»|DÂÂüȶ¡ÂÂoŽäÃG\\ÃÂT¿Ãõr¯ÂÂLguÃYÄRÆ©ÂÉ·ÅO\\İâæ^Å IJȶÈbÃGÂĬ¿ÄVÄgªÂ^Ãu½jÿÄÄjık@ĽÂ]ÄlÂ¥ÃÂÄûÃÂÂÄéV©±Än©ÂÈÂÃq¯½ÂYÃÃÅÂÃNÃÂÃ
Ãy¹NqáÊ
DÇ¡ÃÃ±ÂÆYÃ
y̱os§ÈµʽÇÇÆ¬É±Ã ÂÆ°N¢ÆÃuľýľÏȪƺÉļÂxÂZÄ}ÃÅŪÂĺÅÂÄFÐĽÌ
ȣͽÃŵìƩÃÏÿȮǡÅçÆÅ¯Ä~üȳÃUfÂdIxÿ\\G ÂÂzâÉÃOº·pqy£Â@ÂÂÂqþ@Ç˽IBäƣzsÃZÂÃà Ļdñ°ÅzéÃűzÈCìDÈĴĺf®ÂÃľưø@ÉÃÃKÄÅÆÂ§ÂÍtÄï͡VAÄ¡Ãûd³öÇÃXÄÄÃ{þÄu¸ÃÊ
ÄUÌéhɹÆÌÌ®ÈÇÖ¥à¥à¡°Å£àª¾ÃϲäʮW¨Òe×¨Å«È kɬɻ̼ãüfÆ SצɩÏÃ¥ÈHÏÃKdzͲOðÃÈÆÂ¼CÏÇà¢Ë¼Ð¤Ã¤ÆÂÄÂ̪Qʤ´¼mÈ JËÂÆ²ÃÉ mÇnÇÄÈÃÇ N~ÂʢĶÆÄÄźÊȬ˪ÄĸÄGÈÆ´Æj`ĢçĶÄà źÄÄ¢ÂÄÄÂYÂÃÅüôQÃÃÅÅÇÅêÆÂÂoËDĤúÃÇÃˤ³ÍgÅÂÆÄÃ^ªÆ`ªt¾äÆÃªÄ¦Ä¼ÃÂÄǨÈÂ»Í ^Ë®ÃȦƤøxRrÅH¤¸ÃxDÃÂÂ|øËËÆ®ÂìÉwɲFjIJÃw°ÇdÃÃÂ_ĸdîà ÅjÃÂêTĪÅÂÅWÃ|tqÄ¢UB~´°ÃFCÂÂU¼pÄÄÆN¦Â¾O¶ÂÅKÄOjÂÄÂj´ÄYpÂ{¦ÂÂSÄÃ\\TÂêVÂ÷ŠÃ¨Ã
DK°ÃtÅÄK¨ǵÃcḷ̌ÄÇ£ÈĽFÂlÄ¡UĵÂÅÂÈ£FÊÉÂMÄÄ¯ÊÆ¶É·ÃÅOǽ«ƽÂū¹ƱÅÌȨ§ÈÊÄiÉɶʦ}¨֪à ÌÆÇ¬Â¹Ç¨E˦ĥªÃêFÂxúQÂÂEr´WÂrh¤ÆÂ \\talÄDJÂÃ|[Pll̸ÆGú´P¬W¦Â^¦ÂH]prRÂn|Âor¾ÂwLVnÃIujkmon£cX^ÂBh`Â¥V¦U¤¸}ÂxRjÂ[^xN[~ªÂxQÂÂ[`ªHÃÃExx^wÂN¶ÃÂ|¨ìÂÂÂMrÂdYpÂÂoRzNyÂÃDs~ÂbcfÃ`L¾nÂ|¾T°c¨Ã¢aÂr¤Â`[|òDÅÄöxElÃdHÂÃI`ÂÄ\\ÃìÂ~ÃÂR¼tf¦^¢ķ¶eÂÃÃMÂptgjÂÂÉ¡ÄÃ
yÄ¡LûÂÅV®ÂÃÂÃÆÂİP|ªVVªj¬ÄÃêp¬ÂE|ŬÃc|ÃtÆK fÂ{ÄFÄÂÆXƲÄ
o½ÄÂ\\Â¥Âo}ÂÃu£çÂkXÂ{uĩ«ÄÃÃUÅ
ÃÅ¢qÂÂŤ¥lyÅ[Âoi{¦ÂLÂÅÂðFȪÈÂÂÄL¿ÃÂÂf£K£ʺÂoqNÂÂwÄc`ueÂtOjðKJ±qÂÃÄ¡mÂÄÅos¬Â
qehqsuÂÂH{¸kH¡ÂÂ
ÃRÇªÃÆbÈ¢´äâNìÃÊÂ¦Ã¢Â©Ä u¦öÄ^â£ÄhÂÂÄMÃÃwÂ\\fŦ°W ¢¾luŸDÂwÂ\\ÌÊÃÃMÂ
Ä[bÃÂEn}¶VcÂ
êÂsÂ" |
| | | ] |
| | | ], |
| | | "encodeOffsets": [[[129102, 52189]]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "210000", |
| | | "properties": { |
| | | "id": "210000", |
| | | "cp": [123.429096, 41.796767], |
| | | "name": "è¾½å®", |
| | | "childNum": 16 |
| | | }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@LÂÂ@@sÂa"], |
| | | ["@@MnNm"], |
| | | ["@@ÂdÂc"], |
| | | ["@@eÃÂC@bÂÂÂÂ"], |
| | | ["@@fÂÂ
XwkbrÂÃ`qg"], |
| | | ["@@^jtWÂQ"], |
| | | ["@@Â~Â Y]c"], |
| | | ["@@G`ÄN^_¿ÂZÂÃM"], |
| | | ["@@iX¶BÂY"], |
| | | ["@@ÂYÂZ"], |
| | | ["@@L_{Epf"], |
| | | ["@@^WqCT\\"], |
| | | ["@@\\[§t|¤_"], |
| | | ["@@m`n_"], |
| | | ["@@ÃxÇ{q_Ã^Giip"], |
| | | [ |
| | | "@@@Âé^BÂÂntÂaÃUÂÂÂ]x ¯ÃPIJ°hÂÊK³ÂVÂÃ@Y~Â|EvĹsæÂL^pòŸÃG ÂÃl]ÂxxÃ_ÂfT¤Ä¤cÂÂPÂÂC¨¸TVjbgH²sdÃdHÂt`B²¬GJjĶ[ÃhjeXdlwhÂðSĦªVÃÃÂÂÃÂZÂÃŶ®²Â^ÂÃyÂÃ
ÃcPqÅÂÄDMħÄÅHÂÂkÂçvV[ij¼WÂÂYÂÃäĦÂÂ`XlÂR`ÂôLUVÂfK¢Â{NZdĪÂYĸÃÃJRr¸SA|Æ´gÅ´Ä´ÃbvªÃX~ÂźBÂ|¦ÃÂE¤Ã`\\|ÂKÂÂUnnI]¤ÃÃÄnÅÂR®Å¿¶\\ÃøÃDm¦ÃbŨabÂÂaÄ\\ľãÂøaÂtÃSÆÂ´Â©v\\ÃÃÃǴ¤Ã¨JKrÂZ_ZÂfjþhPkxÂ`YÂÂRIÂjJcVf~sCN¤ ÂEÂÂhæÂmÂÂsHy¨SðÃÃ\\\\ÂÄRZk°IS§fqÅÃýáÄÂÃÃÃ[^¯ǤŲÂê´\\¦¬ÄPM¯£Â»uïpùzExÂÂanµyoluqe¦W^£ÃL}ñrkqWÅûPÂÂUP¡ôJÂoo·ÂU}£ÂÂ[·¨@XÂĸÂÂÂÂDXmÂÃúÂÂGUÂCê½{ÃÄ^ÂcjÂk¶Ã[q¤ÂLÃö³cux«zZf²BWîYýve±ÃCÂý£W{Ã^Âq^s÷¨ÂÃOÂt¹·CÂÂ¥ÂGDÂÂrÃ@wÂÃKţëV·i}xÃÃ÷Âi©ÄÂÉÇ¡]ÂÂ{c±OW³Ya±ÂÂ_ç©ÂHÂÄoÆ«ÂÅqÂr³ÂLys[Âñ³¯OSÂÄOMisZ±Ã
FCÂ¥Pq{ÂÂÃ[Pg}\\¿ghÄOÂ
Âk^Ä£ÃÂFıÄÄ¥MÂoEqqZûÄųF¦oĵÂhÂÃP{¯~TÂÃlªÂNÂÃYÂÃ{Ps{ÃVUÂÂeÄwk±ÅVýŽJãÂÃûJm°dhcÃffÂdF~ÂÂÄeÄÂd`sx² Â®EżÄdQÂÂÃd^~ÄÃH¦\\ÂLKpÄVez¤NP ǹÃÂRÂÃÄ
JShÂa[¦´ÃghwmÂBÂèźhI|ÂVVÂÂÂ|p] Ã¼èNä¶ÃBüÂL`¼bÃæÂKVÂÂpoÂúNZÃÃKxpw|ÃEMnzEQÂÂIZÂÂZÂNBÂÄÃFÃçmÄ©ÂWĪñtÂÃĵÃñZ«uD±|Ælij¥ãn·±PmÃaÂÂdÂa CLÂÇkùó¡³Ã«QaÄÃÂOÃÂ¥ÃÄQÈ¥ÄÆy³ÃA" |
| | | ] |
| | | ], |
| | | "encodeOffsets": [ |
| | | [[123686, 41445]], |
| | | [[126019, 40435]], |
| | | [[124393, 40128]], |
| | | [[126117, 39963]], |
| | | [[125322, 40140]], |
| | | [[126686, 40700]], |
| | | [[126041, 40374]], |
| | | [[125584, 40168]], |
| | | [[125453, 40165]], |
| | | [[125362, 40214]], |
| | | [[125280, 40291]], |
| | | [[125774, 39997]], |
| | | [[125976, 40496]], |
| | | [[125822, 39993]], |
| | | [[125509, 40217]], |
| | | [[122731, 40949]] |
| | | ] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "220000", |
| | | "properties": { "id": "220000", "cp": [125.3245, 43.886841], "name": "åæ", "childNum": 1 }, |
| | | "geometry": { |
| | | "type": "Polygon", |
| | | "coordinates": [ |
| | | "@@Âpä³PClÂFbbÃzÂÂwBGÂÄÂZÂÃ
i»ÂlYÂIJSgÂkãÂ^SÂÂqd¯ÂÂRÂ
©é£¯SÂ\\cZ¹iűÆCuÆÃXÂoR}ÂM^o£Â
R}oªUÂFÂ
uuXHlÂEÃ
ÂÂÂé¤ÃmTÂþ¤D²Ãufà ÃÂXXñAeÂyYw¬dvõ´KãÂ\\rµÃlÂiÂÂdÄ]|DÃVÂÂH¹ÂîÃWnÂCÂÂÄ·Â W§@\\¸ÂÂ~¤ÂVp¸ÂpóIO¢ÂVOÂÅürXql~òÃK]¤¥Xrfkvzpm¶ÂbwyFoúv𼤠N°Ä
O¥«³[Âéǡű_°Ã\\ÃÃÄÂþâÅà erR¨ÂJYlÄQ[ ÃYëçTGzÂtnÂágFÂÂkMÂÄGäia ÃÂÂù`\\xs¬dÄkNnuNUÂÂuÂP@ÂvRY¾ÂÂ\\¢Â
ÂGªóÄ~RãÃÃĢùÂÄÅ´ÃhQÂxtcæëSɽÅÃëÇ£ÆG£nj°KÆÂµDsÃÃpyĸ®¿bXpÂ]vbÃZuÄ{nÂ^IüÂÃSæEÂvRÃûh@âÂÂ[ÂÆÃÂô~FNr¯ôçR±ÂÂHÃlÂÂÄ¢Â^¤¢ÂOðÂÂævxsÅ]ÃÃTÂÄ s¶¿âÃÂGW¾ìA¦·TìÂè¥ÂÃÃJ¨¼ÂÃÃÂ¼ÂÆ¦ÉxÃ~SÂtD@ÂļŴ¡jlºWÂvÃÂÂzƦZòCH ÂAÂxiukdÂÂGgetqmcÂãOzyÂ¥cE}|Â
¾cZÂ
Âk¿uÅã[oxGikfeäT@Â
ÂSUwpiÃFM©Â£è^ÃÂÂ`@v¶eÅÂf hÂeP¶ÂÂtÂäOlÃÂUgÂÃzŸU`lÂ}ÃÃUvÃ_ŬÃi^Äi§²ÃÂB~¡ÄÂÃEgc|DC_Ȧm²rBx¼MæŮdĨÃâYxÂÆDVÃĺĿg¿cwÃ
\\¹ÂÂ¥YÄl¤ÂOvÂÂLjM_a W`zļMž·\\swqÃSAÂÂÂqÂÅij¯Â°kÂÂRİwx^ÄkÇÃÂÂÂÂÂÂÂÂÂ\\]ÂnrÄ}²ÄŲÃøãh·M{yMzysÄnÂÄÄ¡V·°ÂG³¼Xä¹Âi´o¤ÅÂÂÃ`ÃÂDzÃUÄd\\iÃÂÂÂmÃBĤÃɲDEh LG¾ÆÃ¾{WaÂÂYÃÃÂÄ¢ÄÃRîÄjÂ}ÃÂÂccjÂoUb½ÂÂ{Âh§Ǿ{KÂÆÂµÃ÷ÂGÄÊåưÃsÂlÂÂyiÄ«Â`å§ÂHÂ¥AeÂ^§ÂGKÂ}iã\\c]v©ģZÂmÃ|Â[M}Ä£TÉĵÃÂÃ`ÃÂçmÂÂFKÂ¥ÃÃÃbX³ÃQÃÂHoÂf{Â]eÂpt·GÅÄYünÄųVY^ÂÂydõkÃ
ZW«WUa~U·SbÂwGçÇÂÂiW^qÂFÂÂÂuNÄ·EwÂÂUtW·ÃÄæ©PuqEzwAVÂÂXRÂãQ`©GÂMÂehcÂcÂÂÄÃÂd©ÃW_ÃÂYÆ
»Â
é\\ÂÂɹ~ÇG³méBÅ¡ÂuT§Ĥ½¢Ã_ýÂL¡ÂÂýÂqT^rmeÂ\\PpÂZZbÂyÂÂuyÂbQÂefµ]UhÄ¿DCmûvaÂÃNSkÂCwnÂcÄfv~Â
YÂÂÃG" |
| | | ], |
| | | "encodeOffsets": [[130196, 42528]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "230000", |
| | | "properties": { |
| | | "id": "230000", |
| | | "cp": [128.642464, 46.756967], |
| | | "name": "é»é¾æ±", |
| | | "childNum": 2 |
| | | }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | [ |
| | | "@@UµNÿ¥īèçÂÂÂÂHÃøÆÂ¶LÂǽ|g¨|ÂÂÂa¾pViÂddÂÂ~ÃiÂÃÄÃQÄ¡ÄÃÂZÃÂÂXb½|Å¿ÃH½ÂKFgɱCÄ£ÃÃAÂnÂÂjÃc[VÄDZÃÃÂÃ_ £Å³pÂj£ºÂ¿»WH´¯ÂU¸ÄÄ¢mÂtÄyzzNN|g¸÷äűñÄÄ~mq^ÂÂ[ÂÂÂÂÂÂÂÂÇÃÄlw]¯xQįl°ÅÄ´rÂÂÂBÂÃTxr[tޏĻN_yÂX`biNÂKuÂ
ÂP£kÂZĮ¦[ºxÃÃdhÂĹÅUÃÆCwÂáZħÃÅcÃ¥»NAw±qÈ¥nD`{ChdÃFÄÂ}¢ÂA±Ãj¨]ÄÃjÅ«Ã`VuÃÃ
Â~_kÅ·VÃyhÂÂVkÃãPsÂÂÂOµÂfÂgeÂÅÂ
µf@uÂ_àÃcªNªÃEojVxÂT@ÂãSefjlwH\\pÅäÃvÂÂÂlY½d{ÂF~¦dyz¤PÂÃndsrhfÂHcÂvlwjF£ÂG±DÃÂÆ¥YÂyÃÂÂu¹XikĿ¦ÃqÆÇOŨLIÂ|FRÄn sª|CÂËzxÂAè¥bÂfudTrFWùAm|ÂÄÄsÄ·ÃF´NÂÂ}ÄÂ
UÂÂÃ@ÃijſmuÂçÂuð^ÃýowÂFzÃÃÄNÅÂÇÈôªÃÅÇà ÄÃËÄÅÆÊÄÆÅ¸Ë®È¬Æ¬Ä°ÂUÂzouÂxe]}ÂÂ
AyÃÂW¯ÃmKÂÂQ]ÂĪºif¸ÃX|sZt|½ÃUàlkÂ^p{f¤lºlÃW ÂÂA²ÂPVÃÂPHÂÃâ]ÃÄÃÃk´\\@qà sÄÃQºpRij¼èiÂ`¶ÂÂbXÂÂrBgxfv»ÂuUiÂÂ^vÂ~ÂJ¬mVp´£Â´VWrnP½ì¢BX¬hÂÂðX¹^TjVÂÂriªjÂtÅÃmÂtPGx¸bgRÂÂsT`ZozÃO]ÂÃFôÃÂOÃÂÂÅÂvÃ
ÂÂpÂcGÂêÂsx´DRÂÂ{AÂÂEOr°ÂÂÂx|ÃÂb³Wm~ÂDVjºéNNÂÃÃËɶÂGÂxÅ·CStÂ}]ûÅÂSmtuÃÃÄNÂÂÄg»ÂÃT«u}ç½BĵÃʣ¥ëáMóãÈ
¡ÆaÇ©ÃÃQÂÂG¢·lG|ÂÂtvgrrf«ÂptÄÅnÂÃ
Ä¢rÂI²¯LiÃsPfÂ_vÄ dÂxM prʹÂL¤Â¤ÂeÃÂÂÃÄKÂÂïÃVY§]IÂóáĥ]Ä·ÂKÂÂ¥Âj|pÅ\\kzţ¦ÂÅ¡nÅäÃVÄîά|vW®l¤èÃrÂÂÂxm¶Ä~lÃÆ¯ÄÍöÈEäÃQÄÂÄ»ƢjȦOǺ¨ìSÅÃÆ¬yÂÂQÂv`ÂcwÂZSîü±Ç]Åç¬B©ÅzƺŷÉeÂeOÂĨSÂÂÂfm ÄÂÆPÌÄz©ÄÂÃÃÃmgÂÃsJÂ¥ÆÂÅÅæÂÃÂÃqv¿ÃUOµªÂÃnĦÃ_½ä@êÃÂ
£P}Ä [@gÄ¡}gÂÉÃÂûÃWXá¢užƻÃsNÃÂ½ÂÆÃ§ÄÅÂAÂÄeL³à ydl¦ÄVçÅpÅÇĽĺſÃÂQÃÃçÃÄ¡ÃÂsĬÂǸ¯YÃÄÄ¡Hµ ¡eÃ¥`ÂļÂrÄÅóƢFìÂÄWøxÃkÂÂÆdƬÂv|ÂI|·©NqÅRŤéÂeÅÂÅÂÂà ÅUÂ²ÅÆBÂQ£Ä}L¹Ãk@©ÄuǰųǨÂçÆnTÃÃéÆÃcfÄŤ^XmÂÂHÂÄÄëW·Äëx³ÇÄ·ÃÄJÄÂwİ_ĸÂÈ^ôWr°oú¬ĦÂ
ŨK~ÂȰCÄ´Ƕ£ÂfNÃèâw¢XnÅ®eÃÃ;¾xäLÄ´ÂÄlļO¤ÃĨA¢Ãɨ®ÂÃCàŬGÆ ÂÆ¦YÄÂÄÃÆ¬DJÂg_Í¥Å@ÄÅ
Ä»A¶¯@wÃqC½Ä»NÂÄëKÂÄÃQÂÃÆ«[«ÃÃÂgÃÃÃOÃáWÂñÂuZ¯ĥÂÂÂÅÄ¡ÃÄ·Ju¤E Â寰WKñ_d_}}ÂvyÂõu¬ï¹ÃU±½@gÿrýDÂÂgÂ
Cdµ°MFÂÂYxw¿CG£ÂRÆÂ½Ã{]L§{qqÄ
¿BÃÆ»ÄëÂÜÇÃ|c²}Fµ}ÂÃRsÃpÂg±ÂQNqÇ«ÅRwÅnéÃÃK«SeYRÂ
ÅÂ@{¤SJ}ÂD ÃÇÖÂ]gÂr¡µŷjqWÃham³~S«ÂÂÂÃ]" |
| | | ] |
| | | ], |
| | | "encodeOffsets": [[[134456, 44547]]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "320000", |
| | | "properties": { |
| | | "id": "320000", |
| | | "cp": [119.767413, 33.041544], |
| | | "name": "æ±è", |
| | | "childNum": 1 |
| | | }, |
| | | "geometry": { |
| | | "type": "Polygon", |
| | | "coordinates": [ |
| | | "@@cþÃ
PiÂ`ZÂRuÂ¥Ã\\]~°ÂY`µÂÃÂ^phÃbnÃÅúÂòaÂĬºTÃÅbÂÂe¦¦Â{¸ZâÄNp©ÂHr|^ÂmjhÂSEb\\afv`sz^lkÂljÂÃtg¤D¾X¿ÃÂ|ÄÂiZÂÂÈÃ¥B·î}GL¢õcÃjaÂyBFµÃC^ÄÂcÃt¿sÄH]j{s©HM¢ÂQnDéDaÃ÷jgà iDbPufjDk`dPOîÂhw¡ĥÂÂ¥ÂGÂÂP²ÄobºrYÂÂî¶aHŢ´ ]´ÂrılÂw³r_{£DB_ÃdÃ¥uk|ÂŨ¯F Cºyr{XFyÂe³ÃÄ¿ÃÂkÄB¿ÂMvÃpm`rÃãÂ@ĹhÃ¥gÃÃÆ¿xnlĶÃ
ì½Ot¾dJlÂVJÄÂÂÇÂÅqvnOÂ^ÂJÂZÂż·Q}êÃÂÃ
mµÃ]ÂÆÂ¦Dq}¬R^èÄ´ÅÄ»ÄIÃÂtÂIJyQÅÄ MNtÂR®òLhÂÂÂÄs©»Â}OÃÂGZz¶A\\jĨFÂäOĤÂHYÂÂJvÂÃHNiÃaÄÂÃÂnFQlÂNM¤ÂB´ÄNöÉtpÂŬdfÃ¥Â
ÂÂqm¿QûÂùÅÂÃb¤uÅJÅ´u»¹ÄÂlÂÈħŴwÌÅµÂ²Ç¹Ç ÍhÄÅÆrçü±YÂxciÂtÄ®Âjű¢KOÄ·ÂCoy`å®VTaÂ_Ä]ÅÃÉï²ʯÃ^]afYǸÃÄÄĪȣJÄÍôÆÃÂÃÃÂÄ«ÂçÃÉǥ£ÂÃmY`ó£Z«§°Ã³QafusNıÇ
_k}¢m[ÃóDµÂ¡RLÄiXyÂÃ
NïÄ¡¸iÄÃÂNÃÅoÄdÅîåŤûHcs}~Ãwbù¹£¦ÃCÂtÂOPrÂE^ÃoÂgÂÄIµÂÃÃ
ʹKÂ
¤½phMÂü`oæÂÂÅ" |
| | | ], |
| | | "encodeOffsets": [[121740, 32276]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "330000", |
| | | "properties": { |
| | | "id": "330000", |
| | | "cp": [120.153576, 29.287459], |
| | | "name": "æµæ±", |
| | | "childNum": 45 |
| | | }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@E^dQ]K"], |
| | | ["@@ÂjX^jÂ"], |
| | | ["@@sfÂbUÂ"], |
| | | ["@@qP\\xz[ck"], |
| | | ["@@ÂR¢ÂFX}°[s_"], |
| | | ["@@CbÂ\\Â}"], |
| | | ["@@e|v\\la{u"], |
| | | ["@@v~u}"], |
| | | ["@@QxÃF¯}"], |
| | | ["@@¹nÂvÃs¯o"], |
| | | ["@@rSkUEj"], |
| | | ["@@biÂZÂP"], |
| | | ["@@p[}INf"], |
| | | ["@@ÿÂ"], |
| | | ["@@¹dnbÂÂ
"], |
| | | ["@@rSÂBnR"], |
| | | ["@@g~h}"], |
| | | ["@@FlEk"], |
| | | ["@@OdPc"], |
| | | ["@@v[u\\"], |
| | | ["@@FjâL~wyoo~ÂsµLÂ\\"], |
| | | ["@@¬e¹aNÂ"], |
| | | ["@@\\náq]L³ë\\ÿ®ÂQÃÂ"], |
| | | ["@@ÃA©[¬"], |
| | | ["@@KxÂvÂ"], |
| | | ["@@@hlIk]"], |
| | | ["@@pW{Âo||j"], |
| | | ["@@Md|_mC"], |
| | | ["@@¢Â
X£ÃÂylD¼XÂtH"], |
| | | ["@@hlÃ[LykAvyÂÂfwÂ^E¤"], |
| | | ["@@fp¤MusÂR"], |
| | | ["@@®_ma~ÂÂLìÂZ"], |
| | | ["@@iÂMÂxZ"], |
| | | ["@@ZcYd"], |
| | | ["@@Z~dOSo|A¿qZv"], |
| | | ["@@@`ÂEN¡v"], |
| | | ["@@|ÂTYÂ{"], |
| | | ["@@@n@m"], |
| | | ["@@XWkCT\\"], |
| | | ["@@ºwÂZRkÄWO¢"], |
| | | ["@@ÂX®±Grê\\ÃáXq{Â"], |
| | | ["@@ůTG°ÄLHm°UCÂ"], |
| | | [ |
| | | "@@¤ÂÂaÃx~}dtüGæţÅÃÄcÅpMÃÃÂjÄ¢·ðÄÃMzÂjWKÄ¢Q¶ÂÃ_êÂÂ_BıÂi«pZÂgf¤Nrq]§ÄN®«H±ÂyƳþßīà LÅÄÅ´ÇÄÃÃBÅêÂÂÃÅHÅÅÃ¥qûõÂi¨h÷Âñt»¹ýv_[«¸mÂYL¯ÂQªÂ
mÄÃ
dMÂÂgÃjcº«ÂĬÂK´ÂB«ÃÄ
coÄ\\xKd¡gÄŧ«®áÂ[~ıxu·Ã
ÂKsÃÃÂc¢Ã\\ÄÆÃ«bf¹ÂÂÄ£SÂÄÂkáÆÃÂÄZB{ÂaMµÂfzÅfÃ¥ÃŧįÆÇÃÄÂġģg³neÂÄ
»@¦S®Â\\ÃðCÂhÂiqªÄiAuÂAµÂÂ_W¥ƣO\\lÄÄ¢ttC¨£t`ÂÂPZäuXÃBÂsÂÄ»yekÂÂOÄġĵHuXBµ]ÃÂÂÂÂ\\°®¬F¢Â¾pµ¼kÅó¬Wät¸|@ÂÂL¨¸µrºù³Ã~§WIÂÂZW®±èÃÃxÂ`²pÄÂrOògtÃZ}þÃ]¡ÂÂFKÂwsPlU[}¦RvÂn`hq¬\\ÂÂnQ´ÄRWbÂÂ_ rtÄFIÃÂkÂÂĦPJ¶ÃÃÃJÄÄTÄòÂC ²@PúÂ
Ãz©PÂCÃÃÂıÂhÅÂl‰~nm¨f©Âiļ«mÂntÂuÂÃZÃÃjÂÂL®EÃÂFª²iÃxèÂIÃhhst" |
| | | ], |
| | | ["@@o\\VÂzRZ}yÂ"], |
| | | ["@@Â@°¡mÃÂGĨ§Ianá[ýƤjfæÂÃLÂÂäGrÂ"] |
| | | ], |
| | | "encodeOffsets": [ |
| | | [[125592, 31553]], |
| | | [[125785, 31436]], |
| | | [[125729, 31431]], |
| | | [[125513, 31380]], |
| | | [[125223, 30438]], |
| | | [[125115, 30114]], |
| | | [[124815, 29155]], |
| | | [[124419, 28746]], |
| | | [[124095, 28635]], |
| | | [[124005, 28609]], |
| | | [[125000, 30713]], |
| | | [[125111, 30698]], |
| | | [[125078, 30682]], |
| | | [[125150, 30684]], |
| | | [[124014, 28103]], |
| | | [[125008, 31331]], |
| | | [[125411, 31468]], |
| | | [[125329, 31479]], |
| | | [[125626, 30916]], |
| | | [[125417, 30956]], |
| | | [[125254, 30976]], |
| | | [[125199, 30997]], |
| | | [[125095, 31058]], |
| | | [[125083, 30915]], |
| | | [[124885, 31015]], |
| | | [[125218, 30798]], |
| | | [[124867, 30838]], |
| | | [[124755, 30788]], |
| | | [[124802, 30809]], |
| | | [[125267, 30657]], |
| | | [[125218, 30578]], |
| | | [[125200, 30562]], |
| | | [[124968, 30474]], |
| | | [[125167, 30396]], |
| | | [[124955, 29879]], |
| | | [[124714, 29781]], |
| | | [[124762, 29462]], |
| | | [[124325, 28754]], |
| | | [[123990, 28459]], |
| | | [[125366, 31477]], |
| | | [[125115, 30363]], |
| | | [[125369, 31139]], |
| | | [[122495, 31878]], |
| | | [[125329, 30690]], |
| | | [[125192, 30787]] |
| | | ] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "340000", |
| | | "properties": { "id": "340000", "cp": [117.283042, 31.26119], "name": "å®å¾½", "childNum": 3 }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@^iuLX^"], |
| | | ["@@Âe©Ehl"], |
| | | [ |
| | | "@@°ZÃëĵmkÇwÃÃæhºgBÄâÂqÃÄÂzÂÃgÅtÃÃÄÂÃáÂhEz|WzqD¹Â°EÂŧl{ævÃcA`¤C`|´qÂxIJkÂq^³³ÂGšµbÂÃZÂ
¹qpa±Ä OH¦ÂĦÂx¢ÂgPÃcOl_iCveaOjChøiÃÂbêCC¿ÂmÂRV§¢A|t^iÄ GÃtÃsÂd]Ä®ÃDE¶zAb à iödK¡~H¸ÃæAÂÇ¿YÂÂj{Ä¿ÂÂýW®£ChÂÃsiÂÂkkly]_teu[bFaÂTigÂn{]GqªÂoÂÄMYá|·¥fÂ¥ÂÂÅaSÃÄÂNµÂñÄ«ImÂ_m¿Ãa]uÄp Â
Z_§{CÂäg¤°r[_YjÂÃOdýÂ[ÂI[á·¥ÂQ_nÂùgL¾mvÂËBÃöÂÄJhÂpÂc¹ÂO]iÅ ]Â¥ jtsggJçÂwÃjé±ÂEFÃÂÂÂKiÂÃÃÃYvÂ
sÂÂm¬njĻªÂ§emná}k«ÅÂÂgIJÃÂDäÂáªOyÂÂÃOù±@DÂñÂSÄÄÄÃIÿIµĥOÂÂÂjNÃÃT¡Â¿tNæÅà åyÄ·rÄq§ÃÄ©sWÃÃÂF¶ÂÂX®¿ÂmÂÂwÂ
RIÃÂfÃoG³¾©uyHÂį{ÆÄ§Â¯AFnuPÂÂ
ÃÃzÂÂVÂdà ôº^Ãæd´ÂÂoG¤{S¬Äxã}ÂŧÃKǥĩ«ÂÃOE÷ÃdÃsÆÃ¨[ÂÃ^Xr¢¼Â§xvÃÂõ`K§ tôCvlo¸fzŨð¾NY´ı~ÃÄÄÂ
ÃúÂLÃÃÂÂ_ÃÃ|]ÃÃFlÂg`bÂeÂÂÂn¾¢pUÂh~ƴĶ_Âr sÄ~cÂÂÆ]|r c~`¼{Ã{ÈiJjzÂ`îÃÂT¥óÂ
]Âu}ÂfÂ
ïQl{sklÂoNdÂjÂäÃzDvÄoQÂÄHI¦rbÂtHÄ~BmlRÂÂV_ÂħTLnñH±ÂDÂÂL¼Lªl§Ťa¸ÂÄlK²Â\\RòvDcÃJbt[¤ÂD@®hh~kt°ǾzÂÃ@¾ÂªdbÂYhüóZ Å¶vHrľ\\ÃÂJuxAT|dmÃOÂÂ[ÃÃÂG·ÄÄ
ÄlŪÃpSJ¨ĸÂLvÃcPæķŨ®mÃÂÂálÂwKhïgA¢ųéäOÃÂm°ÂK´Â" |
| | | ] |
| | | ], |
| | | "encodeOffsets": [[[121722, 32278]], [[119475, 30423]], [[119168, 35472]]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "350000", |
| | | "properties": { |
| | | "id": "350000", |
| | | "cp": [118.306239, 26.075302], |
| | | "name": "ç¦å»º", |
| | | "childNum": 18 |
| | | }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@Âzht´ÂÂ]"], |
| | | ["@@aj^~ÄG©O"], |
| | | ["@@ed¨ÂC}}i"], |
| | | ["@@@vÂPGsQ"], |
| | | ["@@ÂsBzÂddW]Q"], |
| | | ["@@S¨QÂ{"], |
| | | ["@@NÂVucW"], |
| | | ["@@qptBAq"], |
| | | ["@@¸[mu"], |
| | | ["@@Q\\pD]_"], |
| | | ["@@jSwUadpF"], |
| | | ["@@eXª~ÂÂ"], |
| | | ["@@AjvFso"], |
| | | ["@@fTÂÂ_ÃÃ\\ÂÂÂv|ba¦jZÃy°"], |
| | | ["@@IjJi"], |
| | | ["@@wJIÂÂx«¼AoNe{MÂÂ"], |
| | | ["@@K±¡ÃÂÂÄäeZÂ"], |
| | | [ |
| | | "@@k¡¹Eh~c®wBkÂUpláIÂ~MÄÂe£bN¨gZý¡a±Ãcp©PhÂI¢QqÂ
ÃGjÂÂÂ|Â¥U g[Ky¬ÂÂÅÂÂv@OpÂtÃEÂÂFÂÂ\\@ åA¬ÂV{XÄ£ÂÄÂByÂ
cpÂÄÂ
¼³Äp·¤ÂÂ¥oÂhqqáÅ
LsÂÂ^á§qlÂÃhH¨MCeȌÃGDÂ¥zPO£ÄÃkJA¼ÃÂÄÂuÂÄeûÃÂiÃŧÂSWÂ¥ÂQÂûŽùÄcçSùĩÄ
SWó«ÃÄACµÂeRÂÃ¥ÂÇRCÃÃZÃ¢Âź±^dlsÂtjD¸ÂÂZpuÂÃâÃÂH¾oLUêÃÃjjÄò´ÄWÂÆÂÂ
^ÃÂ¥ÂĦÂ@ÃòÂÂmÂÂOw¡õyJÂyD}¢ÄÂÃÃÄ¡fÂÂZdÂa©º²z£ÂNÂÂjD°Ãtj¶¬ZSÃ~¾c°¶ÃmÂxÂO¸¢Pl´ÂSL|Â¥ÂAÂȪÄMÂÅIJg®áIJÄÄü` ÂQF¬h|ÄÂJ@zµ |ê³Ã ¸UÃŬŬÃEttĸrÂ]ÂÂðÂM¤ĶIJHtàAÂÂÂĬkvsqÂ^aÃbvÂdÂÂfÃòSD´Z^ÂxPsÄÂrvÂÆÅÂÂjJdÃÅà®AÂæĤdÂxÄqAÂÂZRÂÃMźÂnÄ»ÂİÃZ YXÂæJÂyIJ·¶q§·ÂK@·{sÂXãô«lŶ»o½E¡Â«¢±¨Y®Ã¶^AÂvWĶGÄÄ¢ÂPlzfÂļÂtà AvWYãÂO_¤sD§ssÄÄ¡[kƤPX¦Â`¶Â®ÂBBvĪjv©Âjx[L¥à ïÂ[FÂ
¼ÃûÄV`«ÂIpÂ}ccÃ
Ä¥ZEÂãoPÂ
´B@ÂD¸m±Âz«Ƴ¿å³BRöÂÂWlâþäÄ
`Â]Z£TÂc ĹGµ¶HÂm@_©Âk¾xĨÂôÈðX«½ÄCIÂbÄqK³ÃÂÚ¬OAÂwã»aLÅÂÃÄ¥W[ÂÃGIÂÃNxij¤D¢ÂÂîÄÃB§°_JÂGsÂÂ¥E@Â
¤uÄÂ
PÂÃ¥ÂcÂuMuw¢BI¿Â]zG¹guÄ®ck\\_" |
| | | ] |
| | | ], |
| | | "encodeOffsets": [ |
| | | [[123250, 27563]], |
| | | [[122541, 27268]], |
| | | [[123020, 27189]], |
| | | [[122916, 27125]], |
| | | [[122887, 26845]], |
| | | [[122808, 26762]], |
| | | [[122568, 25912]], |
| | | [[122778, 26197]], |
| | | [[122515, 26757]], |
| | | [[122816, 26587]], |
| | | [[123388, 27005]], |
| | | [[122450, 26243]], |
| | | [[122578, 25962]], |
| | | [[121255, 25103]], |
| | | [[120987, 24903]], |
| | | [[122339, 25802]], |
| | | [[121042, 25093]], |
| | | [[122439, 26024]] |
| | | ] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "360000", |
| | | "properties": { |
| | | "id": "360000", |
| | | "cp": [115.592151, 27.676493], |
| | | "name": "æ±è¥¿", |
| | | "childNum": 1 |
| | | }, |
| | | "geometry": { |
| | | "type": "Polygon", |
| | | "coordinates": [ |
| | | "@@ÂĢĨÆgļ¼ÃMD~Ūe^\\^§Âý©jÃÂcZÂèzdÃa¶ÂlÃÂJÂìõ`oz÷@¤uŸ´ÂôÄöY¼ÂHÄÆ¶ajlÃÆ©Â¥Ã©Z[Â|h}^U Â ¥pÂÄžƦO lt¸Ã ÂQ\\ÂÂaÃ|CnÃOjtÂÄĤdÂÃÂF`¶Â@Ãë ¦ÅèSêvÂHĢûXD®Â
QgÃÂWiÃPÃìºr¤ÇÂNÄ Â¢lÂÂÄtZoÂCÆÃºCxrpÄ V®Ã{f_Y`_Âeq®Aot`@oÂDXfkp¨|Âs¬\\DÂÃSfè©Hn¬Â
^DhÃyøJhÂÃxÄ¢ÄLÃÂÂÆ PżÄÄwÈ Ä¦G®ÂÇĤäTÂÅ Ã~Ħw«|TF¡ÂnÂc³Ãå¹]ÄÄxe{ÂÃÃÂÂvOEm°BÆÄ¨Ä°|GÂvz½ª´ÂHÂà pÂeJÃÂQÂxnÂÃÂWÂÂÂEµà ÂXÃ
Īt¨ÃÄrÃwÃFÃ|ÅÃMå¼ibµ¯»åDT±Âm[Âr«_gÂmQu~Â¥V\\OkxtL E¢ÂÂÂÃ^~ýêÂPóÂqoı_Ãw§ÃªåÆÄ¼ÂmÄŹÂ¿NQÂÂ
YBÂÄ
rwÄ£cÃÂ¥BÂÂÂÅÃcÃiIÂÂÆÄ¿uÂÂqtÄwO]³YCñTeÃÂÂÂcaubÃÂ]trluÂÄ«Â
ÂBÂÃÂGsĵıN£ïÂÂÂ^Ä·qss¿FūūV÷´Ã{éÄýÂÿÂOEÂÂR_ÂÄûIÄâJhÂÅ
ıNÂÈ©ÄBÂ
¦ÂK{ÂTk³¡OP·wÂnµÃd¯}½TëYiµÃsC¯ÂiM¤Â¦¯P|ÿÂUHvÂheÂ¥oFTuÂõ\\ÂÂOSsÂMÃ²ÄÆiaºÄXÂÄĵà ·çhÆÃ·ÃÂ{ÂÃgu^ÂÄgÂm[ÃzkKN¶ûlÄÃ{XSÃÂv©_ÂÃëJbVkÂÄVäP¾ºÃMÃxlò~ªÃà GÄ¢B±ÂÃÂKÂyÂáV¼Ã~ÂÂÂ
`gÂÂsÃfIÂÆlĹe|Â~udjÂuTlXµf`¿JdÂ[\\ÂÂL²" |
| | | ], |
| | | "encodeOffsets": [[116689, 26234]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "370000", |
| | | "properties": { |
| | | "id": "370000", |
| | | "cp": [118.000923, 36.275807], |
| | | "name": "å±±ä¸", |
| | | "childNum": 13 |
| | | }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@Xjd]{K"], |
| | | ["@@itbFHy"], |
| | | ["@@HlGk"], |
| | | ["@@TÂÂGÂy"], |
| | | ["@@K¬ÂÂÂU"], |
| | | ["@@WdXc"], |
| | | ["@@PtOs"], |
| | | ["@@ÂLnXhc"], |
| | | ["@@ppVÂu]Or"], |
| | | ["@@cdzAUa"], |
| | | ["@@udRhnCIÂ"], |
| | | ["@@ÂoIÂÂpRÂ"], |
| | | [ |
| | | "@@ĽÄ{fzƤîÂKÂÂÃMÄ®]ÂÂZF½Y]â£ph¶¨râøÃÂÃǨ¤^ºÃÂGzÂ~grÄÄlÄÃÂLÄÇ¢Ão¦ÂcvÂKbÂgr°WhÂmZp ÂL]LºcUÂÃÂnÂżĤÃÄÂbAnrOA´ÂÈcÃbƦUÃrÄUÃøÂĬÆÂÂÂEzÂVL®öÃBkÅÃÄĹŧ̱ÃbÃÃÂnb²ĦhÅBÄÂÂįĦåXÄì@L¯´ywÂÆCéõĠƿ¸Âlµ¾Z|ÂZWyFY¨Mf~C¿`Âà _RÃzwÆfQnny´INoƬÂèôº|sTÂJUÂÂÂLÂîVjÂǾÄÃÂÂDz²XPn±ÂÅ´Pè¸ÅLÆÃƺ_TÂüÃĤBBÄÃÂöA´faÂÂM¨{«M`¶Âd¡ôÂðÂmȰBÃjj´PM|Âc^d¤u¤ôÂä«ƢfPk¶MôlÂ]LbÂ}suÂ^Âke{lCÂÂ
MÂrDÂÃÂ]NÂÃFsmoõľHÂyGÄ{{çrnÂÃEÂÂÆZGª¹Fj¢ïÂWÂ
uøCǷë¡Ä
uhá^KxÂC`ÂC\\bÃ
xì²Äÿ_NÂÄ«CȽĿåB¥¢·IÅÃyÂ\\¹kxÂãÂÄÃGDyäÃçFQ¡ÂKtŵÆ]CgÃAÂÂùSedÂcÃźÂÂuYfÂyMmhÂUWpÂSÂyGÂwMPqÅÂÂüzK¶ÂGÂÂY§ÃÂ@´ÅõÆÂBmÂÂ@IoÂgÂÂZ¯uÂTMxÂ}CÂÂVKÂï{éƵPÂÂ_K«ÂpÃÃqÄtkkù]gÂÂTÄwoÂÉsMõ³ÄÂAN£ÂMRkmEÃÂÄÂÃbMjÃGuÂÂ
IZÂÂGPÄ£ÂãħE[iµBEuÂDPÃÂ~ª¼ÄtÂÂ]ÂûG§Â¡QMsÄNPÅįzs£Ug{ÄJĿļij]ç«Qr~Â¥CÂÆÃ^n¶ÂÃéÃR~ݏYÂIÂ] PÂumÅrÆ¿ÂÂÂIÄÂ[xÂeóÂÂL¯Âv¯s¬ÃYÂ
~}Â
Å¥uÅÂgÂÆpÃÄ_Åī¶ÃSR´ÃP~¿CyÂÄÂÃdwk´SsÂX|tÂ`àÂÃðÂAªìÃT°¦DdÂÂa^lÄDĶÃY°Â`ĪŴÇÂÂà Šv\\ÂebÂZHÂÅR¬ŢƱùÄOÂÂÃM³FÃÂWp[Â" |
| | | ] |
| | | ], |
| | | "encodeOffsets": [ |
| | | [[123806, 39303]], |
| | | [[123821, 39266]], |
| | | [[123742, 39256]], |
| | | [[123702, 39203]], |
| | | [[123649, 39066]], |
| | | [[123847, 38933]], |
| | | [[123580, 38839]], |
| | | [[123894, 37288]], |
| | | [[123043, 36624]], |
| | | [[123344, 38676]], |
| | | [[123522, 38857]], |
| | | [[123628, 38858]], |
| | | [[118260, 36742]] |
| | | ] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "410000", |
| | | "properties": { |
| | | "id": "410000", |
| | | "cp": [113.665412, 33.757975], |
| | | "name": "æ²³å", |
| | | "childNum": 1 |
| | | }, |
| | | "geometry": { |
| | | "type": "Polygon", |
| | | "coordinates": [ |
| | | "@@ÂýLÂùµP³swIÃxcÅ¢Äð´E®ÂÃPtÂÄ´XÃxöÂ@«ÅÅQGÂÂYfa[ÂÅuÂÃÇ©ÂÄÅ¡Â_X³ijÃÄC]kbcÂÂ¥CS¯ëÃB©÷³ÂÂSiÂ_}mÂYTt³xlà cÄÂzÂÃD}ÂÃOQ³ÃTÄ¨Â¯ÂÆÃ²ÃÅ[hÂÅÂŦv~ÂÂ}ÃZ«¤lPãªÃÅ´Ã
R§ÃnhcÂtâkÂÂnÃÂÂľŹUÃÃdKuÄ·ÂI§oTÅ©ÃÄkÄÄH¸ÃÂ\\ÿPcnS{wBIvÃÂĽ[GqµuÂÅôYgûÂZca©@½ÂÃǽys¯}lgg@ÂC\\£asÂIdÃuCQñ[L±Äk·ÂÅ£b¨©kK»ÂKC²ÂòGKmĨS`ÂÂUQÂnk}AGÄÂsqaJÂ¥ÄGRÂÄpCuÃy ã iMcÂplk|tRkÂðÂev~^´¦ÃÂSÿÂ_iyjI|È|¿_»d}qÂ^{ÂÆdÂÄ}ÂtÂqµ`ƳÄg}V¡om½ÂfÂaÂÃo³TTjÂ¥ÂtÄ ÂRyÂÂK{ùÃjuµ{t}uÃRÂiÂvGÂçJFjµÂÃyqÃÂà QÃFewixGw½YÅ·pµú³XÂU½ġyÂÅÃ¥ÂkÃwZX·l¢âKÂzOÂÃÂÃÂjc¼htoDHrÂ
|ÂJ½}JZ_¯iPq{tĽĦZpĵø«kQÂ
ŤÂ]MÂÃfÂaQpıǽ¾]uÂFuÂ÷nÂÂÄïADp}AjmcEÃÂaª³o³ÃÃSÆÄÃDIzÃÂÄľÂ^ÂKLÂÂiÂÃñÂ[ÂÂaA²zzÂÃ÷DÂ|[ÂÃógfÂÃÃd®|`ÂÄ~ÂoÄ ÆÃ´Â³ÅÂDð¯CsÂøÃ«ìÂUMhTº¨¸ǡîSÂÃÂDruÃÃZÂÃEÂÂvÂPZÂÂWÂ~ÃÂÃtÄE¢¦Ãy¸bÂô´oŬ¬Â²Ãs~ÂÂ]®tªaÂpÅJ¨ÃºÂ_ÂÅÂ`ÂÅ^ÄÂ\\ÄuÂÂ~m²Ƹ¸fWÂĦrÆ}Ã^gjdfáJ}\\n C¦þWxªJRÃÅ u¬ĨĨmFÂdM{\\d\\ÂYâú@@¦ª²SÂÃsCÂ}fNècbpRmlÃ^gÂd¢aâCZÂÂZxvÂöN¿Â¢T@ÂuC¬^ÄðÂÃn|ÂÂlGlÂÂRjsp¢ED}ÂFio~ÃNÂÂÂ~zkÄHVsDzÃjÂŬÂÂÅ¢`Pûà l¢Â\\ÃÂEhÂİgÃÄ X¼PkÂÂ|m" |
| | | ], |
| | | "encodeOffsets": [[118256, 37017]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "420000", |
| | | "properties": { |
| | | "id": "420000", |
| | | "cp": [113.298572, 30.684355], |
| | | "name": "æ¹å", |
| | | "childNum": 3 |
| | | }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@AÂBÂ"], |
| | | ["@@lskt"], |
| | | [ |
| | | "@@¾«}{ra®pîÃ\\ÂÂ{øCÂÃyyB±Âb\\ÂòÂÃÂjKÂÂL ]ÄĽÃÂJyÃCÆÄÃT´Ã
´pb©ÃÂdFin~BCo°BÄÃÂÂømv®E^vǾ½Ä²RoÂbÃeNÂÂ^ĺ£R¬lĶ÷YoÄ¥ľ|sOr°jY`~I¾®IÂ{GqpCgyl{£ÂÃÂÃyPLÂᡸkWÂxYlÃæÂÂÅÄ¢z¾ÂV´W¶ùŸo¾ZHxjwfxÂGNóXéæl¶ÂEièIH uÂjÃQ~v|sv¶Ãi|ú¢FhÂÂQsĦÂSiÅ BgÂÃE^ÃÃ{ÂÄnOÃÃÂUÃóÄÂÃÄIJ}Z³½Mŧïeyp·uk³DsèÂL¶_ÂÃ
uèw»Â¡WqÃ]\\ÂçtÆcøÃFÃÇÄÄxŻįOÂÂKÃġÿÃwgÂ÷IÃ
zCgÂ]mǻGeçÃTC«[Ât§{loWeÂC@ps_BpÂÂrÂÂf_``Z|ei¡ÂoÄMqow¹DÆÃÂDYpûsÂÂÂYkıÇ}s¥ç³[§ÂcY§HK«QyÂ]¢Âwwö¸ïx¼Å¾Xv®ÃõRÄ ÃÂÂÂHM±cÃdÂÆÇÅ©È
ȷ±DSyÂúÄ£ÂŤÄà tÃÿï[îb\\}pÄÃI±ÃyÂ
¿³x¯NÂoÂ|¹HÂÃÃmÂÂjúÃ~TÂÂÂuÂÄjCöAwĬRÂÄl¯ ÃbÂÂÅTÂÄ¿_[ÂÂIÄÄÊ¿nM¦Ä\\Ã[T·Âk¹Â©oÄ@A¾wÂyaÂ¥ÂY\\Â¥Ãaz¯ãákÂ¥ne£ÃwÂÂE©ÃŶËuÂoj_U¡cF¹Â[WvÂP©wÂhuÃyBFÂÂ`RÂqJUw\\i¡{jÂÂEPïÿ½fÄÂ
QÃÃÂQ{°ÂfLÃÂ~wXgÂÄ«ÂtêþÂĺÂHd³fJd]ÂÂHJ²Â
EÂÂoUÂ¥ÂHhwQsÆÂ»Xmg±çveÂ]DmÃÂPÂoCc¾Â_hÂÂhøYrÅU¶eD°Ä_N~øĹÄ·`zÂ]Ãþp¼Â
äÃQÂv\\rCÂé¾TnkžÅÃÂÃaÂÂÂ¼ÃÆÄ¢Â¶ÃoÂ
dÂ
ÄÅâJqÂPb ¾|J¾fXÂÆÃ®Ä¨_Z¯Ã}úƲÂN_ÄÃÂ^ÂÂÄaÅyp»CÃÃÂKÂÂñL³ÂÄ¡M²wrIÃÅxjb[ÂÂn«øÂÂÂæÂà  ^²Âh¯ÃÂŪøÂY²ÄVø}Ä^İ´ÂLÂÃmÂÂÂ¥ÃJÃ{JVÂųÃÅxÃsxxÆÄ ģMÅÂÃðòIfÂÄÂÅ\\Ʈ±ÅdçÄDÂvÄ_Ãæ~DÂÄ´A®µÂ¨ÃLV¦êHä" |
| | | ] |
| | | ], |
| | | "encodeOffsets": [[[113712, 34000]], [[115612, 30507]], [[113649, 34054]]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "430000", |
| | | "properties": { "id": "430000", "cp": [111.782279, 28.09409], "name": "æ¹å", "childNum": 3 }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@ÂnÂFTs"], |
| | | ["@@ÃÃ
Ãá½ÃXrÂÂCOÂÂÂÂ
ÃRÂïÿÂÄ©ÂTooQyÂÃ[ÂÅ
BE¬ÂÃÃXaÂį§Ã¸G °ITxÂpÂúxÃij¥ÃÂÂ̾ÂedÂéĸÂGÂ
Âà GhÂÂM¤ÂÃ_U}Ä}¢pczfÂþg¤ÂÂÃòAVÂÂM"], |
| | | [ |
| | | "@@©KÂÂÂA·³CQ±Ã«³BUÂÆÂ¹AÂÂtÄOwÂÂD]ÂÂJiÃSm¯b£ÂylÂÂXÂ
ÂHÃñH«ÂÂÂC^õľAÂÂÃ
§¤ÃÂÂ¥ÂïyuÇuA¢Â^{ÃC´Â¦ŷJ£^[ª¿ÂÄ~ÂÆÂ
ÂNÂ
 skóĹ¿Âï]Ä~÷O§Â@ÂÂVm¡ÂQĦ¢Ĥ{ºjê¥nf´Â~ÃoÂÂÃÃÄ
ÂMÄ
ıuZÂmZcàIJβSÃÇŶ¨ÆÂÂCÃŪQürÅ«}NÃürìÂmjrÂ@ÄrTW ÂSsdHzÆ^ÃÃyUi¯DÃ
YlŹu{hTÂ}mĹ¥ÂÄÂDÿë©ıÃ[Oº£ÂÂ¥ótÂŹMÃÂÂÆªÂ`PÂÂ
DiÂÃU¾Ã
âÂÂìÂUÂñBÂãýheÂdy¡oÄÂ`pfmjP~ÂkZaÂ
ÂZsÃd°wj§Â@ÂĴ®w~^ÂkÃÃ
KvNmX\\¨ÂaÂÂÅÂqvÃó¿F¤¡@Å©ÃVw}S@jÂ}¾«pÄrªg à òNJ¶¶DÂôÂ
KÂ|^ªÂ°LX¾ŴäPα£EXdÂÂ^¶ÂIJÃÃÂ~Âu¸ÇÂÂÂMRhsRÂ
eÂ`ÃofIÃ\\à iÂÄymnú¨cj ¢»ÂGÄìÆÃ¿Ã¨XeÄľOð Fi ¢|[jVxrIQÂÂ_EÂzAN¦zLU`ÂcªxÂOTu RLâdVÂi`ÂpËvŵªÃÂF~ÂÃÂd¢ºgİà w¸Ãb[¦ÂZb¦Âz½xBÂÄ@ªpºÂÂlS¸Ã\\Ä[NÂ¥ËmÄÄÂJ\\ÂÅ`ÂÂ
ÅSÃÂÄÃÄiOÂÄ«BxDõÄivÂÂÂSÂÃ}iùÂÂÃnÂúGÂ{Âp°M´wÂÃÃzJ²ò¨ oTçüöoÃÿñÂÅĤÂùTz²CÈȸÇÅªÂÆÃc°dPÂÃÂÄö[ýu¯½WM¡ÂÃÂÂÂB·rÃÂnZÂà`¨GA¾\\pÄÂXhÃÂRCÂüWGÄ¡uÂ
Té§Åéò³I±³}_ÂÂEÂÃħg®ÄisÃPDmÃ
{Âb[RÃ
Âs·ÂkPÂŽƥÂóRoÂOÂÂVÂ~]{g\\ÂêYƪ¦kÃbiÄÆµÂGZ»ÄõÂ
ó·³vÅ£ø@pyö_ÂëÂIkõÂbÂcçyÂ
ÃdYêiþ¨Â[]f]Å
©C}ÃN»hĻħÆÂÄ©" |
| | | ] |
| | | ], |
| | | "encodeOffsets": [[[115640, 30489]], [[112543, 27312]], [[116690, 26230]]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "440000", |
| | | "properties": { |
| | | "id": "440000", |
| | | "cp": [113.280637, 23.125178], |
| | | "name": "广ä¸", |
| | | "childNum": 24 |
| | | }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@QdÂAua"], |
| | | ["@@ÂlxDLo"], |
| | | ["@@sbhNLo"], |
| | | ["@@ÄÂ ÄÂ"], |
| | | ["@@WltO[["], |
| | | ["@@KrÂ]ÂS"], |
| | | ["@@eÂÂI]y"], |
| | | ["@@I|ÂMym"], |
| | | ["@@ÂóLS¼Y"], |
| | | ["@@nvºBÂëui©`¾"], |
| | | ["@@zdÂÃÂJw®"], |
| | | ["@@°Â
¯"], |
| | | ["@@a yAª¸ÃJIxÃÂ@ÂÄHAmÃÂV¡oÂfuÂo"], |
| | | ["@@ÂsÂÅÃÃÄAÆÂZÂà~°ÄPÂÂäh"], |
| | | ["@@¶ÃÂÃÂvmÄhÂıÂQ"], |
| | | ["@@HÂÂdSjÄ¢D}warÂ
Âu«ZqadYM"], |
| | | ["@@elÂ\\LqqU"], |
| | | ["@@~rMÂo\\"], |
| | | ["@@fÂ^ÂC"], |
| | | ["@@øPªoj÷ÃÃħXÄx°Q¨ıXNv"], |
| | | ["@@gÃÆ³ÂÂÂÂoÂÂÂ[~tly"], |
| | | ["@@EÂÃC¿Â"], |
| | | ["@@OÂPÂ"], |
| | | [ |
| | | "@@wÂÂÄógÂÂÄÂ[³Â¡VÃæÃ
öMó¹pÃaÃýý©D©ÃÂJŹÆÄ£GÄ
¤{ÃÅ«Â
ÃÂO²«BƱéAÂÃÂĥ¡«BhlmtÃPµyU¯ucÂd·w_bÅcÄ«ÃmGOÂ|KPÂÈÂŹãÅIÅÅÅ@Ãoo¿Ä±Ã}ÂÂ
ÅÂÂIJWÃCÅâUâÇIÂÄÅ©IÂÂijEÃÂ
óAóÂwXJþ±ÃÂÃÃÂĨ£L]ÄÃÆºZǾÄÄMĸĤfÂÃĵlÂŨnÃÂÂÄtFÂÂÂFĤÂÂêk¶Â^k°f¶gÂÂÂ}®FaÂf`ÂvXŲÂxl¦ÂÃò¬Ã¦pqÃòÂiÂXÂÃRDÃ}ÂÃ@ZÄ ÂsÂx®AR~®ETtÄZÂÂÂÆfÅ Å HâÃÃAµ\\S¸Â^wÄkRzÂalÂÅ|E¨ÃNÄÅZTÂÂpBh£\\ÂÄÆuXÄtKL¶G|»ĺEļÄ~ÃÄ¢ÃÄrÂOÂÃîvd]Ân¬VÂÃİRÃÂpMÂÂÂÂÆÂªFbwÂEéÂÂ\\Â
¤]ŸI®¥D³|ÃÂ]CÂöAŤ¦Â
æÂ´¥¸Lv¼Â¢ĽBaôÂF~®²GÃÃÂEYÂÂÂzk¤Â°ahlVÃÂI^ÂÂCxÂÄPÂsBÂÆÂºV¸@¾ªR²ĨN]´_eavSiÂvcÂ}p}ļÆkJÂÃe thÂÂ_¸ ºx±ò_xÂNÂòÂ@ÂÄ¡ÃH©Ãñ}wkNùÃO½¿£Ä]ly_WìIÂê`ÂuTÃ
xYÄükõÂÂMÂjJÃwn\\hÂÂÄv]îh|ÂÃÂÆÃ¸Ã¨g¸ĶàÄÄWb¹ÆdéÄÂNTtÂP[ÂÂöSvrCZÂÂaGuÂbo´ÅÂÃÃÄÂ~¡zCIÂ
özx¢ÂPnÂÂÂÃñ @ÂĥæÂ]ÆÂV}³ÄÄñiiÃÃVépKG½ÃÂÃávÂYoÂÂC·sitÂiaÃyÂŧáÃYDÃům}Âý|m[wÄõÄZÃ
xUO}÷N¹³Äo_qtÄÂqwµÅYÃÂÇŹtïÂÃUïmRCºÂ
ÂÄ|µÂÂÃÃK½RÂÄ ó]ÂÂGªÄAx»HO£Â|Äm¡diÄÃYïÂYWªÅOeÃtÄ«zĹTÂ
ÄÂúEÂá²\\ÂÄ·Ã}jYà ÃÃſ¿ÃdÄ·ùTÃÃţʡXgWÃÇÄ·¿ÃÂOj YÃ÷QÄÂi" |
| | | ] |
| | | ], |
| | | "encodeOffsets": [ |
| | | [[117381, 22988]], |
| | | [[116552, 22934]], |
| | | [[116790, 22617]], |
| | | [[116973, 22545]], |
| | | [[116444, 22536]], |
| | | [[116931, 22515]], |
| | | [[116496, 22490]], |
| | | [[116453, 22449]], |
| | | [[113301, 21439]], |
| | | [[118726, 21604]], |
| | | [[118709, 21486]], |
| | | [[113210, 20816]], |
| | | [[115482, 22082]], |
| | | [[113171, 21585]], |
| | | [[113199, 21590]], |
| | | [[115232, 22102]], |
| | | [[115739, 22373]], |
| | | [[115134, 22184]], |
| | | [[113056, 21175]], |
| | | [[119573, 21271]], |
| | | [[119957, 24020]], |
| | | [[115859, 22356]], |
| | | [[116561, 22649]], |
| | | [[116285, 22746]] |
| | | ] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "450000", |
| | | "properties": { "id": "450000", "cp": [108.320004, 22.82402], "name": "广西", "childNum": 2 }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@H TQ§ÂA"], |
| | | [ |
| | | "@@ĨêÂLÂÆDÃĹÄCǦĸzÃGn£¾ÂrªÅÃt¬@ÃÂÃÂSx~øOÅÂŶÃÃÃ¦È \\ÂÃÃObÄw^oÃÂLf¬°bI lTÃBÃÂF£Ä¹gñĤaYÂt¿¤VSñÂK¸¤nM¼ÂJE±Â½¸ÂÂñoÂÃCÆÃ¦Äª^ÂÄQæ^ÂÂÂf´ÂQÂüÃÃÂz¯ÂlzUĺš@ìÂÂp¶n]sxtx¶@ÂÂ~ÃÄJb©gkÂ{°Â~c°`ìrV\\Âla¼¤ôá`¯¹ÂLCÂÃbÂxEræOÂÂv[HÂÂÂ[~|aB£ÃsºdAÄzNÃðsÂÃÃÂÂ
ĤªbÂÂab`ho¡³F«èVlo¤ÂÃRzpp®SÂĪº¨ÃºNÂ
ijÂd`Âa¦¤ÂF³ºDÃÅÄìÂCÂĺ¦ÄÂ~nSÂ|gźvZkCÃj°zVÃÃÆ]LÂÃFZgÂ
ÄPÂkini«ÂqÃÂczÃÂY®¬Ů»qRÃÅ©DçÆÇŵTÃĩ±ÂıdÃnYYÂIJvNÄÄÂÃàÂÃpÂ}e³¦m©ÂÂiÃ|¹ÂħÅÂ|ª¦QF¢Ã¬Êovg¿emÂ^Âucà ÷gÃÂuÂÃÃÄÄ}FϼĹ{µHKÂsLSÄÆrÂĤ[AgÂoSÂÅYMÿ§Ã{FÂÅbkyÂlQxÄÂ]T·¶[BÂ
ÃÃGáÅÅÆeÂÂÂ
ÂÄYSsÂFQ}ÂBÂwÂtYÄÃ@~Â
CÃÂQ ÃWÂjñrÃÂ¥o౫ÃÃÂ¥ÂÂÂkÂÂwWűÂmcih³KÂ~µh¯e]lµÂélÂÂEÄ£ÂÂEÂÄsÂÂmÃÂŧÄ`ãògK_ÃsUÊÂÄÂĶhÂöÂO¤Çn³ÂÂcÂ`¡y¦CÂÂezÂYÂwaÂÂÂ[ÄĵűMħ]XÂÃ_ÂÃÂÂÂÃ]éÂÃUÄİÃBƣ±Â
dÂy¹T^dÂÂûÃ
ÃŦ·ÂPĻþÃ`K¦ÂÂ
¢ÃeÂÂÄ¥R¿Â³£[~Âäu¼dlÂtÂÂW¸oRM¢Ä\\zÂ}ÃzdvÅÂ{ÃXF¶°Ã_ÂÃÃÃL©ÃÂTmu¼ãlÂÂÄ«kiqéfA·õ\\ÅDcÂ¥ÃFÂyÂÃÄÂcÂűH_hLÃÂêĺĨc}rn`½ÂÃ@¸¶ªVLÂÂhÅÂ\\ÂŢĺk~ÂÄ ið°|gÂtTÄĸ^xÂvKÂÂVGréAÂéÂbUuÂMJÂÂVÃO¡Â
qÄXÃSÂģãlýà Â_juÂYÃÃBÂÂG^Âéö§ÂÂEGÂÃ
zÄÂÆ¯Â¤EkÂN[kdÃ¥ucé¬dnYpÂAyÄ{`]þ¯TÂbÂÃÃkÂÂ¡Ä ÂvÂà hÂÃÆÂ¢Jî¶²" |
| | | ] |
| | | ], |
| | | "encodeOffsets": [[[111707, 21520]], [[107619, 25527]]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "460000", |
| | | "properties": { "id": "460000", "cp": [109.83119, 19.031971], "name": "æµ·å", "childNum": 1 }, |
| | | "geometry": { |
| | | "type": "Polygon", |
| | | "coordinates": [ |
| | | "@@¦Åil¢ÂXÆ¦ÂÆÃ²Âïè§ÅCêÉrŧůÃÄ
Ļõ·ijÅÂÌ
kÃm@ÄȧÂŧĥÂĽÊÂÂÆ
Å¿ÂÈÃæÅE}ºÆ[ÃÄÈ gÃfÇÃÄ¤Â¨ÃªÂÆº\\ÆÂ¸Ä ÄvÊÈÂþjNðÄÃRÂÂZÇÂzÃÅðHÂ¨ÂÆ¢b²_Ä Â " |
| | | ], |
| | | "encodeOffsets": [[112750, 20508]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "510000", |
| | | "properties": { |
| | | "id": "510000", |
| | | "cp": [104.065735, 30.659462], |
| | | "name": "åå·", |
| | | "childNum": 2 |
| | | }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@LqKr"], |
| | | [ |
| | | "@@Â[ĻéV£Â_ţġñpG Âré÷~Ä
SfyÃ÷ºÂſƽiÃıƣıĻmHH}siaX@iðÃÃÃt«ÂÂT¤JÂJJÂyJÂÃÂ`Ohæ¡uÃhIyCjmÿwÂ
ZGÂ
Â
TiÂSÂsOÂÂB²ÂfNmsPaÂ{M{ÂõEÂ^Hj}gYpaeu¯ÂoáwHjýM¡pMÂÂuÃ¥Âmni{fkÂ\\oÂÃqCwÂEZ¼KÂÄÂÂAy{m÷LÂwOÃSimRI¯rKÂõBS«sFeÂ]fµ¢óY_ÃPRcue°CbÂoÃÂbd£ÅIHgtrnyPt¦foaXÄxÂlBowzÂ_{ÃéWiêEÂÂGhøºuFÂÄIxf®ÂÂY½ÄÇ]¤ÂEyÂF²ÄÂw¸¿@g¢§RGv»ÂÂáÂW`ÃĵJwi]tÂ¥wO½a[ÃÂ]`ÃiÂüÂL¦LabbTÃÃ¥Âc}ÃhÂÃh®BHÂî|îºÃk¤SÂÂy£Âia©taį·Æ`ÅÂ¥UhÂOÂ
ÂÄLk}©Fos´ÂJmµlÅuÂÂÂ
øÂnÃJWêÂYÃïAetTÂÅ
ÂÃÂGÂëboÂ{ıwodÆÂ½ÂÂÂOÄ¡ÃÂõxà NþP²§HKv¾Â]|ÂBÂÃÃ¥oZ`¡Ã`Ãm开 ~ÃçnÃÂ
¿¤]wÄ@sÂÂrÄuÂ~ÂIoÂ[é±¹ ¿ÂÅ¿ÄÃÂ@qÂg¹zƱÅaðKtäV»Ã[Ä©ÇÆ^ÃÃ@áťÂsÂZÃÂÂÂÃ
ÄÂÆÂÄpwDóÃáÂÅ»neQÃÂÂq·ÂGCÅýS]x·ýÂq³ÂOöQzÃti{ÅÂáÃÃWÅÅñzÃWÂpç¿JÂÂÂXÂĩè½cÂÂFÂÃLiVjx}\\NÂÅÄÂ¥GeÂÂJA¼ÃHfÃu~¸Ã«dE³ÃMA|ÂbÂÃÂ
ÂÄhG¬CMÂõÂÂÆ¤Ä
AvÂüVÂéÅÂ_VóÄwQj´·ZeÃèX´ÂáQu·»ÂÂÂÃZ³ġqDoÂy`L¬gdp°ÅÂp¦ÄìÃ
Ä®Z°IäÂhÂÂÂzÂĵÂf²å ÂÄÃÂKpÂIN|ÂÂÃz]ÅÂ
Â
·FUÃé»R³ÂMÂûGM«ÂÂkiÂÂérÂ}Ã`¹ÄÃmÃÂnÃîRdzÄoİzÅwǶVãÃ]É»ÄlÆÂ²Ä Â
þTº·à UÈÃʦ¶ÂI«dĽĢdĬ¿Â»ÄÃÂh\\c¬Âä²GêëĤÅÂ¥ÃǿżÃÃMº}BÃÄ¢yFVvwÂÂxBèĻÄ©ÄÂtCĢɽŠȣ¦Äæ·HĽîÂôNÃÂ~^¤ÆÂuÂÂ^s¼{TA¼ø°¢İªDè¾Å¶ÃJ®Z´Ä~Sn|ªWéòzPOÂȸÂbð¢|ÂøÄÂÂÂÅQìÃÃ@ÄÂÇRS¤Ã§dÂ
i´ezÃúÂÃãÂ]HqÂkIÂþÃQæÃsä[E¬ÃŪÃxXÆÂ·ÃÆÄ°lÆÂ¹ÂªÂ¹|XÃwnÂÃÆmÃêErÄtD®ÄæcQÂÂE®³^Ä¥©l}äQtoÂÅÃqÃÂkµÂªÂÃĻĴ¡@İB²Ãw^^RsºTģſÂQPÂJvÃzÂÂ^ĹïfLà ´GC²ÂdtÂÂÄRt¼¤ĦOðÄfÃðDŨÅÄÆÃ¯ÂPîâbMüÃXZ ¸£@Ã
»»QÃÂÂ]dÂsÃÃ_ÃÂ_ÃêŮPrÄÄÃGÄeZÃîÄqBhtO ¤tE[h|YÂÃÂZÅÃs´xº±UÂÂñÂt|OÂÄ©Ä ÂºNbgþÂJy^dÃY ĮÂ]Åz¦gC³ÂR`ÄÂz¢Aj¸CL¤Rû@ÂÅk\\ô£YW}z@Z}ÂöÂoû¶]´^NÂÃ}èNªÂPÂÃy¹`S°´ÂATeÂVamdUÄwÊvÄ®Ã\\ÂuÂÃŨYp¹à ZÃmÂWh{áÂ}WÃÇÂÃüwÂga§áCNÄÃ[ÄÃĪgÃêXÂÂøx¬½Ů¦¦[ÂÂÂNÃÂLÂÃUôòrÃÅ xR^ÂÂJÂkÂijnDX{UÂ~ET{ļº¦PZcÂjF²Ä@ÂpÂg¨ÂB{Âu¨ÂŦyhoÃD®¯¢Â WòÂà Fä¨GDÂäz¦kÅ®PÂÄ¡qÃÂÂ¥Ã]ÂÂÂeÂâôªKxÄ«ÂPÂÂÃ|æ[xäJÃÄ¥ÂsÂNýÂÂI¬nĨY´®ÃÂÆÂÂmDÂÅuäÄÄEbÂÂ
eÂÂe_Âv¡}ìÄÇÄ}qÂÃÃ¥ÂÂT¯µRs¡M@}ůaÂÂa¯wvÂÆÃ¥ZwÂ\\Z{åû^Â" |
| | | ] |
| | | ], |
| | | "encodeOffsets": [[[108815, 30935]], [[110617, 31811]]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "520000", |
| | | "properties": { |
| | | "id": "520000", |
| | | "cp": [106.713478, 26.578343], |
| | | "name": "è´µå·", |
| | | "childNum": 3 |
| | | }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@ÂG\\ÂlY£Âin"], |
| | | ["@@qÂ|ÂÂmc¯tÃÂVSÃ"], |
| | | [ |
| | | "@@hãIsÂNgÂÃHÂÂÂHªķÂÃh_¹Â¡ÄçŦuÃÂùÂgS¯JHÂ|sÃÃ
tÂÃïyMDÄ»eÃtA¤{b\\}ÂÂG®u\\ÂÂÃ¥PFqÂwÃ
aDÂ
ÂK°ºâ_£ùbµÂmÃÂÃÂĹM[qÂ|hlaªÄI}õ@swtwm^oµÂD鼊yVÂky°ÃÂûÃRÂ
³ÂÂeÂÂÂ¥]RÃÂÄħ[Æ
Ã¥ÃDpÂÂÂJÂiVÂÂÂÃF²ÂIÂ
»mN·£ÂLbÃYbÂWsÃbÂÂpkiÂTZÄĶHÂq`Â
Â
Ä¥_J¯ae«ÂKpÃx]aÄÃPÂÃÈ[ÃåŵÃÅÂ÷Pw}ÂTÂÃ@Ãs«ĿÃq©½Âm¤ÃH·yÇ¥ÄÄBµĨÃnÄ]K©ÂÅáÂÂGçŧÃÃgÂÂÇĦTèƤƺ{¶ÃHÃd¾Å÷OÃjXWrãLyzÃAL¾Ä¢bĶÄy_qMÄÄ
ro¼hÄÂw¶øV¤w²Ä]ÃÂKx|`ź¦ÃÃdrÂcÃÂbe¸Â`I¼ÄTF´Â¼ÃýÈr¹ÃJ©k_Èl³´_ÂpÄÂ`oÃh¶paÂ^ÂÃÄ}D»Â^XyÂ`dÂ[KvÂ
JPhèhCrÄÄÃ^ÃÆÂ wÂZLÂÄ Â£ÂÃbrzOIlÂMMÂĪÅžÃrÃÃeŦÂtw|¢mKÂjSÇÅÄStÂÃŦEtqFT¾ÂE쬬ôxÃO¢Â K³źäYÂÂÂPVgŦÅmżVZwVlÂÂÂz¤Â
£Tl®ctĽÃó{GÂAÂÂÃgeÂ~ÃÂd¿æaSbaÂ¥KKûÂj®_ÃÂ^\\þbP®¦x^sxjĶI_àXÂâ¼ÂHu¨Qh¡Ã@ÂÃô}±ÂGNìÄlT¸ÂÂ
`V~R°tbÃÄ`¸úÃtÃÂFDuÂ[ÂMfÂqGH·¥yAÂztÂMFe|RÂ_GkÂChZeðtoÂv`xÂbÂÂDnÃ{E}ÂZÂèÂxÂÂNEÃÂREnÂ[Pv@{~rÄAB§ÂEO¿|UZ~ìÂUf¨J²ÄÃÃÂÂsªÂB`Âs¶ÂfvÂö¦ÂÃ~dÃq¨¸º»uùÂ[[§´sb¤¢zþF¢ÃÂ
ÃhÂÂÂÃÂW\\ıÂÃIÃÂo±ÄŠ£þÂÃs}¡RÂÂ]ÂÄÂDÂÂg´VG¢Âj±®èºÃmÂpU[ÃÂÂÂ뺰rÂÃbNu¸}º¼Â`niºÃXĤ¼ÃdaµÂÃ_ÃÂÂ
ÂftQQgÂR·ÇÂvÂ}ÃÃÂĵ]µÂÂWc¤F²ÂOĩųãW½¯K©Â
]ÂÂ{ÂLÂóµCIµ±Mÿh©Äq¬o½Â~@i~TUxŪâ@£ÃEîôruÅÂÂÂÂb[§nWuMÃLl¿]Âx}ij½" |
| | | ] |
| | | ], |
| | | "encodeOffsets": [[[112158, 27383]], [[112105, 27474]], [[112095, 27476]]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "530000", |
| | | "properties": { |
| | | "id": "530000", |
| | | "cp": [101.512251, 24.740609], |
| | | "name": "äºå", |
| | | "childNum": 1 |
| | | }, |
| | | "geometry": { |
| | | "type": "Polygon", |
| | | "coordinates": [ |
| | | "@@ÂÂ[Âùx½}ÃRHÂÂYīĺûsÃnÂiEoã½Ya²Ä{c¬ÄgÂÄsAÂÃÃ
wÄÂõzFjw}«Dx¿Â}UÅ©lÂêÂ@ÂÂHÂÃ
ÂF¨ÃoJ´ÃnÅ©uÄ
¡Ã¢pÃÃ
ÂÂàTF²Âxa²ÃXÂÂcÃÂlHîAÃÃÅkÅ»ÆÅ·Ã©hÂWÂæÃUÂÂÃs¡¦}ÂteèöStÃÂÃ}Fd£jÂÄZÄÂäTÂÄ\\DÂ}O÷£ÂU§~ÅGÂÂÃ¥ÂÅDĸÂTsd¶¶BªÂ¤u¢ÅÄo~t¾ÃŶÃtD¦ÃÂiôöÂÂzÂÃX²ghįh½Âñ¯Âÿm·zR¦Æ`ªÅÃh¢rOô£Ym¼èêÂf¯ŪĽnÂÂcÃbÂw\\zlvWªâ ¦gÂÂmÄ¿BĹ£¢ƹÅbÄ¥kÇ«ÃeeZkÃIKueT»sVesbÂÂaÂÄ  ¶®dNÂÄÃpªy¼³BE®lÂÂGÂÅCÂǶwêżÄÃeÂpÃÃQÆpC¼ŲÃÂÂAÃô¶RÂäÂQ^Ãu¬°Â_Ãôc´¹ò¨PâhlĦ´ĦÂôsâÃÂÂŲPnÃD^¯°ÂUpvÂ}®ÂBPêÂjǬxÂSöwlfòªvÂqĸ|`HÂÂviļÂndÄÂÄhÅÂÂem·FyÃÂqóÂSį¯Â³X_ÄçêtryvL¤§z¦c¦¥jnÅkÂÂlD¤øz½Äà ÂÄŧMÃ
|áÆÃ ÃcðÃFÃÂÂáŢ¥\\\\ºÂİøÃÃJÄ´ÂÂîD¦ÂzK²ÇÃEh~ÂCDÂÂhMn^ÃöéÄZÃÂaüÂfÉyÅpį´ÄFűk]ÃÄ¢qlÃ
ÄÃa¶~ÃqÂÂêÂljÂN¬¼HÂÃÂNQ´ê¼VøEÂÂ^ÅÃyÂÂM{ÂJLoÃÂÄæÂe±ĶÂyÂÂÂgÂã¯JYÂÃÄÄëo¥ŠÂo¯hcK«z_pÂrC´ĢÃY¼ v¸¢RÂÃ
W³Ã§føYi³xR´ÄUÃÂ`êĿUÂûÂuÄBÂÆ£Ã¶ÂNÂÂDH«ÄgÂÂÂÃÂaB{ÃNF´¬c·Ã
v}eÃÃGB»ÂIf¦HÅÄMÂ
~[iwjUÃKE¾dĪçWÂÂÂIÂèÃÂoÃXòyÅÅ®ÃXâÃÅÂj|à sRyµÃÂÂPr´þ ¸^wþTDÅÂHr¸ÂÂRÃmfÂżÃâCôoxÂÄÆÃÄ®ÂÂÃÂÂYÂtâŦÃ@]ÃÇ®Æ\\μãUsïLbîƲźyhÂrÂÂ@ÄÃÂÆÂòº\\êpÂÂJÂ}Ä vÂqtÂÄ @^xãèmÃÃÄ}n¹_¿¢ÃY_æpÂÃ
ÂA^{½ÂLu¨GO±Ã½ÃM¶wÂÃÄ¢ÃÂPÂÂÆ¢Â¼pcIJxÂ|apìHÂÃÂÅSÂfsðBZ¿©ÂXÃÃKÂkÂ÷Eû¿ÂSÂ
rEFsÃÅ«kÂóVÇ¥ÅiTL¡n{ÂuxÅ£ÂÃhÂôŬÄÅNÂÂNJkyPaqÂÃĤK®ÂYÂxÃÆÃ]ÄÄDqçgOgÂILuÂ\\_gzÂ]W¼Â~CÃÄ]ÂbµogÂpÃÂ_oÄ`´³Èkl`IªºÃÈqÃþ»E³ÄSJ»Â_f·ÂadÃqÂÃcÂ¥Ã_Źw{ÂL^ñÄxÂU£µ÷ÂxgÄp»ÄqNÄ`rÄzaĵÄ¡K½ÃBzyäKXqiWPÃø½ÅÃcÃG|ÂµÆÆ£GÃÂ÷Âk°_^ý|_zÄÂBZocmø¯hhcæ\\lÂMFlư£ÄÂÃyHÂÂF¨ÂµêÃ]ÂÂHAÂ
à ÃÂ^it `þÃäkÂĤÃT~Wlÿ¨ÂÃPzUCÂÂNVv [jâôDôÄ[}ÂÂz¿ÂmsSh¯{jïÂÄl}šĹ[ÂÅÂÂgK©U·µÃ@¾Âm_~q¡f¹Â
Ã
Ã^»Âf³ø}Q¡Ãógñ^ÃÂÂ
\\ëÃÂA_¿bWÂÃ[¶ÆÃ©Â£F{Ä«Zgm@|kHÇÆÄ¦UÄÅ¥ÂÃë}ÇÂeĺȡÈÃÃBãÄÄPªij¶ÂÅÿÂy©nÂÄ£G¹¡I±LÃĺÃdÄÃÂWÂ¥ÂÂ}gÂÃÂ{aqÃÂ¥aÂÂıÄÂÃZÂï`" |
| | | ], |
| | | "encodeOffsets": [[104636, 22969]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "540000", |
| | | "properties": { "id": "540000", "cp": [89.132212, 30.860361], "name": "西è", "childNum": 1 }, |
| | | "geometry": { |
| | | "type": "Polygon", |
| | | "coordinates": [ |
| | | "@@ÃÂhÂľxÂÂÅÂxÂÃVºÃ
âAĪÃȵįÅa±r_w~uSÃÅÂqOj]ÉQÂ
£ZÂ
Â
UDûoY»©M[ÂL¼qãÃ{VÃÂçWVÂiÂÂ]ë©Ãֈ yÂÆhÂÃU°ÂÂaÂdÂcQÂ~MxÂ¥Âcc¡ÃaSyFÂÃÂkÂÂuRýq¿ÃµÂÂQĽ³aG{¿FµëªéÄÿª@¬·ÂK·à arÂiÄÄ«V»ŶÂÄ´Å«ÂgèLÇ´ÅÆ¶afÂtÂèBÅ£^ÂâÂÇîÂÂM¦ÃÇÿ¬LhÂÂJ¾óƾúcxwÂÂf]YÂ
´Â¦|ÂQLn°aÂdÄÂ
Â\\¨oÂÂÇÃÅ´ĩÄd`tÃQÅÅ|¨C^©ÂĦ¦ÃJÄ{ÂëÄjªÂ²rÃÂÂl`¼Ä[t|¦Stè¾ÂPÂÃK¸ÂdÂÆÄ±]s¤Âî_v¹ÃVòÂŦj£Æsc¬_Ä´|ŦAv¦w`ÄÂaÂÂÃaa¢e¤ı²©ªSªÂÃMÄwÂÃÃÅì@T¤ÂÄÂ\\õª@Âþo´ÂxA ÂÂsÂÃtÅKzó´Ãĵ¢rÂ^nÄÂìÃüG¢³ {âÄ]ÂÂGÂ~bÃgVjÂzlhǶÂfÂÂOÂÂfdªB]pjÂÂTOÂtÄÂn¤}®¦ÂÄÂ¥d¢¼»ddÂÂY¼Ât¢eȤJ¤}Ǿ¡°§¤AÃÂlc@ÄÂsªÄļÄAçÂwxÂUuzEÃÄ¡~AN¹ÃÃ
Èݦ¿ģÅéì±HÂ
ãd«g[üÄÃÂcīľġ¬cJµÂ
ÃÊ¥VȸÃS¹Âý±ÄkÆÂ¼Ä
^ɤÃÿÂÂb[}¬ÅõÃ]ÃNm®g@ÂÂBg}ÃF±ÇyLÂ¥ÂÃCÂÂIijÂÃ÷ÃÂį[¹¦[âšÂÂEÃïÃÃdÆ
Ã{âNÃÄŨþÄ÷yC£Âk´ÃH@ùÂTZ¥¢į·ÃAç®ÂZÂcÂ
v½ÂZ¹|Ã
ÂWZqgWÂ|ieZÃ
YVÃÂqdqÂÂbc²R@ÂÂcÂÂ¥Rã»GeÂÂeÆÄ«QÂ}J[ÃÂKÂ
¬Æ|oÂÄjÄ¡Ä ÃN¡ð¯EBÄnwôÉÂβÂCλŹġÇÊ
įÄạ̃ūȹ]ÎͧgÅ¡sgȽóϧµÇÂÄgſ¶ÒÄ`ÄÄ
ÅJÃÂä¤rÃ
ÅÂ¥ÃÃUÄtÄuůÃiÄÃÃ\\Ãs¦ÃRb|Ã^ÅÃkÃŷ¶½÷Âf±iMÃÂÂÂ@ĥ°G¬ÃMÂ¥n£ÃÄ
ÂįçaëbéüÃOÄÂk£{\\ÂeµªÃMÂÂÃfm«Æ{Ã
ÃÂGÅǩãy³©WÃÄû··ÂQÂòı}¯ãÂIÂéÃÃZ¨īès¶ZÃsÂæÄTÅvÂgÃsN@îá¾ó@ÂÂÃwU±ÃT廣TÄÂWxÂq¹ZoÂbÂs[ïcÄ©vÂÂÄŧ³BM|¹kªħÂÂ¥TzNYnÃÂÃpÂÂÄrÃ±Ä ÄRS~½ÂÄVVµÂõ«ÂM££µBÂÄ¥áºaeÂ~³AuÄh`ÂóçÂ@BÃÂïĿa©|z²Ã¼D£à IJŸÂIÂûÂÂI ÄÂóKÂÂ¥}rÃ_ôéMaŨÂ~ªSĽ½KÃóĿeÆÃB·¬ënÃWÂ|Uº}LJrƳÂlŵ`bÃ`QÂÂÃÃ@s–IÂÃ@ûws¡åQÃÃÃ`ÅÄ´{ĪÂTÂÃÃ
TSóÂÂYo|Ã[þµMW¢ÄiÃÿ@ÂÂMhÂ
pÃ]jÂéò¿OÆÄÆpÂêÄâlÃwÂÄsÂÂÇ©Âĵ¸cÂ
ÂbU¹Å¨WavquSMÂzeo_^gs÷¥Ã@~¯Â¿RiÄ«BÂÂ\\ÂqTGªÃÄçPoÂÿfñòÄ
¦óQÄ«ÃáPÂÂÄbÃ{ÂZÅĸIæÃ
ÂhnszÃCÃìñÂ÷Ä
ÄÃUm®óÂL·ÄUÂÃÃoù´ÂÃj°ÅŤ_uµ^°ÂìÃÂ@tĶÄ¡ÃÂM³Ģ«ÂİĨÃ
®ÄÂRÂÄðÂggheâzÂéÃ\\°ÃÄz~ź¤PnÂMĪÃB£ÂÂkÂné§żÄÂÂÄKÂݼL¶èÂâz¨u¦¥LDÄz¬ýÃmÄd¾ÃÂFzÂhg²ÂFy¦Ä¤ÄÅbÃÂ@yÂÄæm°NÄ®ÂZRÃÃÂJ²öLĸèY®ÆÃVÂà Âtt_ÃÂÃyÄ zÂ]Å¢hÂzÄ{ÃÂÄ¢XÂÂc|ÂÃqÂÂfO¢¤ögÂÃHNÂÂPKÅÂÂÂUú´xx[xÂvÄCûÄÂìÃT¬¸^}Ãsòd´_ÂÂKgžLÄ´Â
ÃBon|H@ÂÃx¦BpÂŰÂÅ¿fµÆA¾zÇRx¶FÂÂkÄźÂRzÅÂ~¶[´HnªÂVÆuÄÂèÆcÂÆ½Ãm¸ÃÃM¦xÍëÃxÇBÂÂú^´W£ÂdÂkɾĬpÂwÂËÃɦļĬIÅÂÃÂnÂÅa¸Â~J°îÂlÉxĤÃÃðhîÂgÂT´øÂà CÂÂÃ^ªerrÆd¢İP|ÂÄ ŸWªĦ^¶´ÃLÂaT±üWÆÂÇRÃÂŶUÅÂÄ[QhlLüAÂÂÃ\\ÂqRÂÄ©" |
| | | ], |
| | | "encodeOffsets": [[90849, 37210]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "610000", |
| | | "properties": { |
| | | "id": "610000", |
| | | "cp": [108.948024, 34.263161], |
| | | "name": "é西", |
| | | "childNum": 1 |
| | | }, |
| | | "geometry": { |
| | | "type": "Polygon", |
| | | "coordinates": [ |
| | | "@@Âp¢ÂȮµÂûGÂĦ}ĦÂðÂÇÂ¶Ã²ÂÆÂjÉz°{ºÃkÃÄâ¦jªÂBgÂ\\Âİs¬ÂÂ]jÂú ÂEÂÈǬsÂtÂÂRÂÃdÄ Ä°ÂwøôW¾ƮÅÃ_{ÂÃÂû¼Âjº¹¢GǪïÄÂZ`ºÅÂecÅÄ
Â~BÂÃgzpâÄòYÇ È°ÃTèÃWÂ|fcÂħuFÂÂ@N¢XLÂÂRMº[Äȣſï|Â¥JÂkc`sÅÇ·ÂÂY¹ÂW@µ÷KÂ
ãï³ÃIcñ·ÂVÈÃÂÃķøÂ©Âþ¥ÂyÂÃÂÄÄmWµÃumZyÂOÅ
ÆÄ¥Ã~sÃL¤µaÃ
Â
Y¦ocyZ{Ây c]{ÂTa©Â`U_ÄÄ£ÏÃÆKùÂKÂ¶È±ÃÆ·Â§{û»Ã
ÃȹÃéuij|¹cÃdÂÂìUYÂÂOÂuFÂÂÃÃYvÃCqÃÂTÂǢç·S¹NgÂV¬ë÷Ãt°DïÂCÂ´ÅÆÃ³pÄ£}ÂÄÂcEÃÂ
FÂÂéGUÂ¥ÃKÂ
§Â¶³BÂÄ}C¿åÄ`ÂwÄ¡B·¤ÅcÆÂ²Å[Ã
^axwQOÂ
ÿEÃÃÅÂĤNÄÂwÆÂÂÃÂÅwĪÂÂo[Â_Kê³ÂÂÃnKÂÃÂÄÂÿ]ÄÂÄ_d©·©ÃŰîg]±ÂÂÂÃÂå¬÷Âm\\ÂiaÇkÄX{¢|ZKlçhLtÂÂÅîŵÂÅè[ÂÃ@ÆÄEÂÂtÆÂóÂħZ«mJÂ
ÂþÂMÂtÃĦ£IwÃÃ¥\\Ã{ÂÂÂOwĬ©LóÂÃgBÆÅrÃÂÄ¢ÅOÂ¥lãyC§HãÃEñÂÂX¡Â°ÃCgpÅ¥zÂÂb`wIÂvA|§ÂÂÂhÂoÄ@E±ÂiYdÂ¥OϹS|}F@¾oAO²{tfÂâFÇÃÂW²°BĤh^Wx{@¬ÂÂF¸¡ÂÄ·n£ÂP|ªĴ@^Ä ÄæbÂÃc¶lÂYiÂ
Â^MiÂcİÃ[äÂvï¶gv@ÂÃÂĬ·lJ¸sn|¼u~Âa]ÂÃÃtźJpÂÂþ£KKf~¦UbyäIÂĺãnÂÿ^ÂÂŵMTÂhÄ Ã¤ko¼ÅìÄ
Çh`[tÂRd²IJ_ÂXPrɲÂlÂÂXÂiL§à ¹ÂH°Ȧqº®QCÂbAÂÂÅJ¸ÂÄÃ³ĺ§ `d¨YjÂiZvRĺ±öVKkjGÈÃÂePÄÂZmļKÃÂÂ[ÂÂ`ösìhÂïÃoĬdtKÃ{ÃÃBÂÃpIJÃĬJŦ±J«ÂY§Â@·pHµà åVKeÂpWÂftsAÂÃ
qC·¬ko«pHÃuK@oÂHÂÄÃÂÄ·hÂxÂeÂnÂS³à ÇrqƶRbzy¸ÃÃÂl¼EºpĤ¼Âx¼½~ÄÂÂÂà @ÂÃüdK^ÂmÂÃSj" |
| | | ], |
| | | "encodeOffsets": [[110234, 38774]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "620000", |
| | | "properties": { |
| | | "id": "620000", |
| | | "cp": [103.823557, 36.058039], |
| | | "name": "çè", |
| | | "childNum": 2 |
| | | }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@VuUv"], |
| | | [ |
| | | "@@Å©ÂEÂÄ tt~nkh`Q¦Ã
ÃÃdwÂAbÃÄ Ä
J¤DüègĺqBqÂj°lI¡ĨäúSHbÂÂÂjÃÂB°aZ¢KJÂÂO[Â|A£ÂDx}NĬÂHUnrk kp¼Y kMJn[aGÂáÃÃ[½rcÂ}aQxOgsPMnUsÂncÂÂZÂ
ÂÂsKúvAÂtÂÃġ£®ÄYKdnFw¢JE°ÂLatf`¼h¬we|ÂÃÂÂbj}GA·~WÂÂÂ`¢MC¤tL©IJ°qdfÂOÂÂbÃĬ¹ttu`^ZúÂE`Â[@ÂÃsîz®¡ÂCÂÆ³ÆG²ÂR¢RÂmÂfÂwĸgÃÂÂÄ
 G@pzJM½ÂmÂhVy¸uÃÃO±¨{LfæU¶ÃGÄq\\ª¬Â²IÂÂ¥IÅÃÄ«oıÂÃÃAçÃ|«LÃcspīðÃgÂ
të_õÂÂÂ\\ÄñLYnÄÂgÂÂRÇ¡ÃiHLlõUĹ²uQjYi§Z_c¨Â´ĹÄ÷ÂÅIÂ
ÂaBDÂÂR¹ȥr¯ÂGºÃÂK¨ÂjÂWkÂɱÂOqÂWij\\aÂÂQ\\sg_ÄÇÅëpȣlÄÃÂgSÂŶN®ÂÃ]ÂÃämÂĹãJazÂ¥V}ÂLe¤LÂýo¹IsÅÃ
Ã^ÂÂbzÂ
³tmEôa¹cÄecÃNÂÄãÃ\\įÂdNjÂ]jÂÂZµkÃdaÂÄÃ¥]Äij@ ©O{¤Âĸm¢ÂE·Â®Â«|@Xwg]A챝ÂXÇÃdzªcÂwQÃÅñsóÃV_ÂýÂÂÂ¥\\ů¥©¾÷w©WÃÃÄ©hÿÃÃRo¸V‰Db¨ÂhûxÂÃÃÇ~ZâÂg|ÂXÃnÃYoº§ZÃ
ÅvÂ[ÂÄÃÊuÄxcVbnUSfÂ
B¯³_TzºÂÃÂO©çMÃ~M³]µ^püµÂÂÃY~y@X~¤Z³Â[ÃÅl@®Ã
¼£QK·Di¡ByÂÿÂQ_´DÂÂ¥hÅyÂ^ÂÄÃZ]cIzýÂah¹MĪÄPÂs{ò²Vw¹t³ÅÃÂ[ÂÃ}X\\gsF£sPAgÄpÃëfYHÄÄÃqÄÅOÃëÂdLüÂ\\iÂÂt^c®ÂRú¶Â¢H°mÂÂrY£B¹ÄIoľu¶uI]vÄ£SQ{ÂUÅ»ÂÃ
}QÃ|ðÆ
¤ĩŪU ÄÄÂÃZÃÂ\\v²PÄ»ƢNHÂÄyAmÆwVmÂ`Â]ÃÂbÂÂH`Ââ²ILvÄÂH®¤Dlt_¢JJÃämÂèÃDëþgºƫÂÂÂaÊÃrêYi~ ÃݤNpÃA¾Ä¼bÂ
ð÷®ÂÂüsÂzMzÃÄQdȨýÂv§Tè|ªHÂþa¸|ÂàÆwKÄ¢x¦ivr^ÿ ¸l öæfÆÄ´Â·PJv}n\\h¹¶v·Ã|\\ÆÄN´ÄÂçèÃz]Âġ¤²¨QÃŨTIlªťÃ}Â¼ËÆ¦vÃùÃEëFïÃÂIqÂÅÂTvÄÃÅÂÃÃÃÂÃVÂj³âwGÄÃÃNOÂÂÂPìyV³ÅÄýZso§HÃÂÂiYÂw[ÃÂ\\X¦¥c]ÃÆ©Ã·«jÂÃqvæm^ıRÂÂ¦ÎÆÅ¥ÄgûIÃ¯Ä¨ÊÆ®Â°ÆÂĻþÃAÆÅ¿Â±tÃEÃÃÄNUá\\ÂÅ¿ÄÃ¥ÃÊ»Äm ÆÃŹöʥÂëQ¤µÂÃcÆÂªoIýÂÂIÃÂ_mkl³ÄÂÆÂ¦j¡YzÂÅiÂ}MsÃõÂīʠÂ}ÂÃVmÂ_[n}eıÂÂUĥ¼ÂªÂI{çDÃÂÆ»ÄojÂqYhĹT©oūĶ£]ÄxÄ©ÂÇMÄÂq`B´ÆËºÐ§Âç~²Åj@ÂÂ¥@Ä´ί}Ä¥tPÅþV¬ufÃÂÃCÂtÃÌ»ÂÂ
¹£G³Â]ÆÆ¾ÅĪŪĄ̈ÊÄ¢ÆlÉ۪üºÅUðÇȢƢżÌȦǼÂĤÅɲÄÃÂKq´ï¦ÂºÄDzÅɾªÇÃÄÄD½ÄÄÃÅÄrôñnÂÂN¼â¾ÊľÔ|ÇÂÖ¦à¥ÈÇÌÌɺÆ
êgVÌÊÄ Â·ÃÄv|ýÄÃWÄÇôõ¼cÃÃBĢ͢UÄðÍs¨ÂÅÆLÄÃÃ@ÉÆ¯Ã·Â¿Ä½ÂÂĹeÈijëCÈDŲyêÃÅyò¯ļcÃÃYÂ
tÃÆ¤yAã˾J@ÇrýÂÂ@¤Â
rz¸oP¹ÉÃyáÂÂHÂÄ[JwÂ
cVeȴûÃÂÄ}ÆÅ°ÅèÈÇ¢ÏÄÆªÃŶë;ÃÌȤÐľĮEÅÂÂĹÅÅ©~ÃUÄ{ÂÄ»ÂÆ¹ÉÏȩþĽvĽÆÃ@ÄÂĽɲÃÇÆ«Ê¾ÇÄpäWÃxnsÃ^ÆwW©¦cÃ
¡ÂJi§vÂúF¶Â¨c~c¼īÂeXÂÇÂ\\ľJÂwÃÄksãAÂÂfæÂL}waÂoÂZÂÂD½ÂMl«]eÃÃ
aòáo½FõÃ]ĻáwYR£¢rvîy®LFÂLzÄÂôe]Âgx}Â|KK}xklL]c¦£fRtÃv¦ÂPĤoH{tK" |
| | | ] |
| | | ], |
| | | "encodeOffsets": [[[108619, 36299]], [[108589, 36341]]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "630000", |
| | | "properties": { "id": "630000", "cp": [96.778916, 35.623178], "name": "éæµ·", "childNum": 2 }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@InJm"], |
| | | [ |
| | | "@@CÂýOÅĦsΰ~ij¦@@ÂÅ
i±è}Ð¨ÂÆË¹A³r_ÄÂÇNĪÂÄw¤^ŬĵªpĺSZgÂrpiƼÄèC|ÃÂJ©Ħ»®VIJÂ~f\\m `UnÂÃÂ~ÊÂÂĬà öNtÂ~Åjy¢ZiÂÆÂ¥ÄÂk´nlÂ`JÃÂÂJþ©pdÆÂ®Ã£¶ìRʦÂźõƮÃnÂʼÄÃ¦ÃÆÄ[¢VÃÄMÃÃÃF²sÆÆÃBļýÆÂÂÂ¯ÊÆÃ°Ä§Â¼Jh¿ŦÄÎÆÂ¥²Q]ÄÂ¥nuÃÃri¸¬ƪÃ^ædÂÂ¥[Wà Â
x\\ZÂÂjèGtpþYÅÄ´ÂzUOëÂÂPÂîMÄÃxH´áÂiÃUà ÂîÃÅÂÄÃSuÅÂrÂÂJðìEÂÂFÃúÃuÃÃkrÂÄ{V}İ«O_ÃÃĬ©ÂÃŧSRñ§Ģ£^ÂÃyèçÄM³ÆÄ{[¸¿uÂ
ºµ[gt£¸OƤĿéYÂõ·kÄÂq]juwÂ¥DÄ©ÆÂõÃPéýG©ã¤GÂ
uȧþRcÃÄNyÂyûtÂÂÂÂÂÂøÂÂï»a½Ä¿BMoį£ÂÃj}éZÃqbÊÂÂÆ¬Âh¹ìÿÃAÂçãnIáI`Âks£CGÂÄÂUyÃCyÂÂ
ÂÂ@¶ʡÃBnÄzGÂÆ¡Mļ±O÷õJÂÂÃÄÄVÂĪũÆÂ£Â¯{ÃL½ÃzżÂÂVR|Ä TbuvJvµhÄ»ÄHÂÂAëáaÂ
ÂOÃðÂñÄNwÂÂ
Åľ·LÂmI±ÃÄ Ä©PÃîÿsÂÂcB³±JKÃÄ«`Â
aÄ»·ÂQAmOÂÂVţéÿ¤¹SQt]]Ãx±¯A@Äij¢Ãļ©ÂÂÂl¶Ã
ÂÃrÂÅspãRk~¦ª]Į´ÂFRÂÃ¥dÂÄsCqÄéFn¿Ã
ÆmÂÃx{W©ºÆÂºÄ¯kÃÆÆÂ¸wWūéÃF£\\tÃÂ¥ÃRÃýÃJ ÂlGrÂ^ÃäùÂyófjÂc¨£ÃZ|ÇMÄÂÃ@ëÃÅRÂÂÄÂÂ÷¡{aïȷÂPÂu°ÃXÃ{©TmÄ }Y³ÂÂÃIŵ罩C¡į÷¯B»|St»Â]vÂųÂs»Â}MàÿʪÆÇA¡fs»ÂÂPY¼c¡»¦cÂÄÂ¥£~ÂmsÄPÂÂSiÂ^o©AÂÂecÂÂÂPeǵÂkgÂyUi¿h}aHÂÂÂÄ^|á´Â¡ÂHÂÃûÃ
«Ä®]m¡qͳÃyôÅLÃstÂÂÂB®wn±ÂÄÂ¥HSòÄ£ÂSÂë@ÃÅÂÃÄxÃN©Â©T±ª£IJ¡fb®ÃbÂÂÂb_ÄÂ¥xuÂÂ¥BÂÂ{Åij«`dÂÆt¤ťiñÂÃUuºÃ`£Â^tÆÄ²c·ÃLO½Âsç¥Ts{Ä\\_»Âkñq©ÂÄiÂìÄ|ÃIÂÂ¥ÄÂ¥ÂÂ]ª§D{ÂÅÅÃR_sÿc³ĪÅÂÆ¿Ã§pÂ[ÄÂÂc¯bKmÂRÂ¥{³ÂZÂe^ÂÂwx¹dƽÃ
½ôÂIg §MÄ ƹĴ¿ÂÇ£ÃÃÂ]ÂÃÂÂ]snÃ¥A{ÂeÂÆ`Ç»ÅÄ¿\\ijŬűÂYÃÿ¬jÄqÂÃb¸ÂL«¸©@ÄÄ©ê¶ìÃEH|´bRľÂÂörÃQþÂvl®ÃÂEÂTzÃdb Âhw¤{LRÂÂdÂcÂb¯ÂÃVgÂÂÆÃzÃôì®Â^jÂUÂèXÃÂ|UäûrKÂ\\ªN¼pZCüÂVY¤ÉRi^rPÅÂTÃ}|br°qÅbݪiƶGQ¾²Âx¦PÂmlÅÂ[ÂĤ¡ÎsĦÂÃÃâ\\ªÃÅU\\fÂ
¢N²§x|¤§ÂxÄsZPòʲSÃqF`ªÂVÂÃÅĶƨVZÂÃL`¢dÅIqr\\ÂoäõÂF÷¤»ŶÃh¹]ClÃÂ\\¦ÄÃį¬ÅtTÓºÆgQÃÃHţĴÃbEÃlbÊCÂ|CÂÅ®ÂÂÂkÂÆ®[ʼ¬Å´KÅ®ÃΰÃζƶlðÂļAÂTUvdTÂGº̼ÂÃÂÂsÃDÃÂveOg" |
| | | ] |
| | | ], |
| | | "encodeOffsets": [[[105308, 37219]], [[95370, 40081]]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "640000", |
| | | "properties": { "id": "640000", "cp": [106.278179, 37.26637], "name": "å®å¤", "childNum": 2 }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | [ |
| | | "@@KëÃÄÄ«OÄÈ¿ÈÂı]Å¡åįÃëǴõƪÂÄQÃZhv K°ÂöqÃÃÂS[ÃÃHÆÄÂÃÂnL]ûcÂ
ÃÃ@ÂÂľ}w»»ÂoÄ£F¹Â»ÂkÃ÷{zP§B¢ÃyÃ
t@ÂÂ@áÂ]Yv_ssģ¼iÃÂÂÄ»L¾ġsKD£¡N_Â
ÂÂX¸}B~HaiÂÂÃ
f{«x»ge_bsÂKF¯¡IxÂmELcÿZ¤ÂÄ¢ÂÂÃÂsuBLùÂtÂÂÂYdÂÂmVtNmtOPhRw~bdÂ
¾qÃ\\âÃHÂ\\bImlNZ»loÂÂqlVmÂGħ~QCw¤Â{A\\ÂÂPKÂÂNY¯bFÂkCÂ¥ÂskÂÂs_Ã\\Ä«¢ħkJi¯rÂrAhĹûç£CUÂÄÄ_ÃÂBixÃ
ÃÂÄnªÃaM~ħpÂOuÂ¥sîeQ¥¤^dkKwlL~{L~Âhw^ÂófÄÂKyEÂÂKÂzuáqQ¤xZâ^ļöþEp±âbÃÃÃ^fk¬Â
NC¾ÂÂÂYÂpxbK~Â¥ÂeÃÂÂäBlt¿ÄÂx½I[ÄÇÂWÂÂf»Ĭ}d§dµÂùEuÂj¨ÂIâ¥dXªÆ
x¿]mtÃwÃRĶÂX¢ÍvÃzÆZò®ǢÃÊCrâºMÃzÂÃMÃÂÃÃÅZþÂr°ÂîÈmª²ÄUªÄîÂÂøºÂĮ¦ÃÄkÂ^FÅĬhÄiÄľiİbjÃ" |
| | | ], |
| | | ["@@mfwÄwMrŢªv@GÂ"] |
| | | ], |
| | | "encodeOffsets": [[[109366, 40242]], [[108600, 36303]]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "650000", |
| | | "properties": { "id": "650000", "cp": [85.617733, 40.792818], "name": "æ°ç", "childNum": 1 }, |
| | | "geometry": { |
| | | "type": "Polygon", |
| | | "coordinates": [ |
| | | "@@QÃIJX¨Â~ÇBºjÊÃÃvKÂÆX¨vÄOÂ÷¢i@Â~cÂÂÄe_«ÂEÂÂ}QxgɪëÃÃ@sÃ
yXoÅ{ô«ŸuXÂ
êÂÃf`ÂÂC¹ÃÿÃGÄ®ÃÄXŪÅŸMÅºÃÆºQèĽôe|¿ƸJR¤ÄEjcUóº¯Ĩ_ÅÃÂMª÷ÃÂ¥OéÿÃÄǤǷÃFÃÂzÃx[]ÂĤÄÂŦEP}ûƥé¿İƷTÄÆ«ÅÅÆ
ÂÆ±B»Ä±ÂÄOÂ
¦EÂÂ}Â`cȺrĦáÅuê«IJÂÏdƺÃÃZÆ´wʤÄGÄÂÇZĶÂèH¶}ÃZצʥĪï|ÃĦMÅ»İÄÇÂì¥ÎÂba¯¥ÇÇkÄŵĦÉĺƯxÅ«Ð̵nÆ¡ÊĽá½M»ÂÂòmqóÅÄÄþÄCÂ
ÄÄÆ¿Ãɽ©DZÅ
¹Ä¥³ðLrîɱÄÄ£ÅÇ»ÂÌȥơŻÇÈ¡Vï¹Å۩ûkÉÄ¡ÆÂ§ÊÄÌĩũƽÅ^ÆÂUv£ÆQÃ¯ÂÆµkŽÎÃÅóLÅÂʻ«Æ\\lÂÂÂÅÂDÂÂ{ÊDkaFÃÃa³ŤÄÃGRÃÆhSÓ¹Åsİ«ÄÃ[Â¥ÃDkº^Ãg¼ŵ¸£EÃöÂÂůÅT¡c_ÂÃKYÂÆ§UÅĵÂÃÂU_©rETÃʱOñtYwĨÂ{£¨uM³x½ÅL©Ãá[ÃÃĥ Îtģ¢\\ÂÅÂnkOÂw¥±ÂT»ƷFɯà ĩÃáB¹ÃÂÂ
ÃUwÂÅÂÂÂĽw[ÂmG½ÃÃ¥~ÂÃ÷QyÂÄCFmÄZÄ«ÂŵVÃÂÆ¿QÆÂûXS²Âb½KýÄS©ŷXÄÂ{ÂÄK·¥Æcqq©f¿]ÂÂÃDõÂU³hÂÂÂgÃÃïģÃÉwÂk¯Ã}I·ÂÅbmÂÃÂÅÂÄ«JɥĻËÃxÂoÂɹīÂlÂcÂ
¤³Xù]ÂÂÇ
A¿wÍì¥wÃN·ÃÃnÂÆ¾ÆdçĮÆvÂUm©³G\\Â}µĿÂQyŹÂlĵEwÂÇQ½yÆBe¶ÅÃůÂoÂÂ¥AÂÂÃw@Â{Gpm¿AijÂŽKLh³`ñcÃtW±»ÃSÂëüÿÄDÂu\\wwwù³ÂVÂÂLÅÂOMÂÃGh£õP¡ÂerÂÂÃd{ÂÂÄ¡WÃÂ
Ä|yÅ¡gÂ^ÄyÃzÃs`Âs|ÃåªÃ}m¢Å¨`xÂ¥Âù^Â}ÂÃÂ¥H«ÂYªÆ
ÂAùn~ź¯Âf¤áÃzÂgÂÃDIôAÅÄöûEYospõD[{ù°]uÂJqÂÂUÂ|SoÄxÅ£[õÃÄ¥kÅÃÅZúóYÃüÄrw ÂÃkrťÿXGÂÃbÅaDü·Ä÷Aê[ÃäÂIîBÃÄÂÃ_¢ÄÄ pÂÃÃÈÄÄ¡DKÂwbÂmÂÃNôÂÂfÂÆ«VÃviÂdzÂHÂÂQµâFÂùÂÃų¦{YGÂÂd¢ÄÃO ÂÂ{æÃÃÃPÂ^bÂÆ¾ÂlÂ[ÂvtÃÄÃEè¡Ä~´î¸ùÃhÂuè`¸ÂHÃÅVºwÄ Ã¢Ã¢WòÂ@{ÂÃNôɲÈn{¿¥{lÂ÷eé^eÂÄÂXj©î\\ªÃòÂÃìc\\üqÂÃ[ÂÄ¡xoÃĪbÃÂÂø|¶ȴZdÃÃÂoÅéÂGÂ\\¼ÂC°ÃÃÂn´nxÂÃOĨÂÅªÂÆ´Ä¸Â¢Â¸Ã²TxÃǪMÄ«ÄÂÃŲÃÉOvÂʦƢ~FÂÂRÄò¿ġ~Ã¥ÅÂúÂN¸qÂÂÄ[ĶÃÄnÂÃPÄÃvúÄÃbÃ{Ãî¸~Åünp¤ÃH¾ÂÄYéÃfºmÃÂÄcDoĬMŬÂÂS¤Âs²ÂÂÊÞÈVŦ ÂÂèW°ªB|IJXÅþÃJĦÃæFÄêÂYĪÄ]øªÅNÃüAÂÂfɨJ¯ÃrDDÂĤÂ`Âmz\\§~D¬{vJÂëlµÄb¤pÂÅŰNĨÄXW|ų ¿¾ÉĦÆMTÂÂòPÂ÷fÃĶK¢ÈËSô¹òEðÂÂ`ÆÂ½ÇÃÅÃäı§ĤÆÂ§C~¡ÂhlÃ¥ÂǺŦÅkâÂ~}ÂFøà IJaÄÂfÂÆ Â¥ÂÂÅd®U¸ÂźXÂv¢aÆÃºÅªtÅ Å³Æ jdÂÆºÂƺÃ
ìnrh\\ĺ¯äÉĦ]èpĦ´LÆÄ¬Â´ƤǬ˼Äɸ¤rºǼ²¨zÃPðÅbþ¹ļD¢¹Â\\ÄÃŶZÆÂ³Ã jĨoâÂÈ´LÃÂÈ®ÂÄÂÄÄÂÃêZÇŤqÈ\\L¢ÅİfÃs|zºeªÃæ§΢{Ä´ÆÃ¬¨Ĵà ²ÅhʺKúÃTÂiƢ¾ªì°`öøu®Ã¾ãÃ" |
| | | ], |
| | | "encodeOffsets": [[88824, 50096]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "110000", |
| | | "properties": { |
| | | "id": "110000", |
| | | "cp": [116.405285, 39.904989], |
| | | "name": "å京", |
| | | "childNum": 1 |
| | | }, |
| | | "geometry": { |
| | | "type": "Polygon", |
| | | "coordinates": [ |
| | | "@@ĽOÃÂûtÅ·miÃt_H»Ĩ±d`¹Â{bwÂ
Yr³S]§§o¹ÂqGtm_SŧÂÂoaÂÂFLgÂQN_ÂdVÂÂ@Zom_Ä\\ÃÂcñx¯oÅRcfeÂ
£Âo§ÃgToÃJÃÄóuÂ
|wP¤ÂXnÂO¢ÃÂŦ¯rNÃĤzâÅÃRpÅ¢ZÂÂÃ{GÂrFt¦Ãx§ø¹RóäV¤ÂXdÂżâºWbwŨUd®bêžÂjnÅGÅŶÂnzÂÃSeîÄZÂczî¾i]ÃÂÂQaúÃÃiþĩȨWÄ¢Âü|Äu[qÂb[swP@Ã
ÄP¿{\\ÂÂ¥A¨ÃÂèÂj¯ÂX\\¯ÂMKÂpA³[HÂ
īu}}" |
| | | ], |
| | | "encodeOffsets": [[120023, 41045]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "120000", |
| | | "properties": { |
| | | "id": "120000", |
| | | "cp": [117.190182, 39.125596], |
| | | "name": "天津", |
| | | "childNum": 1 |
| | | }, |
| | | "geometry": { |
| | | "type": "Polygon", |
| | | "coordinates": [ |
| | | "@@ŬgX§Ã«EÂ
¶FìO_ÂïlÃgÂz±AXeµÃĵ{¶]gitgÂIj·Â¥îakSÂÂÂ¨ÃÆk}Ä{gBÂqGf{¿aÂU^fIÂÆ°Â³õ{YÂıëNÄ¿Âk©ïÃZÅÂR§òoYÃÃgcÂ
Ä¥s¡bġ«@dekÄ
I[nlPqCnp{Âų°`Â{PNdÆqSÃÄ»NNâyj]äÂÃD ĬH°Ã]~¡HO¾ÂX}ÃxÂgpÂgWÂrDGÂÂpùÂÂ^LÂÂÂrzWxÂZ^¨´T\\|~@IÂzÂÂbĤÂÂjeĪz£®ÄvÄÂLÂmV¾Ã_ÃÂNW~zbĬvG²ZmDM~Â~" |
| | | ], |
| | | "encodeOffsets": [[120237, 41215]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "310000", |
| | | "properties": { |
| | | "id": "310000", |
| | | "cp": [121.472644, 31.231706], |
| | | "name": "䏿µ·", |
| | | "childNum": 6 |
| | | }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@ɧư¬EpÂÆ¸ÃxÂcÂ"], |
| | | ["@@©ÂªÂ"], |
| | | ["@@ÂMAÂÂÂ"], |
| | | ["@@QpİÂE§ÃC¾"], |
| | | ["@@bÅÃÂÃEÈ£ÃÆ¥ÃªÂImÂÉǦèÃÄ ÂÃÂÂÃÆÃÍó"], |
| | | ["@@ÇûȬÉÂÅÂÃ^ÂsYÂÂÉDÅÂŽÄ
ñCG²«ªÄ@hÂ_p¯A{ÂoloY¬j@IJÂ`ÂgQÃÂhr|Ç^MIJvtbe´R¯Ã¬YÂô¤r]Ã¬ÂÆ¬Ä¯"] |
| | | ], |
| | | "encodeOffsets": [ |
| | | [[124702, 32062]], |
| | | [[124547, 32200]], |
| | | [[124808, 31991]], |
| | | [[124726, 32110]], |
| | | [[124903, 32376]], |
| | | [[124438, 32149]] |
| | | ] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "500000", |
| | | "properties": { |
| | | "id": "500000", |
| | | "cp": [107.304962, 29.533155], |
| | | "name": "éåº", |
| | | "childNum": 2 |
| | | }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | [ |
| | | "@@vjG~nGÅÅ¬Ä¶ÈÆÆ¾Â¹Â¸ÃÃezÄT¸}êÃÂqHÂðqÄäÂÂÂ¥^CÃÂIj²pÂ
\\_ æüY|Â[YxÆÃ¦u°xb®Â
ÂŰb@~¢NQt°¶ÂSæ ÂÃ~rÇÄëÄ¢~Âuf`ÂÂÂfaÂÄJÃ¥ÄÂnÃ]ÂjÆÄÃ@£¾a®£Ű{ŶÄFÂègLk{Y|¡ÄWÆtƬJÃxq±ĢN´ÂòKÂÂÂLÃüD|s`ÅÂÄ]ÂÃÂ`ÄÂMûƱ½~Y°ħ`ÆÃW½eI½{aÂÂOIráÄÅaÂpÂÂµÃÆ
Ä¡ÂÂ^ÃÃbÃŽÅml½SÂêqDu[RÂãûÂÿw`»y¸_ĺÄ}÷`M¯ÄfCVµqÅ÷ZÂggÂÂ`d½pDOÂÃÂCnÂ^uf²ènh¼WtÆxRGg¦Â
pVÂÂFI±ÂG^ÂIc´ecÂÂGÂĹýsëĬÂhÂxWÂ}KÃÂeÂXsbkÂF¦ÂLÂÃgTkïƵNï¶}GyÂw\\oñ¡nmÄzjÂÂÂ@ÂÃc£»WĹÃjÂ_m»Â¹·~MvÃaq»ÂÂêÂÂ\\ÃoVnÂÃÃò«ÂÂbq¿eÂfE ÂÂÂÄÂ^QÂ~ ÃvýÂŤ²ĮÂpEİ}zcĺÂL½Â¿gÃ
¡ýE¡ya£³t\\¨Â\\vú»¼§·ÃrÂ_oÃý¥uÂÂ_n»_ÂÂAt©ÂÃÃ
±Ä§IVeëÂY}{VPÃÂFA¨Ä
B}q@|OuÂ\\FmÂQFÃÂ
MwÂÃ¥}]ÂÂÂ|FmÃÂCaÂwÂu_p¯sfÃgYÂ
DHlÂ`{QEfÂNysB¦zG¸rHeÂÂN\\CvEsÃùÃ_·ÃÄsaQ¯Â}_UÂÂxÃÄÂqÂÂNH¬ÂÃd^ÃŰR¬ã°weÄJE·v÷HgÂÂéFXjÃê`|yÂpxkAwÂWÄpbÂ¥eOsmzwqChóUQlÂ¥F^lafÂanòsrÂEvfQdÃUVfÂÃvÃ^efÂtET¬ôA\\¢sJÂnQTjPÃÂxøK|nBzÂÂÂÄ»LYÂÂ
FDxÃÂvrÂ[ehľÂÂvN¢o¾NiÃxGpâ¬ÂzÂbfZo~hGiÂ]öF|Â|NbÂtOMn eA±ÂÂtPTÂLjpYQ|ÂSHÂÂYÄxinzDJÂÃg¢và ¥PgÂ_ÂÃzIIÂÂII£®S¬ÂÃsü£ÂN" |
| | | ], |
| | | ["@@ifjN@s"] |
| | | ], |
| | | "encodeOffsets": [[[109628, 30765]], [[111725, 31320]]] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "810000", |
| | | "properties": { |
| | | "id": "810000", |
| | | "cp": [114.173355, 22.320048], |
| | | "name": "馿¸¯", |
| | | "childNum": 5 |
| | | }, |
| | | "geometry": { |
| | | "type": "MultiPolygon", |
| | | "coordinates": [ |
| | | ["@@AlBk"], |
| | | ["@@mÂnÂ"], |
| | | ["@@EpFo"], |
| | | ["@@ea¢pl¸Eõ¹Âhj[Â]ÃCÃÂ@Âlj¡uBXÂÂ
´ÂAI¹ÂÂ
[ÂyDUÂ]W`çwZkmcÂÂ
MÂÂpÂÃ
vÂ}IÂoJlÂcaÂfÅÂK°ä¬XJmàÄhI®æÃtSHnÂEÂÂÃrÃc"], |
| | | ["@@rMUwÂAS®Âe"] |
| | | ], |
| | | "encodeOffsets": [ |
| | | [[117111, 23002]], |
| | | [[117072, 22876]], |
| | | [[117045, 22887]], |
| | | [[116975, 23082]], |
| | | [[116882, 22747]] |
| | | ] |
| | | } |
| | | }, |
| | | { |
| | | "type": "Feature", |
| | | "id": "820000", |
| | | "properties": { "id": "820000", "cp": [113.54909, 22.198951], "name": "æ¾³é¨", "childNum": 1 }, |
| | | "geometry": { |
| | | "type": "Polygon", |
| | | "coordinates": ["@@kÃd°å§s"], |
| | | "encodeOffsets": [[116279, 22639]] |
| | | } |
| | | } |
| | | ], |
| | | "UTF8Encoding": true |
| | | } |
| New file |
| | |
| | | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800" enable-background="new 0 0 800 800"><style>.st26{fill:#fff}</style><g id="å¾å±_11"><linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="401.773" y1="162.104" x2="401.773" y2="717.596"><stop offset="0" stop-color="#F4F2FB"/><stop offset="1" stop-color="#E1EEF5"/></linearGradient><path d="M485.03 203.46c-38.37 30.29-120.74 33.81-181.17-2.22s-172-31.38-202.22 34.87 37.19 131.33 12.78 178.98S8.66 530.13 64.45 611.49s126.6 60.62 169.22 52.45c84.17-16.13 189.79 115.67 308.62 16.13 68.47-57.35 170.44 42.09 210.17-81.36 32.78-101.86-85.67-139.5-49.97-208.03 37.96-72.88 30.67-159.24-10.46-201.06-38.31-38.96-140.75-38.46-207 13.84z" style="fill:url(#SVGID_1_)"/><linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="494.782" y1="599.604" x2="494.782" y2="428.659"><stop offset=".34" stop-color="#B0B9E1"/><stop offset=".866" stop-color="#EAF0F8"/></linearGradient><path d="M406.65 428.66h216.44l-22.53 49.03s59.19 57.87-14.13 121.91c-134.28-44.17-221.74-37.1-219.98-38.87 1.77-1.76 40.2-132.07 40.2-132.07z" style="fill:url(#SVGID_2_)"/><linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="116.855" y1="542.49" x2="116.855" y2="405.316"><stop offset=".227" stop-color="#B7ACE0"/><stop offset=".789" stop-color="#E8E7FA"/></linearGradient><path d="M117.64 405.56s-.22-.57-.52.04c-2.7 5.49-27.15 64.96-29.09 110.86 0 0-4.08 26.37 30.11 26.02 28.54-.29 27.78-24.6 27.68-32.79-.39-33.22-28.18-104.13-28.18-104.13z" style="fill:url(#SVGID_3_)"/><linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="116.857" y1="420.547" x2="116.857" y2="571.681"><stop offset="0" stop-color="#ECF1FB"/><stop offset=".818" stop-color="#AFB0E7"/></linearGradient><path d="M116.86 571.68c-.55 0-1-.45-1-1V421.55c0-.55.45-1 1-1s1 .45 1 1v149.13c0 .55-.45 1-1 1z" style="fill:url(#SVGID_4_)"/><linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="617.984" y1="450.968" x2="617.984" y2="362.644"><stop offset=".227" stop-color="#CCD4F4"/><stop offset=".789" stop-color="#ECF1FB"/></linearGradient><path d="M618.49 362.8s-.14-.37-.33.03c-1.74 3.53-17.48 41.83-18.73 71.38 0 0-2.63 16.98 19.39 16.76 18.38-.18 17.89-15.84 17.82-21.11-.25-21.4-18.15-67.06-18.15-67.06z" style="fill:url(#SVGID_5_)"/><linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="617.985" y1="372.451" x2="617.985" y2="469.764"><stop offset="0" stop-color="#ECF1FB"/><stop offset="1" stop-color="#A6A8E2"/></linearGradient><path d="M617.99 469.76c-.36 0-.64-.29-.64-.64V373.1c0-.36.29-.64.64-.64s.64.29.64.64v96.02c0 .36-.29.64-.64.64z" style="fill:url(#SVGID_6_)"/><linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="463.902" y1="88.362" x2="429.148" y2="148.558"><stop offset="0" stop-color="#FFDB80"/><stop offset="1" stop-color="#FFBB24"/></linearGradient><circle cx="446.52" cy="118.46" r="34.75" style="fill:url(#SVGID_7_)"/><linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="421.565" y1="118.828" x2="421.565" y2="176.282"><stop offset="0" stop-color="#F9FAFE"/><stop offset="1" stop-color="#E5EDF7"/></linearGradient><path d="M466.3 137.41h-34.57c-2.23-10.61-11.65-18.58-22.93-18.58s-20.69 7.97-22.93 18.58h-9.05c-10.73 0-19.44 8.7-19.44 19.44 0 10.73 8.7 19.44 19.44 19.44h89.47c10.73 0 19.44-8.7 19.44-19.44.01-10.74-8.69-19.44-19.43-19.44z" style="fill:url(#SVGID_8_)"/><g><linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="688.586" y1="540.208" x2="688.586" y2="512.38"><stop offset=".227" stop-color="#AFB0E7"/><stop offset="1" stop-color="#ECF1FB"/></linearGradient><circle cx="688.59" cy="526.29" r="13.91" style="fill:url(#SVGID_9_)"/><linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="688.635" y1="515.894" x2="688.635" y2="560.69"><stop offset="0" stop-color="#DDE1F6"/><stop offset=".818" stop-color="#A6A8E2"/></linearGradient><path d="M688.64 560.69c-.24 0-.43-.19-.43-.43v-43.94c0-.24.19-.43.43-.43s.43.19.43.43v43.94a.44.44 0 01-.43.43z" style="fill:url(#SVGID_10_)"/></g><g><linearGradient id="SVGID_11_" gradientUnits="userSpaceOnUse" x1="2622.045" y1="266.481" x2="2451.058" y2="562.64" gradientTransform="matrix(-1 0 0 1 2941.346 0)"><stop offset="0" stop-color="#C8CBF2"/><stop offset="1" stop-color="#AFB0E7"/></linearGradient><path d="M248.82 393.99c0-24.52-.03-49.03.01-73.54.02-14.37 4.24-18.36 17.97-20.53 41.87-6.61 82.03-18.72 117.91-42.29 10.38-6.82 18.3-7.59 29.06-.47 34.85 23.06 73.26 37.11 114.55 42.8 13.12 1.81 16.84 5.88 16.85 19.25.04 45.72-.4 91.44.18 137.15.34 26.77-8.17 49.99-24.02 70.73-31.46 41.17-74.88 63.76-122.21 80.03-2.5.86-5.83.67-8.36-.23-38.47-13.74-74.58-31.84-104.15-61.09-22.97-22.73-37.84-49.56-37.79-83.22.03-22.87.01-45.73 0-68.59z" style="fill:url(#SVGID_11_)"/><linearGradient id="SVGID_12_" gradientUnits="userSpaceOnUse" x1="2625.25" y1="279.944" x2="2462.749" y2="561.403" gradientTransform="matrix(-1 0 0 1 2941.346 0)"><stop offset=".116" stop-color="#DEE4FF"/><stop offset=".847" stop-color="#BACBEE"/></linearGradient><path d="M247.94 401.44c0-23.21-.03-46.42.01-69.63.02-13.61 4.06-17.38 17.23-19.43 40.15-6.26 78.67-17.72 113.07-40.04 9.95-6.46 17.55-7.18 27.86-.44 33.42 21.83 70.25 35.14 109.84 40.52 12.58 1.71 16.14 5.56 16.15 18.22.03 43.28-.38 86.57.18 129.84.33 25.34-7.83 47.33-23.03 66.96-30.17 38.98-71.81 60.36-117.19 75.77-2.4.81-5.59.64-8.01-.22-36.89-13.01-71.52-30.14-99.87-57.84-22.03-21.52-36.28-46.91-36.23-78.78.02-21.65-.01-43.29-.01-64.93z" style="fill:url(#SVGID_12_)"/><linearGradient id="SVGID_13_" gradientUnits="userSpaceOnUse" x1="361.421" y1="346.477" x2="449.513" y2="499.057"><stop offset="0" stop-color="#C8CBF2"/><stop offset="1" stop-color="#AFB0E7"/></linearGradient><path d="M411.59 435.75c23.18-5.61 40.41-26.11 40.41-50.49 0-28.68-23.85-52.01-53.17-52.01s-53.17 23.33-53.17 52.01c0 24.38 17.24 44.88 40.41 50.49v85.2h25.52v-36.38h32.67v-24.96h-32.67v-23.86zm-40.41-50.49c0-14.91 12.41-27.05 27.65-27.05s27.65 12.14 27.65 27.05-12.41 27.05-27.65 27.05-27.65-12.14-27.65-27.05z" style="fill:url(#SVGID_13_)"/><path class="st26" d="M407.67 439.03c21.8-5.39 38.01-25.1 38.01-48.54 0-27.58-22.43-50.01-50.01-50.01s-50.01 22.43-50.01 50.01c0 23.44 16.21 43.15 38.01 48.54v81.92h24v-34.98h30.73v-24h-30.73v-22.94zm-38.01-48.55c0-14.34 11.67-26.01 26.01-26.01s26.01 11.67 26.01 26.01-11.67 26.01-26.01 26.01-26.01-11.67-26.01-26.01z"/><linearGradient id="SVGID_14_" gradientUnits="userSpaceOnUse" x1="484.836" y1="475.674" x2="565.754" y2="615.828"><stop offset="0" stop-color="#C8CBF2"/><stop offset="1" stop-color="#AFB0E7"/></linearGradient><circle cx="525.3" cy="545.75" r="80.9" style="fill:url(#SVGID_14_)"/><linearGradient id="SVGID_15_" gradientUnits="userSpaceOnUse" x1="482.787" y1="483.323" x2="559.605" y2="616.376"><stop offset=".116" stop-color="#DEE4FF"/><stop offset=".847" stop-color="#C6D5F4"/></linearGradient><circle cx="521.2" cy="549.85" r="76.81" style="fill:url(#SVGID_15_)"/><path class="st26" d="M538.5 547.62l23.01-23.01c4.44-4.44 4.44-11.63 0-16.06-4.44-4.44-11.63-4.44-16.06 0l-23.01 23.01-23.01-23.01c-4.44-4.44-11.63-4.44-16.06 0-4.44 4.44-4.44 11.63 0 16.06l23.01 23.01-23.01 23.01c-4.44 4.44-4.44 11.63 0 16.06 2.22 2.22 5.13 3.33 8.03 3.33 2.91 0 5.81-1.11 8.03-3.33l23.01-23.01 23.01 23.01c2.22 2.22 5.13 3.33 8.03 3.33s5.81-1.11 8.03-3.33c4.44-4.44 4.44-11.63 0-16.06l-23.01-23.01z"/></g><g><linearGradient id="SVGID_16_" gradientUnits="userSpaceOnUse" x1="232.569" y1="558.709" x2="232.569" y2="484.191"><stop offset="0" stop-color="#C3D5FD"/><stop offset="1" stop-color="#1A90FC"/></linearGradient><path d="M224.88 484.54s-18.08-2.5-23.95 5.81-8.02 29.58-8.02 29.58l13.61-.72-1.15 24.78 25.11 14.72 35.77-19.24-5.44-22.45 11.43-2.98s-3.4-32.58-19.31-27.77c-8.17.87-10.74.73-10.74.73s-2.15 6.85-9.53 6.27c-7.38-.59-7.78-8.73-7.78-8.73z" style="fill:url(#SVGID_16_)"/><linearGradient id="SVGID_17_" gradientUnits="userSpaceOnUse" x1="233.602" y1="471.483" x2="233.602" y2="495.089"><stop offset="0" stop-color="#F4AE98"/><stop offset="1" stop-color="#FAD1BB"/></linearGradient><path d="M226.69 474.3l-3.76 16.76c-.18.79.23 1.59.98 1.89 1.94.79 5.83 2.13 9.82 2.13 4.15 0 8.06-2.27 9.86-3.48.62-.42.88-1.19.64-1.9l-5.75-17.09a1.643 1.643 0 00-1.86-1.1l-8.61 1.53c-.65.11-1.18.61-1.32 1.26z" style="fill:url(#SVGID_17_)"/><linearGradient id="SVGID_18_" gradientUnits="userSpaceOnUse" x1="-816.068" y1="920.854" x2="-804.529" y2="839.612" gradientTransform="rotate(-8.082 -2795.015 -6505.71)"><stop offset="0" stop-color="#C3D5FD"/><stop offset="1" stop-color="#1A90FC"/></linearGradient><path d="M204.24 487.44c5.26-1.75 12.4-.58 12.69 11.22s-11.28 30.62-7.13 37.16c4.2 6.63 13.17 16.05 18.89 21.41-1.33 6.3-4.91 11.61-4.91 11.61s-21.05-9.71-30.21-19.44c-9.17-9.73-4.54-32.03-.3-47.9 3.19-11.95 10.97-14.06 10.97-14.06z" style="fill:url(#SVGID_18_)"/><linearGradient id="SVGID_19_" gradientUnits="userSpaceOnUse" x1="-6575.898" y1="102.823" x2="-6564.359" y2="21.581" gradientTransform="scale(-1 1) rotate(-8.082 -118.103 -44396.273)"><stop offset="0" stop-color="#C3D5FD"/><stop offset="1" stop-color="#1A90FC"/></linearGradient><path d="M259.39 487.44c-5.26-1.75-12.4-.58-12.69 11.22s11.28 30.62 7.13 37.16c-4.2 6.63-13.17 16.05-18.89 21.41 1.33 6.3 4.91 11.61 4.91 11.61s21.05-9.71 30.21-19.44c9.17-9.73 4.54-32.03.3-47.9-3.19-11.95-10.97-14.06-10.97-14.06z" style="fill:url(#SVGID_19_)"/><linearGradient id="SVGID_20_" gradientUnits="userSpaceOnUse" x1="232.569" y1="531.798" x2="232.569" y2="579.152"><stop offset="0" stop-color="#275C89"/><stop offset="1" stop-color="#013F7C"/></linearGradient><path d="M206.79 579.15h51.1c2.31 0 4.38-1.75 5.19-4.4l10.3-33.89c1.34-4.4-1.33-9.07-5.19-9.07h-71.23c-3.82 0-6.48 4.6-5.21 8.98l9.84 33.89c.77 2.69 2.86 4.49 5.2 4.49z" style="fill:url(#SVGID_20_)"/><path class="st26" d="M204.75 594.74s-.79-1.74-1.4-1.93c-.61-.19-9.35-.54-12.53-1.36-3.19-.83-12.38-2.14-16.32 1.59-3.43 3.25-4.56 10.84.66 15.2 1.96 1.7 3.89 2.2 11.14 1.86 7.26-.34 17.78-.26 20.09-3.63-.07-5.55-1.64-11.73-1.64-11.73z"/><linearGradient id="SVGID_21_" gradientUnits="userSpaceOnUse" x1="-5720.751" y1="599.589" x2="-5703.986" y2="599.589" gradientTransform="matrix(-1 0 0 1 -5504.059 0)"><stop offset="0" stop-color="#F4B9A4"/><stop offset=".652" stop-color="#FAD1BB"/></linearGradient><path d="M212.86 592.81s-8.44 1.9-11.45 1.62-.49 11.87-.49 11.87 8.05.56 15.18-1.51c2.4-9.3-3.24-11.98-3.24-11.98z" style="fill:url(#SVGID_21_)"/><linearGradient id="SVGID_22_" gradientUnits="userSpaceOnUse" x1="209.839" y1="581.112" x2="296.322" y2="581.112"><stop offset="0" stop-color="#18264B"/><stop offset=".652" stop-color="#2D3C65"/></linearGradient><path d="M209.84 592.37l4.39 13.64s94.25-12.41 80.78-43c-11.27-25.57-85.17 29.36-85.17 29.36z" style="fill:url(#SVGID_22_)"/><linearGradient id="SVGID_23_" gradientUnits="userSpaceOnUse" x1="190.339" y1="591.445" x2="190.339" y2="609.24"><stop offset="0" stop-color="#FFDB80"/><stop offset="1" stop-color="#FFBB24"/></linearGradient><path d="M203.66 593.42s3.45 1.35 3.89 6.17c.44 4.82-.99 8.05-8.33 8.94s-9.21.56-13.81.67-11.29.56-12.27-8.2c-.99-8.75 7.96-10.98 17.24-8.75 2.92.56 13.28 1.17 13.28 1.17z" style="fill:url(#SVGID_23_)"/><g><path class="st26" d="M263.56 594.74s.79-1.74 1.4-1.93c.61-.19 9.35-.54 12.53-1.36 3.19-.83 11.75-2.2 16.08 1.49 4.01 3.42 4.27 11-.29 15.18-1.96 1.7-4.02 2.32-11.28 1.98-7.26-.34-17.78-.26-20.09-3.63.09-5.55 1.65-11.73 1.65-11.73z"/><linearGradient id="SVGID_24_" gradientUnits="userSpaceOnUse" x1="251.623" y1="599.589" x2="268.387" y2="599.589"><stop offset="0" stop-color="#F4B9A4"/><stop offset=".652" stop-color="#FAD1BB"/></linearGradient><path d="M255.45 592.81s8.44 1.9 11.45 1.62.49 11.87.49 11.87-8.05.56-15.18-1.51c-2.4-9.3 3.24-11.98 3.24-11.98z" style="fill:url(#SVGID_24_)"/><linearGradient id="SVGID_25_" gradientUnits="userSpaceOnUse" x1="171.993" y1="581.112" x2="258.476" y2="581.112"><stop offset="0" stop-color="#445677"/><stop offset="1" stop-color="#293861"/></linearGradient><path d="M258.48 592.37L254.09 606s-94.25-12.41-80.78-43c11.26-25.56 85.17 29.37 85.17 29.37z" style="fill:url(#SVGID_25_)"/><linearGradient id="SVGID_26_" gradientUnits="userSpaceOnUse" x1="277.976" y1="591.445" x2="277.976" y2="609.24"><stop offset="0" stop-color="#FFDB80"/><stop offset="1" stop-color="#FFBB24"/></linearGradient><path d="M264.66 593.42s-3.45 1.35-3.89 6.17.99 8.05 8.33 8.94c7.34.89 9.21.56 13.81.67s11.29.56 12.27-8.2c.99-8.75-7.96-10.98-17.24-8.75-2.92.56-13.28 1.17-13.28 1.17z" style="fill:url(#SVGID_26_)"/></g><linearGradient id="SVGID_27_" gradientUnits="userSpaceOnUse" x1="249.053" y1="466.067" x2="218.202" y2="466.067"><stop offset="0" stop-color="#F4B9A4"/><stop offset=".652" stop-color="#FAD1BB"/></linearGradient><path d="M248.39 467.6c.56-.8.91-2.84.46-3.44-.83-.67-1.61-.28-2.21.3.14-4.88-.31-8.94-.41-9.97-.3-2.99-3.35-8.48-13.3-8.48-9.95 0-11.88 7.18-11.88 7.18s-.65 5.08-.46 11.24c-.59-.57-1.37-.93-2.18-.27-.46.6-.1 2.64.46 3.44.56.8.91 2.69 1.02 3.74.1.99-.62 3.65 2 3.31 1.56 6.25 7.89 11.47 11.82 11.47 4.3 0 10.01-5.26 11.63-11.48 2.68.37 1.95-2.31 2.04-3.31.09-1.04.45-2.93 1.01-3.73z" style="fill:url(#SVGID_27_)"/><linearGradient id="SVGID_28_" gradientUnits="userSpaceOnUse" x1="213.957" y1="454.142" x2="249.774" y2="454.142"><stop offset="0" stop-color="#4F5C7C"/><stop offset="1" stop-color="#274168"/></linearGradient><path d="M240.1 443.88s-1.94-6.12-9.39-4.65c-7.44 1.46-7.95 4.98-10.87 5.12-4.99.23-8.97 6.45-2.58 13.03 2.85 2.93.44 4.19 1.79 6.78s1.34 5.12 1.34 5.12 2.38-7.6.81-10.84c-.81-1.67 2.77-2.13 7.24-1.73s11.51-1.08 12.06-4.12c1.32 6.23 2.64 6.88 4.31 7.83 1.68.95 1.78 8.48 1.78 8.48s.3-5.53 1.47-6.78c.96-2.04 2.85-10.07.72-12.02s-.32-8.19-8.68-6.22z" style="fill:url(#SVGID_28_)"/></g></g></svg> |
| New file |
| | |
| | | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800" enable-background="new 0 0 800 800"><style>.st49{fill:#d4e4fe}</style><g id="å¾å±_5"><linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="401.193" y1="159.763" x2="401.193" y2="715.254"><stop offset="0" stop-color="#F4F2FB"/><stop offset="1" stop-color="#E1EEF5"/></linearGradient><path d="M484.45 201.12c-38.37 30.29-120.74 33.81-181.17-2.22s-172-31.38-202.22 34.87 37.19 131.33 12.78 178.98S8.08 527.79 63.87 609.15s126.6 60.62 169.22 52.45c84.17-16.13 189.79 115.67 308.62 16.13 68.47-57.35 170.44 42.09 210.17-81.36 32.78-101.86-85.67-139.5-49.97-208.03 37.96-72.88 30.67-159.24-10.46-201.06-38.31-38.96-140.75-38.46-207 13.84z" style="fill:url(#SVGID_1_)"/><linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="484.537" y1="604.68" x2="484.537" y2="493.367"><stop offset=".34" stop-color="#B0B9E1"/><stop offset=".866" stop-color="#EAF0F8"/></linearGradient><path d="M285.1 583.44c1.77-1.63 77.74-90.07 77.74-90.07h321.13l-99.5 111.31-299.37-21.24z" style="fill:url(#SVGID_2_)"/><linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="616.023" y1="627.266" x2="657.332" y2="555.716"><stop offset="0" stop-color="#B0B9E1"/><stop offset=".866" stop-color="#EAF0F8"/></linearGradient><path d="M604.49 620.61L659.43 556.93 633.22 624.12z" style="fill:url(#SVGID_3_)"/><linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="116.275" y1="540.149" x2="116.275" y2="402.974"><stop offset=".003" stop-color="#9A9ADB"/><stop offset=".789" stop-color="#CECDF1"/></linearGradient><path d="M117.06 403.22s-.22-.57-.52.04c-2.7 5.49-27.15 64.96-29.09 110.86 0 0-4.08 26.37 30.11 26.02 28.54-.29 27.78-24.6 27.68-32.79-.39-33.22-28.18-104.13-28.18-104.13z" style="fill:url(#SVGID_4_)"/><linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="116.277" y1="418.206" x2="116.277" y2="569.34"><stop offset="0" stop-color="#ECF1FB"/><stop offset=".818" stop-color="#AFB0E7"/></linearGradient><path d="M116.28 569.34c-.55 0-1-.45-1-1V419.21c0-.55.45-1 1-1s1 .45 1 1v149.13c0 .55-.45 1-1 1z" style="fill:url(#SVGID_5_)"/><linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="617.404" y1="448.627" x2="617.404" y2="360.303"><stop offset=".227" stop-color="#CCD4F4"/><stop offset=".789" stop-color="#ECF1FB"/></linearGradient><path d="M617.91 360.46s-.14-.37-.33.03c-1.74 3.53-17.48 41.83-18.73 71.38 0 0-2.63 16.98 19.39 16.76 18.38-.18 17.89-15.84 17.82-21.11-.25-21.4-18.15-67.06-18.15-67.06z" style="fill:url(#SVGID_6_)"/><linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="617.405" y1="370.11" x2="617.405" y2="467.422"><stop offset="0" stop-color="#ECF1FB"/><stop offset="1" stop-color="#A6A8E2"/></linearGradient><path d="M617.41 467.42c-.36 0-.64-.29-.64-.64v-96.02c0-.36.29-.64.64-.64.36 0 .64.29.64.64v96.02c0 .35-.29.64-.64.64z" style="fill:url(#SVGID_7_)"/><linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="463.322" y1="86.02" x2="428.568" y2="146.217"><stop offset="0" stop-color="#FFDB80"/><stop offset="1" stop-color="#FFBB24"/></linearGradient><circle cx="445.95" cy="116.12" r="34.75" style="fill:url(#SVGID_8_)"/><linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="420.985" y1="116.487" x2="420.985" y2="173.941"><stop offset="0" stop-color="#F9FAFE"/><stop offset="1" stop-color="#E5EDF7"/></linearGradient><path d="M465.72 135.07h-34.57c-2.23-10.61-11.65-18.58-22.93-18.58s-20.69 7.97-22.93 18.58h-9.05c-10.73 0-19.44 8.7-19.44 19.44 0 10.73 8.7 19.44 19.44 19.44h89.47c10.73 0 19.44-8.7 19.44-19.44.01-10.74-8.69-19.44-19.43-19.44z" style="fill:url(#SVGID_9_)"/><g><linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="688.006" y1="537.867" x2="688.006" y2="510.039"><stop offset=".227" stop-color="#AFB0E7"/><stop offset="1" stop-color="#ECF1FB"/></linearGradient><circle cx="688.01" cy="523.95" r="13.91" style="fill:url(#SVGID_10_)"/><linearGradient id="SVGID_11_" gradientUnits="userSpaceOnUse" x1="688.056" y1="513.553" x2="688.056" y2="558.349"><stop offset="0" stop-color="#DDE1F6"/><stop offset=".818" stop-color="#A6A8E2"/></linearGradient><path d="M688.06 558.35c-.24 0-.43-.19-.43-.43v-43.94c0-.24.19-.43.43-.43s.43.19.43.43v43.94a.44.44 0 01-.43.43z" style="fill:url(#SVGID_11_)"/></g><g><linearGradient id="SVGID_12_" gradientUnits="userSpaceOnUse" x1="2879.853" y1="308.382" x2="2737.462" y2="450.774" gradientTransform="matrix(-1 0 0 1 3207.18 0)"><stop offset="0" stop-color="#C8CBF2"/><stop offset="1" stop-color="#AFB0E7"/></linearGradient><path d="M270.73 392.79l91.4-73.3c7.43 11.92 20.65 19.87 35.7 19.87 16.43 0 30.69-9.48 37.6-23.26l92.11 76.85 10.83-12.98-98.5-82.19c0-.16.01-.31.01-.47 0-23.18-18.86-42.04-42.05-42.04-23.18 0-42.04 18.86-42.04 42.04 0 1.8.13 3.58.35 5.32l-95.98 76.97 10.57 13.19zm101.96-95.48c0-13.86 11.28-25.14 25.14-25.14s25.14 11.28 25.14 25.14-11.28 25.14-25.14 25.14-25.14-11.27-25.14-25.14z" style="fill:url(#SVGID_12_)"/><linearGradient id="SVGID_13_" gradientUnits="userSpaceOnUse" x1="2814.247" y1="259.815" x2="2814.247" y2="392.836" gradientTransform="matrix(-1 0 0 1 3207.18 0)"><stop offset=".116" stop-color="#DEE4FF"/><stop offset=".847" stop-color="#C6D5F4"/></linearGradient><path d="M268.75 392.68l88.31-70.82c7.18 11.51 19.95 19.2 34.49 19.2 15.88 0 29.65-9.16 36.33-22.47l88.99 74.25 10.46-12.54-95.17-79.41c0-.15.01-.3.01-.46 0-22.4-18.22-40.62-40.62-40.62s-40.62 18.22-40.62 40.62c0 1.74.12 3.46.34 5.14l-92.73 74.37 10.21 12.74zm98.51-92.24c0-13.4 10.9-24.29 24.29-24.29 13.4 0 24.29 10.9 24.29 24.29 0 13.4-10.9 24.29-24.29 24.29-13.4 0-24.29-10.9-24.29-24.29z" style="fill:url(#SVGID_13_)"/><linearGradient id="SVGID_14_" gradientUnits="userSpaceOnUse" x1="2966.463" y1="329.794" x2="2654.707" y2="641.55" gradientTransform="matrix(-1 0 0 1 3203.43 0)"><stop offset="0" stop-color="#C8CBF2"/><stop offset="1" stop-color="#AFB0E7"/></linearGradient><path d="M230.6 619.91h326.35c17.89 0 32.39-14.5 32.39-32.39V388.31c0-21.39-17.34-38.72-38.72-38.72H230.6c-17.89 0-32.39 14.5-32.39 32.39v205.54c-.01 17.88 14.5 32.39 32.39 32.39z" style="fill:url(#SVGID_14_)"/><linearGradient id="SVGID_15_" gradientUnits="userSpaceOnUse" x1="2716.773" y1="319.563" x2="2914.293" y2="661.678" gradientTransform="matrix(-1 0 0 1 3203.43 0)"><stop offset="0" stop-color="#EBF2FA"/><stop offset=".525" stop-color="#FDFEFF"/></linearGradient><path d="M223.6 619.91h328.59c14.03 0 25.4-11.37 25.4-25.4V386.73c0-14.03-11.37-25.4-25.4-25.4H223.6c-14.03 0-25.4 11.37-25.4 25.4v207.78c0 14.03 11.38 25.4 25.4 25.4z" style="fill:url(#SVGID_15_)"/><linearGradient id="SVGID_16_" gradientUnits="userSpaceOnUse" x1="2815.495" y1="361.334" x2="2815.495" y2="425.526" gradientTransform="matrix(-1 0 0 1 3203.43 0)"><stop offset=".116" stop-color="#DEE4FF"/><stop offset=".847" stop-color="#BACBEE"/></linearGradient><path d="M198.24 425.53h379.39v-38.79c0-14.03-11.37-25.4-25.4-25.4H223.64c-14.03 0-25.4 11.37-25.4 25.4v38.79z" style="fill:url(#SVGID_16_)"/><linearGradient id="SVGID_17_" gradientUnits="userSpaceOnUse" x1="276.445" y1="488.742" x2="350.685" y2="531.604"><stop offset=".116" stop-color="#DEE4FF"/><stop offset=".847" stop-color="#BACBEE"/></linearGradient><path d="M328.82 457.46H307.7c-1.27 0-2.46.59-3.24 1.59L261.91 514c-.56.72-.86 1.6-.86 2.51v23.15c0 2.26 1.83 4.09 4.09 4.09h41.34c2.26 0 4.09 1.83 4.09 4.09v13.46c0 2.26 1.83 4.09 4.09 4.09h14.14c2.26 0 4.09-1.83 4.09-4.09v-13.46c0-2.26 1.83-4.09 4.09-4.09s4.09-1.83 4.09-4.09V525.5c0-2.26-1.83-4.09-4.09-4.09s-4.09-1.83-4.09-4.09v-55.77a4.059 4.059 0 00-4.07-4.09zm-39.3 57.35l13.74-17.74c2.39-3.08 7.33-1.4 7.33 2.51v17.74c0 2.26-1.83 4.09-4.09 4.09h-13.74c-3.41 0-5.33-3.91-3.24-6.6z" style="fill:url(#SVGID_17_)"/><linearGradient id="SVGID_18_" gradientUnits="userSpaceOnUse" x1="455.095" y1="488.742" x2="529.335" y2="531.604"><stop offset=".116" stop-color="#DEE4FF"/><stop offset=".847" stop-color="#BACBEE"/></linearGradient><path d="M511.56 517.32v-55.77c0-2.26-1.83-4.09-4.09-4.09h-21.12c-1.27 0-2.46.59-3.24 1.59L440.56 514c-.56.72-.86 1.6-.86 2.51v23.15c0 2.26 1.83 4.09 4.09 4.09h41.34c2.26 0 4.09 1.83 4.09 4.09v13.46c0 2.26 1.83 4.09 4.09 4.09h14.14c2.26 0 4.09-1.83 4.09-4.09v-13.46c0-2.26 1.83-4.09 4.09-4.09s4.09-1.83 4.09-4.09V525.5c0-2.26-1.83-4.09-4.09-4.09-2.24 0-4.07-1.83-4.07-4.09zm-43.39-2.51l13.74-17.74c2.39-3.08 7.33-1.4 7.33 2.51v17.74c0 2.26-1.83 4.09-4.09 4.09H471.4c-3.4 0-5.32-3.91-3.23-6.6z" style="fill:url(#SVGID_18_)"/><linearGradient id="SVGID_19_" gradientUnits="userSpaceOnUse" x1="339.488" y1="482.174" x2="441.31" y2="540.961"><stop offset=".116" stop-color="#DEE4FF"/><stop offset=".847" stop-color="#BACBEE"/></linearGradient><path d="M356.4 566.16h68c2.26 0 4.09-1.83 4.09-4.09v-101c0-2.26-1.83-4.09-4.09-4.09h-68c-2.26 0-4.09 1.83-4.09 4.09v101c0 2.26 1.83 4.09 4.09 4.09zm49.76-82.76v56.34c0 2.26-1.83 4.09-4.09 4.09h-23.34c-2.26 0-4.09-1.83-4.09-4.09V483.4c0-2.26 1.83-4.09 4.09-4.09h23.34c2.26 0 4.09 1.83 4.09 4.09z" style="fill:url(#SVGID_19_)"/></g><g><linearGradient id="SVGID_20_" gradientUnits="userSpaceOnUse" x1="871.514" y1="4485.232" x2="872.065" y2="4498.77" gradientTransform="rotate(2.333 95904.663 -3670.234)"><stop offset="0" stop-color="#FFDB80"/><stop offset="1" stop-color="#FFBB24"/></linearGradient><path d="M605.95 610.6s3.25 4.88 10.55 1.06c3.91 2.72 8.92 4.97 12.39 5.88 3.47.91 3.68 5.4 3.12 6.61-4.66-.47-18.14.64-27.3-2.94.72-7.53 1.24-10.61 1.24-10.61z" style="fill:url(#SVGID_20_)"/><path class="st49" d="M604.06 623.84l.43-3.23s10.54 2.63 28.38 1.03c.17 1.66.35 2.48.35 2.48s-13.56 2.02-29.16-.28z"/><linearGradient id="SVGID_21_" gradientUnits="userSpaceOnUse" x1="-1427.263" y1="-235.579" x2="-1409.896" y2="-215.318" gradientTransform="rotate(40.6 -1575.457 2818.52)"><stop offset="0" stop-color="#FFDB80"/><stop offset="1" stop-color="#FFBB24"/></linearGradient><path d="M520.47 596.12s-.05 5.81 7.27 7.94c1.95 5-3.73 11.79 5.37 12.42 3.34.23 1.75 5.12.73 5.63-10.95 4.01-14.63-10.12-19.62-18.98 4.32-5.09 6.25-7.01 6.25-7.01z" style="fill:url(#SVGID_21_)"/><linearGradient id="SVGID_22_" gradientUnits="userSpaceOnUse" x1="-3772.01" y1="604.486" x2="-3772.01" y2="502.198" gradientTransform="matrix(-1 0 0 1 -3222.68 0)"><stop offset="0" stop-color="#445677"/><stop offset="1" stop-color="#293861"/></linearGradient><path d="M569.3 502.2s-14.44-.26-17.67 18.85c-3.23 19.11 1.57 23.66-5.38 37.29-3.62 7.1-27.15 41.12-27.15 41.12l6.83 5.03s37.94-34.72 43.52-48.71 9.83-28.83 10.13-41.46c.28-12.62-10.28-12.12-10.28-12.12z" style="fill:url(#SVGID_22_)"/><linearGradient id="SVGID_23_" gradientUnits="userSpaceOnUse" x1="-3839.642" y1="559.801" x2="-3786.238" y2="559.801" gradientTransform="matrix(-1 0 0 1 -3222.68 0)"><stop offset="0" stop-color="#445677"/><stop offset="1" stop-color="#293861"/></linearGradient><path d="M572.72 506.19s14.87 3.53 15.75 3.98c.44.23 2.89 7.07 5.24 13.95 5.04 6.87 23.02 32.28 23.21 45.51.29 20.13-.96 43.67-.96 43.67l-9.24.11s-3.5-38.9-5.85-42.31c-.42-.61-1.29-1.95-2.42-3.74-5.14-6.22-16.5-16.65-28.16-27.07-16.45-14.66 2.43-34.1 2.43-34.1z" style="fill:url(#SVGID_23_)"/><linearGradient id="SVGID_24_" gradientUnits="userSpaceOnUse" x1="5317.908" y1="132.095" x2="5317.908" y2="56.817" gradientTransform="rotate(26.086 2112.504 -9908.036)"><stop offset="0" stop-color="#C3D5FD"/><stop offset="1" stop-color="#1A90FC"/></linearGradient><path d="M603.14 448.91s-10.69-8.37-16.99-4.36c-6.3 4-14.27 18.91-14.27 18.91l8.85 4.38-23.8 39.67 40.69 21.83 14.6-42.28 11.79.69s7.96-25.24-3.62-27.43c-5.45-2.3-7.04-3.34-7.04-3.34s-3.49 4.27-7.99 1.18-2.22-9.25-2.22-9.25z" style="fill:url(#SVGID_24_)"/><linearGradient id="SVGID_25_" gradientUnits="userSpaceOnUse" x1="5161.945" y1="1134.369" x2="5171.26" y2="1068.78" gradientTransform="rotate(18.006 4848.87 -13687.47)"><stop offset="0" stop-color="#C3D5FD"/><stop offset="1" stop-color="#1A90FC"/></linearGradient><path d="M589.15 443.6c3.88.61 8.04 4.05 4.56 12.85-3.48 8.8-16.66 18.5-16.06 24.82.6 6.4 3.37 16.58 5.33 22.6-2.8 4.17-6.72 6.78-6.72 6.78s-10.33-14.75-13.12-25.23 7.07-25.25 14.69-35.41c5.73-7.67 11.32-6.41 11.32-6.41z" style="fill:url(#SVGID_25_)"/><linearGradient id="SVGID_26_" gradientUnits="userSpaceOnUse" x1="-8924.659" y1="-865.525" x2="-8915.544" y2="-929.706" gradientTransform="scale(-1 1) rotate(-34.172 -2504.53 -13720.806)"><stop offset="0" stop-color="#C3D5FD"/><stop offset="1" stop-color="#1A90FC"/></linearGradient><path d="M624.12 463.5c-2.79-3.19-7.68-4.9-11.53 3.69s-2.35 26.64-7.02 29.97c-4.72 3.37-13.34 7.07-18.62 8.96-1.12 5.12-.49 10.33-.49 10.33s16.36.44 25.19-3.42c8.83-3.86 12.82-21.97 15.06-35.2 1.69-9.97-2.59-14.33-2.59-14.33z" style="fill:url(#SVGID_26_)"/><linearGradient id="SVGID_27_" gradientUnits="userSpaceOnUse" x1="-3813.896" y1="480.898" x2="-3841.811" y2="423.883" gradientTransform="matrix(-1 0 0 1 -3222.68 0)"><stop offset="0" stop-color="#4F5C7C"/><stop offset="1" stop-color="#274168"/></linearGradient><path d="M590.9 439.68c.43-4.69 4.5-7.9 9.3-7.17.4-1.31 4.44-2.98 5.38-4.6 3.5-6.03 9.26-7 14-3.56 9.79 2.79 8.01 12.2 4.75 21.55 2.8 5.61 1.52 12.41-.06 15.18 4.75 5.07 2.09 11.58-1.39 16.52-.4.56-.82 1.06-1.25 1.52-.21 5.85-8.34 7.86-11.32 4.89-3.17-3.16-3.57-4.49-9.32-1.76-5.75 2.73-11.24-1.54-11.3-7.34-.06-5.8-4.28-4.1-6.12-5.63-3.33-2.77-1.15-5.93-1.15-5.93s-4.85-.26-6.01-7.38c-1.33-16.99 11.95-17.08 14.49-16.29z" style="fill:url(#SVGID_27_)"/><path class="st49" d="M515.38 601.24s4.92 12.03 5.91 13.61 5.9 9.27 14.26 5.05c-.04 1.49-.11 2.43-.11 2.43s-9.42 6.26-15.33-4.62c-5.91-10.88-6.75-14.63-6.75-14.63l2.02-1.84z"/></g></g></svg> |
| New file |
| | |
| | | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 800" enable-background="new 0 0 800 800"><style>.st26{fill:#fff}</style><g id="å¾å±_16"><linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="402.832" y1="159.843" x2="402.832" y2="715.335"><stop offset="0" stop-color="#F4F2FB"/><stop offset="1" stop-color="#E1EEF5"/></linearGradient><path d="M486.09 201.2c-38.37 30.29-120.74 33.81-181.17-2.22s-172-31.38-202.22 34.87 37.19 131.33 12.78 178.98S9.72 527.87 65.5 609.23s126.6 60.62 169.22 52.45c84.17-16.13 189.79 115.67 308.62 16.13 68.47-57.35 170.44 42.09 210.17-81.36 32.78-101.86-85.67-139.5-49.97-208.03 37.96-72.88 30.67-159.24-10.46-201.06-38.3-38.96-140.75-38.46-206.99 13.84z" style="fill:url(#SVGID_1_)"/><linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="117.913" y1="540.229" x2="117.913" y2="403.055"><stop offset=".227" stop-color="#B7ACE0"/><stop offset=".789" stop-color="#E8E7FA"/></linearGradient><path d="M118.7 403.3s-.22-.57-.52.04c-2.7 5.49-27.15 64.96-29.09 110.86 0 0-4.08 26.37 30.11 26.02 28.54-.29 27.78-24.6 27.68-32.79-.39-33.22-28.18-104.13-28.18-104.13z" style="fill:url(#SVGID_2_)"/><linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="117.915" y1="418.287" x2="117.915" y2="569.42"><stop offset="0" stop-color="#ECF1FB"/><stop offset=".818" stop-color="#AFB0E7"/></linearGradient><path d="M117.92 569.42c-.55 0-1-.45-1-1V419.29c0-.55.45-1 1-1s1 .45 1 1v149.13c0 .55-.45 1-1 1z" style="fill:url(#SVGID_3_)"/><linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="619.042" y1="448.707" x2="619.042" y2="360.383"><stop offset=".227" stop-color="#CCD4F4"/><stop offset=".789" stop-color="#ECF1FB"/></linearGradient><path d="M619.55 360.54s-.14-.37-.33.03c-1.74 3.53-17.48 41.83-18.73 71.38 0 0-2.63 16.98 19.39 16.76 18.38-.18 17.89-15.84 17.82-21.11-.26-21.4-18.15-67.06-18.15-67.06z" style="fill:url(#SVGID_4_)"/><linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="619.043" y1="370.19" x2="619.043" y2="467.503"><stop offset="0" stop-color="#ECF1FB"/><stop offset="1" stop-color="#A6A8E2"/></linearGradient><path d="M619.04 467.5c-.36 0-.64-.29-.64-.64v-96.02c0-.36.29-.64.64-.64s.64.29.64.64v96.02c.01.35-.28.64-.64.64z" style="fill:url(#SVGID_5_)"/><linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="464.96" y1="86.101" x2="430.206" y2="146.297"><stop offset="0" stop-color="#FFDB80"/><stop offset="1" stop-color="#FFBB24"/></linearGradient><circle cx="447.58" cy="116.2" r="34.75" style="fill:url(#SVGID_6_)"/><linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="422.623" y1="116.567" x2="422.623" y2="174.021"><stop offset="0" stop-color="#F9FAFE"/><stop offset="1" stop-color="#E5EDF7"/></linearGradient><path d="M467.36 135.15h-34.57c-2.23-10.61-11.65-18.58-22.93-18.58s-20.69 7.97-22.93 18.58h-9.05c-10.73 0-19.44 8.7-19.44 19.44 0 10.73 8.7 19.44 19.44 19.44h89.47c10.73 0 19.44-8.7 19.44-19.44.01-10.74-8.7-19.44-19.43-19.44z" style="fill:url(#SVGID_7_)"/><linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="689.644" y1="537.948" x2="689.644" y2="510.119"><stop offset=".227" stop-color="#AFB0E7"/><stop offset="1" stop-color="#ECF1FB"/></linearGradient><circle cx="689.64" cy="524.03" r="13.91" style="fill:url(#SVGID_8_)"/><linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="689.694" y1="513.633" x2="689.694" y2="558.429"><stop offset="0" stop-color="#DDE1F6"/><stop offset=".818" stop-color="#A6A8E2"/></linearGradient><path d="M689.69 558.43c-.24 0-.43-.19-.43-.43v-43.94c0-.24.19-.43.43-.43s.43.19.43.43V558c0 .24-.19.43-.43.43z" style="fill:url(#SVGID_9_)"/><linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="289.384" y1="477.19" x2="289.384" y2="411.226"><stop offset="0" stop-color="#B0B9E1"/><stop offset="1" stop-color="#E7EFF7"/></linearGradient><path d="M202.07 451.28L270.1 411.23 376.7 411.23 315.15 477.19 237.41 476.01z" style="fill:url(#SVGID_10_)"/><linearGradient id="SVGID_11_" gradientUnits="userSpaceOnUse" x1="454.145" y1="502.809" x2="454.145" y2="420.65"><stop offset="0" stop-color="#B0B9E1"/><stop offset="1" stop-color="#E7EFF7"/></linearGradient><path d="M386.71 479.55L431.76 420.65 521.58 420.65 423.81 502.81 394.37 495.15z" style="fill:url(#SVGID_11_)"/><linearGradient id="SVGID_12_" gradientUnits="userSpaceOnUse" x1="589.016" y1="472.132" x2="589.016" y2="397.68"><stop offset="0" stop-color="#B0B9E1"/><stop offset="1" stop-color="#E7EFF7"/></linearGradient><path d="M501.26 458.64l64.79-60.96h110.72l-48.99 66.61a19.243 19.243 0 01-17.85 7.7l-108.67-13.35z" style="fill:url(#SVGID_12_)"/><linearGradient id="SVGID_13_" gradientUnits="userSpaceOnUse" x1="314.267" y1="607.349" x2="314.267" y2="497.361"><stop offset="0" stop-color="#B0B9E1"/><stop offset="1" stop-color="#E7EFF7"/></linearGradient><path d="M212.23 592.77L303.67 497.36 416.3 497.36 297.04 607.35 247.57 604.7z" style="fill:url(#SVGID_13_)"/><g><linearGradient id="SVGID_14_" gradientUnits="userSpaceOnUse" x1="515.604" y1="312.867" x2="613.092" y2="481.721"><stop offset="0" stop-color="#C8CBF2"/><stop offset="1" stop-color="#AFB0E7"/></linearGradient><path d="M564.35 296.53c-41.79 0-75.67 33.6-75.67 75.05v51.43c0 41.45 33.88 75.05 75.67 75.05s75.67-33.6 75.67-75.05v-51.43c-.01-41.45-33.88-75.05-75.67-75.05zm23.82 137.83c0 13.05-10.67 23.63-23.82 23.63-13.16 0-23.82-10.58-23.82-23.63v-74.13c0-13.05 10.67-23.63 23.82-23.63 13.16 0 23.82 10.58 23.82 23.63v74.13z" style="fill:url(#SVGID_14_)"/><linearGradient id="SVGID_15_" gradientUnits="userSpaceOnUse" x1="513.839" y1="321.619" x2="606.64" y2="482.355"><stop offset=".116" stop-color="#DEE4FF"/><stop offset=".847" stop-color="#BACBEE"/></linearGradient><path d="M560.24 305.91c-39.52 0-71.56 32.04-71.56 71.56v49.03c0 39.52 32.04 71.56 71.56 71.56s71.56-32.04 71.56-71.56v-49.03c0-39.52-32.04-71.56-71.56-71.56zm22.53 131.41c0 12.44-10.09 22.53-22.53 22.53-12.44 0-22.53-10.09-22.53-22.53v-70.67c0-12.44 10.09-22.53 22.53-22.53 12.44 0 22.53 10.09 22.53 22.53v70.67z" style="fill:url(#SVGID_15_)"/><linearGradient id="SVGID_16_" gradientUnits="userSpaceOnUse" x1="217.031" y1="307.363" x2="316.583" y2="479.793"><stop offset="0" stop-color="#C8CBF2"/><stop offset="1" stop-color="#AFB0E7"/></linearGradient><path d="M333.72 412.6c-5.55-58.15-65.99-54.01-90.14-49.98l2.26-15.28 71.49 5.88 8.98-5.88V307.2h-109l-9.09 7.47-14.81 92.41h43.6c22.73-19.99 38.77-11.37 45.38 0 6.34 10.92 7.27 43.26-19.71 43.87-23.34.53-23.13-19.92-23.13-19.92l-41.55.58-8.06 7.52s6.18 59.41 69.73 59.41 77.3-50.09 74.05-85.94z" style="fill:url(#SVGID_16_)"/><linearGradient id="SVGID_17_" gradientUnits="userSpaceOnUse" x1="212.735" y1="311.982" x2="309.699" y2="479.928"><stop offset=".116" stop-color="#DEE4FF"/><stop offset=".847" stop-color="#BACBEE"/></linearGradient><path d="M324.26 415.94c-5.19-55.89-61.65-51.92-84.21-48.04l2.11-14.69h75.17v-38.58H208.14l-14.95 96h40.73c21.23-19.21 36.22-10.93 42.39 0 5.92 10.49 6.79 46.38-18.41 46.97-21.8.51-24.41-19.14-24.41-19.14l-43.54.66s5.78 59.41 65.14 59.41 72.2-48.14 69.17-82.59z" style="fill:url(#SVGID_17_)"/><linearGradient id="SVGID_18_" gradientUnits="userSpaceOnUse" x1="368.459" y1="304.731" x2="452.448" y2="450.205"><stop offset="0" stop-color="#C8CBF2"/><stop offset="1" stop-color="#AFB0E7"/></linearGradient><path d="M387.26 461.26s-54.09-36.72-56.49-83.83c-2.29-45.03 25.47-81.27 76.27-81.27 55.29 0 78.12 47.95 78.12 73.99 0 26.04-10.63 63.25-55.73 93.35-23.53 0-42.17-2.24-42.17-2.24z" style="fill:url(#SVGID_18_)"/><linearGradient id="SVGID_19_" gradientUnits="userSpaceOnUse" x1="366.623" y1="312.428" x2="445.175" y2="448.483"><stop offset=".116" stop-color="#DEE4FF"/><stop offset=".847" stop-color="#BACBEE"/></linearGradient><path d="M384.76 461.29s-51.7-34.94-53.99-79.77c-2.19-42.85 24.35-77.34 72.9-77.34 52.85 0 73.47 45.54 73.47 70.32 0 24.78-12.03 58.72-55.14 87.36-22.49.01-37.24-.57-37.24-.57z" style="fill:url(#SVGID_19_)"/><linearGradient id="SVGID_20_" gradientUnits="userSpaceOnUse" x1="400.418" y1="454.748" x2="417.994" y2="485.191"><stop offset="0" stop-color="#C8CBF2"/><stop offset="1" stop-color="#AFB0E7"/></linearGradient><path d="M414.59 486.78h-16.64c-.85 0-1.64-.44-2.08-1.17l-11.39-18.8c-.7-1.15-.33-2.64.82-3.34 1.15-.69 2.64-.33 3.34.82l10.68 17.62h13.84l10.6-19.05c.65-1.17 2.13-1.6 3.31-.94 1.17.65 1.6 2.13.94 3.31l-11.29 20.3c-.44.77-1.25 1.25-2.13 1.25z" style="fill:url(#SVGID_20_)"/><linearGradient id="SVGID_21_" gradientUnits="userSpaceOnUse" x1="397.841" y1="454.748" x2="415.417" y2="485.191"><stop offset=".116" stop-color="#DEE4FF"/><stop offset=".847" stop-color="#BACBEE"/></linearGradient><path d="M412.01 486.78h-16.64c-.85 0-1.64-.44-2.08-1.17l-11.39-18.8c-.7-1.15-.33-2.64.82-3.34 1.15-.69 2.64-.33 3.34.82l10.68 17.62h13.84l10.6-19.05c.65-1.17 2.13-1.6 3.31-.94 1.17.65 1.6 2.13.94 3.31l-11.29 20.3c-.43.77-1.25 1.25-2.13 1.25z" style="fill:url(#SVGID_21_)"/><linearGradient id="SVGID_22_" gradientUnits="userSpaceOnUse" x1="395.626" y1="441.888" x2="415.816" y2="476.856"><stop offset="0" stop-color="#C8CBF2"/><stop offset="1" stop-color="#AFB0E7"/></linearGradient><path d="M429.22 468.35h-47.66c-2.76 0-5-2.24-5-5V452.9h57.65v10.45c0 2.76-2.23 5-4.99 5z" style="fill:url(#SVGID_22_)"/><linearGradient id="SVGID_23_" gradientUnits="userSpaceOnUse" x1="395.022" y1="445.756" x2="412.776" y2="476.507"><stop offset=".116" stop-color="#DEE4FF"/><stop offset=".847" stop-color="#BACBEE"/></linearGradient><path d="M425.57 468.35h-44.01c-2.76 0-5-2.24-5-5v-6.93h54.01v6.93c0 2.76-2.24 5-5 5z" style="fill:url(#SVGID_23_)"/><linearGradient id="SVGID_24_" gradientUnits="userSpaceOnUse" x1="396.171" y1="472.261" x2="416.697" y2="507.813"><stop offset="0" stop-color="#C8CBF2"/><stop offset="1" stop-color="#AFB0E7"/></linearGradient><path d="M418.79 505.46h-25.7c-4.09 0-7.4-3.31-7.4-7.4v-19.75h40.5v19.75c0 4.09-3.31 7.4-7.4 7.4z" style="fill:url(#SVGID_24_)"/><linearGradient id="SVGID_25_" gradientUnits="userSpaceOnUse" x1="395.099" y1="476.159" x2="413.018" y2="507.195"><stop offset=".116" stop-color="#DEE4FF"/><stop offset=".847" stop-color="#BACBEE"/></linearGradient><path d="M414.04 505.46h-20.95c-4.09 0-7.4-3.31-7.4-7.4v-16.47h35.75v16.47c0 4.09-3.31 7.4-7.4 7.4z" style="fill:url(#SVGID_25_)"/><linearGradient id="SVGID_26_" gradientUnits="userSpaceOnUse" x1="370.752" y1="345.042" x2="439.366" y2="413.656"><stop offset="0" stop-color="#C8CBF2"/><stop offset="1" stop-color="#AFB0E7"/></linearGradient><path d="M404.4 311.4s-17.23 79.51 1.33 135.9c47.84-62.43-1.33-135.9-1.33-135.9z" style="fill:url(#SVGID_26_)"/><linearGradient id="SVGID_27_" gradientUnits="userSpaceOnUse" x1="352.936" y1="350.49" x2="415.513" y2="413.067"><stop offset="0" stop-color="#C8CBF2"/><stop offset="1" stop-color="#AFB0E7"/></linearGradient><path d="M386.43 316.99s-15.24 26.94-16.34 62.72c-.75 24.43 11.93 66.85 11.93 66.85s-20.76-36.07-20.76-70.23 25.17-59.34 25.17-59.34z" style="fill:url(#SVGID_27_)"/><linearGradient id="SVGID_28_" gradientUnits="userSpaceOnUse" x1="389.798" y1="347.846" x2="456.792" y2="414.84"><stop offset="0" stop-color="#C8CBF2"/><stop offset="1" stop-color="#AFB0E7"/></linearGradient><path d="M420.65 316.99s34.1 22.12 34.1 60.99-29.68 68.58-29.68 68.58 23.5-42.18 23.5-70.9c0-14.24-13.98-48.76-27.92-58.67z" style="fill:url(#SVGID_28_)"/><path class="st26" d="M386.43 316.99s-62.13 47.12-4.42 129.57c-7.06-15.6-36.21-73.62 4.42-129.57zM420.65 316.99s62.13 47.12 4.42 129.57c7.07-15.6 36.22-73.62-4.42-129.57zM404.4 311.4s-35.48 79.66 1.33 135.9c32.24-57.5-1.33-135.9-1.33-135.9z"/></g><g><linearGradient id="SVGID_29_" gradientUnits="userSpaceOnUse" x1="234.692" y1="561.708" x2="234.692" y2="486.088"><stop offset="0" stop-color="#C3D5FD"/><stop offset="1" stop-color="#1A90FC"/></linearGradient><path d="M226.89 486.45s-18.35-2.54-24.31 5.89c-5.96 8.43-8.14 30.01-8.14 30.01l13.81-.73-1.16 25.14 25.48 14.94 36.3-19.52-5.52-22.78 11.6-3.03s-3.46-33.06-19.59-28.18c-8.29.89-10.9.74-10.9.74s-2.18 6.95-9.67 6.36c-7.49-.58-7.9-8.84-7.9-8.84z" style="fill:url(#SVGID_29_)"/><linearGradient id="SVGID_30_" gradientUnits="userSpaceOnUse" x1="235.741" y1="473.191" x2="235.741" y2="497.147"><stop offset="0" stop-color="#F4AE98"/><stop offset="1" stop-color="#FAD1BB"/></linearGradient><path d="M228.72 476.05l-3.81 17.01c-.18.8.24 1.61 1 1.92 1.97.8 5.91 2.17 9.97 2.17 4.21 0 8.18-2.3 10-3.53.63-.42.89-1.21.65-1.93l-5.83-17.35a1.681 1.681 0 00-1.89-1.12l-8.74 1.55c-.67.11-1.2.62-1.35 1.28z" style="fill:url(#SVGID_30_)"/><linearGradient id="SVGID_31_" gradientUnits="userSpaceOnUse" x1="-1535.437" y1="750.954" x2="-1523.728" y2="668.51" gradientTransform="rotate(-8.082 -1929.216 -11692.611)"><stop offset="0" stop-color="#C3D5FD"/><stop offset="1" stop-color="#1A90FC"/></linearGradient><path d="M205.94 489.39c5.34-1.77 12.58-.59 12.88 11.39.29 11.98-11.45 31.07-7.24 37.71 4.26 6.73 13.37 16.29 19.17 21.73-1.35 6.4-4.99 11.78-4.99 11.78s-21.36-9.86-30.66-19.73c-9.3-9.87-4.61-32.5-.3-48.61 3.24-12.13 11.14-14.27 11.14-14.27z" style="fill:url(#SVGID_31_)"/><linearGradient id="SVGID_32_" gradientUnits="userSpaceOnUse" x1="-5585.118" y1="175.804" x2="-5573.409" y2="93.36" gradientTransform="scale(-1 1) rotate(-8.082 -118.041 -37329.02)"><stop offset="0" stop-color="#C3D5FD"/><stop offset="1" stop-color="#1A90FC"/></linearGradient><path d="M261.91 489.39c-5.34-1.77-12.58-.59-12.88 11.39-.29 11.98 11.45 31.07 7.24 37.71-4.26 6.73-13.37 16.29-19.17 21.73 1.35 6.4 4.99 11.78 4.99 11.78s21.36-9.86 30.66-19.73c9.3-9.87 4.61-32.5.3-48.61-3.24-12.13-11.14-14.27-11.14-14.27z" style="fill:url(#SVGID_32_)"/><linearGradient id="SVGID_33_" gradientUnits="userSpaceOnUse" x1="234.692" y1="534.399" x2="234.692" y2="582.454"><stop offset="0" stop-color="#275C89"/><stop offset="1" stop-color="#013F7C"/></linearGradient><path d="M208.53 582.45h51.85c2.35 0 4.45-1.78 5.26-4.46l10.45-34.39c1.36-4.46-1.35-9.21-5.26-9.21h-72.29c-3.87 0-6.58 4.67-5.29 9.11l9.98 34.39c.8 2.74 2.92 4.56 5.3 4.56z" style="fill:url(#SVGID_33_)"/><path class="st26" d="M206.46 598.27s-.8-1.76-1.42-1.95c-.62-.19-9.49-.54-12.72-1.38s-12.56-2.17-16.56 1.61c-3.48 3.3-4.63 11 .67 15.43 1.99 1.73 3.94 2.23 11.31 1.89s18.04-.27 20.38-3.68c-.07-5.65-1.66-11.92-1.66-11.92z"/><linearGradient id="SVGID_34_" gradientUnits="userSpaceOnUse" x1="-3991.106" y1="603.193" x2="-3974.093" y2="603.193" gradientTransform="matrix(-1 0 0 1 -3772.525 0)"><stop offset="0" stop-color="#F4B9A4"/><stop offset=".652" stop-color="#FAD1BB"/></linearGradient><path d="M214.69 596.31s-8.56 1.92-11.62 1.64c-3.06-.28-.5 12.05-.5 12.05s8.17.57 15.4-1.53c2.45-9.44-3.28-12.16-3.28-12.16z" style="fill:url(#SVGID_34_)"/><linearGradient id="SVGID_35_" gradientUnits="userSpaceOnUse" x1="211.625" y1="584.443" x2="299.388" y2="584.443"><stop offset="0" stop-color="#18264B"/><stop offset=".652" stop-color="#2D3C65"/></linearGradient><path d="M211.63 595.87l4.45 13.84s95.64-12.6 81.97-43.63c-11.43-25.96-86.42 29.79-86.42 29.79z" style="fill:url(#SVGID_35_)"/><linearGradient id="SVGID_36_" gradientUnits="userSpaceOnUse" x1="191.837" y1="594.929" x2="191.837" y2="612.987"><stop offset="0" stop-color="#FFDB80"/><stop offset="1" stop-color="#FFBB24"/></linearGradient><path d="M205.35 596.94s3.5 1.37 3.95 6.26c.44 4.89-1 8.17-8.45 9.07-7.45.91-9.34.57-14.01.68-4.67.11-11.45.57-12.46-8.32-1-8.88 8.08-11.15 17.5-8.88 2.96.56 13.47 1.19 13.47 1.19z" style="fill:url(#SVGID_36_)"/><g><path class="st26" d="M266.14 598.27s.8-1.76 1.42-1.95c.62-.19 9.49-.54 12.72-1.38 3.23-.84 11.93-2.24 16.32 1.51 4.07 3.48 4.34 11.16-.3 15.4-1.99 1.73-4.08 2.35-11.44 2.01s-18.04-.27-20.38-3.68c.08-5.64 1.66-11.91 1.66-11.91z"/><linearGradient id="SVGID_37_" gradientUnits="userSpaceOnUse" x1="254.028" y1="603.193" x2="271.04" y2="603.193"><stop offset="0" stop-color="#F4B9A4"/><stop offset=".652" stop-color="#FAD1BB"/></linearGradient><path d="M257.92 596.31s8.56 1.92 11.62 1.64c3.06-.28.5 12.05.5 12.05s-8.17.57-15.4-1.53c-2.45-9.44 3.28-12.16 3.28-12.16z" style="fill:url(#SVGID_37_)"/><linearGradient id="SVGID_38_" gradientUnits="userSpaceOnUse" x1="173.22" y1="584.443" x2="260.983" y2="584.443"><stop offset="0" stop-color="#445677"/><stop offset="1" stop-color="#293861"/></linearGradient><path d="M260.98 595.87l-4.45 13.84s-95.64-12.6-81.97-43.63c11.43-25.96 86.42 29.79 86.42 29.79z" style="fill:url(#SVGID_38_)"/><linearGradient id="SVGID_39_" gradientUnits="userSpaceOnUse" x1="280.771" y1="594.929" x2="280.771" y2="612.987"><stop offset="0" stop-color="#FFDB80"/><stop offset="1" stop-color="#FFBB24"/></linearGradient><path d="M267.26 596.94s-3.5 1.37-3.95 6.26 1 8.17 8.45 9.07 9.34.57 14.01.68 11.45.57 12.46-8.32c1-8.88-8.08-11.15-17.5-8.88-2.96.56-13.47 1.19-13.47 1.19z" style="fill:url(#SVGID_39_)"/></g><linearGradient id="SVGID_40_" gradientUnits="userSpaceOnUse" x1="251.42" y1="467.696" x2="220.113" y2="467.696"><stop offset="0" stop-color="#F4B9A4"/><stop offset=".652" stop-color="#FAD1BB"/></linearGradient><path d="M250.74 469.25c.57-.81.93-2.88.46-3.49-.84-.68-1.63-.29-2.24.3.14-4.96-.31-9.07-.42-10.12-.31-3.04-3.4-8.6-13.5-8.6s-12.05 7.29-12.05 7.29-.66 5.15-.46 11.41c-.6-.58-1.39-.95-2.22-.28-.46.61-.1 2.68.46 3.49.57.81.93 2.73 1.03 3.79.1 1.01-.63 3.7 2.03 3.36 1.59 6.35 8.01 11.64 11.99 11.64 4.36 0 10.16-5.33 11.8-11.65 2.71.37 1.98-2.34 2.07-3.35.13-1.06.49-2.98 1.05-3.79z" style="fill:url(#SVGID_40_)"/><linearGradient id="SVGID_41_" gradientUnits="userSpaceOnUse" x1="215.804" y1="455.594" x2="252.152" y2="455.594"><stop offset="0" stop-color="#4F5C7C"/><stop offset="1" stop-color="#274168"/></linearGradient><path d="M242.34 445.19s-1.97-6.21-9.53-4.72c-7.55 1.48-8.06 5.06-11.03 5.19-5.06.24-9.11 6.54-2.61 13.22 2.89 2.97.45 4.25 1.82 6.88s1.36 5.19 1.36 5.19 2.41-7.71.82-11c-.82-1.7 2.82-2.16 7.35-1.75s11.68-1.1 12.24-4.18c1.34 6.32 2.68 6.98 4.38 7.94 1.7.96 1.8 8.6 1.8 8.6s.3-5.62 1.49-6.88c.98-2.07 2.89-10.22.73-12.19s-.34-8.31-8.82-6.3z" style="fill:url(#SVGID_41_)"/></g><linearGradient id="SVGID_42_" gradientUnits="userSpaceOnUse" x1="509.948" y1="612.061" x2="509.948" y2="547.57"><stop offset="0" stop-color="#B0B9E1"/><stop offset="1" stop-color="#E7EFF7"/></linearGradient><path d="M452.67 596.16L498.32 547.57 567.22 547.57 506.27 612.06z" style="fill:url(#SVGID_42_)"/><linearGradient id="SVGID_43_" gradientUnits="userSpaceOnUse" x1="461.835" y1="563.724" x2="495.632" y2="622.263"><stop offset="0" stop-color="#C8CBF2"/><stop offset="1" stop-color="#AFB0E7"/></linearGradient><circle cx="478.73" cy="592.99" r="33.79" style="fill:url(#SVGID_43_)"/><linearGradient id="SVGID_44_" gradientUnits="userSpaceOnUse" x1="455.798" y1="564.313" x2="489.595" y2="622.851"><stop offset=".116" stop-color="#DEE4FF"/><stop offset=".847" stop-color="#BACBEE"/></linearGradient><circle cx="472.7" cy="593.58" r="33.79" style="fill:url(#SVGID_44_)"/><linearGradient id="SVGID_45_" gradientUnits="userSpaceOnUse" x1="479.001" y1="231.35" x2="503.267" y2="273.38"><stop offset="0" stop-color="#C8CBF2"/><stop offset="1" stop-color="#AFB0E7"/></linearGradient><circle cx="491.13" cy="252.36" r="24.26" style="fill:url(#SVGID_45_)"/><linearGradient id="SVGID_46_" gradientUnits="userSpaceOnUse" x1="474.666" y1="231.772" x2="498.933" y2="273.803"><stop offset=".116" stop-color="#DEE4FF"/><stop offset=".847" stop-color="#BACBEE"/></linearGradient><circle cx="486.8" cy="252.79" r="24.26" style="fill:url(#SVGID_46_)"/></g></svg> |
| New file |
| | |
| | | <svg t="1731390087280" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4297" width="200" height="200"><path d="M639.9 541.7c76.4-44.2 127.9-126.8 127.9-221.5C767.7 179 653.2 64.5 512 64.5S256.3 179 256.3 320.2c0 89.6 46.1 168.4 115.8 214.1C193.5 593 64.5 761.2 64.5 959.5h63.9c0-211.5 172.1-383.6 383.6-383.6 44.9 0 87.8 8.1 127.9 22.4v-56.6zM320.2 320.2c0-105.8 86-191.8 191.8-191.8s191.8 86 191.8 191.8S617.7 512 512 512s-191.8-86-191.8-191.8zM831.6 767.7V639.9h-63.9v127.8H639.9v63.9h127.8v127.9h63.9V831.6h127.9v-63.9z" fill="#5f6266" p-id="4298"></path></svg> |
| New file |
| | |
| | | <?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="1724316565416" class="icon" viewBox="0 0 1300 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1339" xmlns:xlink="http://www.w3.org/1999/xlink" width="253.90625" height="200"><path d="M784.058182 99.258182l10.938182 18.385454-21.294546-2.56-14.196363 16.058182-4.072728-21.061818-19.781818-8.494545 18.734546-10.472728 2.094545-21.294545 15.709091 14.545454 20.945454-4.654545-9.076363 19.549091zM1067.287273 642.443636l-18.501818 10.821819 2.56-21.294546-16.058182-14.196364 21.061818-4.072727 8.494545-19.665454 10.472728 18.734545 21.294545 1.978182-14.661818 15.709091 4.770909 20.945454-19.432727-8.96z" fill="#13C463" p-id="1340"></path><path d="M1067.287273 642.443636l-18.501818 10.821819 2.56-21.294546-16.058182-14.196364 21.061818-4.072727 8.494545-19.665454 10.472728 18.734545 21.294545 1.978182-14.661818 15.709091 4.770909 20.945454-19.432727-8.96zM571.927273 100.072727l-17.454546-12.567272 20.596364-6.167273 6.516364-20.48 12.218181 17.570909 21.410909-0.116364-12.916363 17.105455 6.749091 20.363636-20.247273-6.981818-17.338182 12.683636 0.465455-21.410909zM991.418182 784.407273l-21.178182 3.490909 10.123636-18.967273-9.774545-18.967273 21.061818 3.723637 15.127273-15.243637 2.909091 21.294546 19.2 9.658182-19.316364 9.309091-3.258182 21.178181-14.894545-15.476363zM427.985455 156.741818L407.272727 151.505455l16.872728-13.265455-1.396364-21.410909 17.803636 11.985454 20.014546-7.912727-5.934546 20.596364 13.730909 16.523636-21.410909 0.814546-11.52 18.152727-7.447272-20.247273zM854.225455 896.465455l-20.712728-5.352728 16.872728-13.265454-1.396364-21.294546 17.803636 11.869091 20.014546-7.912727-5.934546 20.712727 13.730909 16.523637-21.527272 0.814545-11.403637 18.036364-7.447272-20.130909zM562.501818 923.694545l10.821818 18.385455-21.294545-2.56-14.196364 16.058182-4.072727-21.061818-19.665455-8.494546 18.734546-10.356363 1.978182-21.41091 15.709091 14.661819 20.945454-4.770909-8.96 19.54909zM242.734545 420.770909l-18.385454 10.938182 2.56-21.294546-16.058182-14.196363 21.061818-4.189091 8.494546-19.665455 10.356363 18.734546 21.410909 2.094545-14.545454 15.709091 4.654545 20.945455-19.549091-9.076364z" fill="#13C463" p-id="1341"></path><path d="M242.734545 420.770909l-18.385454 10.938182 2.56-21.294546-16.058182-14.196363 21.061818-4.189091 8.494546-19.665455 10.356363 18.734546 21.410909 2.094545-14.545454 15.709091 4.654545 20.945455-19.549091-9.076364zM700.858182 943.941818l-17.454546-12.450909 20.48-6.283636 6.516364-20.48 12.334545 17.687272 21.41091-0.116363-12.916364 17.105454 6.632727 20.363637-20.247273-7.098182-17.221818 12.683636 0.465455-21.410909zM303.592727 278.807273l-21.178182 3.490909 10.123637-18.967273-9.890909-18.967273 21.178182 3.723637 15.010909-15.243637 2.909091 21.294546 19.2 9.541818-19.316364 9.425455-3.258182 21.178181-14.778182-15.476363z" fill="#13C463" p-id="1342"></path><path d="M407.272727 90.647273a486.632727 486.632727 0 0 1 504.552728 11.636363l25.018181-14.429091A512 512 0 0 0 139.636364 546.909091l25.018181-14.429091A486.981818 486.981818 0 0 1 407.272727 90.647273zM893.323636 933.352727a486.749091 486.749091 0 0 1-504.669091-11.636363l-24.901818 14.429091A512 512 0 0 0 1161.192727 477.090909l-24.901818 13.963636a486.981818 486.981818 0 0 1-242.967273 442.298182z" fill="#13C463" p-id="1343"></path><path d="M814.545455 795.927273a327.447273 327.447273 0 0 1-258.21091 29.556363l-29.78909 17.105455A353.163636 353.163636 0 0 0 998.865455 570.181818l-29.789091 17.105455A326.865455 326.865455 0 0 1 814.545455 795.927273zM486.865455 228.072727A327.447273 327.447273 0 0 1 744.727273 198.516364l29.789091-17.105455A353.163636 353.163636 0 0 0 302.545455 453.818182l29.78909-17.105455A326.865455 326.865455 0 0 1 486.865455 228.072727zM1288.378182 374.690909a53.294545 53.294545 0 0 1-14.429091 11.636364L229.469091 989.090909a53.876364 53.876364 0 0 1-73.425455-19.665454L7.214545 710.632727a53.527273 53.527273 0 0 1 19.781819-73.309091L1071.476364 34.909091a53.876364 53.876364 0 0 1 73.425454 19.665454l148.829091 258.327273a53.061818 53.061818 0 0 1 5.352727 40.727273 55.272727 55.272727 0 0 1-10.705454 21.061818zM32.232727 665.716364A28.043636 28.043636 0 0 0 29.323636 698.181818l148.829091 257.978182a28.392727 28.392727 0 0 0 38.516364 10.356364l1044.48-601.949091a28.16 28.16 0 0 0 10.356364-38.516364L1122.676364 67.84a28.276364 28.276364 0 0 0-38.4-10.356364L39.68 659.432727a27.810909 27.810909 0 0 0-7.447273 6.283637z" fill="#13C463" p-id="1344"></path><path d="M356.770909 569.250909l22.341818 38.749091-15.476363 8.727273L349.090909 592.64l-153.483636 88.785455 14.778182 25.483636-15.476364 8.96-23.272727-39.912727L256 627.2c-6.283636-4.887273-11.636364-8.843636-16.174545-11.636364L256 602.647273c3.956364 3.141818 9.774545 8.261818 17.338182 15.127272z m-17.338182 199.447273l-49.221818 28.392727 7.563636 13.149091-15.476363 8.96-62.138182-107.52 64.814545-37.469091-12.8-22.574545 15.941819-9.192728 12.8 22.109091 65.396363-37.701818 61.672728 106.821818-15.476364 8.96-7.214546-12.450909-49.92 28.858182 26.065455 45.032727-16.058182 9.192728z m-46.545454-79.825455L244.363636 717.265455l14.778182 25.6 49.221818-28.509091zM267.636364 756.945455l14.778181 25.6 49.221819-28.509091-14.778182-25.483637z m106.938181-80.523637l-14.778181-25.483636-49.92 28.741818 14.778181 25.483636zM346.996364 744.727273l49.803636-28.741818-14.661818-25.483637-49.92 28.741818zM505.832727 609.978182c-4.654545 6.283636-10.123636 13.265455-16.523636 21.061818l35.84 62.021818a18.967273 18.967273 0 0 1-6.749091 29.672727l-19.316364 11.636364-12.450909-13.847273a170.123636 170.123636 0 0 0 17.803637-8.727272 8.494545 8.494545 0 0 0 2.909091-13.614546L477.090909 645.352727l-9.890909 10.472728-10.007273 10.24-12.683636-13.149091c9.309091-8.261818 17.221818-15.941818 23.272727-23.272728l-31.301818-54.341818-25.018182 14.545455-8.843636-15.36 25.018182-14.429091-23.272728-41.076364 15.476364-8.96 23.272727 41.076364L465.454545 538.763636l8.843637 15.36-22.109091 12.567273 28.509091 49.221818c5.469091-6.516364 10.938182-13.498182 16.407273-21.061818z m9.076364-45.730909L572.043636 663.272727a207.825455 207.825455 0 0 0 23.272728-27.461818l11.636363 13.149091a365.381818 365.381818 0 0 1-41.774545 45.498182l-12.567273-12.567273a11.636364 11.636364 0 0 0 1.745455-13.963636L453.818182 493.963636l15.709091-9.076363 36.887272 63.883636 31.301819-18.152727 8.96 15.592727z m129.745454 83.316363a20.596364 20.596364 0 0 1-31.418181-9.774545l-103.098182-178.618182 15.709091-9.192727 38.632727 67.025454a200.261818 200.261818 0 0 0 28.043636-41.076363l16.872728 7.68a303.243636 303.243636 0 0 1-35.723637 49.338182l53.410909 93.090909a9.192727 9.192727 0 0 0 13.963637 4.072727l10.821818-6.283636a14.312727 14.312727 0 0 0 8.029091-11.636364 103.447273 103.447273 0 0 0-15.243637-39.098182l17.338182-3.84c12.567273 25.134545 18.036364 41.658182 16.290909 49.803636A28.392727 28.392727 0 0 1 663.272727 636.741818zM860.276364 521.774545c-7.563636 4.421818-20.829091 11.636364-39.912728 22.574546a179.432727 179.432727 0 0 1-37.352727 16.174545 58.181818 58.181818 0 0 1-33.047273-1.978181 14.312727 14.312727 0 0 0-11.636363-0.581819c-5.352727 3.025455-8.261818 18.385455-8.727273 45.847273l-18.269091-3.956364c1.047273-25.483636 5.003636-42.821818 11.636364-52.014545l-38.865455-67.374545-31.534545 18.152727-8.378182-14.661818 46.545454-26.647273 47.825455 82.850909a55.505455 55.505455 0 0 1 8.494545 1.861818 59.694545 59.694545 0 0 0 25.367273 4.072727 101.701818 101.701818 0 0 0 33.512727-11.636363L849.454545 508.509091l31.418182-18.734546c11.636364-7.214545 19.898182-12.334545 24.087273-15.127272l5.469091 18.152727zM676.072727 413.207273L671.185455 430.545455a279.272727 279.272727 0 0 0-58.181819-13.265455l4.887273-16.64a307.781818 307.781818 0 0 1 58.181818 12.567273zM754.967273 372.363636a261.818182 261.818182 0 0 0 20.247272-38.516363l-98.443636 56.785454-7.796364-13.498182 119.97091-69.46909 6.632727 11.636363a281.134545 281.134545 0 0 1-25.949091 54.807273l5.236364 0.930909L818.734545 349.090909l57.25091 99.025455a18.385455 18.385455 0 0 1-8.843637 27.927272l-18.385454 10.589091-11.636364-11.636363 17.92-9.425455a7.796364 7.796364 0 0 0 3.607273-11.636364L849.454545 437.410909l-37.236363 21.527273 21.992727 38.050909-14.894545 8.610909-21.992728-38.167273L760.203636 488.727273l22.458182 38.749091-15.127273 8.727272L699.461818 418.909091l55.389091-32a306.269091 306.269091 0 0 0-39.330909-1.047273l4.305455-15.127273c13.265455-0.232727 24.901818 0.465455 35.141818 1.629091z m15.825454 49.454546l-11.636363-20.014546-37.003637 21.410909 11.636364 20.014546z m-29.44 34.909091l11.636364 19.549091 37.003636-21.410909-11.636363-19.549091z m81.454546-64.814546l-11.636364-19.898182-37.236364 21.527273 11.636364 19.898182z m-29.556364 34.909091l11.636364 19.432727 37.236363-21.527272-11.636363-19.432728zM1086.370909 391.214545l-19.898182 11.636364-10.589091 6.167273-10.938181 6.050909a186.181818 186.181818 0 0 1-38.749091 16.989091 60.16 60.16 0 0 1-33.978182-1.978182 14.312727 14.312727 0 0 0-11.636364 0c-5.585455 3.258182-8.610909 18.734545-8.96 46.545455l-18.036363-3.723637c0.814545-26.181818 4.770909-43.752727 11.636363-52.945454l-38.865454-67.141819-31.883637 18.385455-8.727272-15.010909 47.243636-27.345455 47.941818 83.2h4.189091a32.465455 32.465455 0 0 1 4.538182 1.163637 71.68 71.68 0 0 0 26.298182 3.490909 112.872727 112.872727 0 0 0 34.210909-13.265455c16.523636-9.192727 31.767273-17.803636 46.545454-25.949091l14.545455-8.727272 14.196363-8.727273c11.636364-6.865455 18.618182-11.636364 22.574546-14.196364l5.352727 18.385455zM896 286.021818l-4.770909 18.385455a296.378182 296.378182 0 0 0-58.181818-14.661818l4.770909-16.872728a311.156364 311.156364 0 0 1 58.181818 13.149091zM1031.098182 384l-12.334546-13.149091c11.636364-5.934545 21.76-11.636364 30.138182-15.941818a9.658182 9.658182 0 0 0 4.189091-14.661818l-54.341818-94.138182-83.781818 48.290909-9.076364-15.709091 83.781818-48.407273-20.712727-35.84 16.174545-9.425454 20.712728 36.072727 32.814545-18.967273 8.610909 15.243637-32.349091 18.850909 56.552728 97.978182a20.247273 20.247273 0 0 1-8.843637 31.185454z m-23.272727-59.345455L1000.727273 340.48a405.876364 405.876364 0 0 0-58.181818-25.6l7.796363-15.127273a393.890909 393.890909 0 0 1 57.716364 24.436364z" fill="#13C463" p-id="1345"></path></svg> |
| New file |
| | |
| | | <svg t="1729561718271" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8640" width="200" height="200"><path d="M908.5952 920.4224H164.7616a31.0784 31.0784 0 0 1-30.976-30.976c0-17.0496 13.9264-30.976 30.976-30.976h743.8336c17.0496 0 31.0272 13.9264 31.0272 30.976a31.0784 31.0784 0 0 1-31.0272 30.976z m0-123.9552H164.7616a31.0784 31.0784 0 0 1-30.976-30.976v-154.9824c0-51.1488 41.8304-92.9792 92.9792-92.9792h198.3488c-6.1952-37.1712-24.7808-72.8064-51.1488-103.8336a216.576 216.576 0 0 1-54.2208-144.128c0-58.88 23.2448-114.688 66.6112-156.4672C429.7728 71.168 485.5296 51.0976 545.9968 52.6848c111.5648 4.608 206.08 100.6592 207.616 212.2752 1.536 55.808-20.1216 110.0288-57.344 151.8592-26.3168 27.904-41.8304 61.952-48.0256 100.7104h198.3488c51.2 0 93.0304 41.8304 93.0304 92.9792v154.9824a31.0784 31.0784 0 0 1-31.0272 30.976z m-712.8064-61.952H877.568v-124.0064a31.0784 31.0784 0 0 0-31.0272-30.976h-232.448a31.0784 31.0784 0 0 1-30.976-31.0272c0-65.024 23.2448-127.0784 66.6624-173.568 27.8528-29.3888 41.8304-68.1472 41.8304-108.4416-1.536-80.5888-68.1984-148.7872-148.7872-151.8592a150.528 150.528 0 0 0-113.152 43.3664 153.6 153.6 0 0 0-48.0256 111.616c0 37.1712 13.9776 74.3424 38.7584 102.2464 44.9536 51.1488 69.7344 113.152 69.7344 176.64a31.0784 31.0784 0 0 1-30.976 31.0272h-232.448a31.0784 31.0784 0 0 0-30.976 30.976v123.9552z" fill="#fff" p-id="8641"></path></svg> |
| New file |
| | |
| | | <svg t="1729178183592" class="icon" viewBox="0 0 1300 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4332" width="200" height="200"><path d="M784.074702 99.196443l10.927871 18.473304-21.302843-2.56935-14.180213 16.066571-4.130475-21.042655-19.676671-8.521137 18.733492-10.440019 2.016452-21.335366 15.708814 14.603017 20.945085-4.683373-9.041512 19.449008zM1067.22363 642.402668l-18.440781 10.92787 2.56935-21.302842-16.099094-14.180213 21.042655-4.130475 8.521137-19.676671 10.440019 18.733492 21.367889 2.016452-14.603017 15.708814 4.683373 20.945085-19.481531-9.041512z" fill="#8a8a8a" p-id="4333"></path><path d="M1067.22363 642.402668l-18.440781 10.92787 2.56935-21.302842-16.099094-14.180213 21.042655-4.130475 8.521137-19.676671 10.440019 18.733492 21.367889 2.016452-14.603017 15.708814 4.683373 20.945085-19.481531-9.041512zM571.924408 100.009528l-17.400031-12.488994 20.52228-6.211974 6.504685-20.457234 12.261331 17.595172 21.432936-0.09757-12.944323 17.074798 6.732349 20.359663-20.262093-7.02506-17.269938 12.716659 0.422804-21.46546zM991.444053 784.43246l-21.172749 3.480006 10.114785-18.928632-9.822074-19.026203 21.107702 3.772717 15.090868-15.253486 2.927109 21.237796 19.156296 9.626933-19.318914 9.366746-3.219819 21.205273-14.863204-15.48115zM428.008258 156.795426l-20.749945-5.333841 16.879657-13.237034-1.365983-21.400413 17.822836 11.936097 19.936859-7.870669-5.88674 20.619851 13.692361 16.521899-21.432936 0.813086-11.513292 18.083024-7.382817-20.132zM854.260251 896.475655l-20.749945-5.333841 16.879657-13.237034-1.365983-21.400413 17.822836 11.96862 19.936859-7.903192-5.854217 20.619851 13.659838 16.554423-21.432936 0.780562-11.513292 18.115547-7.382817-20.164523zM562.460092 923.665237l10.895347 18.440782-21.302843-2.569351-14.180212 16.099095-4.130475-21.042655-19.676672-8.521137 18.733493-10.440019 2.016452-21.36789 15.708814 14.603018 20.945085-4.683373-9.008989 19.48153zM242.787359 420.788058l-18.473305 10.895347 2.569351-21.302843-16.066572-14.180213 21.042656-4.130474 8.521137-19.676672 10.440019 18.733492 21.335366 2.016453-14.603018 15.708813 4.683374 20.945085-19.449008-9.008988z" fill="#8a8a8a" p-id="4334"></path><path d="M242.787359 420.788058l-18.473305 10.895347 2.569351-21.302843-16.066572-14.180213 21.042656-4.130474 8.521137-19.676672 10.440019 18.733492 21.335366 2.016453-14.603018 15.708813 4.683374 20.945085-19.449008-9.008988zM700.814737 943.959854l-17.400032-12.521518 20.522281-6.211974 6.504685-20.42471 12.26133 17.595172 21.432937-0.130094-12.944323 17.107321 6.732349 20.359663-20.262093-7.025059-17.269938 12.684135 0.422804-21.432936zM303.541115 278.823313l-21.140226 3.480006 10.114785-18.928633-9.854597-19.058726 21.107702 3.772717 15.090868-15.220962 2.927109 21.237796 19.156296 9.626933-19.28639 9.366746-3.252342 21.172749-14.863205-15.448626z" fill="#8a8a8a" p-id="4335"></path><path d="M407.648595 90.642782a486.713038 486.713038 0 0 1 504.568397 11.578339l25.010513-14.407877A512.081309 512.081309 0 0 0 139.850723 547.401747l24.977989-14.407877a486.778085 486.778085 0 0 1 242.819883-442.351088zM893.28836 933.422265a486.810608 486.810608 0 0 1-504.568398-11.610863l-25.010513 14.407877a512.081309 512.081309 0 0 0 797.5394-459.621026l-24.97799 14.505447a486.843132 486.843132 0 0 1-242.982499 442.318565z" fill="#8a8a8a" p-id="4336"></path><path d="M814.061299 795.880705a326.665269 326.665269 0 0 1-258.170939 29.563792l-29.791456 17.172368a353.236906 353.236906 0 0 0 472.793013-272.448721l-29.693886 17.172367a326.762839 326.762839 0 0 1-155.136732 208.540194zM486.875655 228.119295a326.795363 326.795363 0 0 1 258.170939-29.563792l29.791456-17.172368a353.236906 353.236906 0 0 0-472.793013 272.448721l29.82398-17.172367a326.762839 326.762839 0 0 1 155.006638-208.540194zM1288.350389 374.73489a53.923837 53.923837 0 0 1-14.34283 12.001143L229.420232 988.712085A53.793743 53.793743 0 0 1 156.112434 968.937843l-148.924757-258.235985a53.76122 53.76122 0 0 1 19.741718-73.437891L1071.516722 35.352962A53.826266 53.826266 0 0 1 1144.82452 55.062157l148.827187 258.268508a53.793743 53.793743 0 0 1-5.398888 61.404225zM32.19819 665.754486a28.360426 28.360426 0 0 0-5.626553 10.73273 28.067715 28.067715 0 0 0 2.699444 21.432936L178.195839 956.188661a28.165285 28.165285 0 0 0 38.442687 10.342449l1044.587328-601.976052a28.132762 28.132762 0 0 0 10.440019-38.442687l-148.924758-258.268509a28.197808 28.197808 0 0 0-38.442687-10.342449L39.711101 659.444942a28.230332 28.230332 0 0 0-7.512911 6.309544z" fill="#8a8a8a" p-id="4337"></path><path d="M498.941845 597.390249l-138.322121 79.877529 38.637827 66.933207q8.000762 13.854979 21.595554 5.98431l114.254788-65.957504a21.172749 21.172749 0 0 0 9.952167-11.123011q2.634397-9.757027-16.91218-47.321582l18.440781-4.130474q20.489757 43.22363 18.148071 56.167953a36.166047 36.166047 0 0 1-16.261712 19.514054l-123.068636 71.031158q-25.17313 14.603017-40.394092-11.77348L317.103383 639.020232l16.066571-9.269176 18.570875 32.133143 122.027886-70.47826-33.596697-58.249452-150.160648 86.707448-9.041511-15.611243 166.454883-96.106718zM691.903319 563.663459c-3.935334 3.837764-9.757027 9.399269-17.497602 16.619469l23.319295 40.394093-15.611244 9.008988-21.237795-36.816516q-31.027346 27.709957-64.754137 54.314118l-12.814229-13.39965 9.171605-7.382818 9.236653-7.122629-79.714912-138.126982-17.627696 10.179832-8.781324-15.155915L601.683341 414.836271l6.960013 12.06619 86.34969-49.858408 8.488614 14.733111q28.197808 65.82741 30.506972 123.39387a274.660314 274.660314 0 0 0 69.339939 27.612387l-3.642623 18.440781a322.177037 322.177037 0 0 1-65.534699-26.40902 220.899095 220.899095 0 0 1-15.38358 72.819946l-18.14807-6.179451a215.272542 215.272542 0 0 0 15.448626-77.340702 312.940384 312.940384 0 0 1-89.374369-86.739971l-8.748801 5.138701-7.2202-12.488995-17.172368 9.919644 71.876767 124.499667q10.570113-10.017215 17.465079-16.61947z m-134.32174-56.948515l40.166428-23.189202-19.969382-34.702493-40.166429 23.189201z m28.067714 48.785135l40.166429-23.189201-19.514055-33.921931-40.166428 23.189201z m48.557472-8.813847l-40.166428 23.189201 21.888264 37.922312q13.334604-10.92787 35.775766-30.767159z m7.2202-117.832365A289.848753 289.848753 0 0 0 715.515325 503.365031a330.437986 330.437986 0 0 0-26.441544-101.92841zM812.760362 400.460918l-4.813467 17.95293a280.482007 280.482007 0 0 0-56.167953-12.781706l5.073654-17.530125a291.637542 291.637542 0 0 1 55.907766 12.358901z m24.360045 28.78323a925.063745 925.063745 0 0 1 10.017214 101.895887l-18.440781 2.016452a812.792886 812.792886 0 0 0-8.878895-101.375512z m-45.923075-86.25212l-4.813467 18.017977a290.922026 290.922026 0 0 0-58.542163-11.513292l5.073655-17.497602a308.972527 308.972527 0 0 1 58.281975 10.992917z m48.459902-17.562649l-9.334223 13.724885A298.792695 298.792695 0 0 0 783.814515 315.477211l9.757027-14.180212a437.635191 437.635191 0 0 1 46.085692 24.13238zM834.355916 269.944418l16.521899-9.529363 35.157821 60.916373 48.199714-27.840051L1003.282579 413.047483q12.716659 22.115928-8.228426 34.214642l-26.018739 15.058345-13.237034-13.009369 25.238177-13.952549c6.992536-4.065428 8.45609-9.561887 4.423186-16.554423l-12.716659-22.018358-80.527997 46.475973L919.762427 491.1037l-16.066572 9.269176-81.926505-141.899698 47.744387-27.579864z m107.750103 73.763125l-14.830682-25.660981-80.56052 46.508496 14.830681 25.726028z m-72.592282 60.330952l14.700587 25.433317 80.560521-46.508496-14.700587-25.433318z m45.532793-166.064603a222.720407 222.720407 0 0 1-2.406733 56.13543l-16.456853 0.878132a242.722312 242.722312 0 0 0 2.081499-55.647578z" fill="#8a8a8a" p-id="4338"></path></svg> |
| New file |
| | |
| | | <svg t="1740116949537" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1153" width="200" height="200"><path d="M440.32 296.96h283.30496v145.92h66.56V230.4H440.32V17.92H17.92v424.96H440.32V296.96zM373.76 376.32H84.48v-291.84H373.76v291.84zM586.24 588.8v143.36512H298.66496V586.24h-66.56v212.48512H586.24V1013.76H1008.64v-424.96h-422.4z m355.84 358.4h-289.28v-291.84H942.08v291.84z" p-id="1154" fill="#ffffff"></path></svg> |
| New file |
| | |
| | | <svg t="1729585232424" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1602" width="200" height="200"><path d="M925.5 898.9H804.9c-19 0-34.5-15.4-34.5-34.4V761.3c0-19 15.4-34.4 34.5-34.4h34.5V572.2c0-19-15.4-34.4-34.5-34.4H529.2V727h34.5c19 0 34.5 15.4 34.5 34.4v103.2c0 19-15.4 34.4-34.5 34.4H443.1c-19 0-34.5-15.4-34.5-34.4V761.3c0-19 15.4-34.4 34.5-34.4h34.5V537.8H219.1c-19 0-34.5 15.4-34.5 34.4V727h34.5c19 0 34.5 15.4 34.5 34.4v103.2c0 19-15.4 34.4-34.5 34.4H98.5c-19 0-34.5-15.4-34.5-34.4V761.3c0-19 15.4-34.4 34.5-34.4H133V555c0-38 30.9-68.8 68.9-68.8h275.7V297.1h-34.5c-19 0-34.5-15.4-34.5-34.4V159.5c0-19 15.4-34.4 34.5-34.4h120.6c19 0 34.5 15.4 34.5 34.4v103.2c0 19-15.4 34.4-34.5 34.4h-34.5v189.2h292.9c38.1 0 68.9 30.8 68.9 68.8v172h34.5c19 0 34.5 15.4 34.5 34.4v103.2c0 18.8-15.4 34.2-34.5 34.2z m0 0" p-id="1603" fill="#fff"></path></svg> |
| New file |
| | |
| | | <svg t="1729649333541" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1644" width="200" height="200"><path d="M647.888 893.84L491.904 571.52l393.888-393.888-237.904 716.208zM872.32 123.232L459.872 535.68 134.96 380.88 872.32 123.232z m90.72-68.32a23.968 23.968 0 0 0-24.784-5.568L64.08 354.816a23.984 23.984 0 0 0-2.4 44.32l381.392 181.728 187.36 387.088a24.048 24.048 0 0 0 23.152 13.504 24.032 24.032 0 0 0 21.232-16.4L968.96 79.552c2.88-8.672 0.592-18.24-5.92-24.64z" fill="#fff" p-id="1645"></path></svg> |
| New file |
| | |
| | | <?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="1735905505218" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4277" width="200" height="200" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M561.778 454.929h198.117c0.549 0 0.994 0.444 0.994 1.001v97.553a0.998 0.998 0 0 1-0.994 1.001H463.224a1.005 1.005 0 0 1-1.002-1V207.04c0-0.552 0.444-1 1.002-1h97.552c0.553 0 1.002 0.455 1.002 1v247.89zM512 952.706c-247.424 0-448-200.576-448-448 0-247.423 200.576-448 448-448s448 200.577 448 448c0 247.424-200.576 448-448 448z m0-99.555c192.44 0 348.444-156.004 348.444-348.445 0-192.44-156.003-348.444-348.444-348.444-192.44 0-348.444 156.004-348.444 348.444 0 192.441 156.003 348.445 348.444 348.445z" fill="#3296FA" p-id="4278"></path></svg> |
| New file |
| | |
| | | <svg t="1730189225011" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2651" id="mx_n_1730189225011" width="200" height="200"><path d="M793.889347 200.380242c27.648573 20.615681 42.196018 32.710677 63.781037 56.119312 25.313864 27.453234 43.242957 48.52047 64.502857 86.507991 44.537416 79.580127 53.527718 136.949077 53.517684 212.063821 0 64.933675-15.452562 130.459388-40.138263 187.311893-22.076044 50.841799-61.545336 104.359483-101.886297 138.933914-45.506755 39.001681-81.214423 60.462941-137.605337 81.826531-55.699867 21.102023-114.070267 28.641326-181.379458 27.791064-68.274516-0.862973-129.364283-11.040029-180.533878-31.80489-46.159002-18.731189-98.338744-46.827973-141.596418-87.541551-43.946046-41.361142-70.369064-75.958317-93.88139-127.198155-26.157437-57.004361-40.094111-129.065922-39.680686-191.781288 0-36.980719 4.033895-70.902234 12.252873-105.241856 8.532726-35.651474 20.069131-69.572989 38.13135-102.35257 18.856956-34.221214 36.754607-62.067803 58.869452-88.973149 23.248751-28.285434 39.2104-46.417894 64.295476-63.475987 18.297696-12.442861 36.879036-9.295353 47.199252-2.306612 4.403836 2.982273 8.919391 6.577992 12.933218 12.933217 9.572307 15.156208-0.334486 29.769212-6.69038 38.465836-7.148625 9.781026-23.130343 26.023643-38.738775 43.218205-38.192895 42.075603-55.133918 65.965228-74.986303 106.965794-30.772668 63.552249-37.495827 115.718611-38.131349 166.573791-0.668971 53.517684 9.995096 99.647251 27.427813 140.483919 33.916163 80.572211 94.807915 144.44289 175.270414 178.615938 41.108271 17.845472 113.812713 37.319888 181.960793 38.13135 56.193568 0.668971 125.919751-11.321666 166.574459-28.096784 45.935566-18.954626 97.223569-56.862539 127.10383-94.324918 23.013273-28.852721 52.179742-70.910931 64.413884-105.694749 14.863868-42.260239 24.806784-87.661297 24.559934-132.458943 0-54.414105-11.53373-108.417461-36.918505-156.856317-20.16747-38.483228-46.480777-74.607665-84.66899-108.048189-13.377414-11.714352-23.822728-20.067124-38.808348-31.619586-10.191774-7.857065-36.059546-25.027545-28.923632-47.326356 4.970455-15.53217 18.303717-25.294464 31.887843-27.205046 19.456354-2.736092 28.565733 2.427027 43.705885 12.041479l6.179955 4.322891zM510.755379 531.65738c-8.696624-0.668971-10.034566-0.446204-20.738102-6.689711-11.031333-6.434832-17.839451-21.183637-16.514219-35.175166V92.220334c0-18.178619 0.386665-22.815926 8.988295-31.685813 5.351768-5.519011 10.963097-11.381873 26.08987-11.539751 16.055305-0.167243 21.407073 3.846584 27.929542 9.700081 9.70677 8.711341 10.703537 17.56049 10.377078 33.525483v397.5715c-0.509756 15.273947 0.326458 22.967114-11.380535 33.502739-3.884046 3.495374-8.027653 7.693167-20.96087 8.362138l-3.791059 0.000669z m4.453341 0.573308" p-id="2652" fill="#ffffff"></path></svg> |
| New file |
| | |
| | | <svg t="1729585239190" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1755" width="200" height="200"><path d="M901.489435 536.822664v-0.931601l-1.001722-198.240726c-0.100172-19.162936-9.21584-37.474409-25.043042-50.246361-14.024104-11.349507-32.265456-17.60025-51.348255-17.610268l-618.062295-0.18031c-19.142902 0-37.424323 6.280795-51.478478 17.690405-15.827203 12.842072-24.902802 31.2437-24.892785 50.486775v196.798247A114.987635 114.987635 0 1 0 195.295664 536.922836V338.782282c1.15198-1.252152 4.808264-3.596181 10.768509-3.596181l276.725622 0.090155v199.753326a114.987635 114.987635 0 1 0 65.612772 1.412428V335.326342l275.693849 0.080138c6.01033 0 9.626546 2.344029 10.768508 3.596181l1.001722 195.70637a114.987635 114.987635 0 1 0 65.592737 2.113633zM214.979496 645.910158a56.437001 56.437001 0 1 1-56.437001-56.437001 56.507122 56.507122 0 0 1 56.437001 56.437001z m354.689623 0a56.437001 56.437001 0 1 1-56.437001-56.437001 56.507122 56.507122 0 0 1 56.437001 56.437001z m295.507904 56.437001a56.437001 56.437001 0 1 1 56.437001-56.437001 56.507122 56.507122 0 0 1-56.457035 56.437001z" p-id="1756" fill='#fff'></path></svg> |
| New file |
| | |
| | | <?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="1724316570161" class="icon" viewBox="0 0 1185 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1505" xmlns:xlink="http://www.w3.org/1999/xlink" width="231.4453125" height="200"><path d="M414.276535 230.004913l-2.443086-31.647244 26.446614 17.351559 29.437984-11.852598-8.143622 30.31685 20.423559 24.221229-31.623055 1.475527-16.722646 26.801386-11.239811-29.760504-30.663559-7.522772zM581.664252 176.902047l13.884472-28.542992 14.206993 28.220473 31.42148 4.321763-22.350614 22.092599 5.684409 31.123149-28.180157-14.513385-27.897953 14.819779 5.28126-31.066709-22.76989-21.689448zM896.507969 672.735748l17.754708 26.398236-31.494047-2.064126-19.560819 24.705008-7.95011-30.502299-29.575055-11.02211 26.744945-16.771024 1.104629-31.526299 24.414741 20.197795 30.268472-8.619338zM777.030551 801.961323l2.112504 31.647244-26.446614-17.682142-29.413795 11.546205 8.466141-30.308787-20.092976-24.221229 31.606929-1.153008 17.045166-26.793323 10.86085 29.704063 30.647433 7.837229zM609.312252 853.451591l-14.198929 28.518803-14.110236-28.542992-31.405355-4.636221 22.673134-22.084535-5.36189-31.12315 27.833449 14.835906 28.188221-14.803654-5.28126 31.066709 22.76989 22.060346zM298.435528 354.828094l-17.448315-26.390173 31.485984 2.394709 19.875275-24.753386 7.611465 30.865134 29.583118 11.288189-27.011024 16.779087-1.419086 31.526299-24.084158-20.504189-30.518425 8.280693zM962.56 91.53915a43.636913 43.636913 0 0 1 59.375874 15.601889l138.627024 236.753638c12.175118 20.447748 5.12 47.208819-15.609953 59.375874L229.13411 938.185575a43.636913 43.636913 0 0 1-59.375874-15.60189L31.12315 685.773606a43.636913 43.636913 0 0 1 15.601889-59.319433z m25.672567 24.108346a13.594205 13.594205 0 0 0-10.441575 1.548095L61.625449 652.054173a13.586142 13.586142 0 0 0-4.853921 18.83515l138.643149 236.793953a13.586142 13.586142 0 0 0 18.843213 4.837795l915.818834-534.915024a13.957039 13.957039 0 0 0 5.160315-18.778708l-138.602834-236.78589a13.594205 13.594205 0 0 0-8.401638-6.393953z" fill="#F5222D" p-id="1506"></path><path d="M395.981606 172.338394c123.670173-72.349228 271.11811-69.462677 388.394331-5.12l29.623433-17.335433a414.574866 414.574866 0 0 0-112.107842-47.071748 429.991307 429.991307 0 0 0-162.009701-10.498016 412.792945 412.792945 0 0 0-158.80063 54.707401 417.856504 417.856504 0 0 0-125.363402 111.922394A426.282331 426.282331 0 0 0 185.206929 405.004094a417.348535 417.348535 0 0 0-13.529701 120.977134l29.623433-17.335433c1.386835-133.958551 70.688252-263.958173 194.672882-336.307401z m397.666772 679.484472c-123.670173 72.365354-271.110047 69.462677-388.394331 5.128063l-29.623433 17.335433a414.679685 414.679685 0 0 0 112.075591 47.087874 429.991307 429.991307 0 0 0 162.009701 10.498016 412.744567 412.744567 0 0 0 158.808692-54.707402 423.145827 423.145827 0 0 0 209.105638-378.976756l-29.623433 17.335434c-1.072378 133.974677-70.712441 263.95011-194.350362 336.307401h-0.008063z" fill="#F5222D" p-id="1507"></path><path d="M478.377323 313.110173a226.271748 226.271748 0 0 1 109.979212-31.219905l45.668788-26.761071c-58.634079-9.13537-118.316346 2.314079-170.612914 32.735748a258.693039 258.693039 0 0 0-111.91433 132.71685l45.67685-26.761071a230.359685 230.359685 0 0 1 81.097575-80.589606l0.104819-0.120945z m232.568945 397.674835a226.328189 226.328189 0 0 1-109.979213 31.227968l-45.668787 26.753008c58.634079 9.13537 118.316346-2.314079 170.612913-32.735748a258.709165 258.709165 0 0 0 111.914331-132.71685l-45.676851 26.761071a225.215496 225.215496 0 0 1-81.097574 80.597669l-0.104819 0.112882zM188.57726 706.938961l-10.062614-17.424126 109.938897-63.471874 9.578835 16.585574 17.093543-9.869102-18.770645-32.509984-63.689575 36.767244c-4.047622-3.918614-7.804976-7.337323-11.272063-10.24l-16.859717 13.747401c3.249386 2.144756 6.595528 4.458835 9.869103 7.038993l-62.173733 35.896441 19.254426 33.348535 17.093543-9.869102zM317.44 781.142677l-19.060913-33.017953 32.679307-18.867401 4.741039 8.216189 17.093543-9.869103-48.474708-83.959937-49.772851 28.736504-7.933984-13.747401-17.432189 10.062614 7.933984 13.747402-49.264882 28.446236 48.764977 84.459842 17.093543-9.869102-5.031307-8.708032 32.171339-18.585196 19.060913 33.017952 17.432189-10.062614z m-12.505701-97.126803l-32.679307 18.867402-8.321008-14.41663 32.679307-18.867402 8.321008 14.41663z m-50.111496 28.930016l-32.171338 18.577134-8.321008-14.41663 32.171338-18.577134 8.321008 14.41663z m16.932284 29.325102l-32.171339 18.577134-8.127496-14.077984 32.171339-18.577134 8.127496 14.077984z m50.111496-28.930016l-32.679307 18.867402-8.127496-14.077984 32.679307-18.867402 8.127496 14.077984z m95.828661 7.684032c11.062425-6.38589 13.368441-15.537386 6.692284-27.099717l-25.05978-43.411149c3.55578-4.289512 7.014803-8.740283 10.48189-13.199118l-9.482079-16.424315c-3.467087 4.458835-6.92611 8.917669-10.48189 13.199118l-17.803086-30.832882 14.755275-8.51452-9.780409-16.932283-14.747213 8.522582-16.738771-28.994519-17.093544 9.869102 16.738772 28.99452-16.924221 9.772346 9.772347 16.924221 16.932283-9.772347 20.891213 36.202835a299.927181 299.927181 0 0 1-16.690394 15.214866l13.868347 14.344063a572.617575 572.617575 0 0 0 12.497638-12.804031l19.157669 33.179212c2.322142 4.031496 1.475528 7.200252-2.20926 9.328882-3.85411 2.225386-8.167811 4.039559-12.578268 5.692472l13.55389 14.964914 14.247307-8.224252z m111.390236-65.205417c6.369764-3.676724 10.15937-8.329071 11.151118-13.586142 1.225575-5.619906-3.201008-18.706142-13.182992-39.089386l-18.827086 4.160504c7.627591 14.368252 11.368819 23.164976 11.570393 26.615937 0.112882 3.289701-0.959496 5.692472-3.467086 7.143811l-6.539087 3.77348c-3.354205 1.935118-6.095622 1.064315-8.224252-2.628535l-38.702362-67.027654c8.933795-10.07874 17.762772-21.874898 26.390173-35.573921l-18.383622-8.603213a168.443969 168.443969 0 0 1-17.972409 26.914268l-26.801386-46.426709-17.254803 9.965859 77.686929 134.571338c6.966425 12.070299 16.077606 15.077795 27.478677 8.498394l15.077795-8.708031z m-78.501291 45.547842c13.626457-12.779843 25.285543-25.100094 34.783748-37.291339l-12.473449-14.247307a157.808882 157.808882 0 0 1-14.706897 17.875654l-38.412095-66.535811 20.617071-11.900976-9.869102-17.093544-20.617071 11.900977-27.18841-47.087874-17.254803 9.965858 72.94589 126.363212c2.999433 5.192567 2.418898 9.99811-1.564221 14.311811l13.739339 13.739339z m201.663496-113.978457l-65.21348-112.946393c0.137071-7.901732-0.16126-15.771213-0.886929-23.624567l53.78822-31.050583-9.869102-17.093543-144.795213 83.597102 9.869102 17.093543 71.05915-41.024504c1.894803 37.331654-9.45789 76.517795-33.848441 117.856756l20.367118 8.570961c14.860094-26.898142 25.05978-53.344756 30.445859-79.243087l50.990362 88.313953 18.093354-10.449638z m28.728441-76.017889l5.716661-21.850709c-21.157291-7.224441-45.330142-12.707276-72.349228-16.54526l-5.603779 19.318929c29.163843 4.837795 53.385071 11.191433 72.244409 19.07704z m18.738394-105.33493l5.265134-19.13348c-12.739528-4.25726-27.414173-7.627591-43.612725-10.127118l-5.410268 18.101417c17.674079 2.74948 32.380976 6.555213 43.757859 11.159181z m88.934803 67.74526l-15.76315-27.317417 21.786205-12.578268 15.674457 27.148095 16.085669-9.288567-15.674457-27.148095 22.455433-12.965291 4.063748 7.038992c2.031874 3.523528 1.249764 6.426205-2.435023 8.554835l-11.852599 6.176252 12.175118 12.183181 12.570205-7.256693c11.393008-6.579402 13.997354-15.230992 7.998488-25.616126l-42.862866-74.244032-33.848441 19.544693-0.532157-0.145133a202.445606 202.445606 0 0 0 18.738393-38.750741L790.173228 306.87748l-92.676031 53.506016 8.321008 14.41663 31.679496-18.286866-3.85411 13.836094c8.401638-0.16126 16.125984 0.08063 23.261732 0.427339l-37.202646 21.479811 52.538457 90.998929 16.424315-9.482079z m-25.35811-117.856756c-6.724535-0.806299-14.126362-1.233638-21.947465-1.628724l33.517858-19.351181c-3.305827 7.047055-7.143811 13.948976-11.570393 20.979905z m47.571653 16.996788l-22.455433 12.965291-6.095622-10.56252 22.455433-12.965291 6.095622 10.56252z m-38.541102 22.253858l-21.786205 12.578268-6.095622-10.56252 21.786205-12.578268 6.095622 10.56252z m-24.253481 137.570772c-0.330583-19.915591 1.112693-30.582929 4.458835-32.518048 1.846425-1.064315 4.628157-0.886929 8.627402 0.604725 8.304882 2.797858 16.400126 3.265512 24.269606 1.402961 8.006551-2.386646 17.464441-6.506835 28.462362-12.626646 10.812472-6.031118 20.96378-11.66715 30.187843-16.988725l38.379842-22.157102-5.781165-19.673701c-4.329827 2.942992-10.675402 7.055118-19.028662 12.320252-8.708031 5.031307-16.996787 10.038425-25.374236 14.876221-13.07011 7.546961-24.398614 13.868346-34.211275 19.302803-10.07874 5.378016-18.230425 8.296819-24.543748 8.587087-5.28126 0.145134-11.070488-0.983685-17.440252-3.120378l-2.902678-0.774048-36.767244-63.681511-38.379842 22.157102 9.288567 16.085669 22.116787-12.771779 26.511118 45.91874c-4.571717 7.555024-7.014803 20.359055-7.651779 38.605606l19.778519 4.450772z m38.476599-112.938331l-21.786205 12.578268-6.095622-10.56252 21.786205-12.578268 6.095622 10.56252z m38.541102-22.253858l-22.455433 12.965291-6.095622-10.56252 22.455433-12.957228 6.095622 10.56252z m172.241638-43.798173c12.062236-6.966425 14.610142-16.488819 7.740472-28.381733l-39.863433-69.051464 23.302048-13.449071-9.869103-17.093543-23.302047 13.44907-14.513386-25.132346-17.424126 10.062614 14.513386 25.132347-62.681701 36.186708 9.869103 17.093544 62.6817-36.186709 37.34778 64.689386c2.515654 4.354016 1.523906 8.062992-2.838173 10.578645-6.692283 3.870236-14.190866 7.522772-21.955528 11.110804l13.529701 14.537574 23.463307-13.545826z m-130.942992-43.725607l5.386079-20.092976c-12.900787-4.168567-27.389984-7.200252-43.65304-9.433701l-5.321575 18.27074c17.682142 2.74948 32.219717 6.643906 43.596599 11.255937z m80.702488 27.148095l8.466142-17.851465c-10.756031-5.853732-24.825953-12.038047-41.846929-18.302992l-8.740284 16.22274c16.883906 6.789039 30.808693 13.497449 42.121071 19.931717z m-31.219905 99.577952c-0.354772-20.350992 1.064315-31.445669 4.418519-33.380787 2.007685-1.161071 5.128063-1.177197 9.119244 0.32252a42.951559 42.951559 0 0 0 24.938835 1.007874c8.175874-2.483402 18.141732-6.893858 29.639559-13.303937 11.320441-6.321386 21.810394-12.150929 31.365039-17.657953l35.525544-20.520315-5.966614-20.012346c-3.999244 2.74948-10.006173 6.668094-17.859528 11.651023-7.95011 4.805543-15.722835 9.522394-23.439118 13.973166a2406.72252 2406.72252 0 0 1-35.719055 20.181669c-10.586709 5.66022-19.165732 8.603213-25.712882 9.256315-5.28126 0.145134-11.401071-0.790173-17.940158-2.822047l-3.080063-0.685355-36.767244-63.681512-39.041008 22.544126 9.482079 16.424315 22.455433-12.965291 26.511118 45.91874c-4.57978 7.555024-7.256693 20.72189-7.700157 39.299024l19.770457 4.450771z" fill="#F5222D" p-id="1508"></path></svg> |
| New file |
| | |
| | | <?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="1724304256588" class="icon" viewBox="0 0 1300 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1272" xmlns:xlink="http://www.w3.org/1999/xlink" width="253.90625" height="200"><path d="M784.058182 99.258182l10.938182 18.385454-21.294546-2.56-14.196363 16.058182-4.072728-21.061818-19.781818-8.494545 18.734546-10.472728 2.094545-21.294545 15.709091 14.545454 20.945454-4.654545-9.076363 19.549091zM1067.287273 642.443636l-18.501818 10.821819 2.56-21.294546-16.058182-14.196364 21.061818-4.072727 8.494545-19.665454 10.472728 18.734545 21.294545 1.978182-14.661818 15.709091 4.770909 20.945454-19.432727-8.96z" fill="#2196F3" p-id="1273"></path><path d="M1067.287273 642.443636l-18.501818 10.821819 2.56-21.294546-16.058182-14.196364 21.061818-4.072727 8.494545-19.665454 10.472728 18.734545 21.294545 1.978182-14.661818 15.709091 4.770909 20.945454-19.432727-8.96zM571.927273 100.072727l-17.454546-12.567272 20.596364-6.167273 6.516364-20.48 12.218181 17.570909 21.410909-0.116364-12.916363 17.105455 6.749091 20.363636-20.247273-6.981818-17.338182 12.683636 0.465455-21.410909zM991.418182 784.407273l-21.178182 3.490909 10.123636-18.967273-9.774545-18.967273 21.061818 3.723637 15.127273-15.243637 2.909091 21.294546 19.2 9.658182-19.316364 9.309091-3.258182 21.178181-14.894545-15.476363zM427.985455 156.741818L407.272727 151.505455l16.872728-13.265455-1.396364-21.410909 17.803636 11.985454 20.014546-7.912727-5.934546 20.596364 13.730909 16.523636-21.410909 0.814546-11.52 18.152727-7.447272-20.247273zM854.225455 896.465455l-20.712728-5.352728 16.872728-13.265454-1.396364-21.294546 17.803636 11.869091 20.014546-7.912727-5.934546 20.712727 13.730909 16.523637-21.527272 0.814545-11.403637 18.036364-7.447272-20.130909zM562.501818 923.694545l10.821818 18.385455-21.294545-2.56-14.196364 16.058182-4.072727-21.061818-19.665455-8.494546 18.734546-10.356363 1.978182-21.41091 15.709091 14.661819 20.945454-4.770909-8.96 19.54909zM242.734545 420.770909l-18.385454 10.938182 2.56-21.294546-16.058182-14.196363 21.061818-4.189091 8.494546-19.665455 10.356363 18.734546 21.410909 2.094545-14.545454 15.709091 4.654545 20.945455-19.549091-9.076364z" fill="#2196F3" p-id="1274"></path><path d="M242.734545 420.770909l-18.385454 10.938182 2.56-21.294546-16.058182-14.196363 21.061818-4.189091 8.494546-19.665455 10.356363 18.734546 21.410909 2.094545-14.545454 15.709091 4.654545 20.945455-19.549091-9.076364zM700.858182 943.941818l-17.454546-12.450909 20.48-6.283636 6.516364-20.48 12.334545 17.687272 21.41091-0.116363-12.916364 17.105454 6.632727 20.363637-20.247273-7.098182-17.221818 12.683636 0.465455-21.410909zM303.592727 278.807273l-21.178182 3.490909 10.123637-18.967273-9.890909-18.967273 21.178182 3.723637 15.010909-15.243637 2.909091 21.294546 19.2 9.541818-19.316364 9.425455-3.258182 21.178181-14.778182-15.476363z" fill="#2196F3" p-id="1275"></path><path d="M407.272727 90.647273a486.632727 486.632727 0 0 1 504.552728 11.636363l25.018181-14.429091A512 512 0 0 0 139.636364 546.909091l25.018181-14.429091A486.981818 486.981818 0 0 1 407.272727 90.647273zM893.323636 933.352727a486.749091 486.749091 0 0 1-504.669091-11.636363l-24.901818 14.429091A512 512 0 0 0 1161.192727 477.090909l-24.901818 13.963636a486.981818 486.981818 0 0 1-242.967273 442.298182z" fill="#2196F3" p-id="1276"></path><path d="M814.545455 795.927273a327.447273 327.447273 0 0 1-258.21091 29.556363l-29.78909 17.105455A353.163636 353.163636 0 0 0 998.865455 570.181818l-29.789091 17.105455A326.865455 326.865455 0 0 1 814.545455 795.927273zM486.865455 228.072727A327.447273 327.447273 0 0 1 744.727273 198.516364l29.789091-17.105455A353.163636 353.163636 0 0 0 302.545455 453.818182l29.78909-17.105455A326.865455 326.865455 0 0 1 486.865455 228.072727zM1288.378182 374.690909a53.294545 53.294545 0 0 1-14.429091 11.636364L229.469091 989.090909a53.876364 53.876364 0 0 1-73.425455-19.665454L7.214545 710.632727a53.527273 53.527273 0 0 1 19.781819-73.309091L1071.476364 34.909091a53.876364 53.876364 0 0 1 73.425454 19.665454l148.829091 258.327273a53.061818 53.061818 0 0 1 5.352727 40.727273 55.272727 55.272727 0 0 1-10.705454 21.061818zM32.232727 665.716364A28.043636 28.043636 0 0 0 29.323636 698.181818l148.829091 257.978182a28.392727 28.392727 0 0 0 38.516364 10.356364l1044.48-601.949091a28.16 28.16 0 0 0 10.356364-38.516364L1122.676364 67.84a28.276364 28.276364 0 0 0-38.4-10.356364L39.68 659.432727a27.810909 27.810909 0 0 0-7.447273 6.283637z" fill="#2196F3" p-id="1277"></path><path d="M477.090909 500.945455l22.109091 38.283636-15.36 8.843636-13.963636-24.436363-151.272728 87.621818 14.545455 25.134545-15.243636 8.843637-23.272728-39.330909L377.949091 558.545455c-6.050909-4.887273-11.636364-8.843636-15.825455-11.636364l14.894546-12.450909c3.956364 3.141818 9.658182 8.145455 17.105454 14.894545zM459.869091 698.181818l-48.407273 28.043637 7.447273 12.334545-15.36 8.843636-61.207273-106.007272L406.225455 605.090909l-12.683637-21.876364 15.709091-9.076363 12.683636 21.876363L486.4 558.545455l60.509091 104.727272-15.36 8.843637-7.098182-12.218182-49.105454 28.392727L501.294545 733.090909l-15.70909 9.076364z m-45.381818-78.661818l-48.523637 27.461818 14.545455 25.134546 48.523636-28.043637zM388.538182 686.545455l14.545454 25.134545 48.523637-28.043636-14.545455-25.134546z m105.425454-79.476364L479.418182 581.818182 430.545455 609.861818l14.545454 25.134546z m-26.647272 67.490909l49.221818-28.392727-14.545455-25.134546-49.105454 28.392728zM624.058182 541.090909c-4.654545 6.167273-10.123636 13.149091-16.290909 20.829091l34.909091 61.207273a18.734545 18.734545 0 0 1-6.632728 29.207272l-18.734545 10.938182-11.636364-13.614545a174.545455 174.545455 0 0 0 17.454546-8.610909 8.378182 8.378182 0 0 0 2.327272-12.683637l-30.021818-52.363636-9.774545 10.24-9.890909 10.123636-12.450909-12.916363c9.076364-8.145455 16.872727-15.709091 23.272727-22.574546l-30.836364-53.527272-24.785454 14.196363-8.727273-15.010909L546.909091 492.218182l-23.272727-40.378182 15.36-8.843636 23.272727 40.378181 21.643636-12.450909 8.727273 15.127273-21.643636 12.450909L599.156364 546.909091c5.352727-6.4 10.821818-13.381818 16.290909-20.712727z m8.843636-45.032727L689.221818 593.454545a193.745455 193.745455 0 0 0 22.574546-27.112727l11.636363 13.032727a363.985455 363.985455 0 0 1-41.192727 44.8l-12.334545-12.450909a10.821818 10.821818 0 0 0 1.62909-13.730909l-98.90909-171.403636 15.476363-8.96 36.305455 62.952727 30.836363-17.803636 8.029091 15.476363z m128 81.454545a20.130909 20.130909 0 0 1-30.836363-9.541818L628.363636 392.378182l15.36-8.378182 38.050909 66.094545A206.08 206.08 0 0 0 709.818182 409.018182l16.64 7.563636a297.890909 297.890909 0 0 1-34.909091 48.64l52.712727 91.112727a8.843636 8.843636 0 0 0 13.614546 4.072728l10.821818-6.167273a14.429091 14.429091 0 0 0 7.912727-11.636364 102.981818 102.981818 0 0 0-15.010909-38.516363l17.105455-3.723637c12.334545 24.669091 17.687273 41.076364 16.058181 48.989091a28.16 28.16 0 0 1-15.127272 18.152728zM805.236364 288.116364l16.174545-9.309091 23.272727 39.330909 78.429091-45.265455 59.345455 102.749091-16.64 9.076364-7.912727-13.847273L896 407.272727l42.938182 74.472728-16.174546 9.30909-42.938181-74.472727-62.603637 36.072727 8.029091 13.73091-15.825454 9.192727L749.730909 372.363636l78.196364-45.265454z m2.676363 149.061818l62.603637-36.072727-33.745455-58.181819-62.487273 36.072728z m78.778182-45.381818l62.72-36.189091-33.745454-58.181818-62.72 36.072727z" fill="#2196F3" p-id="1278"></path></svg> |
| New file |
| | |
| | | <svg width="22" height="22" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path fill="#FAFAFA" d="M0 0h22v22H0z"/><circle fill="#919BAE" cx="1" cy="1" r="1"/></g></svg> |
| New file |
| | |
| | | <svg t="1729561814171" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1359" width="200" height="200"><path d="M674.496 603.456c120.256 0 218.176 90.752 221.44 203.84l0.064 5.888v125.888c0 11.52-9.92 20.928-22.144 20.928h-44.352a21.568 21.568 0 0 1-22.144-20.928v-125.888c0-67.712-56.512-123.264-128-125.76l-4.928-0.064H349.568c-71.488 0-130.176 53.504-132.864 121.152l-0.064 4.672v125.888c0 11.52-9.92 20.928-22.144 20.928h-44.352A21.568 21.568 0 0 1 128 939.072v-125.888c0-113.92 95.872-206.528 215.36-209.664l6.208-0.064h324.928zM497.216 128c122.368 0 221.568 93.888 221.568 209.728s-99.2 209.792-221.568 209.792c-122.304 0-221.44-93.952-221.44-209.728C275.712 221.952 374.848 128 497.152 128z m0 83.904c-73.408 0-132.864 56.32-132.864 125.888 0 69.504 59.52 125.824 132.864 125.824 73.408 0 132.928-56.32 132.928-125.824 0-69.504-59.52-125.888-132.928-125.888z" fill="#fff" p-id="1360"></path></svg> |
| New file |
| | |
| | | <svg t="1739406626368" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1300" width="200" height="200"><path d="M803.221 925.573H224.356c-68.568 0-124.352-55.784-124.352-124.353V222.356c0-68.568 55.784-124.352 124.352-124.352h355.311v64H224.356c-33.278 0-60.352 27.074-60.352 60.352V801.22c0 33.278 27.074 60.353 60.352 60.353H803.22c33.278 0 60.353-27.074 60.353-60.353V448.208h64V801.22c0 68.569-55.784 124.353-124.352 124.353z" fill="#ffffff" p-id="1301"></path><path d="M300.357 756.916l35.024-195.867L770.117 84.404c10.05-11.02 25.015-18.052 41.058-19.293 16.017-1.247 31.987 3.379 43.841 12.667l83.662 65.549c21.643 16.956 24.254 45.964 5.942 66.038l-437.613 479.8-206.65 67.751z m104.994-170.751l-13.14 73.487 69.671-22.842 415.465-455.517-59.909-46.939-412.087 451.811z" fill="#ffffff" p-id="1302"></path><path d="M732.25 220.897l41.144-49.023 81.151 68.11-41.145 49.023z" fill="#ffffff" p-id="1303"></path></svg> |
| New file |
| | |
| | | <svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M115.147.062a13 13 0 014.94.945c1.55.63 2.907 1.526 4.069 2.688a13.148 13.148 0 012.761 4.069c.678 1.55 1.017 3.245 1.017 5.086v102.3c0 3.681-1.187 6.733-3.56 9.155-2.373 2.422-5.352 3.633-8.937 3.633H12.992c-3.875 0-7-1.26-9.373-3.779-2.373-2.518-3.56-5.667-3.56-9.445V12.704c0-3.39 1.163-6.345 3.488-8.863C5.872 1.32 8.972.062 12.847.062h102.3zM81.434 109.047c1.744 0 3.003-.412 3.778-1.235.775-.824 1.163-1.914 1.163-3.27 0-1.26-.388-2.325-1.163-3.197-.775-.872-2.034-1.307-3.778-1.307H72.57c.097-.194.145-.485.145-.872V27.09h9.01c1.743 0 2.954-.436 3.633-1.308.678-.872 1.017-1.938 1.017-3.197 0-1.26-.34-2.325-1.017-3.197-.679-.872-1.89-1.308-3.633-1.308H46.268c-1.743 0-2.954.436-3.632 1.308-.678.872-1.018 1.938-1.018 3.197 0 1.26.34 2.325 1.018 3.197.678.872 1.889 1.308 3.632 1.308h8.138v72.075c0 .193.024.339.073.436.048.096.072.242.072.436H46.56c-1.744 0-3.003.435-3.778 1.307-.775.872-1.163 1.938-1.163 3.197 0 1.356.388 2.446 1.163 3.27.775.823 2.034 1.235 3.778 1.235h34.875z"/></svg> |
| New file |
| | |
| | | <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="none" class="design-iconfont" viewBox="0 0 12 12"><path fill="url(#a)" fill-rule="evenodd" d="M1 0a1 1 0 0 0-1 1v3.538a1 1 0 0 0 1 1h3.538a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1H1Zm0 6.462a1 1 0 0 0-1 1V11a1 1 0 0 0 1 1h3.538a1 1 0 0 0 1-1V7.462a1 1 0 0 0-1-1H1ZM6.462 1a1 1 0 0 1 1-1H11a1 1 0 0 1 1 1v3.538a1 1 0 0 1-1 1H7.462a1 1 0 0 1-1-1V1Zm1 5.462a1 1 0 0 0-1 1V11a1 1 0 0 0 1 1H11a1 1 0 0 0 1-1V7.462a1 1 0 0 0-1-1H7.462Z" clip-rule="evenodd"/><defs><linearGradient id="a" x1="0" x2="12" y1="0" y2="12" gradientUnits="userSpaceOnUse"><stop stop-color="#1B3149"/><stop offset="1" stop-color="#717D8A"/></linearGradient></defs></svg> |
| New file |
| | |
| | | <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="none" viewBox="0 0 12 12"><g clip-path="url(#a)"><path fill="url(#b)" fill-rule="evenodd" d="M6.958.42C6.444.216 5.61.216 5.098.42L1.15 1.975c-.77.304-.77.797 0 1.1l3.947 1.558c.514.202 1.347.202 1.86 0l3.948-1.557c.77-.304.77-.797 0-1.1L6.958.418ZM4.715 11.788a.857.857 0 0 0 .3.056c.383 0 .671-.295.671-.7V6.404c0-.49-.364-1.007-.817-1.177L1.09 3.805a.808.808 0 0 0-.284-.056c-.353 0-.581.275-.581.7V9.19c0 .508.33 1.014.763 1.177l3.726 1.422Zm2.229-.024h-.02l.073.003c.074.004.154.009.227-.019L11 10.367c.45-.168.83-.686.83-1.177V4.45c0-.413-.29-.7-.673-.7a.965.965 0 0 0-.317.055l-3.72 1.422c-.44.165-.75.67-.75 1.177v4.74c0 .42.218.621.575.621Z" clip-rule="evenodd"/></g><defs><linearGradient id="b" x1=".226" x2="11.803" y1=".267" y2="11.871" gradientUnits="userSpaceOnUse"><stop stop-color="#1B3149"/><stop offset="1" stop-color="#717D8A"/></linearGradient><clipPath id="a"><path fill="#fff" d="M0 0h12v12H0z"/></clipPath></defs></svg> |
| New file |
| | |
| | | <svg xmlns="http://www.w3.org/2000/svg" width="5760" height="3040"><image width="5760" height="3040" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAFoAAAAvgAQMAAAC1QKagAAAABGdBTUEAALGPC/xhBQAAACBjSFJN AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABlBMVEUsNEr///91v/yPAAAA AWJLR0QB/wIt3gAAAAd0SU1FB+YBBQYyN1c3BnEAAAhjSURBVHja7cExAQAAAMKg9U9tDB+gAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAACAtwFzzwABY3VrRQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMi0wMS0wNVQwNjo1 MDo1MyswMDowMCfNlVoAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjItMDEtMDVUMDY6NTA6NTQrMDA6 MDCTNxNoAAAAAElFTkSuQmCC"/></svg> |
| New file |
| | |
| | | <svg version="1.1" id="å¾å±_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 700 700" xml:space="preserve" enable-background="new 0 0 700 700"><style>.st0{fill:#e5e6eb}.st1{fill:#fff}.st2{fill:#84a9ff}.st3{fill:#050f64}.st4{fill:#155bcd}.st5{fill:#ffbd00}.st6{fill:#ff654f}.st9{fill:#f5bdc8}.st10{fill:#ea8096}.st11{opacity:0}.st13{fill:#dca000}</style><path class="st0" d="M101.8 176.7c21.4-19.8 48.8-33.2 77.8-37.2 92.4-12.6 158.2 78.1 240.3 104.9 40.8 13.3 85.4 12.6 125.4 28 68.5 26.2 131.4 117.8 101 191.6-23.7 57.5-79.6 71.8-134.6 54-33.5-10.9-64.1-29.4-97.6-40.5-38.1-12.6-78.7-15.1-118.9-16.7s-80.6-2.4-119.6-12-77-28.9-101.2-60.9C40.8 343.4 48 260.8 73.1 213.7c7.4-13.9 17.2-26.3 28.7-37z"/><path class="st1" d="M82 257.1c5.7-23.2 18.9-44.7 37.3-60.4l1.7-1.5 1.8-1.4 1.8-1.4 1.8-1.3c.6-.4 1.2-.9 1.8-1.3l1.9-1.3c.6-.4 1.2-.9 1.9-1.3l1.9-1.2c5.1-3.2 10.5-6 16.1-8.4 11.1-4.7 23-7.8 35.1-9 12.1-1.1 24.3-.5 36.1 1.5 5.9 1 11.8 2.4 17.6 4 .7.2 1.5.4 2.2.6l2.2.7 2.2.7 2.1.7 2.1.7 2.1.8 2.1.8 2.1.8c5.6 2.2 11.1 4.6 16.5 7.2 5.4 2.6 10.7 5.4 15.9 8.3 10.4 5.9 20.6 12.2 30.5 18.8-10.4-5.9-20.7-11.8-31.4-17.2-5.3-2.7-10.7-5.3-16.1-7.7-5.4-2.4-10.9-4.7-16.5-6.7l-2.1-.8-2.1-.7-2.1-.7-2.1-.7-2.1-.7-2.1-.6-2.1-.6-2.1-.6c-5.7-1.5-11.5-2.8-17.3-3.7-11.6-1.9-23.5-2.5-35.2-1.3-11.7 1.1-23.2 4-34.1 8.5-5.4 2.2-10.7 4.9-15.8 7.9l-1.9 1.1c-.6.4-1.2.8-1.9 1.2l-1.8 1.2c-.6.4-1.2.8-1.8 1.3l-1.8 1.3-1.8 1.3-1.8 1.3-1.7 1.4c-18.2 15.2-32 35.7-39.1 58.4z"/><path class="st2" d="M183.1 543.2c-.3 1.2-.5 1.8-.5 1.8-.7-.5-1.4-.9-2.1-1.4-120.8-82.8-72.6-232.2-72.6-232.2 115.7 67.3 80.1 213.8 75.2 231.8z"/><path class="st3" d="M183.1 543.2c-.3 1.2-.5 1.8-.5 1.8-.7-.5-1.4-.9-2.1-1.4-10.1-29.9-20.1-59.8-29.8-89.8-5-15.5-10-31.1-14.8-46.7l-3.6-11.7-3.5-11.7c-1.2-3.9-2.2-7.8-3.4-11.8-.6-2-1.1-3.9-1.6-5.9l-1.6-5.9 1.6 5.9c.5 2 1.1 3.9 1.7 5.9 1.2 3.9 2.3 7.8 3.5 11.7l3.6 11.7 3.7 11.7c5 15.5 10.2 31 15.4 46.5 10.4 30 20.8 59.9 31.4 89.7zM137.9 384.9c-.1 0-.2 0-.4-.1-.3-.1-.4-.5-.2-.8 3.7-7.2 6-15.3 6.7-23.4 0-.3.3-.5.6-.5s.5.3.5.6c-.7 8.2-3.1 16.5-6.9 23.8 0 .3-.2.4-.3.4zM154 430.5h-.3c-.3-.1-.4-.5-.3-.7 3.4-8.3 7.6-16.4 12.3-24.1.2-.3.5-.3.8-.2.3.2.3.5.2.8-4.7 7.6-8.8 15.6-12.2 23.9-.1.1-.3.3-.5.3zM137.4 440.3h-.3c-9.5-3.9-18.3-9.3-26.1-16.1-.2-.2-.3-.6-.1-.8.2-.2.6-.3.8-.1 7.7 6.7 16.3 12 25.7 15.9.3.1.4.5.3.7 0 .2-.1.3-.3.4zM125.9 390.5c-.2.1-.4.1-.6-.1l-19.2-15c-.2-.2-.3-.6-.1-.8.2-.2.6-.3.8-.1l19.2 15c.2.2.3.6.1.8 0 .1-.1.2-.2.2zM170.7 478.4h-.3c-.3-.1-.4-.5-.3-.7l10.1-23.5c.1-.3.5-.4.7-.3.3.1.4.5.3.7l-10.1 23.5c0 .1-.2.3-.4.3zM151.6 481.6h-.3l-24.3-10c-.3-.1-.4-.5-.3-.7.1-.3.5-.4.7-.3l24.3 10c.3.1.4.5.3.7-.1.1-.3.3-.4.3z"/><path class="st4" d="M182.3 543.2c.3 1.2.4 1.9.4 1.9-.8-.1-1.7-.2-2.5-.3C35 525 11 369.8 11 369.8c133.5 8.2 167.5 155.1 171.3 173.4z"/><path class="st1" d="M182.3 543.2c.3 1.2.4 1.9.4 1.9-.8-.1-1.7-.2-2.5-.3-22.5-22.1-44.8-44.4-66.9-66.8-11.5-11.6-22.9-23.3-34.2-35.1l-8.5-8.8-8.4-8.9c-2.8-3-5.5-6-8.3-9-1.4-1.5-2.7-3-4.1-4.6l-4-4.6 4.1 4.5c1.4 1.5 2.7 3 4.1 4.5 2.8 3 5.6 6 8.4 8.9l8.5 8.8 8.6 8.7c11.5 11.6 23 23.1 34.7 34.6 22.5 22.2 45.2 44.3 68.1 66.2zM70.7 422.1c-.1.1-.2.1-.3.1-.3 0-.6-.3-.6-.6.1-8.1-1.5-16.4-4.5-23.9-.1-.3 0-.6.3-.7.3-.1.6 0 .7.3 3 7.7 4.6 16.1 4.6 24.4 0 .1-.1.3-.2.4zM105.6 455.5c-.1.1-.2.1-.3.1-.3 0-.6-.2-.6-.5-.7-9-.6-18.1.2-27 0-.3.3-.5.6-.5s.5.3.5.6c-.8 8.9-.9 17.9-.2 26.8.1.2 0 .4-.2.5zM95.2 471.7c-.1.1-.2.1-.3.1-10.3.8-20.5-.1-30.5-2.7-.3-.1-.5-.4-.4-.7.1-.3.4-.5.7-.4 9.9 2.5 20 3.4 30.1 2.6.3 0 .6.2.6.5 0 .4-.1.5-.2.6zM62.6 432.4c-.1.1-.3.2-.5.2l-23.9-4.8c-.3-.1-.5-.4-.4-.7.1-.3.4-.5.7-.4l23.9 4.8c.3.1.5.4.4.7-.1.1-.1.2-.2.2zM142.1 490.8c-.1.1-.2.1-.3.1-.3 0-.6-.2-.6-.5l-1.5-25.5c0-.3.2-.6.5-.6s.6.2.6.5l1.5 25.5c0 .2-.1.4-.2.5zM126.4 502.3c-.1.1-.2.1-.3.1l-26.2 2c-.3 0-.6-.2-.6-.5s.2-.6.5-.6l26.2-2c.3 0 .6.2.6.5 0 .2-.1.4-.2.5z"/><g><path class="st5" d="M259.6 503.3c1.2.5 1.8.7 1.8.7-.5.7-1.1 1.3-1.7 1.9C164 616.8 20.9 552.3 20.9 552.3c79.7-107.4 221.4-55.9 238.7-49z"/><path class="st1" d="M259.6 503.3c1.2.5 1.8.7 1.8.7-.5.7-1.1 1.3-1.7 1.9-30.8 6.8-61.6 13.3-92.5 19.7-16 3.3-32 6.5-48 9.6l-12 2.3-12 2.2c-4 .7-8 1.4-12.1 2-2 .4-4 .6-6 .9l-6.1.9 6-1c2-.3 4-.6 6-1 4-.7 8-1.4 12-2.2l12-2.3 12-2.4c16-3.3 31.9-6.7 47.9-10.2 31-6.9 61.9-13.9 92.7-21.1zM97.3 530.8c0 .1 0 .2-.1.3-.2.3-.5.3-.8.2-6.8-4.5-14.6-7.7-22.5-9.3-.3-.1-.5-.4-.4-.7.1-.3.4-.5.7-.4 8.1 1.6 16 4.9 22.9 9.5.1 0 .1.2.2.4zM144.3 519.7c0 .1 0 .2-.1.3-.2.3-.5.4-.8.2-7.9-4.3-15.5-9.4-22.5-14.9-.2-.2-.3-.6-.1-.8.2-.2.6-.3.8-.1 7 5.5 14.6 10.5 22.4 14.8.2.1.3.3.3.5zM152.2 537.3c0 .1 0 .2-.1.3-4.9 9-11.3 17.2-18.8 24.1-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8 7.5-6.9 13.7-14.9 18.6-23.8.2-.3.5-.4.8-.2.2.1.3.3.3.4zM101.5 543.2c.1.2 0 .4-.1.6l-17 17.5c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8l17-17.5c.2-.2.6-.2.8 0 .1 0 .1.1.1.2zM193.8 508.4c0 .1 0 .2-.1.3-.2.3-.5.4-.8.2l-22.2-12.7c-.3-.2-.4-.5-.2-.8.2-.3.5-.4.8-.2l22.2 12.7c.2.2.3.3.3.5zM194.9 527.8c0 .1 0 .2-.1.3l-12.7 23.1c-.2.3-.5.4-.8.2-.3-.2-.4-.5-.2-.8l12.7-23.1c.2-.3.5-.4.8-.2.1.2.3.3.3.5z"/></g><g><path class="st2" d="M608.8 430.3c-1 .2-2.4-.3-4.4-1.4-3.2-1.9-8.3-4.9-10.2-6.1 3 6.3 5.8 12.7 8.3 19.2 4.5-1 7.9-.1 10.1 1.4 2.2 1.5 3.3 3.6 3.3 4.6-.1 2-1.8 2.4-4.9.3-1.6-1.1-3.7-2.6-5.5-3.9-1.3-.9-2.3-1.7-2.8-2 .8 2 1.5 4 2.2 6h.2c1.3.2 3.1 3.1 3.9 4.1 1.7 2.3 3 4.9 3.2 7.8.1 1.2-.1 2.6-1.2 3.2-1.2.6-2.6-.3-3.5-1.3-2.5-2.8-4-6.5-4.1-10.2 0-1-.1-3.3 1.2-3.5-.8-2-1.5-3.9-2.3-5.9-.1.6-.4 1.9-.7 3.4-.5 2.1-1.1 4.7-1.7 6.4-1.1 3.5-2.7 4.1-4 2.8-.7-.7-1.1-2.7-.3-5.2.8-2.4 2.6-5.3 6.6-7.7-2.7-6.4-5.6-12.7-8.8-18.9-.1.8-.3 2.2-.5 3.7-.3 2.6-.9 5.7-1.4 7.8-.5 2.1-1.2 3.4-2 4-.8.6-1.7.4-2.5-.3-.9-.7-1.6-3.1-.9-6.2.6-2.9 2.6-6.5 7-9.6-3.5-6.6-7.2-13.1-11.2-19.4v.3c0 1 0 2.5-.1 4.1-.1 1.6-.2 3.4-.3 5-.1 1.7-.4 3.3-.5 4.6-.8 5.3-3 6.6-5.2 5-1.2-.8-2.1-3.7-1.7-7.4.2-1.9.9-4 2.2-6.2 1.1-2 2.8-4.2 5.2-6.3-3.8-5.8-7.8-11.5-12-17 .1 1.2.2 2.8.2 4.6.1 1.8.1 3.9.1 5.8v2.8c0 .9-.1 1.8-.1 2.5-.4 6.1-2.8 7.8-5.5 6.2-.7-.4-1.4-1.4-1.9-2.8s-.8-3.3-.7-5.4c.1-2.2.7-4.6 1.9-7.3 1.1-2.4 2.8-5 5.2-7.6-4.2-5.4-8.5-10.5-13.1-15.5l2-1.8c4.5 5.2 8.8 10.5 12.9 16 3.1-1.6 6.1-2.5 8.8-2.7 3-.3 5.6.1 7.8.9s4 1.9 5.3 3.1c1.2 1.2 2 2.4 2.2 3.3.7 3.5-2 4.7-8 2.5-3.1-1.2-7.3-2.8-10.7-4.2-1.7-.6-3.3-1.2-4.4-1.6 4.1 5.6 8 11.5 11.6 17.4 2.9-1.2 5.6-1.7 8-1.8 2.6 0 4.8.5 6.7 1.4 3.8 1.7 5.8 4.5 6 6 .3 3.1-2 4-7.1 1.6-2.6-1.3-6.1-3-9-4.4-1.4-.7-2.8-1.3-3.7-1.8-.1 0-.1-.1-.2-.1 3.9 6.4 7.5 13 10.8 19.8 5.1-1.6 9.2-.9 12 .7 2.8 1.6 4.3 4 4.4 5.2-.7 1.1-1.2 1.8-2.2 2z"/></g><g><path class="st2" d="M552.1 373.7c-.5 1.1-.8 1.7-.8 1.7l-1.8-1.8c-105.3-101.8-32.8-241.1-32.8-241.1 102.7 85.7 43.2 224.2 35.4 241.2z"/><path class="st1" d="M552.1 373.7c-.5 1.1-.8 1.7-.8 1.7l-1.8-1.8c-5-31.1-9.8-62.3-14.4-93.5-2.4-16.1-4.7-32.3-6.8-48.5l-1.6-12.1-1.5-12.2c-.5-4.1-.9-8.1-1.4-12.2-.2-2-.4-4.1-.6-6.1l-.5-6.1.6 6.1c.2 2 .4 4.1.7 6.1.5 4 1 8.1 1.5 12.1l1.6 12.1 1.7 12.1c2.4 16.1 4.9 32.3 7.5 48.4 5.1 31.4 10.3 62.7 15.8 93.9zM533.9 210c-.1 0-.2 0-.3-.1-.3-.2-.3-.5-.1-.8 4.9-6.5 8.5-14.1 10.6-21.9.1-.3.4-.5.7-.4.3.1.5.4.4.7-2.1 8-5.8 15.7-10.7 22.3-.3.1-.5.2-.6.2zM542.2 257.6c-.1 0-.2 0-.3-.1-.3-.2-.3-.5-.2-.8 4.8-7.6 10.2-14.9 16.2-21.7.2-.2.6-.3.8-.1.2.2.3.6.1.8-5.9 6.7-11.3 13.9-16.1 21.5-.1.3-.3.4-.5.4zM524.2 264.5c-.1 0-.2 0-.3-.1-8.7-5.4-16.5-12.2-23-20.2-.2-.2-.2-.6.1-.8.2-.2.6-.2.8.1 6.4 7.9 14.1 14.6 22.7 19.9.3.2.3.5.2.8-.2.2-.4.3-.5.3zM521.2 213.5c-.2 0-.4 0-.5-.2l-16.5-18c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l16.5 18c.2.2.2.6 0 .8-.1.2-.2.2-.3.2zM550.7 307.7c-.1 0-.2 0-.3-.1-.3-.2-.3-.5-.2-.8l13.9-21.5c.2-.3.5-.3.8-.2.3.2.3.5.2.8l-13.9 21.5c-.1.2-.3.3-.5.3zM531.2 307.6c-.1 0-.2 0-.3-.1l-22.3-13.9c-.3-.2-.3-.5-.2-.8.2-.3.5-.3.8-.2l22.3 13.9c.3.2.3.5.2.8-.1.2-.3.3-.5.3z"/><g><path class="st4" d="M526.6 382.8c-1 .7-1.6 1-1.6 1-.2-.8-.4-1.6-.6-2.5-35-142.2 100.5-221.5 100.5-221.5 41.5 127.2-82.7 212.8-98.3 223z"/><path class="st3" d="M526.6 382.8c-1 .7-1.6 1-1.6 1-.2-.8-.4-1.6-.6-2.5 12.3-29 24.8-58 37.5-86.8 6.6-14.9 13.3-29.8 20-44.7l5.1-11.1 5.2-11.1c1.7-3.7 3.6-7.3 5.3-11 .9-1.8 1.8-3.6 2.7-5.5l2.8-5.4-2.7 5.5c-.9 1.8-1.8 3.6-2.7 5.5-1.7 3.7-3.5 7.4-5.2 11.1l-5.1 11.1-5 11.2c-6.6 14.9-13 29.9-19.4 44.9-12.2 29.2-24.3 58.5-36.3 87.8zM598.2 234.5c-.1-.1-.2-.2-.2-.3-.1-.3 0-.6.3-.7 7.6-2.9 14.7-7.4 20.6-13 .2-.2.6-.2.8 0 .2.2.2.6 0 .8-6 5.7-13.3 10.2-21 13.2-.1.1-.3.1-.5 0zM580 279.3c-.1-.1-.2-.1-.2-.2-.1-.3 0-.6.3-.8 8.1-3.9 16.6-7.2 25.2-9.7.3-.1.6.1.7.4.1.3-.1.6-.4.7-8.6 2.5-17 5.8-25 9.7-.3 0-.5 0-.6-.1zM561 275.5c-.1-.1-.2-.1-.2-.3-4.5-9.3-7.4-19.1-8.7-29.3 0-.3.2-.6.5-.6s.6.2.6.5c1.3 10.1 4.2 19.8 8.6 29 .1.3 0 .6-.3.8-.1 0-.3 0-.5-.1zM585.6 230.8c-.2-.1-.3-.2-.4-.4l-4.4-24c-.1-.3.1-.6.5-.7.3-.1.6.1.7.5l4.4 24c.1.3-.1.6-.5.7-.1-.1-.2-.1-.3-.1zM560.5 326.2c-.1-.1-.2-.1-.2-.2-.1-.3 0-.6.3-.8l23.2-10.8c.3-.1.6 0 .8.3.1.3 0 .6-.3.8l-23.2 10.8c-.2 0-.4 0-.6-.1zM544.1 315.8c-.1-.1-.2-.1-.2-.2l-11.5-23.7c-.1-.3 0-.6.3-.8.3-.1.6 0 .8.3l11.5 23.7c.1.3 0 .6-.3.8-.2 0-.5 0-.6-.1z"/></g><g><path class="st5" d="M482.2 415.1c-1.2 0-1.9-.1-1.9-.1l.9-2.4C532.4 275.4 689 286.2 689 286.2c-37.4 128.5-188.2 129.3-206.8 128.9z"/><path class="st1" d="M482.2 415.1c-1.2 0-1.9-.1-1.9-.1l.9-2.4c26.5-17 53.2-33.9 79.9-50.6 13.9-8.6 27.8-17.2 41.7-25.6l10.5-6.3 10.5-6.2c3.5-2.1 7.1-4.1 10.6-6.1 1.8-1 3.6-2 5.3-3l5.4-2.9-5.3 3c-1.8 1-3.6 2-5.3 3-3.5 2.1-7 4.1-10.5 6.2l-10.5 6.4-10.4 6.4c-13.8 8.6-27.6 17.4-41.4 26.2-26.6 17.2-53.1 34.5-79.5 52zM624.9 333c0-.1-.1-.2 0-.4.1-.3.4-.5.7-.4 7.9 1.8 16.3 2.2 24.3.9.3 0 .6.2.7.5 0 .3-.2.6-.5.7-8.2 1.3-16.7 1-24.8-.9l-.4-.4zM584.6 359.7c0-.1-.1-.2 0-.3 0-.3.3-.5.6-.5 8.9 1.3 17.8 3.4 26.3 6.2.3.1.5.4.4.7-.1.3-.4.5-.7.4-8.5-2.7-17.3-4.8-26.1-6.1-.3-.1-.4-.3-.5-.4zM571.1 345.9c-.1-.1-.1-.2-.1-.3 1.5-10.2 4.6-20 9.3-29.2.1-.3.5-.4.8-.2.3.1.4.5.2.8-4.6 9.1-7.7 18.7-9.2 28.8 0 .3-.3.5-.6.5-.2-.2-.4-.3-.4-.4zM616.6 322.8c-.1-.2-.1-.4-.1-.6l9.9-22.3c.1-.3.5-.4.8-.3.3.1.4.5.3.8l-9.9 22.3c-.1.3-.5.4-.8.3l-.2-.2zM542.1 387.4c0-.1-.1-.2 0-.3.1-.3.3-.5.7-.5l25.2 4.2c.3.1.5.3.5.7-.1.3-.3.5-.7.5l-25.2-4.2c-.3-.1-.4-.2-.5-.4zM534.4 369.6c0-.1-.1-.2 0-.3l3.9-26c0-.3.3-.5.6-.5s.5.3.5.6l-3.9 26c0 .3-.3.5-.6.5s-.4-.2-.5-.3z"/></g></g><g><path class="st2" d="M445 229c-.1 1 .4 2.4 1.6 4.3 2.1 3.1 5.4 8 6.6 9.9-6.4-2.7-13-5.1-19.6-7.3.8-4.5-.3-7.9-1.9-10-1.6-2.2-3.7-3.1-4.8-3-2 .2-2.3 1.9 0 4.9 1.1 1.5 2.8 3.5 4.2 5.3 1 1.2 1.8 2.2 2.2 2.7-2-.7-4.1-1.3-6.1-1.9v-.2c-.3-1.3-3.3-3-4.3-3.7-2.4-1.6-5.1-2.7-7.9-2.8-1.2 0-2.6.3-3.1 1.4-.5 1.2.5 2.6 1.5 3.4 2.9 2.4 6.7 3.6 10.4 3.5 1 0 3.3 0 3.5-1.4 2 .7 4 1.3 6 2-.6.2-1.9.5-3.4.9-2.1.6-4.6 1.4-6.3 2-3.4 1.3-4 2.9-2.6 4.2.7.6 2.8 1 5.2 0 2.4-.9 5.2-2.9 7.3-7 6.6 2.3 13 4.9 19.3 7.7-.8.1-2.2.4-3.7.7-2.5.5-5.6 1.2-7.7 1.8-2.1.6-3.3 1.4-3.9 2.2-.5.8-.4 1.7.4 2.5s3.2 1.4 6.2.5c2.9-.8 6.3-2.9 9.3-7.5 6.8 3.1 13.5 6.5 20 10.2h-.3c-1 .1-2.5.2-4.1.4-1.6.2-3.3.4-5 .6-1.7.2-3.3.5-4.6.8-5.2 1.1-6.4 3.3-4.7 5.5.9 1.1 3.8 1.9 7.5 1.3 1.9-.3 4-1.1 6.1-2.5 2-1.3 4-3 6-5.5 6 3.4 11.9 7.1 17.7 11.1h-4.6c-1.8 0-3.9.1-5.8.2-1 .1-1.9.1-2.8.2-.9.1-1.7.2-2.5.3-6.1.8-7.6 3.2-5.9 5.8.4.7 1.5 1.3 2.9 1.7 1.5.4 3.3.7 5.5.4 2.2-.3 4.6-.9 7.2-2.3 2.3-1.2 4.8-3 7.3-5.6 5.6 3.9 11 8 16.2 12.3l1.7-2.1c-5.4-4.2-11-8.2-16.7-12 1.4-3.2 2.1-6.2 2.2-8.9.1-3-.4-5.6-1.3-7.7-.9-2.1-2.1-3.9-3.4-5.1-1.3-1.2-2.5-1.9-3.4-2-3.5-.5-4.6 2.2-2 8.1 1.4 3 3.2 7.1 4.8 10.5.7 1.7 1.4 3.2 1.9 4.3-5.9-3.8-11.9-7.4-18-10.7 1-3 1.4-5.7 1.3-8.1-.1-2.6-.8-4.8-1.7-6.6-1.9-3.7-4.8-5.5-6.3-5.6-3.1-.2-3.9 2.3-1.2 7.2 1.4 2.5 3.3 5.9 4.9 8.8.8 1.4 1.5 2.7 2 3.6 0 .1.1.1.1.2-6.6-3.5-13.4-6.8-20.3-9.7 1.3-5.2.4-9.2-1.3-11.9-1.8-2.8-4.2-4.1-5.4-4.1-1.6.3-2.3.8-2.4 1.8z"/></g><g><path class="st2" d="M100.2 255.8c1-.1 2.4.5 4.3 1.8 3 2.2 7.8 5.7 9.6 7-2.4-6.5-4.6-13.2-6.4-19.9-4.6.6-7.9-.6-9.9-2.3-2.1-1.7-3-3.9-2.8-4.9.3-2 2-2.2 4.9.2 1.5 1.2 3.4 3 5.1 4.4 1.2 1 2.2 1.9 2.6 2.3-.6-2.1-1.1-4.1-1.6-6.2h-.2c-1.3-.3-2.8-3.4-3.5-4.5-1.5-2.4-2.5-5.2-2.5-8 0-1.2.4-2.6 1.5-3 1.3-.5 2.6.6 3.4 1.6 2.3 3 3.3 6.8 3.1 10.5-.1 1-.2 3.3-1.5 3.4.6 2 1.2 4.1 1.8 6.1.2-.6.6-1.9 1-3.4.7-2.1 1.6-4.5 2.3-6.2 1.4-3.4 3.1-3.9 4.3-2.4.6.7.8 2.8-.2 5.2-1 2.4-3.1 5-7.3 7 2 6.6 4.4 13.2 6.9 19.6.2-.8.5-2.2.8-3.7.6-2.5 1.4-5.6 2.1-7.6.7-2.1 1.5-3.3 2.4-3.8.9-.5 1.7-.3 2.5.5s1.2 3.3.3 6.2c-.9 2.8-3.2 6.2-7.8 8.9 2.8 6.9 5.9 13.8 9.3 20.4v-.3c.1-1 .3-2.4.5-4s.5-3.3.8-5c.3-1.7.7-3.3 1-4.6 1.3-5.2 3.6-6.3 5.7-4.5 1.1.9 1.8 3.9 1 7.5-.4 1.8-1.3 3.9-2.8 6-1.3 1.9-3.2 3.9-5.8 5.8 3.2 6.2 6.6 12.2 10.3 18.1 0-1.2.1-2.8.2-4.6.1-1.8.3-3.9.5-5.8.1-1 .2-1.9.3-2.8.1-.9.3-1.7.4-2.5 1-6 3.5-7.5 6.1-5.6.6.5 1.2 1.5 1.6 3 .3 1.5.5 3.3.2 5.5s-1.1 4.5-2.6 7.1c-1.3 2.3-3.2 4.7-5.9 7 3.6 5.7 7.5 11.3 11.6 16.7l-2.2 1.6c-4-5.6-7.8-11.3-11.3-17.2-3.3 1.3-6.3 1.9-9 1.9-3 0-5.6-.6-7.7-1.6-2.1-1-3.8-2.3-4.9-3.6-1.1-1.3-1.8-2.6-1.8-3.4-.3-3.5 2.4-4.5 8.2-1.7 2.9 1.5 7 3.5 10.3 5.2 1.7.8 3.1 1.5 4.2 2-3.6-6-6.9-12.2-9.9-18.5-3 .9-5.7 1.2-8.1 1-2.6-.2-4.7-1-6.5-2-3.6-2-5.3-5-5.4-6.6 0-3.1 2.4-3.8 7.2-.9 2.4 1.5 5.8 3.5 8.6 5.2 1.4.9 2.6 1.6 3.5 2.1.1 0 .1.1.2.1-3.3-6.8-6.2-13.7-8.8-20.7-5.3 1.1-9.2 0-11.9-1.8-2.7-1.9-3.9-4.4-3.8-5.6-.1-.9.5-1.6 1.5-1.7z"/></g><g><path class="st4" d="M106.8 558.3c0 13.1 8.1 23.7 18.2 23.7h455c10.1 0 18.2-10.6 18.2-23.7H106.8z"/><path class="st2" d="M155.4 290.9H549.6V538.5H155.4z"/><path class="st3" d="M556.6 264.8h-408c-7.6 0-13.8 6.2-13.8 13.8V540c0 7.6 6.2 13.8 13.8 13.8h408c7.6 0 13.8-6.2 13.8-13.8V278.6c0-7.7-6.2-13.8-13.8-13.8z"/><path class="st1" d="M155.4 285.5H549.6V533.1H155.4z"/><path class="st0" d="M295.7 558.3L196.6 558.3 196.9 553.9 197.3 548.4 294.9 548.4zM508.6 558.3L409.4 558.3 409.8 553.9 410.2 548.4 507.8 548.4z"/></g><g><path class="st0" d="M188 451.7H222.4V455.59999999999997H188zM235 451.7H269.4V455.59999999999997H235zM328.6 451.7H353.5V455.59999999999997H328.6zM374.8 451.7H413.5V455.59999999999997H374.8zM342.3 465.1H359.90000000000003V469H342.3zM342.3 475.3H359.90000000000003V479.2H342.3zM342.3 485.6H359.90000000000003V489.5H342.3zM342.3 495.8H359.90000000000003V499.7H342.3z"/><path class="st6" d="M209.7 465.1H222.39999999999998V469H209.7z"/><path class="st2" d="M209.7 475.3H222.39999999999998V479.2H209.7z"/><path class="st4" d="M209.7 485.6H222.39999999999998V489.5H209.7z"/><path class="st5" d="M209.7 495.8H222.39999999999998V499.7H209.7z"/><path class="st0" d="M399.7 465.1H417.3V469H399.7zM399.7 475.3H417.3V479.2H399.7zM399.7 485.6H417.3V489.5H399.7zM399.7 495.8H417.3V499.7H399.7zM234.6 465.1H252.2V469H234.6zM234.6 475.3H260.7V479.2H234.6zM234.6 485.6H267.5V489.5H234.6zM234.6 495.8H249.7V499.7H234.6zM180.4 314.6H306V321.5H180.4z"/><path class="st4" d="M180.4 340.4H198.20000000000002V347.9H180.4zM216.1 340.4H233.9V347.9H216.1zM251.8 340.4H269.6V347.9H251.8zM287.5 340.4H305.3V347.9H287.5zM323.3 340.4H341.1V347.9H323.3zM359 340.4H376.8V347.9H359zM394.7 340.4H412.5V347.9H394.7z"/><g><path class="st0" d="M180.4 355.7H430.20000000000005V358H180.4z"/></g><g><path class="st0" d="M427.7 446.2H181v-90.4h-2v92.5h250.7v-92.5h-2v90.4z"/><path class="st0" d="M405.1 355.7H407.1V447.2H405.1zM382.4 355.7H384.5V447.2H382.4zM359.8 355.7H361.8V447.2H359.8zM337.2 355.7H339.2V447.2H337.2zM314.6 355.7H316.6V447.2H314.6zM292 355.7H294V447.2H292zM269.4 355.7H271.4V447.2H269.4zM246.8 355.7H248.8V447.2H246.8zM224.2 355.7H226.2V447.2H224.2zM201.6 355.7H203.7V447.2H201.6z"/><path class="st0" d="M179 355.7H429.7V357.7H179zM180 378.4H428.7V380.4H180zM180 401H428.7V403H180zM180 423.6H428.7V425.6H180z"/><g><path class="st2" d="M203.6 396.2H219.79999999999998V446.3H203.6zM248.8 385.8H265V446.3H248.8zM294.1 410.5H310.3V446.3H294.1zM339.3 373.7H355.5V446.29999999999995H339.3zM384.5 393.3H400.7V446.3H384.5z"/></g><g><path class="st6" d="M201.6 396.2H217.79999999999998V446.3H201.6zM246.8 385.8H263V446.3H246.8zM292 410.5H308.2V446.3H292zM337.2 373.7H353.4V446.29999999999995H337.2zM382.5 393.3H398.7V446.3H382.5z"/></g></g><g><path class="st0" d="M179 471.1H429.7V473.20000000000005H179z"/></g><g><path class="st0" d="M179 481.3H429.7V483.40000000000003H179z"/></g><g><path class="st0" d="M179 491.6H429.7V493.70000000000005H179z"/></g><g><path class="st0" d="M179 501.8H429.7V503.90000000000003H179z"/></g><g><path class="st6" d="M473.5 352.4c.9-5.5 5.4-9.8 10.9-10.6l-.2-5.1-.5-12.6c-14.7 1.2-26.4 12.7-27.9 27.2l12.6.8 5.1.3z"/><path class="st5" d="M491.1 366.7c-1.5.6-3.1.9-4.8.9-2.9 0-5.6-.9-7.7-2.5l-3.5 3.8-8.5 9.2c5.3 4.5 12.2 7.2 19.7 7.2 4.7 0 9.1-1 13-2.9l-5.9-11.1-2.3-4.6zM516.3 361.3l-12.4-2.1c-1.2 4.6-4 8.4-7.9 10.9l5.9 11.1 2.7 5.2c8.8-5.1 15.3-13.8 17.5-24.1l-5.8-1z"/><path class="st6" d="M468.2 354.9l-12.6-.8-5.9-.4v.9c0 10.1 4.1 19.3 10.7 25.9l4-4.3 8.5-9.2c-2.8-3.2-4.6-7.4-4.7-12.1z"/><path class="st4" d="M495.9 339.3l-2.4 4.6c3.5 2.3 5.7 6.3 5.7 10.8v.8l5.1.9 12.4 2.1c.2-1.3.2-2.5.2-3.8 0-11.3-6.1-21.2-15.2-26.5l-5.8 11.1zM487 336.6c2.3.1 4.4.6 6.4 1.4l5.8-11.2 2.7-5.2c-4.7-2.3-10-3.5-15.7-3.5l.2 5.9.6 12.6z"/></g><g><path class="st0" d="M446.7 407.2H525.1V411.09999999999997H446.7zM446.7 441.5H450.59999999999997V445.4H446.7zM454.4 441.5H525.1V445.4H454.4z"/><path class="st4" d="M446.7 456.1H450.59999999999997V460H446.7z"/><path class="st0" d="M454.4 456.1H525.1V460H454.4z"/><path d="M446.7 470.8H450.59999999999997V474.7H446.7z" style="fill:#6292ff"/><path class="st0" d="M454.4 470.8H525.1V474.7H454.4z"/><path d="M446.7 485.4H450.59999999999997V489.29999999999995H446.7z" style="fill:#da5544"/><path class="st0" d="M454.4 485.4H525.1V489.29999999999995H454.4z"/><path class="st5" d="M446.7 500H450.59999999999997V503.9H446.7z"/><path class="st0" d="M454.4 500H525.1V503.9H454.4zM446.7 417.7H525.1V430.7H446.7z"/></g></g><g><path class="st3" d="M522.8 556.7c.3-.3.7-.5 1.1-.6.4-.1.8-.1 1.3-.1 1-.1 2-.3 2.9-.8.5-.3.9-.6 1.4-.8l2.9.1c.4.4.7 1 .8 1.6.1.5.1 1.1.1 1.6v.6h-10.8v-.6c0-.4 0-.8.3-1z"/><path class="st9" d="M532.7 551.2L532.4 554.5 529.4 554.4 529.2 551.4z"/><path class="st3" d="M494 555.5c.3-.3.7-.4 1.1-.5.4 0 .8 0 1.3.1 1 .1 2.1-.1 3-.5.5-.2 1-.5 1.5-.6l2.9.4c.4.5.5 1.1.6 1.7.1.5 0 1.1-.1 1.6l-.1.6-10.7-1.2.1-.6c0-.4.1-.8.4-1z"/><path class="st4" d="M535.3 503.7c.6-11.4.5-27.5-2.6-36.6 0-.2-23.9 2-23.9 2l-5.6 22.9c-2 8.1-2.9 16.3-2.8 24.6l.3 34.4 4 .3 7.5-45.5c2.8-5.4 5.8-11.6 8.1-17.7l8.7 63.4 4-.2c0-.1 2.3-47.6 2.3-47.6z"/><path class="st9" d="M504.5 551.2L503.8 554.4 500.9 554 501 551z"/><path class="st10" d="M481.6 394.3c.7-.3 1.6 0 1.9.7 2 4 4.2 7.8 6.6 11.5 2.4 3.7 5 7.2 7.8 10.5s5.8 6.4 9.1 9.1c1.6 1.4 3.3 2.7 5 3.9.4.3.9.6 1.3.9l1.3.9c.9.6 1.8 1.1 2.7 1.7.3.2.5.4.8.6.2.2.4.5.6.7.3.5.6 1.1.7 1.8.3 1.3.1 2.7-.7 4-.8 1.3-2 2.1-3.3 2.3-.7.1-1.4.1-2.1 0-.3-.1-.7-.2-1-.3l-.9-.6c-.9-.7-1.8-1.5-2.7-2.3l-1.3-1.2c-.4-.4-.9-.8-1.3-1.2-1.7-1.6-3.4-3.4-4.9-5.1-3.1-3.5-6-7.3-8.5-11.2-2.5-3.9-4.7-8-6.6-12.2-1.9-4.2-3.6-8.4-5.1-12.7-.5-.7-.1-1.5.6-1.8z"/><path class="st2" d="M500.2 434.6l9.4 7.3c2.8 2.2 6.8 1.9 9-.9s1.8-7.2-1.1-9.4l-9.4-7.3-7.9 10.3z"/><path class="st2" d="M521.8 428.5c-9-.1-16 7.9-14.8 16.8l1.8 23.7c10 3.6 17.5 1.6 23.9-2l1.1-25.2c.7-7.1-4.9-13.2-12-13.3z"/><path class="st1" d="M531.8 433.5l-.2.2c1 1.4 1.7 3 2 4.7h.3c-.3-1.7-1-3.4-2.1-4.9zm-9.9 37.3v.3c2.2-.2 4.4-.8 6.6-1.7l-.1-.2c-2.1.8-4.2 1.3-6.5 1.6zm5.1-41.3c-1.6-.8-3.4-1.2-5.2-1.2h-.2c-4.3 0-8.5 1.9-11.3 5.2-1.7 1.9-2.8 4.2-3.3 6.6l.3.1c1.5-6.6 7.4-11.6 14.5-11.5 1.9 0 3.6.5 5.2 1.2v-.4zM508.6 466c-.1 0-.2.1-.3.1l.2 3 .2.1c2.2.8 4.5 1.4 6.6 1.7v-.3c-2.1-.3-4.2-.8-6.5-1.7l-.2-2.9zm-1.8-20.6l.9 12h.3l-.9-12h-.3z"/><path class="st3" d="M524 412.1s6.2 1.5 4.7 8.4c-1 4.6-4.4 7-9.2 7.8l4.5-16.2z"/><path class="st9" d="M517.5 423.7l.5 7.1c2 1.2 4 1.1 5.9-.3l-.5-7.1-5.9.3z"/><path class="st10" d="M517.6 424.6l.1 2.2c.9.5 1.9.7 3 .7h.2c1-.1 2-.5 2.7-1.2l-.1-2.1-5.9.4z"/><path class="st9" d="M514.6 415.4l.4 5.3.1 1.2c.3 2.9 2.7 5.1 5.6 5.1.3 0 .6 0 .9-.1.1 0 .2-.1.3-.1h.1c.4-.2.8-.4 1.1-.8.7-.8 1.1-1.6 1.5-2.5.3-.7.6-1.5.8-2.2.2-.9.4-1.8.2-2.8l-.4-4.6-9-.7-1.6 2.2z"/><path class="st3" d="M523.9 414s-10.3.6-8.2 9.7c0 0-3.2-6.5.1-10.9 3.6-4.8 8.5-3.2 10.2-.9 1.7 2.3 3 6.1-1.8 8.9-.1-.1 1.5-3.5-.3-6.8z"/><path class="st9" d="M523.7 419.5c.1 1.2 1.1 2.1 2.3 2 1.2-.1 2.1-1.1 2-2.3-.1-1.2-1.1-2.1-2.3-2-1.2.1-2.1 1.1-2 2.3z"/><g><path class="st3" d="M503.8 450.8l-7.4-8c4.5-4.2 6.9-9.8 6.9-15.9h10.9c0 9.1-3.8 17.8-10.4 23.9z"/><path class="st4" d="M514.2 427h-10.9c0-12-9.7-21.7-21.7-21.7-2.6 0-5.1.4-7.5 1.3l-3.8-10.2c3.6-1.3 7.4-2 11.3-2 18-.1 32.6 14.6 32.6 32.6z"/><path class="st2" d="M481.6 459.6c-18 0-32.6-14.6-32.6-32.6 0-13.6 8.6-25.9 21.4-30.6l3.8 10.2c-8.5 3.1-14.2 11.3-14.2 20.4 0 12 9.7 21.7 21.7 21.7 5.5 0 10.8-2.1 14.8-5.8l7.4 8c-6.1 5.6-14 8.7-22.3 8.7z"/></g><g><path class="st9" d="M471.1 455.3c0-.8.5-1.5 1.3-1.5 4.4-.5 8.8-1.1 13.1-2.1 4.3-.9 8.5-2.1 12.6-3.5 4.1-1.5 8-3.2 11.8-5.2 1.9-1 3.7-2.1 5.5-3.3.4-.3.9-.6 1.3-.9l1.3-.9c.8-.6 1.7-1.2 2.5-1.9.3-.2.6-.4.8-.5l.9-.3c.6-.1 1.3-.1 1.9 0 1.3.2 2.6.9 3.5 2.1.9 1.2 1.2 2.6 1 3.9-.1.7-.4 1.3-.8 1.9-.2.3-.4.6-.7.8-.3.3-.6.5-.9.7-1 .6-2.1 1.2-3.1 1.7l-1.6.8c-.5.3-1.1.5-1.6.8-2.1 1-4.3 2-6.5 2.8-4.4 1.7-9 3-13.5 3.9-4.6.9-9.2 1.5-13.7 1.9-4.6.3-9.1.4-13.7.3-.8 0-1.4-.7-1.4-1.5z"/><path class="st2" d="M515.5 452.5l10.1-6.2c3.1-1.9 4.3-5.7 2.4-8.8-1.9-3.1-6.1-4.2-9.1-2.3l-10.1 6.2 6.7 11.1z"/><path class="st1" d="M529.1 439.4c-.1-.7-.4-1.4-.8-2-.9-1.5-2.5-2.7-4.3-3.1-.3-.1-.6-.1-.9-.2v.3c2 .3 3.9 1.4 4.9 3.2 1.4 2.3 1.1 5-.5 7l.2.1c1.3-1.5 1.8-3.4 1.4-5.3zm-3.3 7.1s.1 0 .1-.1l-.3-.1-3 1.8.2.2 3-1.8zm-4.2 2.6l-.2-.2-2.9 1.7.2.2 2.9-1.7zm-4.4 2.6l-.2-.2-1.5.9-5.2-8.5-.2.1 5.3 8.8 1.8-1.1zm.2-15.9l-7.4 4.5.1.2 7.4-4.5-.1-.2z"/></g></g><g><path class="st10" d="M234.4 464c0-.8-.5-1.5-1.3-1.6-2.3-.3-4.6-.6-6.9-1-2.3-.4-4.5-.8-6.7-1.3s-4.3-1.2-6.2-2c-1.9-.8-3.7-1.9-5.3-3.1-3.2-2.5-5.7-6-8-9.7-.3-.5-.6-.9-.9-1.4l-.8-1.4c-.6-1-1.1-2-1.7-3-1.1-2-2.2-4-3.2-6.1-1.4-2.6-4.7-3.5-7.2-2s-3.3 4.8-1.7 7.3c1.4 1.9 2.7 3.9 4.1 5.8.7 1 1.4 1.9 2.2 2.9l1.1 1.4c.4.5.8.9 1.1 1.4 1.6 1.9 3.2 3.7 5 5.5 1.8 1.8 3.9 3.4 6.1 4.8 2.3 1.3 4.7 2.3 7.2 3 2.5.7 4.9 1.1 7.3 1.3 2.4.2 4.8.4 7.1.4 2.4.1 4.7.1 7 .1 1 0 1.7-.6 1.7-1.3z"/><path class="st3" d="M190.5 450.4l-6.3-10c-1.9-3-1.3-7 1.8-8.9 3-1.9 7.3-1.1 9.2 2l6.3 10-11 6.9z"/><path class="st9" d="M181.4 505.2L189.7 554.4 192.6 553.9 193.4 504.8z"/><path class="st4" d="M194.2 504.7l-13.6.5c-3.7-9-6.9-28.9-3.1-38.1l15.2 3.4 1.5 34.2z"/><circle transform="rotate(-16.739 184.847 470.406)" class="st4" cx="184.8" cy="470.4" r="7.9"/><g class="st11"><path class="st4" d="M184.8 470.4L184.8 470.4 184.8 470.4 184.8 470.3z"/></g><path class="st9" d="M165.9 503.2L161.1 553.4 164.1 553.6 177.6 505.8z"/><path class="st4" d="M180.4 462.7c-3.2-1-6.5.2-8.5 2.7-.1.2-.3.4-.4.6-5.7 8.3-7.5 27.6-6.3 37l13.2 3 7.3-33.4c1.3-4.2-1.1-8.6-5.3-9.9z"/><path class="st2" d="M180.4 497.1l-1.9 8.9-2.2-.5v.3l2.4.5 2-9.1-.3-.1zm-11.9-25.8c-1.3 3.5-2.4 7.8-3.1 12.8v.3h.3c.6-4.6 1.7-9.1 3.1-12.9l-.3-.2zm-3.9 23.7h.3c0-2.2.2-4.5.4-6.8h-.3c-.3 2.3-.4 4.6-.4 6.8zm.6 8c-.2-1.3-.3-2.8-.3-4.4h-.3c.1 1.6.2 3.1.3 4.4v.2l8 1.8.1-.2-7.8-1.8zm18.6-21.8l-1.7 7.9h.3l1.7-7.9h-.3z"/><path class="st3" d="M170.4 556.6c-.2-.4-.6-.6-1-.7-.4-.1-.8-.1-1.2-.2-1-.2-2-.6-2.8-1.2-.4-.3-.8-.7-1.3-.9l-2.9-.3c-.4.4-.8.9-1 1.5-.2.5-.2 1.1-.3 1.6l-.1.6 10.7 1.2.1-.6c.1-.3 0-.7-.2-1zM199.5 555.1c-.3-.3-.7-.4-1.2-.4-.4 0-.8.1-1.3.1-1 .1-2.1 0-3-.4l-1.5-.6-2.9.5c-.3.5-.5 1.1-.5 1.7 0 .5 0 1.1.1 1.6l.1.6 10.7-1.6-.1-.6c0-.3-.1-.6-.4-.9zM182 428.8c9 .1 15.8 8.2 14.4 17.1l-3.6 24c-6.5 2.3-15.6 1.5-23.1-.7v-27.4c-.5-7.1 5.2-13.1 12.3-13z"/><path class="st1" d="M169.4 457.4v10.4h.3v-10.4h-.3zm12.6-28.8h-.1c-.4 0-.8 0-1.2.1v.3c.4 0 .8-.1 1.3-.1 2.1 0 4 .5 5.8 1.2l.1-.2c-1.8-.9-3.8-1.3-5.9-1.3zm11.3 5.3c-.8-.9-1.7-1.8-2.7-2.5l-.2.2c3.7 2.7 6.1 7.1 6.1 11.9 0 .8-.1 1.6-.2 2.4l-.8 5.3.3.1.8-5.3c.7-4.4-.5-8.8-3.3-12.1zm-.6 36c-5.9 2.1-13.9 1.6-20.9-.1v.3c4 1 8.1 1.5 11.8 1.5 3.5 0 6.6-.5 9.2-1.4l.1-.1 2.1-13.8h-.3l-2 13.6zm-16.9-39.5l-.1-.3c-1.1.6-2.1 1.4-2.9 2.3-2.4 2.5-3.6 5.9-3.3 9.3v6.4h.3v-6.4c-.4-4.7 2.1-9 6-11.3z"/><g><path class="st9" d="M186.2 424.7l-.4 7.3c-2.1 1.1-4 1-5.9-.4l.4-7.3 5.9.4z"/><path class="st10" d="M186.1 426.9v.8c-.9.5-2 .7-3.1.7h-.2c-1-.1-1.9-.5-2.6-1.2l.1-2.1 5.8 1.8z"/><path class="st9" d="M189.3 416.4l-.5 5.2-.1 1.2c-.3 2.9-2.8 5.1-5.7 5-.3 0-.6-.1-.9-.1-.1 0-.2-.1-.3-.1h-.1c-.4-.2-.8-.5-1.1-.8-.6-.8-1-1.6-1.4-2.5-.3-.8-.6-1.5-.8-2.3-.2-.9-.3-1.8-.2-2.8l.2-3.6 9.3-1.5 1.6 2.3z"/><path class="st3" d="M189 424.6s0-3.1-.1-4.6c-.1-1.4-.4-2.8-1.5-2.6-2.1.4-2.9-1.4-2.9-1.4-.6 0-1.2.1-1.9.3-3.1.8-3.6 0-4-.5-.8 2.4-.5 5.5-.5 5.8 0 .1.1.3.1.4.2.8.5 1.5.8 2.3.3.7.6 1.4 1 2v.5c-2.2-.4-4.9-2.8-5.6-4.7-2.3-7.2 1.6-11.5 7.1-12.6 4.8-.9 7.4 3.5 8.4 7.5.8 2.3-.3 7-.9 7.6z"/><path class="st9" d="M180.2 420.3c-.1 1.2-1.1 2.1-2.3 2-1.2-.1-2.1-1.1-2-2.3.1-1.2 1.1-2.1 2.3-2 1.2.1 2 1.1 2 2.3z"/></g><g><path transform="rotate(-180 274.437 454.01)" class="st2" d="M269 446.1H279.8V462H269z"/><path transform="rotate(-180 260.511 447.387)" class="st2" d="M255.1 432.8H265.9V461.90000000000003H255.1z"/><path transform="rotate(-180 246.585 443.424)" class="st4" d="M241.2 424.9H252V461.9H241.2z"/><path transform="rotate(-180 232.659 439.712)" class="st4" d="M227.2 417.5H238V461.9H227.2z"/><path transform="rotate(-180 218.732 441.217)" class="st4" d="M213.3 420.5H224.10000000000002V461.9H213.3z"/><path transform="rotate(-180 204.806 443.424)" class="st2" d="M199.4 424.9H210.20000000000002V461.9H199.4z"/><path transform="rotate(-180 190.88 447.387)" class="st4" d="M185.5 432.8H196.3V461.90000000000003H185.5z"/><g><path transform="rotate(-180 232.659 462.663)" class="st3" d="M183.1 461.9H282.3V463.4H183.1z"/></g></g><g><path class="st9" d="M227.5 461.9c-.1-.8-.7-1.4-1.5-1.4h-6.9c-2.3-.1-4.6-.2-6.8-.4s-4.4-.6-6.4-1.1c-2-.6-3.9-1.3-5.7-2.4-3.5-2.1-6.5-5.1-9.3-8.5-.4-.4-.7-.8-1.1-1.3l-1-1.3c-.7-.9-1.4-1.8-2-2.7-1.4-1.8-2.7-3.7-4-5.6-1.7-2.3-5.1-2.8-7.4-.9-2.3 1.8-2.6 5.3-.6 7.5 1.6 1.7 3.2 3.4 4.9 5.2.8.9 1.7 1.7 2.5 2.6l1.3 1.3c.4.4.9.8 1.3 1.2 1.8 1.7 3.7 3.3 5.8 4.8 2.1 1.5 4.3 2.8 6.7 3.9 2.4 1 5 1.7 7.5 2 2.5.3 5 .4 7.4.3 2.4-.1 4.8-.3 7.1-.6s4.7-.6 7-.9c.7-.3 1.2-1 1.2-1.7z"/><path class="st3" d="M181.9 454.2l-7.7-9c-2.3-2.7-2.2-6.7.5-9.1 2.7-2.3 7.1-2.1 9.4.7l7.7 9-9.9 8.4z"/><path class="st1" d="M179.6 434.3c-1.2-.1-2.3.1-3.4.6l.1.2c2.6-1.2 5.9-.6 7.8 1.7l.7.8.2-.2-.7-.8c-1.1-1.3-2.8-2.2-4.7-2.3zm12.2 11.6l-8.1 6.8.2.2 8.3-7-4.4-5.2-.2.2 4.2 5zm-18-9.1c-1.8 2.1-1.9 5.2-.4 7.7l.2-.1c-1.4-2.3-1.4-5.3.3-7.4l-.1-.2zm7.4 17l.2-.2-3.7-4.4-.2.2 3.7 4.4z"/></g></g><g><path class="st3" d="M630.9 587.7H74.2c-1.6 0-2.9-1.3-2.9-2.9 0-1.6 1.3-2.9 2.9-2.9H631c1.6 0 2.9 1.3 2.9 2.9-.1 1.6-1.4 2.9-3 2.9z"/></g><g><path transform="rotate(-40.957 194.403 297.627)" class="st2" d="M179.5 288.7H209.2V306.4H179.5z"/><path transform="rotate(-40.957 148.955 337.083)" class="st4" d="M103.6 323.8H194.2V350.40000000000003H103.6z"/><path class="st4" d="M294.2 300.4c28.1-24.4 31.2-67.2 6.7-95.3-24.4-28.1-67.2-31.2-95.3-6.7-25.9 22.5-30.5 60.4-12.1 88.2 1.6 2.4 3.4 4.8 5.4 7.1 2 2.3 4.1 4.4 6.2 6.3 25 22.1 63.3 22.9 89.1.4zm-76.9-88.6c20.7-18 52.3-15.8 70.3 5s15.8 52.3-5 70.3-52.3 15.8-70.3-5-15.8-52.3 5-70.3z"/><g style="opacity:.5"><path class="st2" d="M212.3 282.1c-18-20.8-15.8-52.3 5-70.3 20.7-18 52.3-15.8 70.3 5s15.8 52.3-5 70.3c-20.7 17.9-52.3 15.7-70.3-5z"/></g><g><path class="st1" d="M263.6 217c.2-.4.4-.7.8-1 1-.8 2.5-.5 3.2.5l20.8 28.3c.8 1 .5 2.5-.5 3.2-1 .8-2.5.5-3.2-.5l-20.8-28.3c-.5-.6-.6-1.5-.3-2.2zM252.5 225.2c.2-.4.4-.7.8-1 1-.8 2.5-.5 3.2.5l20.8 28.3c.8 1 .5 2.5-.5 3.2-1 .8-2.5.5-3.2-.5l-20.8-28.3c-.5-.6-.6-1.5-.3-2.2z"/></g></g><g><path class="st3" d="M410 551.8l-12.9 6.5c-.2-.4-.3-.9-.2-1.4.1-.6.5-1 .9-1.3.5-.3 1-.6 1.5-.8 1.2-.7 2.2-1.6 3-2.8.4-.6.7-1.2 1.2-1.8l3.6-1.7c.7.3 1.4.8 1.9 1.4.4.5.7 1.2 1 1.9zM422.6 556.4l-14.4 1.9c-.1-.5 0-1 .2-1.4.3-.5.8-.8 1.3-1 .5-.2 1.1-.2 1.7-.3 1.4-.2 2.6-.8 3.7-1.6.6-.4 1.1-.9 1.7-1.3l3.9-.4c.6.5 1.1 1.2 1.3 2 .4.7.5 1.4.6 2.1zM416.5 508.6L416.5 508.6 416.5 508.6z"/><g class="st11"><path class="st3" d="M414.6 478.3L414.6 478.3 414.6 478.3 414.6 478.3z"/></g><path class="st3" d="M416.5 508.6L416.5 508.6 416.5 508.6zM416.5 508.6L416.5 508.6 416.5 508.6z"/><path class="st2" d="M384.1 510.1l18.8 40.3 4.7-1.9-12-37.6 9.7-15.3 11 57.2 5.1-.3.1-73.2c.1-.7-30.9-2.6-30.9-2.6l-6.8 30.4c-.1 1.1 0 2 .3 3zm32.4-1.5z"/><g class="st11"><path class="st3" d="M416.5 508.6L416.5 508.6 416.5 508.6z"/></g><path class="st10" d="M352.8 484.7c1.5-1.5 3-2.8 4.5-4.2.4-.3.7-.7 1.1-1 .4-.4.7-.7 1.1-1l1-1.1.5-.5.5-.5c2.7-2.9 5.1-6 7.3-9.3 1-1.7 2.1-3.3 3.1-5l.7-1.3c.1-.2.2-.4.4-.6l.3-.7 1.3-2.6c.1-.2.2-.4.3-.7l.3-.7.6-1.3.6-1.3.3-.7.2-.3.1-.3 1.1-2.7c.4-.9.7-1.8 1.1-2.8.4-1.2 1.4-2 2.6-2.4 1.2-.4 2.6-.4 3.9.2 1.3.6 2.3 1.6 2.8 2.7.5 1.2.5 2.5-.1 3.7-.5.9-1 1.8-1.6 2.8l-1.6 2.7-.2.3-.2.3-.4.7-.9 1.3-.9 1.3-.4.7c-.1.2-.3.4-.5.7l-1.8 2.6-.5.6c-.2.2-.3.4-.5.6l-1 1.3c-1.3 1.7-2.7 3.3-4.1 4.9-2.9 3.1-6 6.1-9.2 8.7l-.6.5-.6.5-1.3.9c-.4.3-.8.6-1.3.9-.4.3-.8.6-1.3.9-1.7 1.2-3.4 2.3-5 3.4-.5.4-1.3.3-1.9-.3-.3-.6-.3-1.4.2-1.9z"/><path class="st4" d="M383.8 465.5l5.6-12.2c1.7-3.7.4-8-3.3-9.7-3.7-1.7-8.4-.1-10 3.6l-5.6 12.2 13.3 6.1z"/><g><path class="st4" d="M389.8 435.7c-7.7 1.9-12.2 9.9-9.6 17.5l11.9 36.1c13.9 1.7 20.3-2.7 29.7-9.7l-12.4-33.5c-3-7.9-11.4-12.4-19.6-10.4z"/></g><g><path class="st1" d="M403.3 438.2c1.4 1 2.7 2.2 3.8 3.7l.3-.3c-1.1-1.4-2.4-2.7-3.8-3.7l-.3.3zm16 43.1l.2.3c.8-.6 1.5-1.1 2.3-1.7l.2-.2-3.2-8.7-.4.1 3.1 8.5c-.6.5-1.4 1.1-2.2 1.7zm-27.6 8.3h.3c2.7.3 5.1.5 7.3.4l-.1-.4c-2.2.1-4.5 0-7.2-.3l-7-21.2-.4.1 7.1 21.4zm20.6-3.7c-1 .5-1.9 1-3 1.4l.2.4c1.1-.5 2.1-1 3.1-1.5l-.3-.3zm2.1-26l.4-.2-3-8-.4.2 3 8zm-32.6-.2l.4-.1-2.1-6.5c-2.3-6.8 1.2-14.1 7.6-16.8.3-.1.6-.3 1-.4l-.2-.4-.9.3c-6.8 2.8-10.3 10.4-7.9 17.4l2.1 6.5z"/></g><g><path class="st4" d="M353.2 491.4c8.2 7.9 20.6 10.6 31.7 6l-11.3-26.9-20.4 20.9z"/><path class="st3" d="M373.6 470.4l29.2-1.4c-.2-3.3-.9-6.7-2.3-9.9-2.7-6.4-7.4-11.3-13.1-14.4l-13.8 25.7zM362.2 443.5l11.3 26.9 13.9-25.7c-7.4-4-16.7-4.8-25.2-1.2z"/><path class="st3" d="M373.6 470.4l11.3 26.9c11.6-4.9 18.4-16.4 17.8-28.3l-29.1 1.4z"/><path class="st4" d="M346.7 481.8c1.6 3.7 3.8 7 6.6 9.6l20.4-21-29-3.4c-.7 4.9-.1 9.9 2 14.8z"/></g><g><path class="st9" d="M371.3 467.3c.5-.6 1.3-.7 1.9-.3 1.8 1.2 3.7 2.4 5.6 3.4.9.5 1.9 1 2.9 1.4 1 .4 1.9.8 2.9 1.1 1 .3 1.9.5 2.8.5h1.2c.4 0 .8-.1 1.1-.2.3-.1.6-.3.9-.4.3-.2.5-.4.8-.6.2-.2.5-.5.7-.8.2-.3.4-.6.6-1 .4-.7.7-1.6 1-2.5.3-.9.5-1.8.7-2.8.4-2 .6-4 .7-6.1.1-2.1.2-4.2.2-6.4 0-2.1-.1-4.3-.2-6.5 0-1.4.5-2.6 1.5-3.6.9-.9 2.2-1.5 3.7-1.5 1.4 0 2.7.6 3.7 1.6.9 1 1.4 2.3 1.3 3.7-.2 2.3-.4 4.6-.8 6.8-.3 2.3-.7 4.6-1.1 6.9-.5 2.3-1 4.6-1.8 7-.4 1.2-.8 2.3-1.4 3.5-.6 1.2-1.2 2.3-2 3.4-.4.6-.9 1.1-1.4 1.6-.5.5-1.1 1-1.7 1.4-.6.4-1.3.8-2.1 1.1-.7.3-1.5.5-2.2.6-.7.1-1.5.1-2.2.1h-.6l-.5-.1c-.3-.1-.7-.1-1-.2-1.3-.3-2.5-.7-3.6-1.2s-2.2-1.1-3.2-1.7c-1-.6-2-1.3-2.9-2-1.9-1.4-3.6-2.8-5.3-4.3-.6-.5-.7-1.3-.2-1.9z"/><path class="st4" d="M406.8 461.8l.4-13.4c.1-4.1-2.8-7.6-6.8-7.7-4.1-.1-7.7 3.2-7.9 7.2l-.4 13.4 14.7.5z"/><path class="st1" d="M392.2 449.3h.4V448c0-.5.1-.9.2-1.4l-.4-.1c-.1.5-.2 1-.2 1.5v1.3zm11.3 12.8l3.7.1.1-4.1-.4-.1-.1 3.8-3.3-.1v.4zm3.7-11.4l-.2 4.9h.4l.2-5-.4.1zm-12.7-7.9l.4.1c1.5-1.4 3.4-2.2 5.5-2.2 1.7.1 3.3.7 4.4 1.8l.2-.3c-1.3-1.2-2.9-1.8-4.6-1.9-1.1 0-2.2.2-3.3.6-1 .5-1.9 1.1-2.6 1.9zm-2.6 15.2l.4.1.1-3.4h-.4l-.1 3.3zm4.5 3.9l3.4.1v-.4l-3.3-.1-.1.4z"/></g><g><path class="st9" d="M383 434.5l4.8 8.4c2.5.2 4.3-.9 5.5-3.1l-4.8-8.4-5.5 3.1z"/><path class="st10" d="M383 434.5l2.2 3.8c.5-.1.9-.2 1.4-.4.1-.1.3-.1.4-.2 1.5-.9 2.5-2.4 2.8-4l-1.3-2.3-5.5 3.1z"/><path class="st9" d="M377.6 430.8l2.1 3.5.9 1.4c1.2 1.9 3.7 2.7 5.7 1.7.7-.3 1.3-.8 1.7-1.3.1-.1.2-.3.3-.4.1-.1.1-.2.2-.3.5-.9.8-1.8.7-2.9-.1-.9-.2-1.8-.3-2.8-.1-.6-.2-1.1-.3-1.7-.5-2.5-2.3-4.6-4.7-5.3-2.1-.6-4-.1-5.6 1.6-1.7 1.8-2 4.4-.7 6.5z"/><path class="st3" d="M385.7 429.1h-.8s0-3.2-.8-3.9c-1.2-1-4.5.3-5.9 1.4-.4.4-.7.7-.7 1.3.1 1.2.5 3.5 1.7 5.5 0 0-5-5.2-4.5-9.4.3-2.8.8-4.8 4.3-4.8 5.5 0 9.6 2.7 11.2 8.4l-3.5.2-1 1.3z"/><g><path class="st9" d="M385.9 429.5c.6 1 2 1.3 3.1.7s1.6-2 1-3c-.6-1-2-1.3-3.1-.7-1.2.6-1.6 2-1 3z"/></g></g></g><g><path class="st5" d="M305 499.7H375.1V558.3H305z"/><path class="st13" d="M281.2 499.7H305V558.3H281.2z"/><path class="st13" d="M305 499.7L295.6 517.6 269.4 517.6 281.2 499.7zM386 519.6L316 524.1 305 499.7 375.1 504.2z"/><path class="st5" d="M386 519.6L316 519.6 305 499.7 375.1 499.7zM305 499.7L299.7 519.7 269.4 517.6 295.6 517.6z"/></g><g><path class="st0" d="M38.9 241.8c3.5-18.6 10.8-36.5 20.7-52.7 5-8.1 10.7-15.8 17.1-22.9 3.2-3.6 6.5-7 10-10.3 3.5-3.3 7.1-6.4 10.8-9.4 15-11.9 32.3-20.9 50.6-26.7 9.2-2.9 18.6-4.9 28.1-6.1 2.4-.3 4.8-.5 7.1-.8l3.6-.3c1.2-.1 2.4-.1 3.6-.2 4.8-.2 9.6-.2 14.4 0 4.8.2 9.6.7 14.3 1.3 4.8.6 9.5 1.5 14.2 2.5 2.3.5 4.7 1.1 7 1.7l3.5 1c1.2.3 2.3.7 3.4 1.1.6.2 1.1.4 1.7.5l1.7.6c1.1.4 2.3.8 3.4 1.2 1.1.4 2.2.8 3.4 1.3l3.3 1.4c.6.2 1.1.5 1.7.7l1.6.7 3.3 1.5 3.2 1.6 1.6.8 1.6.8 3.2 1.7 3.1 1.7 1.6.9 1.5.9 3.1 1.8c4.1 2.4 8.1 4.9 12.1 7.5 4 2.6 7.9 5.2 11.9 7.9 7.8 5.3 15.6 10.7 23.5 15.9 3.9 2.6 7.9 5.1 11.9 7.6 4 2.4 8.1 4.8 12.2 7.1 2 1.2 4.1 2.2 6.2 3.3 1 .6 2.1 1 3.2 1.6 1.1.5 2.1 1.1 3.2 1.5 2.1 1 4.3 2 6.5 2.8 1.1.4 2.2.9 3.3 1.3l3.3 1.2 3.3 1.2c1.1.4 2.2.8 3.4 1.1l3.4 1c.6.2 1.1.3 1.7.5l1.7.4c1.1.3 2.3.6 3.4.8l3.5.7c.6.1 1.2.2 1.7.3l1.7.3 3.5.5c-9.4-.8-18.8-2.7-27.8-5.6-9-2.9-17.8-6.7-26.3-11-4.3-2.1-8.4-4.4-12.5-6.8-4.1-2.4-8.2-4.8-12.2-7.3s-8-5.1-12-7.6l-11.9-7.7c-4-2.6-7.9-5.1-11.9-7.6s-8-4.9-12.1-7.3l-3.1-1.7-1.5-.9-1.5-.8-3.1-1.7-3.1-1.6-1.6-.8-1.6-.8-3.2-1.5-3.2-1.4-1.6-.7c-.5-.2-1.1-.4-1.6-.7-17.2-7.2-35.7-11.2-54.3-11.9-18.6-.8-37.4 1.5-55.2 6.9-4.5 1.3-8.9 2.9-13.2 4.6-4.3 1.7-8.6 3.7-12.7 5.8-8.3 4.2-16.2 9.2-23.7 14.8-7.4 5.7-14.4 11.9-20.8 18.8-6.4 6.8-12.2 14.2-17.4 22-10.6 15.9-18.3 33.3-22.9 51.7z"/></g><g><path class="st0" d="M658 370.2c6.5 13.9 10.3 29.1 11.5 44.5 1.1 15.4-.4 31.1-4.6 46.1-4.2 14.9-11.2 29.1-20.3 41.6-9.1 12.5-20.3 23.5-33.2 31.9 11.9-9.7 22.3-21 30.7-33.6 8.4-12.6 14.9-26.4 19-41 4.1-14.5 5.9-29.7 5.3-44.9-.4-15.1-3.3-30.2-8.4-44.6z"/></g><g><path class="st1" d="M639.8 422.2c.4 9.5-.9 19.2-3.6 28.3-1.4 4.6-3.1 9.1-5.2 13.4-2.1 4.3-4.6 8.5-7.3 12.4-2.8 3.9-5.9 7.6-9.2 11.1-3.4 3.4-7 6.6-10.9 9.4-7.7 5.7-16.4 10.1-25.5 12.9 8.8-3.5 17.1-8.3 24.6-14.1 3.7-2.9 7.2-6.1 10.5-9.5 3.3-3.4 6.3-7 9-10.9 2.7-3.8 5.1-7.9 7.3-12.1 2.1-4.2 3.9-8.6 5.4-13.1 2.9-8.8 4.5-18.2 4.9-27.8z"/></g></svg> |
| New file |
| | |
| | | <?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="1693028338187" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="22985" width="128" height="128" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M983.8 312.7C958 251.7 921 197 874 150c-47-47-101.8-83.9-162.7-109.7C648.2 13.5 581.1 0 512 0S375.8 13.5 312.7 40.2C251.7 66 197 102.9 150 150c-47 47-83.9 101.8-109.7 162.7C13.5 375.8 0 442.9 0 512s13.5 136.2 40.2 199.3C66 772.3 102.9 827 150 874c47 47 101.8 83.9 162.7 109.7 63.1 26.7 130.2 40.2 199.3 40.2s136.2-13.5 199.3-40.2C772.3 958 827 921 874 874c47-47 83.9-101.8 109.7-162.7 26.7-63.1 40.2-130.2 40.2-199.3s-13.4-136.2-40.1-199.3z m-55.3 375.2c-22.8 53.8-55.4 102.2-96.9 143.7s-89.9 74.1-143.7 96.9C632.2 952.1 573 964 512 964s-120.2-11.9-175.9-35.5c-53.8-22.8-102.2-55.4-143.7-96.9s-74.1-89.9-96.9-143.7C71.9 632.2 60 573 60 512s11.9-120.2 35.5-175.9c22.8-53.8 55.4-102.2 96.9-143.7s89.9-74.1 143.7-96.9C391.8 71.9 451 60 512 60s120.2 11.9 175.9 35.5c53.8 22.8 102.2 55.4 143.7 96.9s74.1 89.9 96.9 143.7C952.1 391.8 964 451 964 512s-11.9 120.2-35.5 175.9z" fill="#000000" p-id="22986"></path><path d="M706 469.1H574.7l84.2-180.6c7-15 0.4-32.9-14.5-39.9-15-7-32.9-0.4-39.9 14.5L512 461.5l-92.5-198.3c-7-15-24.9-21.5-39.9-14.5s-21.5 24.9-14.5 39.9l84.2 180.6H318c-16.5 0-30 13.5-30 30s13.5 30 30 30h164v64h-92.5c-20.6 0-37.5 13.5-37.5 30s16.9 30 37.5 30H482v95c0 16.5 13.5 30 30 30s30-13.5 30-30v-95h92.5c20.6 0 37.5-13.5 37.5-30s-16.9-30-37.5-30H542v-64h164c16.5 0 30-13.5 30-30 0-16.6-13.5-30.1-30-30.1z" fill="#000000" p-id="22987"></path></svg> |
| New file |
| | |
| | | <?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="1693028553383" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="28918" width="128" height="128" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M510.72 962.56C262.4 960 61.44 757.76 64 509.44 66.56 263.68 264.96 65.28 510.72 62.72c17.92 0 34.56 14.08 34.56 32s-14.08 34.56-32 34.56h-2.56C299.52 130.56 128 300.8 128 512s171.52 382.72 382.72 382.72S893.44 723.2 893.44 512c0-17.92 16.64-33.28 34.56-32 17.92 0 32 15.36 32 32 0 248.32-200.96 450.56-449.28 450.56z" fill="#000000" p-id="28919"></path><path d="M645.12 480H375.04c-17.92 0-34.56-14.08-34.56-32s14.08-34.56 32-34.56h272.64c17.92 0 33.28 16.64 32 34.56 0 17.92-14.08 32-32 32z m0 130.56H375.04c-17.92 0-33.28-16.64-32-34.56 0-17.92 15.36-32 32-32h270.08c17.92 0 33.28 16.64 32 34.56 0 16.64-14.08 32-32 32z" fill="#000000" p-id="28920"></path><path d="M510.72 746.24c-17.92 0-33.28-15.36-33.28-33.28V441.6c0-17.92 16.64-33.28 34.56-32 17.92 0 32 15.36 32 32v270.08c0 19.2-15.36 34.56-33.28 34.56z" fill="#000000" p-id="28921"></path><path d="M510.72 458.24c-8.96 0-17.92-3.84-24.32-10.24l-111.36-111.36c-14.08-12.8-15.36-33.28-2.56-47.36s33.28-15.36 47.36-2.56l2.56 2.56 111.36 111.36c12.8 12.8 12.8 34.56 0 47.36-6.4 6.4-15.36 10.24-23.04 10.24z" fill="#000000" p-id="28922"></path><path d="M510.72 458.24c-8.96 0-17.92-3.84-24.32-10.24-12.8-12.8-12.8-34.56 0-47.36l111.36-111.36c14.08-12.8 35.84-10.24 47.36 2.56 11.52 12.8 11.52 32 0 44.8L533.76 448c-6.4 6.4-15.36 10.24-23.04 10.24zM925.44 241.92c17.92 0 33.28-15.36 33.28-33.28 0-8.96-3.84-17.92-10.24-24.32l-111.36-111.36c-12.8-14.08-33.28-14.08-47.36-1.28s-14.08 33.28-1.28 47.36l1.28 1.28 111.36 111.36c7.68 6.4 15.36 10.24 24.32 10.24z" fill="#000000" p-id="28923"></path><path d="M815.36 353.28c8.96 0 17.92-3.84 24.32-10.24l111.36-111.36c12.8-14.08 10.24-35.84-2.56-47.36-12.8-11.52-32-11.52-44.8 0l-111.36 111.36c-12.8 12.8-12.8 34.56 0 47.36 5.12 6.4 14.08 10.24 23.04 10.24z" fill="#000000" p-id="28924"></path><path d="M920.32 241.92c17.92 0 34.56-14.08 34.56-32s-14.08-34.56-32-34.56H695.04c-17.92 0-33.28 16.64-32 34.56 0 17.92 15.36 32 32 32h225.28z" fill="#000000" p-id="28925"></path></svg> |
| New file |
| | |
| | | <?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="1693027700643" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8876" width="128" height="128" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M936.96 385.877333l-203.434667-204.8-18.090667-7.68L308.565333 173.397333l-18.090667 7.68L87.04 385.877333c-9.728 9.898667-9.898667 25.941333-0.170667 35.84l406.869333 421.034667c4.778667 4.949333 11.434667 7.850667 18.432 7.850667 6.997333 0 13.653333-2.901333 18.432-7.850667l406.869333-421.034667C946.858667 411.648 946.688 395.776 936.96 385.877333zM868.522667 389.632l-141.994667 0-163.84-165.034667 141.994667 0L868.522667 389.632zM319.317333 224.768l143.018667 0-163.84 165.034667L155.477333 389.802667 319.317333 224.768zM176.469333 440.832l132.608 0 18.090667-7.509333 185.173333-186.538667 185.173333 186.538667 18.090667 7.509333 131.584 0L512 787.968 176.469333 440.832z" p-id="8877" fill="#000000"></path></svg> |
| New file |
| | |
| | | <svg t="1693027780777" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10083" width="128" height="128"><path d="M509.091764 501.653351c241.775532 0 424.086741-78.085426 424.086741-181.63992 0-103.543238-182.311209-181.628664-424.086741-181.628664S84.993766 216.471217 84.993766 320.014454C84.993766 423.568948 267.316232 501.653351 509.091764 501.653351zM509.091764 184.220698c222.908836 0 378.251833 71.561849 378.251833 135.793756S732.001623 455.818443 509.091764 455.818443c-222.920092 0-378.26309-71.573105-378.26309-135.803989S286.171672 184.220698 509.091764 184.220698z" fill="#000000" p-id="10084"></path><path d="M509.083577 694.061522c241.1155 0 422.937568-77.598332 422.937568-180.482561 0-27.169803-13.127995-52.453652-36.241412-75.131141-0.148379-0.153496-0.26606-0.320295-0.418532-0.468674-0.170892-0.166799-0.285502-0.345877-0.456395-0.51063l-0.11461 0.125867c-3.717671-3.40761-8.576329-5.608741-14.017248-5.608741-11.542894 0-20.898982 9.356089-20.898982 20.898982 0 6.110161 2.721994 11.481496 6.901177 15.302521l-0.082888 0.091074c13.948687 14.024411 21.809725 31.154557 21.809725 45.300742 0 64.785515-155.813718 136.966465-379.419426 136.966465-223.595474 0-379.410216-72.180949-379.410216-136.966465 0-16.139585 4.53734-29.952172 22.323425-45.670156 0.213871-0.204661 0.429789-0.381693 0.635473-0.594541 0.137123-0.118704 0.240477-0.233314 0.378623-0.354064l-0.084934-0.080841c3.416819-3.719718 5.623068-8.588609 5.623068-14.037714 0-11.542894-9.356089-20.898982-20.898982-20.898982-5.770424 0-10.993378 2.340301-14.773472 6.119371l-0.122797-0.118704c-23.408129 22.797215-36.594453 48.27754-36.594453 75.635631C86.158289 616.462167 267.979334 694.061522 509.083577 694.061522z" fill="#000000" p-id="10085"></path><path d="M895.577119 629.529787c-0.168846-0.164752-0.282433-0.342808-0.453325-0.50756l-0.11461 0.124843c-3.717671-3.40761-8.577353-5.608741-14.018272-5.608741-11.540847 0-20.897959 9.356089-20.897959 20.898982 0 6.110161 2.720971 11.482519 6.901177 15.302521l-0.083911 0.091074c13.94971 14.024411 21.810748 31.154557 21.810748 45.300742 0 64.787562-155.813718 136.966465-379.419426 136.966465-223.595474 0-379.410216-72.179926-379.410216-136.966465 0-16.139585 4.53734-29.952172 22.321378-45.670156 0.213871-0.202615 0.429789-0.381693 0.635473-0.594541 0.137123-0.118704 0.240477-0.233314 0.378623-0.354064l-0.084934-0.080841c3.416819-3.719718 5.623068-8.588609 5.623068-14.037714 0-11.542894-9.356089-20.898982-20.897959-20.898982-5.770424 0-10.993378 2.340301-14.773472 6.119371l-0.122797-0.118704c-23.410176 22.797215-36.594453 48.278563-36.594453 75.635631 0 102.884228 181.821045 180.482561 422.926312 180.482561 241.114476 0 422.935522-77.598332 422.935522-180.482561 0-27.166733-13.125949-52.452629-36.235272-75.127048C895.851365 629.847012 895.730615 629.681236 895.577119 629.529787z" fill="#000000" p-id="10086"></path></svg> |
| New file |
| | |
| | | <?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="1693028440322" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="25843" width="128" height="128" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M512 750.509317c-19.080745 0-31.801242-12.720497-31.801242-31.801242L480.198758 432.496894c0-19.080745 12.720497-31.801242 31.801242-31.801242s31.801242 12.720497 31.801242 31.801242l0 286.21118C537.440994 737.78882 524.720497 750.509317 512 750.509317z" fill="#000000" p-id="25844"></path><path d="M651.925466 534.26087 365.714286 534.26087c-19.080745 0-31.801242-12.720497-31.801242-31.801242 0-19.080745 12.720497-31.801242 31.801242-31.801242l286.21118 0c19.080745 0 31.801242 12.720497 31.801242 31.801242C683.726708 521.540373 671.006211 534.26087 651.925466 534.26087z" fill="#000000" p-id="25845"></path><path d="M651.925466 648.745342 365.714286 648.745342c-19.080745 0-31.801242-12.720497-31.801242-31.801242 0-19.080745 12.720497-31.801242 31.801242-31.801242l286.21118 0c19.080745 0 31.801242 12.720497 31.801242 31.801242C683.726708 636.024845 671.006211 648.745342 651.925466 648.745342z" fill="#000000" p-id="25846"></path><path d="M512 464.298137c-6.360248 0-19.080745 0-25.440994-6.360248L352.993789 324.372671c-12.720497-12.720497-12.720497-31.801242 0-44.521739 12.720497-12.720497 31.801242-12.720497 44.521739 0l133.565217 133.565217c12.720497 12.720497 12.720497 31.801242 0 44.521739C524.720497 464.298137 518.360248 464.298137 512 464.298137z" fill="#000000" p-id="25847"></path><path d="M512 464.298137c-6.360248 0-19.080745 0-25.440994-6.360248-12.720497-12.720497-12.720497-31.801242 0-44.521739l133.565217-133.565217c12.720497-12.720497 31.801242-12.720497 44.521739 0 12.720497 12.720497 12.720497 31.801242 0 44.521739L531.080745 457.937888C524.720497 464.298137 518.360248 464.298137 512 464.298137z" fill="#000000" p-id="25848"></path><path d="M512 1017.639752c-279.850932 0-508.819876-228.968944-508.819876-508.819876s228.968944-508.819876 508.819876-508.819876 508.819876 228.968944 508.819876 508.819876c0 25.440994 0 50.881988-6.360248 82.68323 0 19.080745-19.080745 31.801242-38.161491 25.440994-19.080745 0-31.801242-19.080745-25.440994-38.161491 6.360248-25.440994 6.360248-44.521739 6.360248-69.962733 0-248.049689-197.167702-445.217391-445.217391-445.217391S66.782609 267.130435 66.782609 515.180124s197.167702 445.217391 445.217391 445.217391c25.440994 0 57.242236 0 82.68323-6.360248 19.080745-6.360248 31.801242 6.360248 38.161491 25.440994 6.360248 19.080745-6.360248 31.801242-25.440994 38.161491C575.602484 1017.639752 543.801242 1017.639752 512 1017.639752z" fill="#000000" p-id="25849"></path><path d="M989.018634 864.993789l-318.012422 0c-19.080745 0-31.801242-12.720497-31.801242-31.801242s12.720497-31.801242 31.801242-31.801242l318.012422 0c19.080745 0 31.801242 12.720497 31.801242 31.801242S1001.73913 864.993789 989.018634 864.993789z" fill="#000000" p-id="25850"></path><path d="M830.012422 1024c-19.080745 0-31.801242-12.720497-31.801242-31.801242l0-318.012422c0-19.080745 12.720497-31.801242 31.801242-31.801242s31.801242 12.720497 31.801242 31.801242l0 318.012422C861.813665 1004.919255 842.732919 1024 830.012422 1024z" fill="#000000" p-id="25851"></path></svg> |
| New file |
| | |
| | | <svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 20.967v59.59c0 11.59 8.537 20.966 19.075 20.966h28.613l1 26.477L76.8 101.523h32.125c10.538 0 19.075-9.377 19.075-20.966v-59.59C128 9.377 119.463 0 108.925 0h-89.85C8.538 0 0 9.377 0 20.967zm82.325 33.1c0-5.524 4.013-9.935 9.037-9.935 5.026 0 9.038 4.41 9.038 9.934 0 5.524-4.025 9.934-9.038 9.934-5.024 0-9.037-4.41-9.037-9.934zm-27.613 0c0-5.524 4.013-9.935 9.038-9.935s9.037 4.41 9.037 9.934c0 5.524-4.025 9.934-9.037 9.934-5.025 0-9.038-4.41-9.038-9.934zm-27.1 0c0-5.524 4.013-9.935 9.038-9.935s9.038 4.41 9.038 9.934c0 5.524-4.026 9.934-9.05 9.934-5.013 0-9.025-4.41-9.025-9.934z"/></svg> |
| New file |
| | |
| | | <svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M54.122 127.892v-28.68H7.513V87.274h46.609v-12.4H7.513v-12.86h38.003L.099 0h22.6l32.556 45.07c3.617 5.144 6.44 9.611 8.487 13.385 1.788-3.05 4.89-7.779 9.301-14.186L103.93 0h24.01L82.385 62.013h38.34v12.862h-46.41v12.4h46.41v11.937h-46.41v28.68H54.123z"/></svg> |
| New file |
| | |
| | | <svg t="1627279997305" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11904" width="40" height="40"><path d="M938.7008 669.525333L938.7008 249.412267c0-90.555733-73.5232-164.078933-164.1472-164.078933L249.378133 85.333333c-90.555733 0-164.078933 73.48906699-164.078933 164.078933l0 525.2096c0 90.555733 73.454933 164.078933 164.07893301 164.078933l525.20959999 0c80.725333 0 147.8656-58.368 161.553067-135.099733-43.52-18.8416-232.106667-100.283733-330.376533-147.182933-74.786133 90.589867-153.088 144.930133-271.121067 144.930133s-196.81279999-72.704-187.357867-161.655467c6.2464-58.402133 46.2848-153.9072 220.296533-137.5232 91.682133 8.6016 133.666133 25.736533 208.418133 50.414933 19.3536-35.4304 35.4304-74.513067 47.616-116.0192L292.0448 436.565333l0-32.8704 164.0448 0 0-58.9824L256 344.712533l1e-8-36.181333 200.12373299 0L456.123733 223.3344c0 0 1.809067-13.312 16.520533-13.31200001l82.056533 1e-8 0 98.474667 213.333333 0 0 36.181333-213.333333 1e-8 0 58.98239999 174.045867 0c-16.00853301 65.1264-40.277333 124.962133-70.690133 177.220267C708.608 599.176533 938.7008 669.525333 938.7008 669.525333L938.7008 669.525333 938.7008 669.525333 938.7008 669.525333zM321.57013299 744.994133c-124.7232 0-144.452267-78.7456-137.83039999-111.65013299 6.5536-32.733867 42.666667-75.502933 112.0256-75.50293301 79.6672 0 151.04 20.445867 236.714667 62.088533C472.302933 698.333867 398.370133 744.994133 321.57013299 744.994133L321.57013299 744.994133 321.57013299 744.994133zM321.57013299 744.994133" fill="#1296db" p-id="11905"></path></svg> |
| New file |
| | |
| | | <?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="1627279586085" class="icon" viewBox="0 0 1036 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6737" xmlns:xlink="http://www.w3.org/1999/xlink" width="40.46875" height="40"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff2") format("woff2"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff") format("woff"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.ttf") format("truetype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.svg#iconfont") format("svg"); } |
| | | </style></defs><path d="M27.587124 336.619083h69.148134a13.978733 13.978733 0 0 0 13.79235-13.978733V13.989916A13.978733 13.978733 0 0 0 96.735258 0.011183H27.587124a13.978733 13.978733 0 0 0-13.792351 13.978733v308.650434a13.978733 13.978733 0 0 0 13.792351 13.978733z m165.880969 0h27.584701a13.978733 13.978733 0 0 0 13.79235-13.978733V13.989916a13.978733 13.978733 0 0 0-13.79235-13.978733h-27.584701a13.978733 13.978733 0 0 0-13.79235 13.978733v308.650434a13.978733 13.978733 0 0 0 13.79235 13.978733z m138.109886 322.629167h-110.525185a27.771084 27.771084 0 0 0-27.584701 28.14385v111.829867a27.771084 27.771084 0 0 0 27.584701 28.14385h110.525185a27.957467 27.957467 0 0 0 27.584701-28.14385v-111.829867a27.957467 27.957467 0 0 0-27.584701-28.14385z m484.596091-322.629167h27.584701a13.978733 13.978733 0 0 0 13.79235-13.978733V13.989916a13.978733 13.978733 0 0 0-14.537883-13.978733h-27.5847a13.978733 13.978733 0 0 0-13.978734 13.978733v308.650434a13.978733 13.978733 0 0 0 13.978734 13.978733z m-469.871825 0H428.68358a13.978733 13.978733 0 0 0 13.792351-13.978733V13.989916A13.978733 13.978733 0 0 0 428.68358 0.011183h-83.126867a13.978733 13.978733 0 0 0-13.792351 13.978733v308.650434a13.978733 13.978733 0 0 0 13.792351 13.978733z m594.189361 0h69.148134a13.978733 13.978733 0 0 0 13.792351-13.978733V13.989916a13.978733 13.978733 0 0 0-14.537883-13.978733h-69.148135a13.978733 13.978733 0 0 0-13.79235 13.978733v308.650434a13.978733 13.978733 0 0 0 13.79235 13.978733z m-412.279444 126.181367H66.91396A67.470687 67.470687 0 0 0 0.002423 530.830286v425.139878a67.470687 67.470687 0 0 0 66.911537 68.029836h418.802853a67.470687 67.470687 0 0 0 66.911537-68.029836V487.775787a24.788954 24.788954 0 0 0-24.416188-24.975337z m-58.337914 433.899885a42.681733 42.681733 0 0 1-42.495349 43.054498H125.438257a42.681733 42.681733 0 0 1-42.495349-43.054498V590.100115a42.681733 42.681733 0 0 1 42.495349-43.054498h301.940642a42.681733 42.681733 0 0 1 42.495349 43.054498z m525.22761-433.899885a41.749817 41.749817 0 0 0-41.377051 42.122583v55.914934a41.377051 41.377051 0 1 0 82.940485 0v-55.914934a41.749817 41.749817 0 0 0-41.563434-42.122583z m0 223.659734a41.749817 41.749817 0 0 0-41.377051 42.122584V894.65012a45.477479 45.477479 0 0 1-45.291096 45.850246h-159.730327a43.240882 43.240882 0 0 0-43.613649 37.276622A41.9362 41.9362 0 0 0 745.534871 1024h233.538039a57.778765 57.778765 0 0 0 57.405999-58.337914V729.3283a41.749817 41.749817 0 0 0-41.377051-41.9362zM732.488053 322.64035V13.989916a13.978733 13.978733 0 0 0-13.79235-13.978733h-82.940485a13.978733 13.978733 0 0 0-13.79235 13.978733v308.650434a13.978733 13.978733 0 0 0 13.79235 13.978733h82.940485a13.978733 13.978733 0 0 0 13.79235-13.978733zM532.126208 0.011183c-11.36937 0-20.688525 6.337026-20.688526 13.978733v308.650434c0 7.828091 9.319156 13.978733 20.688526 13.978733s20.688525-6.337026 20.688525-13.978733V13.989916c0-7.641708-9.319156-13.978733-20.688525-13.978733z" p-id="6738" fill="#1977FD"></path><path d="M745.534871 462.80045a41.749817 41.749817 0 0 0-41.377051 42.122583v252.549117a41.377051 41.377051 0 1 0 82.940485 0V504.923033A41.749817 41.749817 0 0 0 745.534871 462.80045" p-id="6739" fill="#1977FD"></path></svg> |
| New file |
| | |
| | | <svg t="1627279878333" class="icon" viewBox="0 0 1285 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8535" width="40" height="40"><path d="M1141.76 855.04h-286.72c0 40.96 30.72 71.68 71.68 71.68h107.52c20.48 0 35.84 15.36 35.84 35.84s-15.36 35.84-35.84 35.84h-783.36c-20.48 0-35.84-15.36-35.84-35.84s15.36-35.84 35.84-35.84h107.52c40.96 0 71.68-30.72 71.68-71.68h-286.72c-76.8 0-143.36-61.44-143.36-143.36v-568.32c0-76.8 61.44-143.36 143.36-143.36h993.28c76.8 0 143.36 61.44 143.36 143.36v568.32c5.12 76.8-56.32 143.36-138.24 143.36z m71.68-711.68c0-40.96-30.72-71.68-71.68-71.68h-993.28c-40.96 0-71.68 30.72-71.68 71.68v568.32c0 40.96 30.72 71.68 71.68 71.68h993.28c40.96 0 71.68-30.72 71.68-71.68v-568.32z m-143.36 568.32h-855.04c-40.96 0-71.68-30.72-71.68-71.68v-424.96c0-40.96 30.72-71.68 71.68-71.68h855.04c40.96 0 71.68 30.72 71.68 71.68v424.96c0 40.96-30.72 71.68-71.68 71.68z" p-id="8536" fill="#1977FD"></path></svg> |
| New file |
| | |
| | | <?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="1627279238245" class="icon" viewBox="0 0 1115 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4112" width="43.5546875" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff2") format("woff2"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff") format("woff"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.ttf") format("truetype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.svg#iconfont") format("svg"); } |
| | | </style></defs><path d="M751.388 68.267a34.133 34.133 0 0 1 0-68.267h227.556a91.022 91.022 0 0 1 91.022 91.022v227.556a34.133 34.133 0 1 1-68.266 0V91.022a22.756 22.756 0 0 0-22.756-22.755H751.388M1001.7 705.422a34.133 34.133 0 0 1 68.266 0v227.556A91.022 91.022 0 0 1 978.944 1024H748.885a34.133 34.133 0 0 1 0-68.267H978.49a22.756 22.756 0 0 0 22.755-22.755V705.422M364.09 955.733a34.133 34.133 0 1 1 0 68.267H136.533a91.022 91.022 0 0 1-91.022-91.022V705.422a34.133 34.133 0 0 1 68.267 0v227.556a22.756 22.756 0 0 0 22.755 22.755H364.09M113.778 318.578a34.133 34.133 0 1 1-68.267 0V91.022A91.022 91.022 0 0 1 136.533 0H364.09a34.133 34.133 0 0 1 0 68.267H136.533a22.756 22.756 0 0 0-22.755 22.755v227.556M34.133 477.867a34.133 34.133 0 0 0 0 68.266h168.619v-68.266z m1046.756 0H912.27v68.266h168.619a34.133 34.133 0 0 0 0-68.266zM202.752 157.24h709.746v320.627H202.752z m0 388.893h709.746V866.76H202.752z" fill="#1977FD" p-id="4113"></path></svg> |
| New file |
| | |
| | | <?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="1645964864184" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8460" xmlns:xlink="http://www.w3.org/1999/xlink" width="40" height="40"><defs><style type="text/css"></style></defs><path d="M768.3 0 255.7 0c-70.8 0-128.1 57.4-128.1 128.1l0 767.8c0 70.8 57.4 128.1 128.1 128.1L512 1024l256.3 0c70.8 0 128.1-57.4 128.1-128.1L896.4 128.1C896.4 57.3 839 0 768.3 0zM383.9 96.1c0-17.7 14.3-32 32-32l192.2 0c17.7 0 32 14.3 32 32l0 0c0 17.7-14.3 32-32 32L415.9 128.1C398.2 128.1 383.9 113.8 383.9 96.1L383.9 96.1zM512 959.9 512 959.9 512 959.9c-35.4 0-64.1-28.8-64.1-64.1 0-35.4 28.7-64.1 64.1-64.1l0 0 0 0c35.4 0 64.1 28.7 64.1 64.1C576.1 931.1 547.4 959.9 512 959.9zM832.3 755.6c0 6.7-5.4 12.2-12.2 12.2L203.9 767.8c-6.7 0-12.2-5.4-12.2-12.2L191.7 204.3c0-6.7 5.4-12.2 12.2-12.2l616.3 0c6.7 0 12.2 5.4 12.2 12.2L832.4 755.6z" p-id="8461" fill="#1977FD"></path></svg> |
| New file |
| | |
| | | <?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="1747409043186" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4834" width="128" height="128" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M44.416 853.333333v-85.205333a170.666667 170.666667 0 0 1 170.666667-170.666667h170.837333a37637.589333 37637.589333 0 0 1 0-206.165333C324.309333 352.170667 281.6 285.141333 281.6 211.968c0-116.906667 90.197333-211.072 231.168-211.072 140.970667 0 230.741333 94.208 230.741333 211.072 0 73.216-40.96 140.245333-102.528 179.328 0.256 0.170667 0.256 68.906667 0 206.165333h171.989334a170.666667 170.666667 0 0 1 170.666666 170.666667V853.333333a170.666667 170.666667 0 0 1-170.666666 170.666667H215.082667a170.666667 170.666667 0 0 1-170.666667-170.666667z m84.266667-84.650666v104.277333a85.333333 85.333333 0 0 0 85.333333 85.333333H811.52a85.333333 85.333333 0 0 0 85.333333-85.333333v-104.277333a85.333333 85.333333 0 0 0-85.333333-85.333334h-256.64l8.96-342.698666c66.944-21.333333 100.394667-64.256 100.394667-128.682667 0-61.952-57.344-129.322667-151.466667-129.322667-94.122667 0-146.645333 61.610667-146.645333 129.322667 0 71.466667 34.816 114.346667 104.362666 128.682667v342.698666H214.016a85.333333 85.333333 0 0 0-85.333333 85.333334z m167.125333 138.368c-50.432 0-91.434667-41.557333-91.434667-92.586667s41.002667-92.586667 91.434667-92.586667c50.389333 0 91.434667 41.557333 91.434667 92.586667 0 24.832-9.6 48.170667-27.008 65.706667-17.237333 17.322667-40.106667 26.88-64.426667 26.88z m0-119.466667a27.093333 27.093333 0 0 0-27.306667 26.88c0 14.805333 12.245333 26.88 27.306667 26.88a27.306667 27.306667 0 0 0 19.498667-8.106667 26.453333 26.453333 0 0 0 7.808-18.773333 27.093333 27.093333 0 0 0-27.306667-26.88z" fill="#1296db" p-id="4835"></path></svg> |
| New file |
| | |
| | | <?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="1676209854312" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3033" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M173.077333 362.666667l91.114667-214.677334a65.6 65.6 0 0 1 86.016-34.773333c11.584 4.906667 24.96 10.282667 40.896 16.448 8.277333 3.2 16.789333 6.464 27.904 10.666667 28.202667 10.709333 39.296 14.933333 46.144 17.642666l51.477333-51.669333c28.181333-28.16 74.112-27.946667 102.570667 0.533333l195.925333 195.925334c16.426667 16.426667 23.445333 38.634667 21.056 59.904H896a42.666667 42.666667 0 0 1 42.666667 42.666666v490.666667a42.666667 42.666667 0 0 1-42.666667 42.666667H128a42.666667 42.666667 0 0 1-42.666667-42.666667V405.333333a42.666667 42.666667 0 0 1 42.666667-42.666666h45.077333z m48.96 0h39.104l169.194667-169.770667-27.328-10.389333c-11.2-4.245333-19.818667-7.530667-28.224-10.794667a1459.2 1459.2 0 0 1-42.197333-17.002667 20.522667 20.522667 0 0 0-26.901334 10.88L222.037333 362.666667z m108.842667 0h454.954667a23.509333 23.509333 0 0 0-5.290667-25.322667l-195.925333-195.925333a23.36 23.36 0 0 0-33.024-0.213334L330.88 362.666667zM128 405.333333v490.666667h768V405.333333H128z m597.333333 320a85.333333 85.333333 0 1 1 0-170.666666 85.333333 85.333333 0 0 1 0 170.666666z m0-42.666666a42.666667 42.666667 0 1 0 0-85.333334 42.666667 42.666667 0 0 0 0 85.333334z" fill="#4296d5" p-id="3034"></path></svg> |
| New file |
| | |
| | | <?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="1627279375144" class="icon" viewBox="0 0 1115 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4399" width="43.5546875" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff2") format("woff2"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff") format("woff"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.ttf") format("truetype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.svg#iconfont") format("svg"); } |
| | | </style></defs><path d="M751.388 68.267a34.133 34.133 0 0 1 0-68.267h227.556a91.022 91.022 0 0 1 91.022 91.022v227.556a34.133 34.133 0 1 1-68.266 0V91.022a22.756 22.756 0 0 0-22.756-22.755H751.388M1001.7 705.422a34.133 34.133 0 0 1 68.266 0v227.556A91.022 91.022 0 0 1 978.944 1024H748.885a34.133 34.133 0 0 1 0-68.267H978.49a22.756 22.756 0 0 0 22.755-22.755V705.422M364.09 955.733a34.133 34.133 0 1 1 0 68.267H136.533a91.022 91.022 0 0 1-91.022-91.022V705.422a34.133 34.133 0 0 1 68.267 0v227.556a22.756 22.756 0 0 0 22.755 22.755H364.09M113.778 318.578a34.133 34.133 0 1 1-68.267 0V91.022A91.022 91.022 0 0 1 136.533 0H364.09a34.133 34.133 0 0 1 0 68.267H136.533a22.756 22.756 0 0 0-22.755 22.755v227.556M34.133 477.867a34.133 34.133 0 0 0 0 68.266h168.619v-68.266z m1046.756 0H912.27v68.266h168.619a34.133 34.133 0 0 0 0-68.266zM202.752 157.24h709.746v320.627H202.752z m0 388.893h709.746V866.76H202.752z" fill="#04C361" p-id="4400"></path></svg> |
| New file |
| | |
| | | <?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="1627279586085" class="icon" viewBox="0 0 1036 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6737" xmlns:xlink="http://www.w3.org/1999/xlink" width="40.46875" height="40"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff2") format("woff2"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff") format("woff"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.ttf") format("truetype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.svg#iconfont") format("svg"); }</style></defs><path d="M27.587124 336.619083h69.148134a13.978733 13.978733 0 0 0 13.79235-13.978733V13.989916A13.978733 13.978733 0 0 0 96.735258 0.011183H27.587124a13.978733 13.978733 0 0 0-13.792351 13.978733v308.650434a13.978733 13.978733 0 0 0 13.792351 13.978733z m165.880969 0h27.584701a13.978733 13.978733 0 0 0 13.79235-13.978733V13.989916a13.978733 13.978733 0 0 0-13.79235-13.978733h-27.584701a13.978733 13.978733 0 0 0-13.79235 13.978733v308.650434a13.978733 13.978733 0 0 0 13.79235 13.978733z m138.109886 322.629167h-110.525185a27.771084 27.771084 0 0 0-27.584701 28.14385v111.829867a27.771084 27.771084 0 0 0 27.584701 28.14385h110.525185a27.957467 27.957467 0 0 0 27.584701-28.14385v-111.829867a27.957467 27.957467 0 0 0-27.584701-28.14385z m484.596091-322.629167h27.584701a13.978733 13.978733 0 0 0 13.79235-13.978733V13.989916a13.978733 13.978733 0 0 0-14.537883-13.978733h-27.5847a13.978733 13.978733 0 0 0-13.978734 13.978733v308.650434a13.978733 13.978733 0 0 0 13.978734 13.978733z m-469.871825 0H428.68358a13.978733 13.978733 0 0 0 13.792351-13.978733V13.989916A13.978733 13.978733 0 0 0 428.68358 0.011183h-83.126867a13.978733 13.978733 0 0 0-13.792351 13.978733v308.650434a13.978733 13.978733 0 0 0 13.792351 13.978733z m594.189361 0h69.148134a13.978733 13.978733 0 0 0 13.792351-13.978733V13.989916a13.978733 13.978733 0 0 0-14.537883-13.978733h-69.148135a13.978733 13.978733 0 0 0-13.79235 13.978733v308.650434a13.978733 13.978733 0 0 0 13.79235 13.978733z m-412.279444 126.181367H66.91396A67.470687 67.470687 0 0 0 0.002423 530.830286v425.139878a67.470687 67.470687 0 0 0 66.911537 68.029836h418.802853a67.470687 67.470687 0 0 0 66.911537-68.029836V487.775787a24.788954 24.788954 0 0 0-24.416188-24.975337z m-58.337914 433.899885a42.681733 42.681733 0 0 1-42.495349 43.054498H125.438257a42.681733 42.681733 0 0 1-42.495349-43.054498V590.100115a42.681733 42.681733 0 0 1 42.495349-43.054498h301.940642a42.681733 42.681733 0 0 1 42.495349 43.054498z m525.22761-433.899885a41.749817 41.749817 0 0 0-41.377051 42.122583v55.914934a41.377051 41.377051 0 1 0 82.940485 0v-55.914934a41.749817 41.749817 0 0 0-41.563434-42.122583z m0 223.659734a41.749817 41.749817 0 0 0-41.377051 42.122584V894.65012a45.477479 45.477479 0 0 1-45.291096 45.850246h-159.730327a43.240882 43.240882 0 0 0-43.613649 37.276622A41.9362 41.9362 0 0 0 745.534871 1024h233.538039a57.778765 57.778765 0 0 0 57.405999-58.337914V729.3283a41.749817 41.749817 0 0 0-41.377051-41.9362zM732.488053 322.64035V13.989916a13.978733 13.978733 0 0 0-13.79235-13.978733h-82.940485a13.978733 13.978733 0 0 0-13.79235 13.978733v308.650434a13.978733 13.978733 0 0 0 13.79235 13.978733h82.940485a13.978733 13.978733 0 0 0 13.79235-13.978733zM532.126208 0.011183c-11.36937 0-20.688525 6.337026-20.688526 13.978733v308.650434c0 7.828091 9.319156 13.978733 20.688526 13.978733s20.688525-6.337026 20.688525-13.978733V13.989916c0-7.641708-9.319156-13.978733-20.688525-13.978733z" p-id="6738" fill="#04C361"/><path d="M745.534871 462.80045a41.749817 41.749817 0 0 0-41.377051 42.122583v252.549117a41.377051 41.377051 0 1 0 82.940485 0V504.923033A41.749817 41.749817 0 0 0 745.534871 462.80045" p-id="6739" fill="#04C361"/></svg> |
| New file |
| | |
| | | <?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="1676209433089" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2990" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M608.6 290.3c67.1 0 121.7 50.5 121.7 112.9 0 19.4-5.6 38.4-15.7 55.5-15.3 25-39.8 43.5-69.4 52.3-7.9 2.3-13.9 3.2-19.4 3.2-13 0-23.1-10.2-23.1-23.1 0-13 10.2-23.1 23.1-23.1 0.9 0 2.8 0 5.1-0.9 19.9-5.6 35.6-17.1 44.4-32.4 6-9.7 8.8-20.4 8.8-31.5 0-36.6-33.8-66.6-75-66.6-14.4 0-28.2 3.7-40.7 10.6-21.8 12.5-34.7 33.3-34.7 56v193.9c0 39.3-21.8 75.4-57.9 95.8-19.4 11.1-41.2 16.7-63.4 16.7-67.1 0-121.7-50.5-121.7-112.9 0-19.4 5.6-38.4 15.7-55.5 15.3-25 39.8-43.5 69.4-52.3 8.3-2.3 13.9-3.2 19.4-3.2 13 0 23.1 10.2 23.1 23.1 0 13-10.2 23.1-23.1 23.1-0.9 0-2.8 0-5.1 0.9-19.9 6-35.6 17.6-44.4 32.4-6 9.7-8.8 20.4-8.8 31.5 0 36.6 33.8 66.6 75.4 66.6 14.4 0 28.2-3.7 40.7-10.6 21.8-12.5 34.7-33.3 34.7-56V403.3c0-39.3 21.8-75.4 57.9-95.8 19-11.6 40.7-17.2 63-17.2zM510.8 929c231.1 0 418.4-187.3 418.4-418.4S741.9 92.1 510.8 92.1 92.4 279.5 92.4 510.6 279.7 929 510.8 929z m0 22C267.5 951 70.3 753.8 70.3 510.6S267.5 70.1 510.8 70.1s440.5 197.2 440.5 440.5S754.1 951 510.8 951z" p-id="2991" fill="#58bf6b"></path></svg> |
| New file |
| | |
| | | <?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="1627279375144" class="icon" viewBox="0 0 1115 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4399" width="43.5546875" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff2") format("woff2"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff") format("woff"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.ttf") format("truetype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.svg#iconfont") format("svg"); }</style></defs><path d="M751.388 68.267a34.133 34.133 0 0 1 0-68.267h227.556a91.022 91.022 0 0 1 91.022 91.022v227.556a34.133 34.133 0 1 1-68.266 0V91.022a22.756 22.756 0 0 0-22.756-22.755H751.388M1001.7 705.422a34.133 34.133 0 0 1 68.266 0v227.556A91.022 91.022 0 0 1 978.944 1024H748.885a34.133 34.133 0 0 1 0-68.267H978.49a22.756 22.756 0 0 0 22.755-22.755V705.422M364.09 955.733a34.133 34.133 0 1 1 0 68.267H136.533a91.022 91.022 0 0 1-91.022-91.022V705.422a34.133 34.133 0 0 1 68.267 0v227.556a22.756 22.756 0 0 0 22.755 22.755H364.09M113.778 318.578a34.133 34.133 0 1 1-68.267 0V91.022A91.022 91.022 0 0 1 136.533 0H364.09a34.133 34.133 0 0 1 0 68.267H136.533a22.756 22.756 0 0 0-22.755 22.755v227.556M34.133 477.867a34.133 34.133 0 0 0 0 68.266h168.619v-68.266z m1046.756 0H912.27v68.266h168.619a34.133 34.133 0 0 0 0-68.266zM202.752 157.24h709.746v320.627H202.752z m0 388.893h709.746V866.76H202.752z" fill="#04C361" p-id="4400"/></svg> |
| New file |
| | |
| | | <?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="1627279797174" class="icon" viewBox="0 0 1260 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7665" xmlns:xlink="http://www.w3.org/1999/xlink" width="49.21875" height="40"><defs><style type="text/css">@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.eot?#iefix") format("embedded-opentype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff2") format("woff2"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.woff") format("woff"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.ttf") format("truetype"), url("//at.alicdn.com/t/font_1031158_1uhr8ri0pk5.svg#iconfont") format("svg"); } |
| | | </style></defs><path d="M797.14798 481.753a269.194 269.194 0 0 0 102.892-211.929C900.03998 120.99 779.02998 0 630.15698 0 481.28298 0 360.27398 120.99 360.27398 269.824c0 85.878 40.33 162.462 102.912 211.929A450.974 450.974 0 0 0 309.84198 582.774c-85.543 85.524-132.608 199.208-132.608 320.236 0 25.01 0 51.712 0.197 76.367a44.898 44.898 0 0 0 44.82 44.623h816.01a44.8 44.8 0 0 0 44.82-44.623V903.01c0-121.009-47.066-234.732-132.609-320.236a451.072 451.072 0 0 0-153.344-101.021z" p-id="7666" fill="#04C361"></path><path d="M1186.18898 580.391A378.644 378.644 0 0 0 1061.81198 473.03a223.783 223.783 0 0 0 64.237-157.657c0-49.742-15.872-96.67-45.746-136.074A225.34 225.34 0 0 0 964.70998 99.9a37.297 37.297 0 0 0-46.14 25.718c-5.592 19.89 5.79 40.724 25.6 46.356 63.114 18.196 107.363 77.135 107.363 143.4a148.913 148.913 0 0 1-81.23 133.06 38.065 38.065 0 0 0-20.363 36.608c1.32 15.203 11.58 28.16 25.975 32.65 125.479 39.601 209.703 155.038 209.703 287.173v63.074c0 20.638 16.62 37.534 37.16 37.711h0.196a37.396 37.396 0 0 0 37.337-37.336V805.06c-0.197-81.644-25.777-159.35-74.142-224.69z m-901.77-62.503a36.982 36.982 0 0 0 25.955-32.65 37.455 37.455 0 0 0-20.362-36.628 148.913 148.913 0 0 1-81.231-133.06c0-66.245 44.071-125.184 107.382-143.4a37.612 37.612 0 0 0 25.58-46.356 37.376 37.376 0 0 0-46.139-25.718 225.32 225.32 0 0 0-115.593 79.4 223.252 223.252 0 0 0-45.746 136.074c0 60.258 23.533 116.381 64.237 157.676A380.475 380.475 0 0 0 74.14498 580.569 373.839 373.839 0 0 0 0.00198 805.258v63.232c0 20.657 16.798 37.356 37.356 37.356h0.197a37.317 37.317 0 0 0 37.14-37.73V805.06c0-132.332 84.401-247.769 209.723-287.173z" p-id="7667" fill="#04C361"></path></svg> |
| New file |
| | |
| | | <svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M95.648 118.762c0 5.035-3.563 9.121-7.979 9.121H7.98c-4.416 0-7.979-4.086-7.979-9.121C0 100.519 15.408 83.47 31.152 76.75c-9.099-6.43-15.216-17.863-15.216-30.987v-9.128c0-20.16 14.293-36.518 31.893-36.518s31.894 16.358 31.894 36.518v9.122c0 13.137-6.123 24.556-15.216 30.993 15.738 6.726 31.141 23.769 31.141 42.012z"/><path d="M106.032 118.252h15.867c3.376 0 6.101-3.125 6.101-6.972 0-13.957-11.787-26.984-23.819-32.123 6.955-4.919 11.638-13.66 11.638-23.704v-6.985c0-15.416-10.928-27.926-24.39-27.926-1.674 0-3.306.193-4.89.561 1.936 4.713 3.018 9.974 3.018 15.526v9.121c0 13.137-3.056 23.111-11.066 30.993 14.842 4.41 27.312 23.42 27.541 41.509z"/></svg> |
| New file |
| | |
| | | <?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="1724297262365" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1396" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M707.91 103c16.28 0 29.522 13.007 29.897 29.195l0.009 0.706v111.878a29.96 29.96 0 0 1-0.898 7.3l171.177-0.001c16.28 0 29.522 13.007 29.897 29.195l0.008 0.706v637.12c0 16.278-13.01 29.518-29.2 29.893l-0.705 0.008H270.884c-16.28 0-29.522-13.007-29.897-29.195l-0.008-0.706V787.274c0-16.514 13.389-29.9 29.905-29.9 16.28 0 29.522 13.007 29.897 29.194l0.008 0.706v101.924h577.4V311.88h-577.4v88.787c0 16.278-13.009 29.518-29.2 29.893l-0.705 0.008c-16.28 0-29.522-13.008-29.897-29.195l-0.008-0.706V281.979c0-16.278 13.009-29.518 29.2-29.893l0.705-0.008h408.019a29.916 29.916 0 0 1-0.89-6.593l-0.008-0.706v-81.978H132.808v407.113h385.787L408.223 456.982c-11.36-11.624-11.329-30.143-0.066-41.729l0.554-0.555c11.625-11.358 30.147-11.327 41.734-0.066l0.555 0.554 161.028 164.762c11.244 11.504 11.344 29.793 0.362 41.42l-0.55 0.565-161.027 161.849c-11.648 11.707-30.583 11.757-42.292 0.11-11.524-11.461-11.754-29.979-0.657-41.723l0.546-0.563 111.319-111.89H102.905c-16.28 0-29.522-13.007-29.897-29.195l-0.008-0.705V132.9c0-16.278 13.01-29.518 29.2-29.893l0.705-0.008H707.91z" p-id="1397"></path></svg> |
| New file |
| | |
| | | <svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M42.913 101.36c1.642 0 3.198.332 4.667.996a12.28 12.28 0 013.89 2.772c1.123 1.184 1.987 2.582 2.592 4.193.605 1.612.908 3.318.908 5.118 0 1.8-.303 3.507-.908 5.118-.605 1.611-1.469 3.01-2.593 4.194a13.3 13.3 0 01-3.889 2.843 10.582 10.582 0 01-4.667 1.066c-1.729 0-3.306-.355-4.732-1.066a13.604 13.604 0 01-3.825-2.843c-1.123-1.185-1.988-2.583-2.593-4.194a14.437 14.437 0 01-.907-5.118c0-1.8.302-3.506.907-5.118.605-1.61 1.47-3.009 2.593-4.193a12.515 12.515 0 013.825-2.772c1.426-.664 3.003-.996 4.732-.996zm53.932.285c1.643 0 3.22.331 4.733.995a11.386 11.386 0 013.889 2.772c1.08 1.185 1.945 2.583 2.593 4.194.648 1.61.972 3.317.972 5.118 0 1.8-.324 3.506-.972 5.117-.648 1.611-1.513 3.01-2.593 4.194a12.253 12.253 0 01-3.89 2.843 11 11 0 01-4.732 1.066 10.58 10.58 0 01-4.667-1.066 12.478 12.478 0 01-3.824-2.843c-1.08-1.185-1.945-2.583-2.593-4.194a13.581 13.581 0 01-.973-5.117c0-1.801.325-3.507.973-5.118.648-1.611 1.512-3.01 2.593-4.194a11.559 11.559 0 013.824-2.772 11.212 11.212 0 014.667-.995zm21.781-80.747c2.42 0 4.3.355 5.64 1.066 1.34.71 2.29 1.587 2.852 2.63a6.427 6.427 0 01.778 3.34c-.044 1.185-.195 2.204-.454 3.057-.26.853-.8 2.606-1.62 5.26a589.268 589.268 0 01-2.788 8.743 1236.373 1236.373 0 00-3.047 9.453c-.994 3.128-1.75 5.592-2.269 7.393-1.123 3.79-2.55 6.42-4.278 7.89-1.728 1.469-3.846 2.203-6.352 2.203H39.023l1.945 12.795h65.342c4.148 0 6.223 1.943 6.223 5.828 0 1.896-.41 3.53-1.232 4.905-.821 1.374-2.442 2.061-4.862 2.061H38.505c-1.729 0-3.176-.426-4.343-1.28-1.167-.852-2.14-1.966-2.917-3.34a21.277 21.277 0 01-1.88-4.478 44.128 44.128 0 01-1.102-4.55c-.087-.568-.324-1.942-.713-4.122-.39-2.18-.865-4.904-1.426-8.174l-1.88-10.947c-.692-4.027-1.383-8.079-2.075-12.154-1.642-9.572-3.5-20.234-5.574-31.986H6.87c-1.296 0-2.377-.356-3.24-1.067a9.024 9.024 0 01-2.14-2.558 10.416 10.416 0 01-1.167-3.2C.108 8.53 0 7.488 0 6.54c0-1.896.583-3.46 1.75-4.69C2.917.615 4.494 0 6.482 0h13.095c1.728 0 3.111.284 4.148.853 1.037.569 1.858 1.28 2.463 2.132a8.548 8.548 0 011.297 2.701c.26.948.475 1.754.648 2.417.173.758.346 1.825.519 3.199.173 1.374.345 2.772.518 4.193.26 1.706.519 3.507.778 5.403h88.678z"/></svg> |
| New file |
| | |
| | | <template> |
| | | <Dialog v-model="dialogVisible" title="鿩龿¥" width="65%"> |
| | | <div class="h-500px flex gap-8px"> |
| | | <!-- 左侧åç»å表 --> |
| | | <el-scrollbar wrap-class="h-full" ref="groupScrollbar" view-class="flex flex-col"> |
| | | <el-button |
| | | v-for="(group, groupIndex) in APP_LINK_GROUP_LIST" |
| | | :key="groupIndex" |
| | | :class="[ |
| | | 'm-r-16px m-l-0px! justify-start! w-90px', |
| | | { active: activeGroup === group.name } |
| | | ]" |
| | | ref="groupBtnRefs" |
| | | :text="activeGroup !== group.name" |
| | | :type="activeGroup === group.name ? 'primary' : 'default'" |
| | | @click="handleGroupSelected(group.name)" |
| | | > |
| | | {{ group.name }} |
| | | </el-button> |
| | | </el-scrollbar> |
| | | <!-- å³ä¾§é¾æ¥å表 --> |
| | | <el-scrollbar class="h-full flex-1" @scroll="handleScroll" ref="linkScrollbar"> |
| | | <div v-for="(group, groupIndex) in APP_LINK_GROUP_LIST" :key="groupIndex"> |
| | | <!-- åç»æ é¢ --> |
| | | <div class="font-bold" ref="groupTitleRefs">{{ group.name }}</div> |
| | | <!-- 龿¥å表 --> |
| | | <el-tooltip |
| | | v-for="(appLink, appLinkIndex) in group.links" |
| | | :key="appLinkIndex" |
| | | :content="appLink.path" |
| | | placement="bottom" |
| | | :show-after="300" |
| | | > |
| | | <el-button |
| | | class="m-b-8px m-r-8px m-l-0px!" |
| | | :type="isSameLink(appLink.path, activeAppLink.path) ? 'primary' : 'default'" |
| | | @click="handleAppLinkSelected(appLink)" |
| | | > |
| | | {{ appLink.name }} |
| | | </el-button> |
| | | </el-tooltip> |
| | | </div> |
| | | </el-scrollbar> |
| | | </div> |
| | | <!-- åºé¨å¯¹è¯æ¡æä½æé® --> |
| | | <template #footer> |
| | | <el-button type="primary" @click="handleSubmit">ç¡® å®</el-button> |
| | | <el-button @click="dialogVisible = false">å æ¶</el-button> |
| | | </template> |
| | | </Dialog> |
| | | <Dialog v-model="detailSelectDialog.visible" title="" width="50%"> |
| | | <el-form class="min-h-200px"> |
| | | <el-form-item |
| | | label="éæ©åç±»" |
| | | v-if="detailSelectDialog.type === APP_LINK_TYPE_ENUM.PRODUCT_CATEGORY_LIST" |
| | | > |
| | | <ProductCategorySelect |
| | | v-model="detailSelectDialog.id" |
| | | :parent-id="0" |
| | | @update:model-value="handleProductCategorySelected" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | </Dialog> |
| | | </template> |
| | | <script lang="ts" setup> |
| | | import { APP_LINK_GROUP_LIST, APP_LINK_TYPE_ENUM, AppLink } from './data' |
| | | import { ButtonInstance, ScrollbarInstance } from 'element-plus' |
| | | import { split } from 'lodash-es' |
| | | import ProductCategorySelect from '@/views/mall/product/category/components/ProductCategorySelect.vue' |
| | | import { getUrlNumberValue } from '@/utils' |
| | | |
| | | // APP 龿¥éæ©å¼¹æ¡ |
| | | defineOptions({ name: 'AppLinkSelectDialog' }) |
| | | // éä¸çåç»ï¼é»è®¤éä¸ç¬¬ä¸ä¸ª |
| | | const activeGroup = ref(APP_LINK_GROUP_LIST[0].name) |
| | | // éä¸ç APP 龿¥ |
| | | const activeAppLink = ref({} as AppLink) |
| | | |
| | | /** æå¼å¼¹çª */ |
| | | const dialogVisible = ref(false) |
| | | const open = (link: string) => { |
| | | // è¿å
¥é¡µé¢æ¶å
éç½® activeAppLink |
| | | activeAppLink.value = { name: '', path: '' } |
| | | dialogVisible.value = true |
| | | |
| | | // æ»å¨å°å½åç龿¥ |
| | | const group = APP_LINK_GROUP_LIST.find((group) => |
| | | group.links.some((linkItem) => { |
| | | const sameLink = isSameLink(linkItem.path, link) |
| | | if (sameLink) { |
| | | activeAppLink.value = { ...linkItem, path: link } |
| | | } |
| | | return sameLink |
| | | }) |
| | | ) |
| | | if (group) { |
| | | // ä½¿ç¨ nextTick çåå ï¼å¯è½ Dom è¿æ²¡çæï¼å¯¼è´æ»å¨å¤±è´¥ |
| | | nextTick(() => handleGroupSelected(group.name)) |
| | | } |
| | | } |
| | | defineExpose({ open }) |
| | | |
| | | // å¤ç APP 龿¥éä¸ |
| | | const handleAppLinkSelected = (appLink: AppLink) => { |
| | | // åªæä¸å龿¥æ¶ææ´æ°ï¼é¿å
éå¤è§¦åï¼ |
| | | if (!isSameLink(appLink.path, activeAppLink.value.path)) { |
| | | // 妿æ°é¾æ¥ç path 为空ï¼å沿ç¨å½å activeAppLink ç path |
| | | const path = appLink.path || activeAppLink.value.path |
| | | activeAppLink.value = { ...appLink, path: path } |
| | | } |
| | | switch (appLink.type) { |
| | | case APP_LINK_TYPE_ENUM.PRODUCT_CATEGORY_LIST: |
| | | detailSelectDialog.value.visible = true |
| | | detailSelectDialog.value.type = appLink.type |
| | | // è¿æ¾ |
| | | detailSelectDialog.value.id = |
| | | getUrlNumberValue('id', 'http://127.0.0.1' + activeAppLink.value.path) || undefined |
| | | break |
| | | default: |
| | | break |
| | | } |
| | | } |
| | | |
| | | // å¤çç»å®å¼æ´æ° |
| | | const emit = defineEmits<{ |
| | | change: [link: string] |
| | | appLinkChange: [appLink: AppLink] |
| | | }>() |
| | | const handleSubmit = () => { |
| | | dialogVisible.value = false |
| | | emit('change', activeAppLink.value.path) |
| | | emit('appLinkChange', activeAppLink.value) |
| | | } |
| | | |
| | | // åç»æ é¢å¼ç¨å表 |
| | | const groupTitleRefs = ref<HTMLInputElement[]>([]) |
| | | /** |
| | | * å¤çå³ä¾§é¾æ¥å表æ»å¨ |
| | | * @param scrollTop æ»å¨æ¡çä½ç½® |
| | | */ |
| | | const handleScroll = ({ scrollTop }: { scrollTop: number }) => { |
| | | const titleEl = groupTitleRefs.value.find((titleEl: HTMLInputElement) => { |
| | | // è·åæ é¢çä½ç½®ä¿¡æ¯ |
| | | const { offsetHeight, offsetTop } = titleEl |
| | | // 夿æ 颿¯å¦å¨å¯è§èå´å
|
| | | return scrollTop >= offsetTop && scrollTop < offsetTop + offsetHeight |
| | | }) |
| | | // åªéå¤ç䏿¬¡ |
| | | if (titleEl && activeGroup.value !== titleEl.textContent) { |
| | | activeGroup.value = titleEl.textContent || '' |
| | | // åæ¥å·¦ä¾§çæ»å¨æ¡ä½ç½® |
| | | scrollToGroupBtn(activeGroup.value) |
| | | } |
| | | } |
| | | |
| | | // å³ä¾§æ»å¨æ¡ |
| | | const linkScrollbar = ref<ScrollbarInstance>() |
| | | // å¤çåç»éä¸ |
| | | const handleGroupSelected = (group: string) => { |
| | | activeGroup.value = group |
| | | const titleRef = groupTitleRefs.value.find((item: HTMLInputElement) => item.textContent === group) |
| | | if (titleRef) { |
| | | // æ»å¨åç»æ é¢ |
| | | linkScrollbar.value?.setScrollTop(titleRef.offsetTop) |
| | | } |
| | | } |
| | | |
| | | // åç»æ»å¨æ¡ |
| | | const groupScrollbar = ref<ScrollbarInstance>() |
| | | // åç»å¼ç¨å表 |
| | | const groupBtnRefs = ref<ButtonInstance[]>([]) |
| | | // èªå¨æ»å¨åç»æé®ï¼ç¡®ä¿åç»æé®ä¿æå¨å¯è§åºåå
|
| | | const scrollToGroupBtn = (group: string) => { |
| | | const groupBtn = groupBtnRefs.value |
| | | .map((btn: ButtonInstance) => btn['ref']) |
| | | .find((ref: HTMLButtonElement) => ref.textContent === group) |
| | | if (groupBtn) { |
| | | groupScrollbar.value?.setScrollTop(groupBtn.offsetTop) |
| | | } |
| | | } |
| | | |
| | | // æ¯å¦ä¸ºç¸åç龿¥ï¼ä¸æ¯è¾åæ°ï¼åªæ¯è¾é¾æ¥ï¼ |
| | | const isSameLink = (link1: string, link2: string) => { |
| | | return split(link1, '?', 1)[0] === split(link2, '?', 1)[0] |
| | | } |
| | | |
| | | // 详æ
éæ©å¯¹è¯æ¡ |
| | | const detailSelectDialog = ref<{ |
| | | visible: boolean |
| | | id?: number |
| | | type?: APP_LINK_TYPE_ENUM |
| | | }>({ |
| | | visible: false, |
| | | id: undefined, |
| | | type: undefined |
| | | }) |
| | | // å¤ç详æ
éæ© |
| | | const handleProductCategorySelected = (id: number) => { |
| | | const url = new URL(activeAppLink.value.path, 'http://127.0.0.1') |
| | | // ä¿®æ¹ id åæ° |
| | | url.searchParams.set('id', `${id}`) |
| | | // æé¤åå |
| | | activeAppLink.value.path = `${url.pathname}${url.search}` |
| | | // å
³éå¯¹è¯æ¡ |
| | | detailSelectDialog.value.visible = false |
| | | // éç½® id |
| | | detailSelectDialog.value.id = undefined |
| | | } |
| | | </script> |
| | | <style lang="scss" scoped></style> |
| New file |
| | |
| | | // APP 龿¥åç» |
| | | export interface AppLinkGroup { |
| | | // åç»åç§° |
| | | name: string |
| | | // 龿¥å表 |
| | | links: AppLink[] |
| | | } |
| | | |
| | | // APP 龿¥ |
| | | export interface AppLink { |
| | | // 龿¥åç§° |
| | | name: string |
| | | // 龿¥å°å |
| | | path: string |
| | | // 龿¥çç±»å |
| | | type?: APP_LINK_TYPE_ENUM |
| | | } |
| | | |
| | | // APP 龿¥ç±»åï¼éè¦ç¹æ®å¤çï¼ä¾å¦åå详æ
ï¼ |
| | | export const enum APP_LINK_TYPE_ENUM { |
| | | // æ¼å¢æ´»å¨ |
| | | ACTIVITY_COMBINATION, |
| | | // ç§ææ´»å¨ |
| | | ACTIVITY_SECKILL, |
| | | // 积åååæ´»å¨ |
| | | ACTIVITY_POINT, |
| | | // æç« 详æ
|
| | | ARTICLE_DETAIL, |
| | | // 伿 å¸è¯¦æ
|
| | | COUPON_DETAIL, |
| | | // èªå®ä¹é¡µé¢è¯¦æ
|
| | | DIY_PAGE_DETAIL, |
| | | // åç±»å表 |
| | | PRODUCT_CATEGORY_LIST, |
| | | // ååå表 |
| | | PRODUCT_LIST, |
| | | // åå详æ
|
| | | PRODUCT_DETAIL_NORMAL, |
| | | // æ¼å¢åå详æ
|
| | | PRODUCT_DETAIL_COMBINATION, |
| | | // ç§æåå详æ
|
| | | PRODUCT_DETAIL_SECKILL |
| | | } |
| | | |
| | | // APP 龿¥å表ï¼åä¸ä¸æä¹
åï¼ï¼ |
| | | export const APP_LINK_GROUP_LIST = [ |
| | | { |
| | | name: 'åå', |
| | | links: [ |
| | | { |
| | | name: 'é¦é¡µ', |
| | | path: '/pages/index/index' |
| | | }, |
| | | { |
| | | name: 'åååç±»', |
| | | path: '/pages/index/category', |
| | | type: APP_LINK_TYPE_ENUM.PRODUCT_CATEGORY_LIST |
| | | }, |
| | | { |
| | | name: 'è´ç©è½¦', |
| | | path: '/pages/index/cart' |
| | | }, |
| | | { |
| | | name: '个人ä¸å¿', |
| | | path: '/pages/index/user' |
| | | }, |
| | | { |
| | | name: 'ååæç´¢', |
| | | path: '/pages/index/search' |
| | | }, |
| | | { |
| | | name: 'èªå®ä¹é¡µé¢', |
| | | path: '/pages/index/page', |
| | | type: APP_LINK_TYPE_ENUM.DIY_PAGE_DETAIL |
| | | }, |
| | | { |
| | | name: '客æ', |
| | | path: '/pages/chat/index' |
| | | }, |
| | | { |
| | | name: 'ç³»ç»è®¾ç½®', |
| | | path: '/pages/public/setting' |
| | | }, |
| | | { |
| | | name: '常è§é®é¢', |
| | | path: '/pages/public/faq' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | name: 'åå', |
| | | links: [ |
| | | { |
| | | name: 'ååå表', |
| | | path: '/pages/goods/list', |
| | | type: APP_LINK_TYPE_ENUM.PRODUCT_LIST |
| | | }, |
| | | { |
| | | name: 'åå详æ
', |
| | | path: '/pages/goods/index', |
| | | type: APP_LINK_TYPE_ENUM.PRODUCT_DETAIL_NORMAL |
| | | }, |
| | | { |
| | | name: 'æ¼å¢åå详æ
', |
| | | path: '/pages/goods/groupon', |
| | | type: APP_LINK_TYPE_ENUM.PRODUCT_DETAIL_COMBINATION |
| | | }, |
| | | { |
| | | name: 'ç§æåå详æ
', |
| | | path: '/pages/goods/seckill', |
| | | type: APP_LINK_TYPE_ENUM.PRODUCT_DETAIL_SECKILL |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | name: 'è¥éæ´»å¨', |
| | | links: [ |
| | | { |
| | | name: 'æ¼å¢è®¢å', |
| | | path: '/pages/activity/groupon/order' |
| | | }, |
| | | { |
| | | name: 'è¥éåå', |
| | | path: '/pages/activity/index' |
| | | }, |
| | | { |
| | | name: 'æ¼å¢æ´»å¨', |
| | | path: '/pages/activity/groupon/list', |
| | | type: APP_LINK_TYPE_ENUM.ACTIVITY_COMBINATION |
| | | }, |
| | | { |
| | | name: 'ç§ææ´»å¨', |
| | | path: '/pages/activity/seckill/list', |
| | | type: APP_LINK_TYPE_ENUM.ACTIVITY_SECKILL |
| | | }, |
| | | { |
| | | name: '积åååæ´»å¨', |
| | | path: '/pages/activity/point/list', |
| | | type: APP_LINK_TYPE_ENUM.ACTIVITY_POINT |
| | | }, |
| | | { |
| | | name: 'ç¾å°ä¸å¿', |
| | | path: '/pages/app/sign' |
| | | }, |
| | | { |
| | | name: '伿 å¸ä¸å¿', |
| | | path: '/pages/coupon/list' |
| | | }, |
| | | { |
| | | name: '伿 å¸è¯¦æ
', |
| | | path: '/pages/coupon/detail', |
| | | type: APP_LINK_TYPE_ENUM.COUPON_DETAIL |
| | | }, |
| | | { |
| | | name: 'æç« 详æ
', |
| | | path: '/pages/public/richtext', |
| | | type: APP_LINK_TYPE_ENUM.ARTICLE_DETAIL |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | name: 'åéåå', |
| | | links: [ |
| | | { |
| | | name: 'åéä¸å¿', |
| | | path: '/pages/commission/index' |
| | | }, |
| | | { |
| | | name: 'æ¨å¹¿åå', |
| | | path: '/pages/commission/goods' |
| | | }, |
| | | { |
| | | name: 'åé订å', |
| | | path: '/pages/commission/order' |
| | | }, |
| | | { |
| | | name: 'æçå¢é', |
| | | path: '/pages/commission/team' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | name: 'æ¯ä»', |
| | | links: [ |
| | | { |
| | | name: 'å
å¼ä½é¢', |
| | | path: '/pages/pay/recharge' |
| | | }, |
| | | { |
| | | name: 'å
å¼è®°å½', |
| | | path: '/pages/pay/recharge-log' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | name: 'ç¨æ·ä¸å¿', |
| | | links: [ |
| | | { |
| | | name: 'ç¨æ·ä¿¡æ¯', |
| | | path: '/pages/user/info' |
| | | }, |
| | | { |
| | | name: 'ç¨æ·è®¢å', |
| | | path: '/pages/order/list' |
| | | }, |
| | | { |
| | | name: 'å®å订å', |
| | | path: '/pages/order/aftersale/list' |
| | | }, |
| | | { |
| | | name: 'ååæ¶è', |
| | | path: '/pages/user/goods-collect' |
| | | }, |
| | | { |
| | | name: 'æµè§è®°å½', |
| | | path: '/pages/user/goods-log' |
| | | }, |
| | | { |
| | | name: 'å°å管ç', |
| | | path: '/pages/user/address/list' |
| | | }, |
| | | { |
| | | name: 'ç¨æ·ä½£é', |
| | | path: '/pages/user/wallet/commission' |
| | | }, |
| | | { |
| | | name: 'ç¨æ·ä½é¢', |
| | | path: '/pages/user/wallet/money' |
| | | }, |
| | | { |
| | | name: 'ç¨æ·ç§¯å', |
| | | path: '/pages/user/wallet/score' |
| | | } |
| | | ] |
| | | } |
| | | ] as AppLinkGroup[] |
| New file |
| | |
| | | <template> |
| | | <el-input v-model="appLink" placeholder="è¾å
¥æéæ©é¾æ¥"> |
| | | <template #append> |
| | | <el-button @click="handleOpenDialog">éæ©</el-button> |
| | | </template> |
| | | </el-input> |
| | | <AppLinkSelectDialog ref="dialogRef" @change="handleLinkSelected" /> |
| | | </template> |
| | | <script lang="ts" setup> |
| | | import { propTypes } from '@/utils/propTypes' |
| | | |
| | | // APP 龿¥è¾å
¥æ¡ |
| | | defineOptions({ name: 'AppLinkInput' }) |
| | | // å®ä¹å±æ§ |
| | | const props = defineProps({ |
| | | // å½åéä¸ç龿¥ |
| | | modelValue: propTypes.string.def('') |
| | | }) |
| | | // å½åç龿¥ |
| | | const appLink = ref('') |
| | | // éæ©å¯¹è¯æ¡ |
| | | const dialogRef = ref() |
| | | // å¤çæå¼å¯¹è¯æ¡ |
| | | const handleOpenDialog = () => dialogRef.value?.open(appLink.value) |
| | | // å¤ç APP 龿¥éä¸ |
| | | const handleLinkSelected = (link: string) => (appLink.value = link) |
| | | |
| | | // getter |
| | | watch( |
| | | () => props.modelValue, |
| | | () => (appLink.value = props.modelValue), |
| | | { immediate: true } |
| | | ) |
| | | |
| | | // setter |
| | | const emit = defineEmits<{ |
| | | 'update:modelValue': [link: string] |
| | | }>() |
| | | watch( |
| | | () => appLink.value, |
| | | () => emit('update:modelValue', appLink.value) |
| | | ) |
| | | </script> |
| New file |
| | |
| | | import Backtop from './src/Backtop.vue' |
| | | |
| | | export { Backtop } |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | import { ElBacktop } from 'element-plus' |
| | | import { useDesign } from '@/hooks/web/useDesign' |
| | | |
| | | defineOptions({ name: 'BackTop' }) |
| | | |
| | | const { getPrefixCls, variables } = useDesign() |
| | | |
| | | const prefixCls = getPrefixCls('backtop') |
| | | </script> |
| | | |
| | | <template> |
| | | <ElBacktop |
| | | :class="`${prefixCls}-backtop`" |
| | | :target="`.${variables.namespace}-layout-content-scrollbar .${variables.elNamespace}-scrollbar__wrap`" |
| | | /> |
| | | </template> |
| New file |
| | |
| | | import CardTitle from './src/CardTitle.vue' |
| | | |
| | | export { CardTitle } |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | defineComponent({ |
| | | name: 'CardTitle' |
| | | }) |
| | | |
| | | defineProps({ |
| | | title: { |
| | | type: String, |
| | | required: true |
| | | } |
| | | }) |
| | | </script> |
| | | |
| | | <template> |
| | | <span class="card-title">{{ title }}</span> |
| | | </template> |
| | | |
| | | <style scoped lang="scss"> |
| | | .card-title { |
| | | font-size: 14px; |
| | | font-weight: 600; |
| | | |
| | | &::before { |
| | | position: relative; |
| | | top: 8px; |
| | | left: -5px; |
| | | display: inline-block; |
| | | width: 3px; |
| | | height: 14px; |
| | | //background-color: #105cfb; |
| | | background: var(--el-color-primary); |
| | | border-radius: 5px; |
| | | content: ''; |
| | | transform: translateY(-50%); |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <el-input v-model="color"> |
| | | <template #prepend> |
| | | <el-color-picker v-model="color" :predefine="PREDEFINE_COLORS" /> |
| | | </template> |
| | | </el-input> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { propTypes } from '@/utils/propTypes' |
| | | import { PREDEFINE_COLORS } from '@/utils/color' |
| | | |
| | | // é¢è²è¾å
¥æ¡ |
| | | defineOptions({ name: 'ColorInput' }) |
| | | |
| | | const props = defineProps({ |
| | | modelValue: propTypes.string.def('') |
| | | }) |
| | | const emit = defineEmits(['update:modelValue']) |
| | | const color = computed({ |
| | | get: () => { |
| | | return props.modelValue |
| | | }, |
| | | set: (val: string) => { |
| | | emit('update:modelValue', val) |
| | | } |
| | | }) |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | :deep(.el-input-group__prepend) { |
| | | padding: 0; |
| | | } |
| | | </style> |
| New file |
| | |
| | | import ConfigGlobal from './src/ConfigGlobal.vue' |
| | | |
| | | export { ConfigGlobal } |
| New file |
| | |
| | | <script setup lang="ts"> |
| | | import { provide, computed, watch, onMounted } from 'vue' |
| | | import { propTypes } from '@/utils/propTypes' |
| | | import { ComponentSize, ElConfigProvider } from 'element-plus' |
| | | import { useLocaleStore } from '@/store/modules/locale' |
| | | import { useWindowSize } from '@vueuse/core' |
| | | import { useAppStore } from '@/store/modules/app' |
| | | import { setCssVar } from '@/utils' |
| | | import { useDesign } from '@/hooks/web/useDesign' |
| | | |
| | | const { variables } = useDesign() |
| | | |
| | | const appStore = useAppStore() |
| | | |
| | | const props = defineProps({ |
| | | size: propTypes.oneOf<ComponentSize>(['default', 'small', 'large']).def('default') |
| | | }) |
| | | |
| | | provide('configGlobal', props) |
| | | |
| | | // åå§åææä¸»é¢è² |
| | | onMounted(() => { |
| | | appStore.setCssVarTheme() |
| | | }) |
| | | |
| | | const { width } = useWindowSize() |
| | | |
| | | // çå¬çªå£åå |
| | | watch( |
| | | () => width.value, |
| | | (width: number) => { |
| | | if (width < 768) { |
| | | !appStore.getMobile ? appStore.setMobile(true) : undefined |
| | | setCssVar('--left-menu-min-width', '0') |
| | | appStore.setCollapse(true) |
| | | appStore.getLayout !== 'classic' ? appStore.setLayout('classic') : undefined |
| | | } else { |
| | | appStore.getMobile ? appStore.setMobile(false) : undefined |
| | | setCssVar('--left-menu-min-width', '64px') |
| | | } |
| | | }, |
| | | { |
| | | immediate: true |
| | | } |
| | | ) |
| | | |
| | | // å¤è¯è¨ç¸å
³ |
| | | const localeStore = useLocaleStore() |
| | | |
| | | const currentLocale = computed(() => localeStore.currentLocale) |
| | | </script> |
| | | |
| | | <template> |
| | | <ElConfigProvider |
| | | :namespace="variables.elNamespace" |
| | | :locale="currentLocale.elLocale" |
| | | :message="{ max: 5 }" |
| | | :size="size" |
| | | > |
| | | <slot></slot> |
| | | </ElConfigProvider> |
| | | </template> |
| New file |
| | |
| | | import ContentDetailWrap from './src/ContentDetailWrap.vue' |
| | | |
| | | export { ContentDetailWrap } |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | import { propTypes } from '@/utils/propTypes' |
| | | import { useDesign } from '@/hooks/web/useDesign' |
| | | |
| | | defineOptions({ name: 'ContentDetailWrap' }) |
| | | |
| | | const { t } = useI18n() |
| | | |
| | | const { getPrefixCls } = useDesign() |
| | | |
| | | const prefixCls = getPrefixCls('content-detail-wrap') |
| | | |
| | | defineProps({ |
| | | title: propTypes.string.def(''), |
| | | message: propTypes.string.def('') |
| | | }) |
| | | const emit = defineEmits(['back']) |
| | | const offset = ref(85) |
| | | const contentDetailWrap = ref() |
| | | onMounted(() => { |
| | | offset.value = contentDetailWrap.value.getBoundingClientRect().top |
| | | }) |
| | | </script> |
| | | |
| | | <template> |
| | | <div ref="contentDetailWrap" :class="[`${prefixCls}-container`]"> |
| | | <Sticky :offset="offset"> |
| | | <div |
| | | :class="[ |
| | | `${prefixCls}-header`, |
| | | 'flex b-b-1 h-50px items-center text-center bg-white pr-10px' |
| | | ]" |
| | | > |
| | | <div :class="[`${prefixCls}-header__back`, 'flex pl-10px pr-10px ']"> |
| | | <ElButton @click="emit('back')"> |
| | | <Icon class="mr-5px" icon="ep:arrow-left" /> |
| | | {{ t('common.back') }} |
| | | </ElButton> |
| | | </div> |
| | | <div :class="[`${prefixCls}-header__title`, 'flex flex-1 justify-center']"> |
| | | <slot name="title"> |
| | | <label class="text-16px font-700">{{ title }}</label> |
| | | </slot> |
| | | </div> |
| | | <div :class="[`${prefixCls}-header__right`, 'flex pl-10px pr-10px']"> |
| | | <slot name="right"></slot> |
| | | </div> |
| | | </div> |
| | | </Sticky> |
| | | <div style="padding: var(--app-content-padding)"> |
| | | <ElCard :class="[`${prefixCls}-body`, 'mb-20px']" shadow="never"> |
| | | <div> |
| | | <slot></slot> |
| | | </div> |
| | | </ElCard> |
| | | </div> |
| | | </div> |
| | | </template> |
| New file |
| | |
| | | import ContentWrap from './src/ContentWrap.vue' |
| | | |
| | | export { ContentWrap } |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | import { propTypes } from '@/utils/propTypes' |
| | | import { useDesign } from '@/hooks/web/useDesign' |
| | | |
| | | defineOptions({ name: 'ContentWrap' }) |
| | | |
| | | const { getPrefixCls } = useDesign() |
| | | |
| | | const prefixCls = getPrefixCls('content-wrap') |
| | | |
| | | defineProps({ |
| | | title: propTypes.string.def(''), |
| | | message: propTypes.string.def(''), |
| | | bodyStyle: propTypes.object.def({ padding: '10px' }) |
| | | }) |
| | | </script> |
| | | |
| | | <template> |
| | | <ElCard :body-style="bodyStyle" :class="[prefixCls, 'mb-15px']" shadow="never"> |
| | | <template v-if="title" #header> |
| | | <div class="flex items-center"> |
| | | <span class="text-16px font-700">{{ title }}</span> |
| | | <ElTooltip v-if="message" effect="dark" placement="right"> |
| | | <template #content> |
| | | <div class="max-w-200px">{{ message }}</div> |
| | | </template> |
| | | <Icon :size="14" class="ml-5px" icon="ep:question-filled" /> |
| | | </ElTooltip> |
| | | <div class="flex flex-grow pl-20px"> |
| | | <slot name="header"></slot> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <slot></slot> |
| | | </ElCard> |
| | | </template> |
| New file |
| | |
| | | import CountTo from './src/CountTo.vue' |
| | | |
| | | export { CountTo } |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | import { PropType } from 'vue' |
| | | import { isNumber } from '@/utils/is' |
| | | import { propTypes } from '@/utils/propTypes' |
| | | import { useDesign } from '@/hooks/web/useDesign' |
| | | |
| | | defineOptions({ name: 'CountTo' }) |
| | | |
| | | const { getPrefixCls } = useDesign() |
| | | |
| | | const prefixCls = getPrefixCls('count-to') |
| | | |
| | | const props = defineProps({ |
| | | startVal: propTypes.number.def(0), // å¼å§ææ¾å¼ |
| | | endVal: propTypes.number.def(2021), // æç»å¼ |
| | | duration: propTypes.number.def(3000), // å¨ç»æ¶é¿ |
| | | autoplay: propTypes.bool.def(true), // æ¯å¦èªå¨ææ¾å¨ç», é»è®¤ææ¾ |
| | | decimals: propTypes.number.validate((value: number) => value >= 0).def(0), // æ¾ç¤ºçå°æ°ä½æ°, é»è®¤ä¸æ¾ç¤ºå°æ° |
| | | decimal: propTypes.string.def('.'), // å°æ°åé符å·, é»è®¤ä¸ºç¹ |
| | | separator: propTypes.string.def(','), // æ°åæ¯ä¸ä½çåé符, é»è®¤ä¸ºéå· |
| | | prefix: propTypes.string.def(''), // åç¼, æ°å¼å颿¾ç¤ºçå
容 |
| | | suffix: propTypes.string.def(''), // åç¼, æ°å¼å颿¾ç¤ºçå
容 |
| | | useEasing: propTypes.bool.def(true), // æ¯å¦ä½¿ç¨ç¼å¨ææ, é»è®¤å¯ç¨ |
| | | easingFn: { |
| | | type: Function as PropType<(t: number, b: number, c: number, d: number) => number>, |
| | | default(t: number, b: number, c: number, d: number) { |
| | | return (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b |
| | | } // ç¼å¨å½æ° |
| | | } |
| | | }) |
| | | |
| | | const emit = defineEmits(['mounted', 'callback']) |
| | | |
| | | const formatNumber = (num: number | string) => { |
| | | const { decimals, decimal, separator, suffix, prefix } = props |
| | | num = Number(num).toFixed(decimals) |
| | | num += '' |
| | | const x = num.split('.') |
| | | let x1 = x[0] |
| | | const x2 = x.length > 1 ? decimal + x[1] : '' |
| | | const rgx = /(\d+)(\d{3})/ |
| | | if (separator && !isNumber(separator)) { |
| | | while (rgx.test(x1)) { |
| | | x1 = x1.replace(rgx, '$1' + separator + '$2') |
| | | } |
| | | } |
| | | return prefix + x1 + x2 + suffix |
| | | } |
| | | |
| | | const state = reactive<{ |
| | | localStartVal: number |
| | | printVal: number | null |
| | | displayValue: string |
| | | paused: boolean |
| | | localDuration: number | null |
| | | startTime: number | null |
| | | timestamp: number | null |
| | | rAF: any |
| | | remaining: number | null |
| | | }>({ |
| | | localStartVal: props.startVal, |
| | | displayValue: formatNumber(props.startVal), |
| | | printVal: null, |
| | | paused: false, |
| | | localDuration: props.duration, |
| | | startTime: null, |
| | | timestamp: null, |
| | | remaining: null, |
| | | rAF: null |
| | | }) |
| | | |
| | | const displayValue = toRef(state, 'displayValue') |
| | | |
| | | onMounted(() => { |
| | | if (props.autoplay) { |
| | | start() |
| | | } |
| | | emit('mounted') |
| | | }) |
| | | |
| | | const getCountDown = computed(() => { |
| | | return props.startVal > props.endVal |
| | | }) |
| | | |
| | | watch([() => props.startVal, () => props.endVal], () => { |
| | | if (props.autoplay) { |
| | | start() |
| | | } |
| | | }) |
| | | |
| | | const start = () => { |
| | | const { startVal, duration } = props |
| | | state.localStartVal = startVal |
| | | state.startTime = null |
| | | state.localDuration = duration |
| | | state.paused = false |
| | | state.rAF = requestAnimationFrame(count) |
| | | } |
| | | |
| | | const pauseResume = () => { |
| | | if (state.paused) { |
| | | resume() |
| | | state.paused = false |
| | | } else { |
| | | pause() |
| | | state.paused = true |
| | | } |
| | | } |
| | | |
| | | const pause = () => { |
| | | cancelAnimationFrame(state.rAF) |
| | | } |
| | | |
| | | const resume = () => { |
| | | state.startTime = null |
| | | state.localDuration = +(state.remaining as number) |
| | | state.localStartVal = +(state.printVal as number) |
| | | requestAnimationFrame(count) |
| | | } |
| | | |
| | | const reset = () => { |
| | | state.startTime = null |
| | | cancelAnimationFrame(state.rAF) |
| | | state.displayValue = formatNumber(props.startVal) |
| | | } |
| | | |
| | | const count = (timestamp: number) => { |
| | | const { useEasing, easingFn, endVal } = props |
| | | if (!state.startTime) state.startTime = timestamp |
| | | state.timestamp = timestamp |
| | | const progress = timestamp - state.startTime |
| | | state.remaining = (state.localDuration as number) - progress |
| | | if (useEasing) { |
| | | if (unref(getCountDown)) { |
| | | state.printVal = |
| | | state.localStartVal - |
| | | easingFn(progress, 0, state.localStartVal - endVal, state.localDuration as number) |
| | | } else { |
| | | state.printVal = easingFn( |
| | | progress, |
| | | state.localStartVal, |
| | | endVal - state.localStartVal, |
| | | state.localDuration as number |
| | | ) |
| | | } |
| | | } else { |
| | | if (unref(getCountDown)) { |
| | | state.printVal = |
| | | state.localStartVal - |
| | | (state.localStartVal - endVal) * (progress / (state.localDuration as number)) |
| | | } else { |
| | | state.printVal = |
| | | state.localStartVal + |
| | | (endVal - state.localStartVal) * (progress / (state.localDuration as number)) |
| | | } |
| | | } |
| | | if (unref(getCountDown)) { |
| | | state.printVal = state.printVal < endVal ? endVal : state.printVal |
| | | } else { |
| | | state.printVal = state.printVal > endVal ? endVal : state.printVal |
| | | } |
| | | state.displayValue = formatNumber(state.printVal!) |
| | | if (progress < (state.localDuration as number)) { |
| | | state.rAF = requestAnimationFrame(count) |
| | | } else { |
| | | emit('callback') |
| | | } |
| | | } |
| | | |
| | | defineExpose({ |
| | | pauseResume, |
| | | reset, |
| | | start, |
| | | pause |
| | | }) |
| | | </script> |
| | | |
| | | <template> |
| | | <span :class="prefixCls"> |
| | | {{ displayValue }} |
| | | </span> |
| | | </template> |
| New file |
| | |
| | | import Crontab from './src/Crontab.vue' |
| | | export { Crontab } |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | import { ElMessage } from 'element-plus' |
| | | import { PropType } from 'vue' |
| | | |
| | | defineOptions({ name: 'Crontab' }) |
| | | |
| | | interface shortcutsType { |
| | | text: string |
| | | value: string |
| | | } |
| | | |
| | | const props = defineProps({ |
| | | modelValue: { |
| | | type: String, |
| | | default: '* * * * * ?' |
| | | }, |
| | | shortcuts: { type: Array as PropType<shortcutsType[]>, default: () => [] } |
| | | }) |
| | | const defaultValue = ref('') |
| | | const dialogVisible = ref(false) |
| | | const getYear = () => { |
| | | let v: number[] = [] |
| | | let y = new Date().getFullYear() |
| | | for (let i = 0; i < 11; i++) { |
| | | v.push(y + i) |
| | | } |
| | | return v |
| | | } |
| | | const cronValue = reactive({ |
| | | second: { |
| | | type: '0', |
| | | range: { |
| | | start: 1, |
| | | end: 2 |
| | | }, |
| | | loop: { |
| | | start: 0, |
| | | end: 1 |
| | | }, |
| | | appoint: [] as string[] |
| | | }, |
| | | minute: { |
| | | type: '0', |
| | | range: { |
| | | start: 1, |
| | | end: 2 |
| | | }, |
| | | loop: { |
| | | start: 0, |
| | | end: 1 |
| | | }, |
| | | appoint: [] as string[] |
| | | }, |
| | | hour: { |
| | | type: '0', |
| | | range: { |
| | | start: 1, |
| | | end: 2 |
| | | }, |
| | | loop: { |
| | | start: 0, |
| | | end: 1 |
| | | }, |
| | | appoint: [] as string[] |
| | | }, |
| | | day: { |
| | | type: '0', |
| | | range: { |
| | | start: 1, |
| | | end: 2 |
| | | }, |
| | | loop: { |
| | | start: 1, |
| | | end: 1 |
| | | }, |
| | | appoint: [] as string[] |
| | | }, |
| | | month: { |
| | | type: '0', |
| | | range: { |
| | | start: 1, |
| | | end: 2 |
| | | }, |
| | | loop: { |
| | | start: 1, |
| | | end: 1 |
| | | }, |
| | | appoint: [] as string[] |
| | | }, |
| | | week: { |
| | | type: '5', |
| | | range: { |
| | | start: '2', |
| | | end: '3' |
| | | }, |
| | | loop: { |
| | | start: 0, |
| | | end: '2' |
| | | }, |
| | | last: '2', |
| | | appoint: [] as string[] |
| | | }, |
| | | year: { |
| | | type: '-1', |
| | | range: { |
| | | start: getYear()[0], |
| | | end: getYear()[1] |
| | | }, |
| | | loop: { |
| | | start: getYear()[0], |
| | | end: 1 |
| | | }, |
| | | appoint: [] as string[] |
| | | } |
| | | }) |
| | | const data = reactive({ |
| | | second: ['0', '5', '15', '20', '25', '30', '35', '40', '45', '50', '55', '59'], |
| | | minute: ['0', '5', '15', '20', '25', '30', '35', '40', '45', '50', '55', '59'], |
| | | hour: [ |
| | | '0', |
| | | '1', |
| | | '2', |
| | | '3', |
| | | '4', |
| | | '5', |
| | | '6', |
| | | '7', |
| | | '8', |
| | | '9', |
| | | '10', |
| | | '11', |
| | | '12', |
| | | '13', |
| | | '14', |
| | | '15', |
| | | '16', |
| | | '17', |
| | | '18', |
| | | '19', |
| | | '20', |
| | | '21', |
| | | '22', |
| | | '23' |
| | | ], |
| | | day: [ |
| | | '1', |
| | | '2', |
| | | '3', |
| | | '4', |
| | | '5', |
| | | '6', |
| | | '7', |
| | | '8', |
| | | '9', |
| | | '10', |
| | | '11', |
| | | '12', |
| | | '13', |
| | | '14', |
| | | '15', |
| | | '16', |
| | | '17', |
| | | '18', |
| | | '19', |
| | | '20', |
| | | '21', |
| | | '22', |
| | | '23', |
| | | '24', |
| | | '25', |
| | | '26', |
| | | '27', |
| | | '28', |
| | | '29', |
| | | '30', |
| | | '31' |
| | | ], |
| | | month: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], |
| | | week: [ |
| | | { |
| | | value: '1', |
| | | label: '卿¥' |
| | | }, |
| | | { |
| | | value: '2', |
| | | label: 'å¨ä¸' |
| | | }, |
| | | { |
| | | value: '3', |
| | | label: 'å¨äº' |
| | | }, |
| | | { |
| | | value: '4', |
| | | label: 'å¨ä¸' |
| | | }, |
| | | { |
| | | value: '5', |
| | | label: 'å¨å' |
| | | }, |
| | | { |
| | | value: '6', |
| | | label: 'å¨äº' |
| | | }, |
| | | { |
| | | value: '7', |
| | | label: 'å¨å
' |
| | | } |
| | | ], |
| | | year: getYear() |
| | | }) |
| | | |
| | | const value_second = computed(() => { |
| | | let v = cronValue.second |
| | | if (v.type == '0') { |
| | | return '*' |
| | | } else if (v.type == '1') { |
| | | return v.range.start + '-' + v.range.end |
| | | } else if (v.type == '2') { |
| | | return v.loop.start + '/' + v.loop.end |
| | | } else if (v.type == '3') { |
| | | return v.appoint.length > 0 ? v.appoint.join(',') : '*' |
| | | } else { |
| | | return '*' |
| | | } |
| | | }) |
| | | const value_minute = computed(() => { |
| | | let v = cronValue.minute |
| | | if (v.type == '0') { |
| | | return '*' |
| | | } else if (v.type == '1') { |
| | | return v.range.start + '-' + v.range.end |
| | | } else if (v.type == '2') { |
| | | return v.loop.start + '/' + v.loop.end |
| | | } else if (v.type == '3') { |
| | | return v.appoint.length > 0 ? v.appoint.join(',') : '*' |
| | | } else { |
| | | return '*' |
| | | } |
| | | }) |
| | | const value_hour = computed(() => { |
| | | let v = cronValue.hour |
| | | if (v.type == '0') { |
| | | return '*' |
| | | } else if (v.type == '1') { |
| | | return v.range.start + '-' + v.range.end |
| | | } else if (v.type == '2') { |
| | | return v.loop.start + '/' + v.loop.end |
| | | } else if (v.type == '3') { |
| | | return v.appoint.length > 0 ? v.appoint.join(',') : '*' |
| | | } else { |
| | | return '*' |
| | | } |
| | | }) |
| | | const value_day = computed(() => { |
| | | let v = cronValue.day |
| | | if (v.type == '0') { |
| | | return '*' |
| | | } else if (v.type == '1') { |
| | | return v.range.start + '-' + v.range.end |
| | | } else if (v.type == '2') { |
| | | return v.loop.start + '/' + v.loop.end |
| | | } else if (v.type == '3') { |
| | | return v.appoint.length > 0 ? v.appoint.join(',') : '*' |
| | | } else if (v.type == '4') { |
| | | return 'L' |
| | | } else if (v.type == '5') { |
| | | return '?' |
| | | } else { |
| | | return '*' |
| | | } |
| | | }) |
| | | const value_month = computed(() => { |
| | | let v = cronValue.month |
| | | if (v.type == '0') { |
| | | return '*' |
| | | } else if (v.type == '1') { |
| | | return v.range.start + '-' + v.range.end |
| | | } else if (v.type == '2') { |
| | | return v.loop.start + '/' + v.loop.end |
| | | } else if (v.type == '3') { |
| | | return v.appoint.length > 0 ? v.appoint.join(',') : '*' |
| | | } else { |
| | | return '*' |
| | | } |
| | | }) |
| | | const value_week = computed(() => { |
| | | let v = cronValue.week |
| | | if (v.type == '0') { |
| | | return '*' |
| | | } else if (v.type == '1') { |
| | | return v.range.start + '-' + v.range.end |
| | | } else if (v.type == '2') { |
| | | return v.loop.end + '#' + v.loop.start |
| | | } else if (v.type == '3') { |
| | | return v.appoint.length > 0 ? v.appoint.join(',') : '*' |
| | | } else if (v.type == '4') { |
| | | return v.last + 'L' |
| | | } else if (v.type == '5') { |
| | | return '?' |
| | | } else { |
| | | return '*' |
| | | } |
| | | }) |
| | | const value_year = computed(() => { |
| | | let v = cronValue.year |
| | | if (v.type == '-1') { |
| | | return '' |
| | | } else if (v.type == '0') { |
| | | return '*' |
| | | } else if (v.type == '1') { |
| | | return v.range.start + '-' + v.range.end |
| | | } else if (v.type == '2') { |
| | | return v.loop.start + '/' + v.loop.end |
| | | } else if (v.type == '3') { |
| | | return v.appoint.length > 0 ? v.appoint.join(',') : '' |
| | | } else { |
| | | return '' |
| | | } |
| | | }) |
| | | watch( |
| | | () => cronValue.week.type, |
| | | (val) => { |
| | | if (val != '5') { |
| | | cronValue.day.type = '5' |
| | | } |
| | | } |
| | | ) |
| | | watch( |
| | | () => cronValue.day.type, |
| | | (val) => { |
| | | if (val != '5') { |
| | | cronValue.week.type = '5' |
| | | } |
| | | } |
| | | ) |
| | | watch( |
| | | () => props.modelValue, |
| | | () => { |
| | | defaultValue.value = props.modelValue |
| | | } |
| | | ) |
| | | onMounted(() => { |
| | | defaultValue.value = props.modelValue |
| | | }) |
| | | const emit = defineEmits(['update:modelValue']) |
| | | const select = ref() |
| | | watch( |
| | | () => select.value, |
| | | () => { |
| | | if (select.value == 'custom') { |
| | | open() |
| | | } else { |
| | | defaultValue.value = select.value |
| | | emit('update:modelValue', defaultValue.value) |
| | | } |
| | | } |
| | | ) |
| | | const open = () => { |
| | | set() |
| | | dialogVisible.value = true |
| | | } |
| | | const set = () => { |
| | | defaultValue.value = props.modelValue |
| | | let arr = (props.modelValue || '* * * * * ?').split(' ') |
| | | //ç®åæ£æ¥ |
| | | if (arr.length < 6) { |
| | | ElMessage.warning('cron表达å¼é误ï¼å·²è½¬æ¢ä¸ºé»è®¤è¡¨è¾¾å¼') |
| | | arr = '* * * * * ?'.split(' ') |
| | | } |
| | | |
| | | //ç§ |
| | | if (arr[0] == '*') { |
| | | cronValue.second.type = '0' |
| | | } else if (arr[0].includes('-')) { |
| | | cronValue.second.type = '1' |
| | | cronValue.second.range.start = Number(arr[0].split('-')[0]) |
| | | cronValue.second.range.end = Number(arr[0].split('-')[1]) |
| | | } else if (arr[0].includes('/')) { |
| | | cronValue.second.type = '2' |
| | | cronValue.second.loop.start = Number(arr[0].split('/')[0]) |
| | | cronValue.second.loop.end = Number(arr[0].split('/')[1]) |
| | | } else { |
| | | cronValue.second.type = '3' |
| | | cronValue.second.appoint = arr[0].split(',') |
| | | } |
| | | //å |
| | | if (arr[1] == '*') { |
| | | cronValue.minute.type = '0' |
| | | } else if (arr[1].includes('-')) { |
| | | cronValue.minute.type = '1' |
| | | cronValue.minute.range.start = Number(arr[1].split('-')[0]) |
| | | cronValue.minute.range.end = Number(arr[1].split('-')[1]) |
| | | } else if (arr[1].includes('/')) { |
| | | cronValue.minute.type = '2' |
| | | cronValue.minute.loop.start = Number(arr[1].split('/')[0]) |
| | | cronValue.minute.loop.end = Number(arr[1].split('/')[1]) |
| | | } else { |
| | | cronValue.minute.type = '3' |
| | | cronValue.minute.appoint = arr[1].split(',') |
| | | } |
| | | //å°æ¶ |
| | | if (arr[2] == '*') { |
| | | cronValue.hour.type = '0' |
| | | } else if (arr[2].includes('-')) { |
| | | cronValue.hour.type = '1' |
| | | cronValue.hour.range.start = Number(arr[2].split('-')[0]) |
| | | cronValue.hour.range.end = Number(arr[2].split('-')[1]) |
| | | } else if (arr[2].includes('/')) { |
| | | cronValue.hour.type = '2' |
| | | cronValue.hour.loop.start = Number(arr[2].split('/')[0]) |
| | | cronValue.hour.loop.end = Number(arr[2].split('/')[1]) |
| | | } else { |
| | | cronValue.hour.type = '3' |
| | | cronValue.hour.appoint = arr[2].split(',') |
| | | } |
| | | //æ¥ |
| | | if (arr[3] == '*') { |
| | | cronValue.day.type = '0' |
| | | } else if (arr[3] == 'L') { |
| | | cronValue.day.type = '4' |
| | | } else if (arr[3] == '?') { |
| | | cronValue.day.type = '5' |
| | | } else if (arr[3].includes('-')) { |
| | | cronValue.day.type = '1' |
| | | cronValue.day.range.start = Number(arr[3].split('-')[0]) |
| | | cronValue.day.range.end = Number(arr[3].split('-')[1]) |
| | | } else if (arr[3].includes('/')) { |
| | | cronValue.day.type = '2' |
| | | cronValue.day.loop.start = Number(arr[3].split('/')[0]) |
| | | cronValue.day.loop.end = Number(arr[3].split('/')[1]) |
| | | } else { |
| | | cronValue.day.type = '3' |
| | | cronValue.day.appoint = arr[3].split(',') |
| | | } |
| | | //æ |
| | | if (arr[4] == '*') { |
| | | cronValue.month.type = '0' |
| | | } else if (arr[4].includes('-')) { |
| | | cronValue.month.type = '1' |
| | | cronValue.month.range.start = Number(arr[4].split('-')[0]) |
| | | cronValue.month.range.end = Number(arr[4].split('-')[1]) |
| | | } else if (arr[4].includes('/')) { |
| | | cronValue.month.type = '2' |
| | | cronValue.month.loop.start = Number(arr[4].split('/')[0]) |
| | | cronValue.month.loop.end = Number(arr[4].split('/')[1]) |
| | | } else { |
| | | cronValue.month.type = '3' |
| | | cronValue.month.appoint = arr[4].split(',') |
| | | } |
| | | //å¨ |
| | | if (arr[5] == '*') { |
| | | cronValue.week.type = '0' |
| | | } else if (arr[5] == '?') { |
| | | cronValue.week.type = '5' |
| | | } else if (arr[5].includes('-')) { |
| | | cronValue.week.type = '1' |
| | | cronValue.week.range.start = arr[5].split('-')[0] |
| | | cronValue.week.range.end = arr[5].split('-')[1] |
| | | } else if (arr[5].includes('#')) { |
| | | cronValue.week.type = '2' |
| | | cronValue.week.loop.start = Number(arr[5].split('#')[1]) |
| | | cronValue.week.loop.end = arr[5].split('#')[0] |
| | | } else if (arr[5].includes('L')) { |
| | | cronValue.week.type = '4' |
| | | cronValue.week.last = arr[5].split('L')[0] |
| | | } else { |
| | | cronValue.week.type = '3' |
| | | cronValue.week.appoint = arr[5].split(',') |
| | | } |
| | | //å¹´ |
| | | if (!arr[6]) { |
| | | cronValue.year.type = '-1' |
| | | } else if (arr[6] == '*') { |
| | | cronValue.year.type = '0' |
| | | } else if (arr[6].includes('-')) { |
| | | cronValue.year.type = '1' |
| | | cronValue.year.range.start = Number(arr[6].split('-')[0]) |
| | | cronValue.year.range.end = Number(arr[6].split('-')[1]) |
| | | } else if (arr[6].includes('/')) { |
| | | cronValue.year.type = '2' |
| | | cronValue.year.loop.start = Number(arr[6].split('/')[1]) |
| | | cronValue.year.loop.end = Number(arr[6].split('/')[0]) |
| | | } else { |
| | | cronValue.year.type = '3' |
| | | cronValue.year.appoint = arr[6].split(',') |
| | | } |
| | | } |
| | | const submit = () => { |
| | | let year = value_year.value ? ' ' + value_year.value : '' |
| | | defaultValue.value = |
| | | value_second.value + |
| | | ' ' + |
| | | value_minute.value + |
| | | ' ' + |
| | | value_hour.value + |
| | | ' ' + |
| | | value_day.value + |
| | | ' ' + |
| | | value_month.value + |
| | | ' ' + |
| | | value_week.value + |
| | | year |
| | | emit('update:modelValue', defaultValue.value) |
| | | dialogVisible.value = false |
| | | } |
| | | |
| | | const inputChange = () => { |
| | | emit('update:modelValue', defaultValue.value) |
| | | } |
| | | </script> |
| | | <template> |
| | | <el-input v-model="defaultValue" class="input-with-select" v-bind="$attrs" @input="inputChange"> |
| | | <template #append> |
| | | <el-select v-model="select" placeholder="çæå¨" style="width: 115px"> |
| | | <el-option label="æ¯åé" value="0 * * * * ?" /> |
| | | <el-option label="æ¯å°æ¶" value="0 0 * * * ?" /> |
| | | <el-option label="æ¯å¤©é¶ç¹" value="0 0 0 * * ?" /> |
| | | <el-option label="æ¯æä¸å·é¶ç¹" value="0 0 0 1 * ?" /> |
| | | <el-option label="æ¯ææåä¸å¤©é¶ç¹" value="0 0 0 L * ?" /> |
| | | <el-option label="æ¯å¨æææ¥é¶ç¹" value="0 0 0 ? * 1" /> |
| | | <el-option |
| | | v-for="(item, index) in shortcuts" |
| | | :key="index" |
| | | :label="item.text" |
| | | :value="item.value" |
| | | /> |
| | | <el-option label="èªå®ä¹" value="custom" /> |
| | | </el-select> |
| | | </template> |
| | | </el-input> |
| | | |
| | | <el-dialog |
| | | v-model="dialogVisible" |
| | | :width="580" |
| | | append-to-body |
| | | destroy-on-close |
| | | title="cronè§åçæå¨" |
| | | > |
| | | <div class="sc-cron"> |
| | | <el-tabs> |
| | | <el-tab-pane> |
| | | <template #label> |
| | | <div class="sc-cron-num"> |
| | | <h2>ç§</h2> |
| | | <h4>{{ value_second }}</h4> |
| | | </div> |
| | | </template> |
| | | <el-form> |
| | | <el-form-item label="ç±»å"> |
| | | <el-radio-group v-model="cronValue.second.type"> |
| | | <el-radio-button value="0">ä»»æå¼</el-radio-button> |
| | | <el-radio-button value="1">èå´</el-radio-button> |
| | | <el-radio-button value="2">é´é</el-radio-button> |
| | | <el-radio-button value="3">æå®</el-radio-button> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.second.type == '1'" label="èå´"> |
| | | <el-input-number |
| | | v-model="cronValue.second.range.start" |
| | | :max="59" |
| | | :min="0" |
| | | controls-position="right" |
| | | /> |
| | | <span style="padding: 0 15px">-</span> |
| | | <el-input-number |
| | | v-model="cronValue.second.range.end" |
| | | :max="59" |
| | | :min="0" |
| | | controls-position="right" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.second.type == '2'" label="é´é"> |
| | | <el-input-number |
| | | v-model="cronValue.second.loop.start" |
| | | :max="59" |
| | | :min="0" |
| | | controls-position="right" |
| | | /> |
| | | ç§å¼å§ï¼æ¯ |
| | | <el-input-number |
| | | v-model="cronValue.second.loop.end" |
| | | :max="59" |
| | | :min="0" |
| | | controls-position="right" |
| | | /> |
| | | ç§æ§è¡ä¸æ¬¡ |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.second.type == '3'" label="æå®"> |
| | | <el-select v-model="cronValue.second.appoint" multiple style="width: 100%"> |
| | | <el-option |
| | | v-for="(item, index) in data.second" |
| | | :key="index" |
| | | :label="item" |
| | | :value="item" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-tab-pane> |
| | | <el-tab-pane> |
| | | <template #label> |
| | | <div class="sc-cron-num"> |
| | | <h2>åé</h2> |
| | | <h4>{{ value_minute }}</h4> |
| | | </div> |
| | | </template> |
| | | <el-form> |
| | | <el-form-item label="ç±»å"> |
| | | <el-radio-group v-model="cronValue.minute.type"> |
| | | <el-radio-button value="0">ä»»æå¼</el-radio-button> |
| | | <el-radio-button value="1">èå´</el-radio-button> |
| | | <el-radio-button value="2">é´é</el-radio-button> |
| | | <el-radio-button value="3">æå®</el-radio-button> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.minute.type == '1'" label="èå´"> |
| | | <el-input-number |
| | | v-model="cronValue.minute.range.start" |
| | | :max="59" |
| | | :min="0" |
| | | controls-position="right" |
| | | /> |
| | | <span style="padding: 0 15px">-</span> |
| | | <el-input-number |
| | | v-model="cronValue.minute.range.end" |
| | | :max="59" |
| | | :min="0" |
| | | controls-position="right" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.minute.type == '2'" label="é´é"> |
| | | <el-input-number |
| | | v-model="cronValue.minute.loop.start" |
| | | :max="59" |
| | | :min="0" |
| | | controls-position="right" |
| | | /> |
| | | åéå¼å§ï¼æ¯ |
| | | <el-input-number |
| | | v-model="cronValue.minute.loop.end" |
| | | :max="59" |
| | | :min="0" |
| | | controls-position="right" |
| | | /> |
| | | åéæ§è¡ä¸æ¬¡ |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.minute.type == '3'" label="æå®"> |
| | | <el-select v-model="cronValue.minute.appoint" multiple style="width: 100%"> |
| | | <el-option |
| | | v-for="(item, index) in data.minute" |
| | | :key="index" |
| | | :label="item" |
| | | :value="item" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-tab-pane> |
| | | <el-tab-pane> |
| | | <template #label> |
| | | <div class="sc-cron-num"> |
| | | <h2>å°æ¶</h2> |
| | | <h4>{{ value_hour }}</h4> |
| | | </div> |
| | | </template> |
| | | <el-form> |
| | | <el-form-item label="ç±»å"> |
| | | <el-radio-group v-model="cronValue.hour.type"> |
| | | <el-radio-button value="0">ä»»æå¼</el-radio-button> |
| | | <el-radio-button value="1">èå´</el-radio-button> |
| | | <el-radio-button value="2">é´é</el-radio-button> |
| | | <el-radio-button value="3">æå®</el-radio-button> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.hour.type == '1'" label="èå´"> |
| | | <el-input-number |
| | | v-model="cronValue.hour.range.start" |
| | | :max="23" |
| | | :min="0" |
| | | controls-position="right" |
| | | /> |
| | | <span style="padding: 0 15px">-</span> |
| | | <el-input-number |
| | | v-model="cronValue.hour.range.end" |
| | | :max="23" |
| | | :min="0" |
| | | controls-position="right" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.hour.type == '2'" label="é´é"> |
| | | <el-input-number |
| | | v-model="cronValue.hour.loop.start" |
| | | :max="23" |
| | | :min="0" |
| | | controls-position="right" |
| | | /> |
| | | å°æ¶å¼å§ï¼æ¯ |
| | | <el-input-number |
| | | v-model="cronValue.hour.loop.end" |
| | | :max="23" |
| | | :min="0" |
| | | controls-position="right" |
| | | /> |
| | | å°æ¶æ§è¡ä¸æ¬¡ |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.hour.type == '3'" label="æå®"> |
| | | <el-select v-model="cronValue.hour.appoint" multiple style="width: 100%"> |
| | | <el-option |
| | | v-for="(item, index) in data.hour" |
| | | :key="index" |
| | | :label="item" |
| | | :value="item" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-tab-pane> |
| | | <el-tab-pane> |
| | | <template #label> |
| | | <div class="sc-cron-num"> |
| | | <h2>æ¥</h2> |
| | | <h4>{{ value_day }}</h4> |
| | | </div> |
| | | </template> |
| | | <el-form> |
| | | <el-form-item label="ç±»å"> |
| | | <el-radio-group v-model="cronValue.day.type"> |
| | | <el-radio-button value="0">ä»»æå¼</el-radio-button> |
| | | <el-radio-button value="1">èå´</el-radio-button> |
| | | <el-radio-button value="2">é´é</el-radio-button> |
| | | <el-radio-button value="3">æå®</el-radio-button> |
| | | <el-radio-button value="4">æ¬ææåä¸å¤©</el-radio-button> |
| | | <el-radio-button value="5">䏿å®</el-radio-button> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.day.type == '1'" label="èå´"> |
| | | <el-input-number |
| | | v-model="cronValue.day.range.start" |
| | | :max="31" |
| | | :min="1" |
| | | controls-position="right" |
| | | /> |
| | | <span style="padding: 0 15px">-</span> |
| | | <el-input-number |
| | | v-model="cronValue.day.range.end" |
| | | :max="31" |
| | | :min="1" |
| | | controls-position="right" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.day.type == '2'" label="é´é"> |
| | | <el-input-number |
| | | v-model="cronValue.day.loop.start" |
| | | :max="31" |
| | | :min="1" |
| | | controls-position="right" |
| | | /> |
| | | å·å¼å§ï¼æ¯ |
| | | <el-input-number |
| | | v-model="cronValue.day.loop.end" |
| | | :max="31" |
| | | :min="1" |
| | | controls-position="right" |
| | | /> |
| | | 天æ§è¡ä¸æ¬¡ |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.day.type == '3'" label="æå®"> |
| | | <el-select v-model="cronValue.day.appoint" multiple style="width: 100%"> |
| | | <el-option |
| | | v-for="(item, index) in data.day" |
| | | :key="index" |
| | | :label="item" |
| | | :value="item" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-tab-pane> |
| | | <el-tab-pane> |
| | | <template #label> |
| | | <div class="sc-cron-num"> |
| | | <h2>æ</h2> |
| | | <h4>{{ value_month }}</h4> |
| | | </div> |
| | | </template> |
| | | <el-form> |
| | | <el-form-item label="ç±»å"> |
| | | <el-radio-group v-model="cronValue.month.type"> |
| | | <el-radio-button value="0">ä»»æå¼</el-radio-button> |
| | | <el-radio-button value="1">èå´</el-radio-button> |
| | | <el-radio-button value="2">é´é</el-radio-button> |
| | | <el-radio-button value="3">æå®</el-radio-button> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.month.type == '1'" label="èå´"> |
| | | <el-input-number |
| | | v-model="cronValue.month.range.start" |
| | | :max="12" |
| | | :min="1" |
| | | controls-position="right" |
| | | /> |
| | | <span style="padding: 0 15px">-</span> |
| | | <el-input-number |
| | | v-model="cronValue.month.range.end" |
| | | :max="12" |
| | | :min="1" |
| | | controls-position="right" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.month.type == '2'" label="é´é"> |
| | | <el-input-number |
| | | v-model="cronValue.month.loop.start" |
| | | :max="12" |
| | | :min="1" |
| | | controls-position="right" |
| | | /> |
| | | æå¼å§ï¼æ¯ |
| | | <el-input-number |
| | | v-model="cronValue.month.loop.end" |
| | | :max="12" |
| | | :min="1" |
| | | controls-position="right" |
| | | /> |
| | | ææ§è¡ä¸æ¬¡ |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.month.type == '3'" label="æå®"> |
| | | <el-select v-model="cronValue.month.appoint" multiple style="width: 100%"> |
| | | <el-option |
| | | v-for="(item, index) in data.month" |
| | | :key="index" |
| | | :label="item" |
| | | :value="item" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-tab-pane> |
| | | <el-tab-pane> |
| | | <template #label> |
| | | <div class="sc-cron-num"> |
| | | <h2>å¨</h2> |
| | | <h4>{{ value_week }}</h4> |
| | | </div> |
| | | </template> |
| | | <el-form> |
| | | <el-form> |
| | | <el-form-item label="ç±»å"> |
| | | <el-radio-group v-model="cronValue.week.type"> |
| | | <el-radio-button value="0">ä»»æå¼</el-radio-button> |
| | | <el-radio-button value="1">èå´</el-radio-button> |
| | | <el-radio-button value="2">é´é</el-radio-button> |
| | | <el-radio-button value="3">æå®</el-radio-button> |
| | | <el-radio-button value="4">æ¬ææåä¸å¨</el-radio-button> |
| | | <el-radio-button value="5">䏿å®</el-radio-button> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.week.type == '1'" label="èå´"> |
| | | <el-select v-model="cronValue.week.range.start"> |
| | | <el-option |
| | | v-for="(item, index) in data.week" |
| | | :key="index" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | <span style="padding: 0 15px">-</span> |
| | | <el-select v-model="cronValue.week.range.end"> |
| | | <el-option |
| | | v-for="(item, index) in data.week" |
| | | :key="index" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.week.type == '2'" label="é´é"> |
| | | 第 |
| | | <el-input-number |
| | | v-model="cronValue.week.loop.start" |
| | | :max="4" |
| | | :min="1" |
| | | controls-position="right" |
| | | /> |
| | | å¨çææ |
| | | <el-select v-model="cronValue.week.loop.end"> |
| | | <el-option |
| | | v-for="(item, index) in data.week" |
| | | :key="index" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | æ§è¡ä¸æ¬¡ |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.week.type == '3'" label="æå®"> |
| | | <el-select v-model="cronValue.week.appoint" multiple style="width: 100%"> |
| | | <el-option |
| | | v-for="(item, index) in data.week" |
| | | :key="index" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.week.type == '4'" label="æåä¸å¨"> |
| | | <el-select v-model="cronValue.week.last"> |
| | | <el-option |
| | | v-for="(item, index) in data.week" |
| | | :key="index" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-form> |
| | | </el-tab-pane> |
| | | <el-tab-pane> |
| | | <template #label> |
| | | <div class="sc-cron-num"> |
| | | <h2>å¹´</h2> |
| | | <h4>{{ value_year }}</h4> |
| | | </div> |
| | | </template> |
| | | <el-form> |
| | | <el-form-item label="ç±»å"> |
| | | <el-radio-group v-model="cronValue.year.type"> |
| | | <el-radio-button value="-1">忽ç¥</el-radio-button> |
| | | <el-radio-button value="0">ä»»æå¼</el-radio-button> |
| | | <el-radio-button value="1">èå´</el-radio-button> |
| | | <el-radio-button value="2">é´é</el-radio-button> |
| | | <el-radio-button value="3">æå®</el-radio-button> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.year.type == '1'" label="èå´"> |
| | | <el-input-number v-model="cronValue.year.range.start" controls-position="right" /> |
| | | <span style="padding: 0 15px">-</span> |
| | | <el-input-number v-model="cronValue.year.range.end" controls-position="right" /> |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.year.type == '2'" label="é´é"> |
| | | <el-input-number v-model="cronValue.year.loop.start" controls-position="right" /> |
| | | å¹´å¼å§ï¼æ¯ |
| | | <el-input-number |
| | | v-model="cronValue.year.loop.end" |
| | | :min="1" |
| | | controls-position="right" |
| | | /> |
| | | å¹´æ§è¡ä¸æ¬¡ |
| | | </el-form-item> |
| | | <el-form-item v-if="cronValue.year.type == '3'" label="æå®"> |
| | | <el-select v-model="cronValue.year.appoint" multiple style="width: 100%"> |
| | | <el-option |
| | | v-for="(item, index) in data.year" |
| | | :key="index" |
| | | :label="item" |
| | | :value="item" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </div> |
| | | |
| | | <template #footer> |
| | | <el-button @click="dialogVisible = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="submit()">确 认</el-button> |
| | | </template> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <style scoped> |
| | | .sc-cron:deep(.el-tabs__item) { |
| | | height: auto; |
| | | padding: 0 7px; |
| | | line-height: 1; |
| | | vertical-align: bottom; |
| | | } |
| | | |
| | | .sc-cron-num { |
| | | width: 100%; |
| | | margin-bottom: 15px; |
| | | text-align: center; |
| | | } |
| | | |
| | | .sc-cron-num h2 { |
| | | margin-bottom: 15px; |
| | | font-size: 12px; |
| | | font-weight: normal; |
| | | } |
| | | |
| | | .sc-cron-num h4 { |
| | | display: block; |
| | | width: 100%; |
| | | height: 32px; |
| | | padding: 0 15px; |
| | | font-size: 12px; |
| | | line-height: 30px; |
| | | background: var(--el-color-primary-light-9); |
| | | border-radius: 4px; |
| | | } |
| | | |
| | | .sc-cron:deep(.el-tabs__item.is-active) .sc-cron-num h4 { |
| | | color: #fff; |
| | | background: var(--el-color-primary); |
| | | } |
| | | |
| | | [data-theme='dark'] .sc-cron-num h4 { |
| | | background: var(--el-color-white); |
| | | } |
| | | |
| | | .input-with-select .el-input-group__prepend { |
| | | background-color: var(--el-fill-color-blank); |
| | | } |
| | | </style> |
| New file |
| | |
| | | import CropperImage from './src/Cropper.vue' |
| | | import CropperAvatar from './src/CropperAvatar.vue' |
| | | |
| | | export { CropperImage, CropperAvatar } |
| New file |
| | |
| | | <template> |
| | | <div @click.stop> |
| | | <Dialog |
| | | v-model="dialogVisible" |
| | | :canFullscreen="false" |
| | | :title="t('cropper.modalTitle')" |
| | | maxHeight="380px" |
| | | width="800px" |
| | | > |
| | | <div :class="prefixCls"> |
| | | <div :class="`${prefixCls}-left`"> |
| | | <div :class="`${prefixCls}-cropper`"> |
| | | <CropperImage |
| | | v-if="src" |
| | | :circled="circled" |
| | | :src="src" |
| | | height="300px" |
| | | @cropend="handleCropend" |
| | | @ready="handleReady" |
| | | /> |
| | | </div> |
| | | |
| | | <div :class="`${prefixCls}-toolbar`"> |
| | | <el-upload :beforeUpload="handleBeforeUpload" :fileList="[]" accept="image/*"> |
| | | <el-tooltip :content="t('cropper.selectImage')" placement="bottom"> |
| | | <XButton preIcon="ant-design:upload-outlined" type="primary" /> |
| | | </el-tooltip> |
| | | </el-upload> |
| | | <el-space> |
| | | <el-tooltip :content="t('cropper.btn_reset')" placement="bottom"> |
| | | <XButton |
| | | :disabled="!src" |
| | | preIcon="ant-design:reload-outlined" |
| | | size="small" |
| | | type="primary" |
| | | @click="handlerToolbar('reset')" |
| | | /> |
| | | </el-tooltip> |
| | | <el-tooltip :content="t('cropper.btn_rotate_left')" placement="bottom"> |
| | | <XButton |
| | | :disabled="!src" |
| | | preIcon="ant-design:rotate-left-outlined" |
| | | size="small" |
| | | type="primary" |
| | | @click="handlerToolbar('rotate', -45)" |
| | | /> |
| | | </el-tooltip> |
| | | <el-tooltip :content="t('cropper.btn_rotate_right')" placement="bottom"> |
| | | <XButton |
| | | :disabled="!src" |
| | | preIcon="ant-design:rotate-right-outlined" |
| | | size="small" |
| | | type="primary" |
| | | @click="handlerToolbar('rotate', 45)" |
| | | /> |
| | | </el-tooltip> |
| | | <el-tooltip :content="t('cropper.btn_scale_x')" placement="bottom"> |
| | | <XButton |
| | | :disabled="!src" |
| | | preIcon="vaadin:arrows-long-h" |
| | | size="small" |
| | | type="primary" |
| | | @click="handlerToolbar('scaleX')" |
| | | /> |
| | | </el-tooltip> |
| | | <el-tooltip :content="t('cropper.btn_scale_y')" placement="bottom"> |
| | | <XButton |
| | | :disabled="!src" |
| | | preIcon="vaadin:arrows-long-v" |
| | | size="small" |
| | | type="primary" |
| | | @click="handlerToolbar('scaleY')" |
| | | /> |
| | | </el-tooltip> |
| | | <el-tooltip :content="t('cropper.btn_zoom_in')" placement="bottom"> |
| | | <XButton |
| | | :disabled="!src" |
| | | preIcon="ant-design:zoom-in-outlined" |
| | | size="small" |
| | | type="primary" |
| | | @click="handlerToolbar('zoom', 0.1)" |
| | | /> |
| | | </el-tooltip> |
| | | <el-tooltip :content="t('cropper.btn_zoom_out')" placement="bottom"> |
| | | <XButton |
| | | :disabled="!src" |
| | | preIcon="ant-design:zoom-out-outlined" |
| | | size="small" |
| | | type="primary" |
| | | @click="handlerToolbar('zoom', -0.1)" |
| | | /> |
| | | </el-tooltip> |
| | | </el-space> |
| | | </div> |
| | | </div> |
| | | <div :class="`${prefixCls}-right`"> |
| | | <div :class="`${prefixCls}-preview`"> |
| | | <img v-if="previewSource" :alt="t('cropper.preview')" :src="previewSource" /> |
| | | </div> |
| | | <template v-if="previewSource"> |
| | | <div :class="`${prefixCls}-group`"> |
| | | <el-avatar :src="previewSource" size="large" /> |
| | | <el-avatar :size="48" :src="previewSource" /> |
| | | <el-avatar :size="64" :src="previewSource" /> |
| | | <el-avatar :size="80" :src="previewSource" /> |
| | | </div> |
| | | </template> |
| | | </div> |
| | | </div> |
| | | <template #footer> |
| | | <el-button type="primary" @click="handleOk">{{ t('cropper.okText') }}</el-button> |
| | | </template> |
| | | </Dialog> |
| | | </div> |
| | | </template> |
| | | <script lang="ts" setup> |
| | | import { useDesign } from '@/hooks/web/useDesign' |
| | | import { dataURLtoBlob } from '@/utils/filt' |
| | | import { useI18n } from 'vue-i18n' |
| | | import type { CropendResult, Cropper } from './types' |
| | | import { propTypes } from '@/utils/propTypes' |
| | | import { CropperImage } from '@/components/Cropper' |
| | | |
| | | defineOptions({ name: 'CopperModal' }) |
| | | |
| | | const props = defineProps({ |
| | | srcValue: propTypes.string.def(''), |
| | | circled: propTypes.bool.def(true) |
| | | }) |
| | | const emit = defineEmits(['uploadSuccess']) |
| | | const { t } = useI18n() |
| | | const { getPrefixCls } = useDesign() |
| | | const prefixCls = getPrefixCls('cropper-am') |
| | | |
| | | const src = ref(props.srcValue) |
| | | const previewSource = ref('') |
| | | const cropper = ref<Cropper>() |
| | | const dialogVisible = ref(false) |
| | | let filename = '' |
| | | let scaleX = 1 |
| | | let scaleY = 1 |
| | | |
| | | // Block upload |
| | | function handleBeforeUpload(file: File) { |
| | | const reader = new FileReader() |
| | | reader.readAsDataURL(file) |
| | | src.value = '' |
| | | previewSource.value = '' |
| | | reader.onload = function (e) { |
| | | src.value = (e.target?.result as string) ?? '' |
| | | filename = file.name |
| | | } |
| | | return false |
| | | } |
| | | |
| | | function handleCropend({ imgBase64 }: CropendResult) { |
| | | previewSource.value = imgBase64 |
| | | } |
| | | |
| | | function handleReady(cropperInstance: Cropper) { |
| | | cropper.value = cropperInstance |
| | | } |
| | | |
| | | function handlerToolbar(event: string, arg?: number) { |
| | | if (event === 'scaleX') { |
| | | scaleX = arg = scaleX === -1 ? 1 : -1 |
| | | } |
| | | if (event === 'scaleY') { |
| | | scaleY = arg = scaleY === -1 ? 1 : -1 |
| | | } |
| | | cropper?.value?.[event]?.(arg) |
| | | } |
| | | |
| | | async function handleOk() { |
| | | const blob = dataURLtoBlob(previewSource.value) |
| | | emit('uploadSuccess', { source: previewSource.value, data: blob, filename: filename }) |
| | | } |
| | | |
| | | function openModal() { |
| | | dialogVisible.value = true |
| | | } |
| | | |
| | | function closeModal() { |
| | | dialogVisible.value = false |
| | | } |
| | | |
| | | defineExpose({ openModal, closeModal }) |
| | | </script> |
| | | <style lang="scss"> |
| | | $prefix-cls: #{$namespace}-cropper-am; |
| | | |
| | | .#{$prefix-cls} { |
| | | display: flex; |
| | | |
| | | &-left, |
| | | &-right { |
| | | height: 340px; |
| | | } |
| | | |
| | | &-left { |
| | | width: 55%; |
| | | } |
| | | |
| | | &-right { |
| | | width: 45%; |
| | | } |
| | | |
| | | &-cropper { |
| | | height: 300px; |
| | | background: #eee; |
| | | background-image: linear-gradient( |
| | | 45deg, |
| | | rgb(0 0 0 / 25%) 25%, |
| | | transparent 0, |
| | | transparent 75%, |
| | | rgb(0 0 0 / 25%) 0 |
| | | ), |
| | | linear-gradient( |
| | | 45deg, |
| | | rgb(0 0 0 / 25%) 25%, |
| | | transparent 0, |
| | | transparent 75%, |
| | | rgb(0 0 0 / 25%) 0 |
| | | ); |
| | | background-position: |
| | | 0 0, |
| | | 12px 12px; |
| | | background-size: 24px 24px; |
| | | } |
| | | |
| | | &-toolbar { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | margin-top: 10px; |
| | | } |
| | | |
| | | &-preview { |
| | | width: 220px; |
| | | height: 220px; |
| | | margin: 0 auto; |
| | | overflow: hidden; |
| | | border: 1px solid; |
| | | border-radius: 50%; |
| | | |
| | | img { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | } |
| | | |
| | | &-group { |
| | | display: flex; |
| | | padding-top: 8px; |
| | | margin-top: 8px; |
| | | border-top: 1px solid; |
| | | justify-content: space-around; |
| | | align-items: center; |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div :class="getClass" :style="getWrapperStyle"> |
| | | <img |
| | | v-show="isReady" |
| | | ref="imgElRef" |
| | | :alt="alt" |
| | | :crossorigin="crossorigin" |
| | | :src="src" |
| | | :style="getImageStyle" |
| | | /> |
| | | </div> |
| | | </template> |
| | | <script lang="ts" setup> |
| | | import { CSSProperties, PropType } from 'vue' |
| | | import Cropper from 'cropperjs' |
| | | import 'cropperjs/dist/cropper.css' |
| | | import { useDesign } from '@/hooks/web/useDesign' |
| | | import { propTypes } from '@/utils/propTypes' |
| | | import { useDebounceFn } from '@vueuse/core' |
| | | |
| | | defineOptions({ name: 'Cropper' }) |
| | | |
| | | type Options = Cropper.Options |
| | | |
| | | const defaultOptions: Options = { |
| | | aspectRatio: 1, |
| | | zoomable: true, |
| | | zoomOnTouch: true, |
| | | zoomOnWheel: true, |
| | | cropBoxMovable: true, |
| | | cropBoxResizable: true, |
| | | toggleDragModeOnDblclick: true, |
| | | autoCrop: true, |
| | | background: true, |
| | | highlight: true, |
| | | center: true, |
| | | responsive: true, |
| | | restore: true, |
| | | checkCrossOrigin: true, |
| | | checkOrientation: true, |
| | | scalable: true, |
| | | modal: true, |
| | | guides: true, |
| | | movable: true, |
| | | rotatable: true |
| | | } |
| | | |
| | | const props = defineProps({ |
| | | src: propTypes.string.def(''), |
| | | alt: propTypes.string.def(''), |
| | | circled: propTypes.bool.def(false), |
| | | realTimePreview: propTypes.bool.def(true), |
| | | height: propTypes.string.def('360px'), |
| | | crossorigin: { |
| | | type: String as PropType<'' | 'anonymous' | 'use-credentials' | undefined>, |
| | | default: undefined |
| | | }, |
| | | imageStyle: { type: Object as PropType<CSSProperties>, default: () => ({}) }, |
| | | options: { type: Object as PropType<Options>, default: () => ({}) } |
| | | }) |
| | | |
| | | const emit = defineEmits(['cropend', 'ready', 'cropendError']) |
| | | const attrs = useAttrs() |
| | | const imgElRef = ref<ElRef<HTMLImageElement>>() |
| | | const cropper = ref<Nullable<Cropper>>() |
| | | const isReady = ref(false) |
| | | |
| | | const { getPrefixCls } = useDesign() |
| | | const prefixCls = getPrefixCls('cropper-image') |
| | | const debounceRealTimeCroppered = useDebounceFn(realTimeCroppered, 80) |
| | | |
| | | const getImageStyle = computed((): CSSProperties => { |
| | | return { |
| | | height: props.height, |
| | | maxWidth: '100%', |
| | | ...props.imageStyle |
| | | } |
| | | }) |
| | | |
| | | const getClass = computed(() => { |
| | | return [ |
| | | prefixCls, |
| | | attrs.class, |
| | | { |
| | | [`${prefixCls}--circled`]: props.circled |
| | | } |
| | | ] |
| | | }) |
| | | const getWrapperStyle = computed((): CSSProperties => { |
| | | return { height: `${props.height}`.replace(/px/, '') + 'px' } |
| | | }) |
| | | |
| | | onMounted(init) |
| | | |
| | | onUnmounted(() => { |
| | | cropper.value?.destroy() |
| | | }) |
| | | |
| | | async function init() { |
| | | const imgEl = unref(imgElRef) |
| | | if (!imgEl) { |
| | | return |
| | | } |
| | | cropper.value = new Cropper(imgEl, { |
| | | ...defaultOptions, |
| | | ready: () => { |
| | | isReady.value = true |
| | | realTimeCroppered() |
| | | emit('ready', cropper.value) |
| | | }, |
| | | crop() { |
| | | debounceRealTimeCroppered() |
| | | }, |
| | | zoom() { |
| | | debounceRealTimeCroppered() |
| | | }, |
| | | cropmove() { |
| | | debounceRealTimeCroppered() |
| | | }, |
| | | ...props.options |
| | | }) |
| | | } |
| | | |
| | | // Real-time display preview |
| | | function realTimeCroppered() { |
| | | props.realTimePreview && croppered() |
| | | } |
| | | |
| | | // event: return base64 and width and height information after cropping |
| | | function croppered() { |
| | | if (!cropper.value) { |
| | | return |
| | | } |
| | | let imgInfo = cropper.value.getData() |
| | | const canvas = props.circled ? getRoundedCanvas() : cropper.value.getCroppedCanvas() |
| | | canvas.toBlob((blob) => { |
| | | if (!blob) { |
| | | return |
| | | } |
| | | let fileReader: FileReader = new FileReader() |
| | | fileReader.readAsDataURL(blob) |
| | | fileReader.onloadend = (e) => { |
| | | emit('cropend', { |
| | | imgBase64: e.target?.result ?? '', |
| | | imgInfo |
| | | }) |
| | | } |
| | | fileReader.onerror = () => { |
| | | emit('cropendError') |
| | | } |
| | | }, 'image/png') |
| | | } |
| | | |
| | | // Get a circular picture canvas |
| | | function getRoundedCanvas() { |
| | | const sourceCanvas = cropper.value!.getCroppedCanvas() |
| | | const canvas = document.createElement('canvas') |
| | | const context = canvas.getContext('2d')! |
| | | const width = sourceCanvas.width |
| | | const height = sourceCanvas.height |
| | | canvas.width = width |
| | | canvas.height = height |
| | | context.imageSmoothingEnabled = true |
| | | context.drawImage(sourceCanvas, 0, 0, width, height) |
| | | context.globalCompositeOperation = 'destination-in' |
| | | context.beginPath() |
| | | context.arc(width / 2, height / 2, Math.min(width, height) / 2, 0, 2 * Math.PI, true) |
| | | context.fill() |
| | | return canvas |
| | | } |
| | | </script> |
| | | <style lang="scss"> |
| | | $prefix-cls: #{$namespace}-cropper-image; |
| | | |
| | | .#{$prefix-cls} { |
| | | &--circled { |
| | | .cropper-view-box, |
| | | .cropper-face { |
| | | border-radius: 50%; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div class="user-info-head" @click="open()"> |
| | | <el-avatar v-if="sourceValue" :src="sourceValue" alt="avatar" class="img-circle img-lg" /> |
| | | <el-avatar v-if="!sourceValue" :src="avatar" alt="avatar" class="img-circle img-lg" /> |
| | | <el-button v-if="showBtn" :class="`${prefixCls}-upload-btn`" @click="open()"> |
| | | {{ btnText ? btnText : t('cropper.selectImage') }} |
| | | </el-button> |
| | | <CopperModal |
| | | ref="cropperModelRef" |
| | | :srcValue="sourceValue" |
| | | @upload-success="handleUploadSuccess" |
| | | /> |
| | | </div> |
| | | </template> |
| | | <script lang="ts" setup> |
| | | import { useDesign } from '@/hooks/web/useDesign' |
| | | |
| | | import { propTypes } from '@/utils/propTypes' |
| | | import { useI18n } from 'vue-i18n' |
| | | import CopperModal from './CopperModal.vue' |
| | | import avatar from '@/assets/imgs/avatar.gif' |
| | | |
| | | defineOptions({ name: 'CropperAvatar' }) |
| | | |
| | | const props = defineProps({ |
| | | width: propTypes.string.def('200px'), |
| | | value: propTypes.string.def(''), |
| | | showBtn: propTypes.bool.def(true), |
| | | btnText: propTypes.string.def('') |
| | | }) |
| | | |
| | | const emit = defineEmits(['update:value', 'change']) |
| | | const sourceValue = ref(props.value) |
| | | const { getPrefixCls } = useDesign() |
| | | const prefixCls = getPrefixCls('cropper-avatar') |
| | | const message = useMessage() |
| | | const { t } = useI18n() |
| | | |
| | | const cropperModelRef = ref() |
| | | |
| | | watchEffect(() => { |
| | | sourceValue.value = props.value |
| | | }) |
| | | |
| | | watch( |
| | | () => sourceValue.value, |
| | | (v: string) => { |
| | | emit('update:value', v) |
| | | } |
| | | ) |
| | | |
| | | function handleUploadSuccess({ source, data, filename }) { |
| | | sourceValue.value = source |
| | | emit('change', { source, data, filename }) |
| | | message.success(t('cropper.uploadSuccess')) |
| | | } |
| | | |
| | | function open() { |
| | | cropperModelRef.value.openModal() |
| | | } |
| | | |
| | | function close() { |
| | | cropperModelRef.value.closeModal() |
| | | } |
| | | |
| | | defineExpose({ |
| | | open, |
| | | close |
| | | }) |
| | | </script> |
| | | <style lang="scss" scoped> |
| | | $prefix-cls: #{$namespace}--cropper-avatar; |
| | | |
| | | .#{$prefix-cls} { |
| | | display: inline-block; |
| | | text-align: center; |
| | | |
| | | &-image-wrapper { |
| | | overflow: hidden; |
| | | cursor: pointer; |
| | | border: 1px solid; |
| | | border-radius: 50%; |
| | | |
| | | img { |
| | | width: 100%; |
| | | } |
| | | } |
| | | |
| | | &-image-mask { |
| | | position: absolute; |
| | | width: inherit; |
| | | height: inherit; |
| | | cursor: pointer; |
| | | background: rgb(0 0 0 / 40%); |
| | | border: inherit; |
| | | border-radius: inherit; |
| | | opacity: 0; |
| | | transition: opacity 0.4s; |
| | | |
| | | ::v-deep(svg) { |
| | | margin: auto; |
| | | } |
| | | } |
| | | |
| | | &-image-mask:hover { |
| | | opacity: 40; |
| | | } |
| | | |
| | | &-upload-btn { |
| | | margin: 10px auto; |
| | | } |
| | | } |
| | | |
| | | .user-info-head { |
| | | position: relative; |
| | | display: inline-block; |
| | | } |
| | | |
| | | .img-circle { |
| | | border-radius: 50%; |
| | | } |
| | | |
| | | .img-lg { |
| | | width: 120px; |
| | | height: 120px; |
| | | } |
| | | |
| | | .user-info-head:hover::after { |
| | | position: absolute; |
| | | inset: 0; |
| | | font-size: 24px; |
| | | -webkit-font-smoothing: antialiased; |
| | | -moz-osx-font-smoothing: grayscale; |
| | | font-style: normal; |
| | | line-height: 110px; |
| | | color: #eee; |
| | | cursor: pointer; |
| | | background: rgb(0 0 0 / 50%); |
| | | border-radius: 50%; |
| | | content: '+'; |
| | | } |
| | | </style> |
| New file |
| | |
| | | import type Cropper from 'cropperjs' |
| | | |
| | | export interface CropendResult { |
| | | imgBase64: string |
| | | imgInfo: Cropper.Data |
| | | } |
| | | |
| | | export type { Cropper } |
| New file |
| | |
| | | <template> |
| | | <Dialog v-model="dialogVisible" title="é¨é¨éæ©" width="600"> |
| | | <el-row v-loading="formLoading"> |
| | | <el-col :span="24"> |
| | | <ContentWrap class="h-1/1"> |
| | | <el-tree |
| | | ref="treeRef" |
| | | :data="deptTree" |
| | | :props="defaultProps" |
| | | show-checkbox |
| | | :check-strictly="checkStrictly" |
| | | check-on-click-node |
| | | default-expand-all |
| | | highlight-current |
| | | node-key="id" |
| | | @check="handleCheck" |
| | | /> |
| | | </ContentWrap> |
| | | </el-col> |
| | | </el-row> |
| | | <template #footer> |
| | | <el-button |
| | | :disabled="formLoading || !selectedDeptIds?.length" |
| | | type="primary" |
| | | @click="submitForm" |
| | | > |
| | | ç¡® å® |
| | | </el-button> |
| | | <el-button @click="dialogVisible = false">å æ¶</el-button> |
| | | </template> |
| | | </Dialog> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | import { defaultProps, handleTree } from '@/utils/tree' |
| | | import * as DeptApi from '@/api/system/dept' |
| | | |
| | | defineOptions({ name: 'DeptSelectForm' }) |
| | | |
| | | const emit = defineEmits<{ |
| | | confirm: [deptList: any[]] |
| | | }>() |
| | | |
| | | const { t } = useI18n() // å½é
å |
| | | const message = useMessage() // æ¶æ¯å¼¹çª |
| | | |
| | | const props = defineProps({ |
| | | // æ¯å¦ä¸¥æ ¼çéµå¾ªç¶åä¸äºç¸å
³è |
| | | checkStrictly: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | // æ¯å¦æ¯æå¤é |
| | | multiple: { |
| | | type: Boolean, |
| | | default: true |
| | | } |
| | | }) |
| | | |
| | | const treeRef = ref() |
| | | const deptTree = ref<Tree[]>([]) // é¨é¨æ å½¢ç»æ |
| | | const selectedDeptIds = ref<number[]>([]) // éä¸çé¨é¨ ID å表 |
| | | const dialogVisible = ref(false) // å¼¹çªçæ¯å¦å±ç¤º |
| | | const formLoading = ref(false) // 表åçå è½½ä¸ |
| | | |
| | | /** æå¼å¼¹çª */ |
| | | const open = async (selectedList?: DeptApi.DeptVO[]) => { |
| | | resetForm() |
| | | formLoading.value = true |
| | | try { |
| | | // å è½½é¨é¨å表 |
| | | const deptData = await DeptApi.getSimpleDeptList() |
| | | deptTree.value = handleTree(deptData) |
| | | } finally { |
| | | formLoading.value = false |
| | | } |
| | | dialogVisible.value = true |
| | | // è®¾ç½®å·²éæ©çé¨é¨ |
| | | if (selectedList?.length) { |
| | | await nextTick() |
| | | const selectedIds = selectedList |
| | | .map((dept) => dept.id) |
| | | .filter((id): id is number => id !== undefined) |
| | | selectedDeptIds.value = selectedIds |
| | | treeRef.value?.setCheckedKeys(selectedIds) |
| | | } |
| | | } |
| | | |
| | | /** å¤çéä¸ç¶æåå */ |
| | | const handleCheck = (data: any, checked: any) => { |
| | | selectedDeptIds.value = treeRef.value.getCheckedKeys() |
| | | if (!props.multiple && selectedDeptIds.value.length > 1) { |
| | | // å鿍¡å¼ä¸ï¼åªä¿çæåéæ©çèç¹ |
| | | const lastSelectedId = selectedDeptIds.value[selectedDeptIds.value.length - 1] |
| | | selectedDeptIds.value = [lastSelectedId] |
| | | treeRef.value.setCheckedKeys([lastSelectedId]) |
| | | } |
| | | } |
| | | |
| | | /** æäº¤éæ© */ |
| | | const submitForm = async () => { |
| | | try { |
| | | // è·åéä¸ç宿´é¨é¨æ°æ® |
| | | const checkedNodes = treeRef.value.getCheckedNodes() |
| | | message.success(t('common.updateSuccess')) |
| | | dialogVisible.value = false |
| | | emit('confirm', checkedNodes) |
| | | } finally { |
| | | } |
| | | } |
| | | |
| | | /** é置表å */ |
| | | const resetForm = () => { |
| | | deptTree.value = [] |
| | | selectedDeptIds.value = [] |
| | | if (treeRef.value) { |
| | | treeRef.value.setCheckedKeys([]) |
| | | } |
| | | } |
| | | |
| | | defineExpose({ open }) // æä¾ open æ¹æ³ï¼ç¨äºæå¼å¼¹çª |
| | | </script> |
| New file |
| | |
| | | import Descriptions from './src/Descriptions.vue' |
| | | import DescriptionsItemLabel from './src/DescriptionsItemLabel.vue' |
| | | |
| | | export { Descriptions, DescriptionsItemLabel } |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | import { PropType } from 'vue' |
| | | import dayjs from 'dayjs' |
| | | import { useDesign } from '@/hooks/web/useDesign' |
| | | import { propTypes } from '@/utils/propTypes' |
| | | import { useAppStore } from '@/store/modules/app' |
| | | import { DescriptionsSchema } from '@/types/descriptions' |
| | | |
| | | defineOptions({ name: 'Descriptions' }) |
| | | |
| | | const appStore = useAppStore() |
| | | |
| | | const mobile = computed(() => appStore.getMobile) |
| | | |
| | | const attrs = useAttrs() |
| | | |
| | | const slots = useSlots() |
| | | |
| | | const props = defineProps({ |
| | | title: propTypes.string.def(''), |
| | | message: propTypes.string.def(''), |
| | | collapse: propTypes.bool.def(true), |
| | | columns: propTypes.number.def(1), |
| | | schema: { |
| | | type: Array as PropType<DescriptionsSchema[]>, |
| | | default: () => [] |
| | | }, |
| | | data: { |
| | | type: Object as PropType<any>, |
| | | default: () => ({}) |
| | | } |
| | | }) |
| | | |
| | | const { getPrefixCls } = useDesign() |
| | | |
| | | const prefixCls = getPrefixCls('descriptions') |
| | | |
| | | const getBindValue = computed(() => { |
| | | const delArr: string[] = ['title', 'message', 'collapse', 'schema', 'data', 'class'] |
| | | const obj = { ...attrs, ...props } |
| | | for (const key in obj) { |
| | | if (delArr.indexOf(key) !== -1) { |
| | | delete obj[key] |
| | | } |
| | | } |
| | | return obj |
| | | }) |
| | | |
| | | const getBindItemValue = (item: DescriptionsSchema) => { |
| | | const delArr: string[] = ['field'] |
| | | const obj = { ...item } |
| | | for (const key in obj) { |
| | | if (delArr.indexOf(key) !== -1) { |
| | | delete obj[key] |
| | | } |
| | | } |
| | | return obj |
| | | } |
| | | |
| | | // æå |
| | | const show = ref(true) |
| | | |
| | | const toggleClick = () => { |
| | | if (props.collapse) { |
| | | show.value = !unref(show) |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <div |
| | | :class="[ |
| | | prefixCls, |
| | | 'bg-[var(--el-color-white)] dark:bg-[var(--el-bg-color)] dark:border-[var(--el-border-color)] dark:border-1px' |
| | | ]" |
| | | > |
| | | <div |
| | | v-if="title" |
| | | :class="[ |
| | | `${prefixCls}-header`, |
| | | 'h-50px flex justify-between items-center b-b-1 border-solid border-[var(--el-border-color)] px-10px cursor-pointer dark:border-[var(--el-border-color)]' |
| | | ]" |
| | | @click="toggleClick" |
| | | > |
| | | <div :class="[`${prefixCls}-header__title`, 'relative font-18px font-bold ml-10px']"> |
| | | <div class="flex items-center"> |
| | | {{ title }} |
| | | <ElTooltip v-if="message" :content="message" placement="right"> |
| | | <Icon class="ml-5px" icon="ep:warning" /> |
| | | </ElTooltip> |
| | | </div> |
| | | </div> |
| | | <Icon v-if="collapse" :icon="show ? 'ep:arrow-down' : 'ep:arrow-up'" /> |
| | | </div> |
| | | |
| | | <ElCollapseTransition> |
| | | <div v-show="show" :class="[`${prefixCls}-content`, 'p-10px']"> |
| | | <ElDescriptions |
| | | :column="props.columns" |
| | | :direction="mobile ? 'vertical' : 'horizontal'" |
| | | border |
| | | v-bind="getBindValue" |
| | | > |
| | | <template v-if="slots['extra']" #extra> |
| | | <slot name="extra"></slot> |
| | | </template> |
| | | <ElDescriptionsItem |
| | | v-for="item in schema" |
| | | :key="item.field" |
| | | min-width="80" |
| | | v-bind="getBindItemValue(item)" |
| | | > |
| | | <template #label> |
| | | <slot |
| | | :name="`${item.field}-label`" |
| | | :row="{ |
| | | label: item.label |
| | | }" |
| | | >{{ item.label }} |
| | | </slot> |
| | | </template> |
| | | |
| | | <template #default> |
| | | <slot v-if="item.dateFormat"> |
| | | {{ |
| | | data[item.field] !== null ? dayjs(data[item.field]).format(item.dateFormat) : '' |
| | | }} |
| | | </slot> |
| | | <slot v-else-if="item.dictType"> |
| | | <DictTag :type="item.dictType" :value="data[item.field] + ''" /> |
| | | </slot> |
| | | <slot v-else :name="item.field" :row="data"> |
| | | {{ |
| | | item.mappedField ? data[item.mappedField] : data[item.field] |
| | | }} |
| | | </slot> |
| | | </template> |
| | | </ElDescriptionsItem> |
| | | </ElDescriptions> |
| | | </div> |
| | | </ElCollapseTransition> |
| | | </div> |
| | | </template> |
| | | |
| | | <style lang="scss" scoped> |
| | | $prefix-cls: #{$namespace}-descriptions; |
| | | |
| | | .#{$prefix-cls}-header { |
| | | &__title { |
| | | &::after { |
| | | position: absolute; |
| | | top: 3px; |
| | | left: -10px; |
| | | width: 4px; |
| | | height: 70%; |
| | | background: var(--el-color-primary); |
| | | content: ''; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .#{$prefix-cls}-content { |
| | | :deep(.#{$elNamespace}-descriptions__cell) { |
| | | width: 0; |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | <script setup lang="ts"> |
| | | const { label } = defineProps({ |
| | | label: { |
| | | type: String, |
| | | required: true |
| | | }, |
| | | icon: { |
| | | type: String, |
| | | required: false |
| | | } |
| | | }) |
| | | </script> |
| | | |
| | | <template> |
| | | <div class="cell-item"> |
| | | <Icon :icon="icon" v-if="icon" style="vertical-align: middle" :size="18" /> |
| | | {{ label }} |
| | | </div> |
| | | </template> |
| | | |
| | | <style scoped lang="scss"> |
| | | .cell-item { |
| | | display: inline; |
| | | } |
| | | |
| | | .cell-item::after { |
| | | content: ':'; |
| | | } |
| | | </style> |
| New file |
| | |
| | | import Dialog from './src/Dialog.vue' |
| | | |
| | | export { Dialog } |
| New file |
| | |
| | | <script lang="ts" setup> |
| | | import { propTypes } from '@/utils/propTypes' |
| | | import { isNumber } from '@/utils/is' |
| | | |
| | | defineOptions({ name: 'Dialog' }) |
| | | |
| | | const slots = useSlots() |
| | | const emits = defineEmits(['update:modelValue']) |
| | | |
| | | const props = defineProps({ |
| | | modelValue: propTypes.bool.def(false), |
| | | title: propTypes.string.def('Dialog'), |
| | | fullscreen: propTypes.bool.def(true), |
| | | width: propTypes.oneOfType([String, Number]).def('40%'), |
| | | scroll: propTypes.bool.def(false), // æ¯å¦å¼å¯æ»å¨æ¡ã妿æ¯çè¯ï¼æç
§ maxHeight 设置æå¤§é«åº¦ |
| | | maxHeight: propTypes.oneOfType([String, Number]).def('400px') |
| | | }) |
| | | |
| | | const getBindValue = computed(() => { |
| | | const delArr: string[] = ['fullscreen', 'title', 'maxHeight', 'appendToBody'] |
| | | const attrs = useAttrs() |
| | | const obj = { ...attrs, ...props } |
| | | for (const key in obj) { |
| | | if (delArr.indexOf(key) !== -1) { |
| | | delete obj[key] |
| | | } |
| | | } |
| | | return obj |
| | | }) |
| | | |
| | | const isFullscreen = ref(false) |
| | | |
| | | const toggleFull = () => { |
| | | isFullscreen.value = !unref(isFullscreen) |
| | | } |
| | | |
| | | const dialogHeight = ref(isNumber(props.maxHeight) ? `${props.maxHeight}px` : props.maxHeight) |
| | | |
| | | watch( |
| | | () => isFullscreen.value, |
| | | async (val: boolean) => { |
| | | await nextTick() |
| | | if (val) { |
| | | const windowHeight = document.documentElement.offsetHeight |
| | | dialogHeight.value = `${windowHeight - 55 - 60 - (slots.footer ? 63 : 0)}px` |
| | | } else { |
| | | dialogHeight.value = isNumber(props.maxHeight) ? `${props.maxHeight}px` : props.maxHeight |
| | | } |
| | | }, |
| | | { |
| | | immediate: true |
| | | } |
| | | ) |
| | | |
| | | const dialogStyle = computed(() => { |
| | | return { |
| | | height: unref(dialogHeight) |
| | | } |
| | | }) |
| | | |
| | | const closing = ref(false) |
| | | |
| | | function closeHandler() { |
| | | emits('update:modelValue', false) |
| | | closing.value = true |
| | | } |
| | | |
| | | function closedHandler() { |
| | | closing.value = false |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <ElDialog |
| | | v-bind="getBindValue" |
| | | :close-on-click-modal="true" |
| | | :fullscreen="isFullscreen" |
| | | :width="width" |
| | | destroy-on-close |
| | | lock-scroll |
| | | draggable |
| | | class="com-dialog" |
| | | :show-close="false" |
| | | @close="closeHandler" |
| | | @closed="closedHandler" |
| | | > |
| | | <template #header="{ close }"> |
| | | <div class="relative h-54px flex items-center justify-between pl-15px pr-15px"> |
| | | <slot name="title"> |
| | | {{ title }} |
| | | </slot> |
| | | <div |
| | | class="absolute right-15px top-[50%] h-54px flex translate-y-[-50%] items-center justify-between" |
| | | > |
| | | <Icon |
| | | v-if="fullscreen" |
| | | class="is-hover mr-10px cursor-pointer" |
| | | :icon="isFullscreen ? 'radix-icons:exit-full-screen' : 'radix-icons:enter-full-screen'" |
| | | color="var(--el-color-info)" |
| | | hover-color="var(--el-color-primary)" |
| | | @click="toggleFull" |
| | | /> |
| | | <Icon |
| | | class="is-hover cursor-pointer" |
| | | icon="ep:close" |
| | | hover-color="var(--el-color-primary)" |
| | | color="var(--el-color-info)" |
| | | @click.stop="close" |
| | | /> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <ElScrollbar v-if="scroll" :style="dialogStyle"> |
| | | <slot></slot> |
| | | </ElScrollbar> |
| | | <slot v-else></slot> |
| | | <template v-if="slots.footer" #footer> |
| | | <div :style="{ 'pointer-events': closing ? 'none' : 'auto' }"> |
| | | <slot name="footer"></slot> |
| | | </div> |
| | | </template> |
| | | </ElDialog> |
| | | </template> |
| | | |
| | | <style lang="scss"> |
| | | .com-dialog { |
| | | .#{$elNamespace}-overlay-dialog { |
| | | display: flex; |
| | | justify-content: center; |
| | | align-items: center; |
| | | } |
| | | |
| | | .#{$elNamespace}-dialog { |
| | | margin: 0 !important; |
| | | |
| | | &__header { |
| | | height: 54px; |
| | | padding: 0; |
| | | margin-right: 0 !important; |
| | | border-bottom: 1px solid var(--el-border-color); |
| | | } |
| | | |
| | | &__body { |
| | | padding: 15px !important; |
| | | } |
| | | |
| | | &__footer { |
| | | border-top: 1px solid var(--el-border-color); |
| | | } |
| | | |
| | | &__headerbtn { |
| | | top: 0; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | import DictTag from './src/DictTag.vue' |
| | | |
| | | export { DictTag } |
| New file |
| | |
| | | <script lang="tsx"> |
| | | import { computed, defineComponent, PropType } from 'vue' |
| | | import { isHexColor } from '@/utils/color' |
| | | import { ElTag } from 'element-plus' |
| | | import { DictDataType, getDictOptions } from '@/utils/dict' |
| | | import { isArray, isBoolean, isNumber, isString } from '@/utils/is' |
| | | |
| | | export default defineComponent({ |
| | | name: 'DictTag', |
| | | props: { |
| | | type: { |
| | | type: String as PropType<string>, |
| | | required: true |
| | | }, |
| | | value: { |
| | | type: [String, Number, Boolean, Array], |
| | | required: true |
| | | }, |
| | | // å符串åé符 åªæå½ props.value ä¼ å
¥å¼ä¸ºåç¬¦ä¸²æ¶ææ |
| | | separator: { |
| | | type: String as PropType<string>, |
| | | default: ',' |
| | | }, |
| | | // æ¯ä¸ª tag ä¹é´çé´éï¼é»è®¤ä¸º 5pxï¼åèç el-row ç gutter |
| | | gutter: { |
| | | type: String as PropType<string>, |
| | | default: '5px' |
| | | } |
| | | }, |
| | | setup(props) { |
| | | const valueArr: any = computed(() => { |
| | | // 1. æ¯ Number ç±»åå Boolean ç±»åçæ
åµ |
| | | if (isNumber(props.value) || isBoolean(props.value)) { |
| | | return [String(props.value)] |
| | | } |
| | | // 2. æ¯å符串ï¼è¿ä¸æ¥å¤ææ¯å¦æå
å«åéç¬¦å· -> props.sepSymbol ï¼ |
| | | else if (isString(props.value)) { |
| | | return props.value.split(props.separator) |
| | | } |
| | | // 3. æ°ç» |
| | | else if (isArray(props.value)) { |
| | | return props.value.map(String) |
| | | } |
| | | return [] |
| | | }) |
| | | const renderDictTag = () => { |
| | | if (!props.type) { |
| | | return null |
| | | } |
| | | // è§£å³èªå®ä¹åå
¸æ ç¾å¼ä¸ºé¶æ¶æ ç¾ä¸æ¸²æçé®é¢ |
| | | if (props.value === undefined || props.value === null || props.value === '') { |
| | | return null |
| | | } |
| | | const dictOptions = getDictOptions(props.type) |
| | | |
| | | return ( |
| | | <div |
| | | class="dict-tag" |
| | | style={{ |
| | | display: 'inline-flex', |
| | | gap: props.gutter, |
| | | justifyContent: 'center', |
| | | alignItems: 'center' |
| | | }} |
| | | > |
| | | {dictOptions.map((dict: DictDataType) => { |
| | | if (valueArr.value.includes(dict.value)) { |
| | | if (dict.colorType + '' === 'primary' || dict.colorType + '' === 'default') { |
| | | dict.colorType = '' |
| | | } |
| | | return ( |
| | | // æ·»å æ ç¾çæåé¢è²ä¸ºç½è²ï¼è§£å³èªå®ä¹èæ¯é¢è²æ¶æ ç¾æåç䏿¸
çé®é¢ |
| | | <ElTag |
| | | style={dict?.cssClass ? 'color: #fff' : ''} |
| | | type={dict?.colorType || null} |
| | | color={dict?.cssClass && isHexColor(dict?.cssClass) ? dict?.cssClass : ''} |
| | | disableTransitions={true} |
| | | > |
| | | {dict?.label} |
| | | </ElTag> |
| | | ) |
| | | } |
| | | })} |
| | | </div> |
| | | ) |
| | | } |
| | | return () => renderDictTag() |
| | | } |
| | | }) |
| | | </script> |
| New file |
| | |
| | | <template> |
| | | <div :class="['component', { active: active }]"> |
| | | <div |
| | | :style="{ |
| | | ...style |
| | | }" |
| | | > |
| | | <component :is="component.id" :property="component.property" /> |
| | | </div> |
| | | <div class="component-wrap"> |
| | | <!-- 左侧ï¼ç»ä»¶åï¼æ¬æµ®çå°è´´æ¡ï¼ --> |
| | | <div class="component-name" v-if="component.name"> |
| | | {{ component.name }} |
| | | </div> |
| | | <!-- å³ä¾§ï¼ç»ä»¶æä½å·¥å
·æ --> |
| | | <div class="component-toolbar" v-if="showToolbar && component.name && active"> |
| | | <VerticalButtonGroup type="primary"> |
| | | <el-tooltip content="ä¸ç§»" placement="right"> |
| | | <el-button :disabled="!canMoveUp" @click.stop="handleMoveComponent(-1)"> |
| | | <Icon icon="ep:arrow-up" /> |
| | | </el-button> |
| | | </el-tooltip> |
| | | <el-tooltip content="ä¸ç§»" placement="right"> |
| | | <el-button :disabled="!canMoveDown" @click.stop="handleMoveComponent(1)"> |
| | | <Icon icon="ep:arrow-down" /> |
| | | </el-button> |
| | | </el-tooltip> |
| | | <el-tooltip content="å¤å¶" placement="right"> |
| | | <el-button @click.stop="handleCopyComponent()"> |
| | | <Icon icon="ep:copy-document" /> |
| | | </el-button> |
| | | </el-tooltip> |
| | | <el-tooltip content="å é¤" placement="right"> |
| | | <el-button @click.stop="handleDeleteComponent()"> |
| | | <Icon icon="ep:delete" /> |
| | | </el-button> |
| | | </el-tooltip> |
| | | </VerticalButtonGroup> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts"> |
| | | // æ³¨åææçç»ä»¶ |
| | | import { components } from '../components/mobile/index' |
| | | export default { |
| | | components: { ...components } |
| | | } |
| | | </script> |
| | | <script setup lang="ts"> |
| | | import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util' |
| | | import { propTypes } from '@/utils/propTypes' |
| | | import { object } from 'vue-types' |
| | | |
| | | /** |
| | | * ç»ä»¶å®¹å¨ï¼ç®åå¨ä¸é´é¨å |
| | | * ç¨äºå
裹ç»ä»¶ï¼ä¸ºç»ä»¶æä¾ èæ¯ãå¤è¾¹è·ãå
è¾¹è·ãè¾¹æ¡çæ ·å¼ |
| | | */ |
| | | defineOptions({ name: 'ComponentContainer' }) |
| | | |
| | | type DiyComponentWithStyle = DiyComponent<any> & { property: { style?: ComponentStyle } } |
| | | const props = defineProps({ |
| | | component: object<DiyComponentWithStyle>().isRequired, |
| | | active: propTypes.bool.def(false), |
| | | canMoveUp: propTypes.bool.def(false), |
| | | canMoveDown: propTypes.bool.def(false), |
| | | showToolbar: propTypes.bool.def(true) |
| | | }) |
| | | |
| | | /** |
| | | * ç»ä»¶æ ·å¼ |
| | | */ |
| | | const style = computed(() => { |
| | | let componentStyle = props.component.property.style |
| | | if (!componentStyle) { |
| | | return {} |
| | | } |
| | | return { |
| | | marginTop: `${componentStyle.marginTop || 0}px`, |
| | | marginBottom: `${componentStyle.marginBottom || 0}px`, |
| | | marginLeft: `${componentStyle.marginLeft || 0}px`, |
| | | marginRight: `${componentStyle.marginRight || 0}px`, |
| | | paddingTop: `${componentStyle.paddingTop || 0}px`, |
| | | paddingRight: `${componentStyle.paddingRight || 0}px`, |
| | | paddingBottom: `${componentStyle.paddingBottom || 0}px`, |
| | | paddingLeft: `${componentStyle.paddingLeft || 0}px`, |
| | | borderTopLeftRadius: `${componentStyle.borderTopLeftRadius || 0}px`, |
| | | borderTopRightRadius: `${componentStyle.borderTopRightRadius || 0}px`, |
| | | borderBottomRightRadius: `${componentStyle.borderBottomRightRadius || 0}px`, |
| | | borderBottomLeftRadius: `${componentStyle.borderBottomLeftRadius || 0}px`, |
| | | overflow: 'hidden', |
| | | background: |
| | | componentStyle.bgType === 'color' ? componentStyle.bgColor : `url(${componentStyle.bgImg})` |
| | | } |
| | | }) |
| | | |
| | | const emits = defineEmits<{ |
| | | (e: 'move', direction: number): void |
| | | (e: 'copy'): void |
| | | (e: 'delete'): void |
| | | }>() |
| | | |
| | | /** |
| | | * ç§»å¨ç»ä»¶ |
| | | * @param direction ç§»å¨æ¹å |
| | | */ |
| | | const handleMoveComponent = (direction: number) => { |
| | | emits('move', direction) |
| | | } |
| | | |
| | | /** |
| | | * å¤å¶ç»ä»¶ |
| | | */ |
| | | const handleCopyComponent = () => { |
| | | emits('copy') |
| | | } |
| | | |
| | | /** |
| | | * å é¤ç»ä»¶ |
| | | */ |
| | | const handleDeleteComponent = () => { |
| | | emits('delete') |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | $active-border-width: 2px; |
| | | $hover-border-width: 1px; |
| | | $name-position: -85px; |
| | | $toolbar-position: -55px; |
| | | |
| | | /* ç»ä»¶ */ |
| | | .component { |
| | | position: relative; |
| | | cursor: move; |
| | | |
| | | .component-wrap { |
| | | position: absolute; |
| | | top: 0; |
| | | left: -$active-border-width; |
| | | display: block; |
| | | width: 100%; |
| | | height: 100%; |
| | | |
| | | /* é¼ æ æ¾å°ç»ä»¶ä¸æ¶ */ |
| | | &:hover { |
| | | border: $hover-border-width dashed var(--el-color-primary); |
| | | box-shadow: 0 0 5px 0 rgb(24 144 255 / 30%); |
| | | |
| | | .component-name { |
| | | top: $hover-border-width; |
| | | |
| | | /* 鲿¢å äºè¾¹æ¡ä¹åï¼ä½ç½®ç§»å¨ */ |
| | | left: $name-position - $hover-border-width; |
| | | } |
| | | } |
| | | |
| | | /* 左侧ï¼ç»ä»¶åç§° */ |
| | | .component-name { |
| | | position: absolute; |
| | | top: $active-border-width; |
| | | left: $name-position; |
| | | display: block; |
| | | width: 80px; |
| | | height: 25px; |
| | | font-size: 12px; |
| | | color: #6a6a6a; |
| | | line-height: 25px; |
| | | text-align: center; |
| | | background: #fff; |
| | | box-shadow: |
| | | 0 0 4px #00000014, |
| | | 0 2px 6px #0000000f, |
| | | 0 4px 8px 2px #0000000a; |
| | | |
| | | /* å³ä¾§å°ä¸è§ */ |
| | | &::after { |
| | | position: absolute; |
| | | top: 7.5px; |
| | | right: -10px; |
| | | width: 0; |
| | | height: 0; |
| | | border: 5px solid transparent; |
| | | border-left-color: #fff; |
| | | content: ' '; |
| | | } |
| | | } |
| | | |
| | | /* å³ä¾§ï¼ç»ä»¶æä½å·¥å
·æ */ |
| | | .component-toolbar { |
| | | position: absolute; |
| | | top: 0; |
| | | right: $toolbar-position; |
| | | display: none; |
| | | |
| | | /* 左侧å°ä¸è§ */ |
| | | &::before { |
| | | position: absolute; |
| | | top: 10px; |
| | | left: -10px; |
| | | width: 0; |
| | | height: 0; |
| | | border: 5px solid transparent; |
| | | border-right-color: #2d8cf0; |
| | | content: ' '; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /* ç»ä»¶é䏿¶ */ |
| | | &.active { |
| | | margin-bottom: 4px; |
| | | |
| | | .component-wrap { |
| | | margin-bottom: $active-border-width + $active-border-width; |
| | | border: $active-border-width solid var(--el-color-primary) !important; |
| | | box-shadow: 0 0 10px 0 rgb(24 144 255 / 30%); |
| | | |
| | | .component-name { |
| | | top: 0 !important; |
| | | |
| | | /* 鲿¢å äºè¾¹æ¡ä¹åï¼ä½ç½®ç§»å¨ */ |
| | | left: $name-position - $active-border-width !important; |
| | | color: #fff; |
| | | background: var(--el-color-primary); |
| | | |
| | | &::after { |
| | | border-left-color: var(--el-color-primary); |
| | | } |
| | | } |
| | | |
| | | .component-toolbar { |
| | | display: block; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <el-tabs stretch> |
| | | <!-- æ¯ä¸ªç»ä»¶çèªå®ä¹å
容 --> |
| | | <el-tab-pane label="å
容" v-if="$slots.default"> |
| | | <slot></slot> |
| | | </el-tab-pane> |
| | | |
| | | <!-- æ¯ä¸ªç»ä»¶çéç¨å
容 --> |
| | | <el-tab-pane label="æ ·å¼" lazy> |
| | | <el-card header="ç»ä»¶æ ·å¼" class="property-group"> |
| | | <el-form :model="formData" label-width="80px"> |
| | | <el-form-item label="ç»ä»¶èæ¯" prop="bgType"> |
| | | <el-radio-group v-model="formData.bgType"> |
| | | <el-radio value="color">纯è²</el-radio> |
| | | <el-radio value="img">å¾ç</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="éæ©é¢è²" prop="bgColor" v-if="formData.bgType === 'color'"> |
| | | <ColorInput v-model="formData.bgColor" /> |
| | | </el-form-item> |
| | | <el-form-item label="ä¸ä¼ å¾ç" prop="bgImg" v-else> |
| | | <UploadImg v-model="formData.bgImg" :limit="1"> |
| | | <template #tip>建议宽度 750px</template> |
| | | </UploadImg> |
| | | </el-form-item> |
| | | <el-tree :data="treeData" :expand-on-click-node="false" default-expand-all> |
| | | <template #default="{ node, data }"> |
| | | <el-form-item |
| | | :label="data.label" |
| | | :prop="data.prop" |
| | | :label-width="node.level === 1 ? '80px' : '62px'" |
| | | class="w-full m-b-0!" |
| | | > |
| | | <el-slider |
| | | v-model="formData[data.prop]" |
| | | :max="100" |
| | | :min="0" |
| | | show-input |
| | | input-size="small" |
| | | :show-input-controls="false" |
| | | @input="handleSliderChange(data.prop)" |
| | | /> |
| | | </el-form-item> |
| | | </template> |
| | | </el-tree> |
| | | <slot name="style" :style="formData"></slot> |
| | | </el-form> |
| | | </el-card> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { ComponentStyle } from '@/components/DiyEditor/util' |
| | | import { useVModel } from '@vueuse/core' |
| | | |
| | | /** |
| | | * ç»ä»¶å®¹å¨å±æ§ï¼ç®åå³è¾¹é¨å |
| | | * ç¨äºå
裹ç»ä»¶ï¼ä¸ºç»ä»¶æä¾ èæ¯ãå¤è¾¹è·ãå
è¾¹è·ãè¾¹æ¡çæ ·å¼ |
| | | */ |
| | | defineOptions({ name: 'ComponentContainer' }) |
| | | |
| | | const props = defineProps<{ modelValue: ComponentStyle }>() |
| | | const emit = defineEmits(['update:modelValue']) |
| | | const formData = useVModel(props, 'modelValue', emit) |
| | | |
| | | const treeData = [ |
| | | { |
| | | label: 'å¤é¨è¾¹è·', |
| | | prop: 'margin', |
| | | children: [ |
| | | { |
| | | label: 'ä¸', |
| | | prop: 'marginTop' |
| | | }, |
| | | { |
| | | label: 'å³', |
| | | prop: 'marginRight' |
| | | }, |
| | | { |
| | | label: 'ä¸', |
| | | prop: 'marginBottom' |
| | | }, |
| | | { |
| | | label: 'å·¦', |
| | | prop: 'marginLeft' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'å
é¨è¾¹è·', |
| | | prop: 'padding', |
| | | children: [ |
| | | { |
| | | label: 'ä¸', |
| | | prop: 'paddingTop' |
| | | }, |
| | | { |
| | | label: 'å³', |
| | | prop: 'paddingRight' |
| | | }, |
| | | { |
| | | label: 'ä¸', |
| | | prop: 'paddingBottom' |
| | | }, |
| | | { |
| | | label: 'å·¦', |
| | | prop: 'paddingLeft' |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | label: 'è¾¹æ¡åè§', |
| | | prop: 'borderRadius', |
| | | children: [ |
| | | { |
| | | label: 'ä¸å·¦', |
| | | prop: 'borderTopLeftRadius' |
| | | }, |
| | | { |
| | | label: 'ä¸å³', |
| | | prop: 'borderTopRightRadius' |
| | | }, |
| | | { |
| | | label: 'ä¸å³', |
| | | prop: 'borderBottomRightRadius' |
| | | }, |
| | | { |
| | | label: 'ä¸å·¦', |
| | | prop: 'borderBottomLeftRadius' |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | |
| | | const handleSliderChange = (prop: string) => { |
| | | switch (prop) { |
| | | case 'margin': |
| | | formData.value.marginTop = formData.value.margin |
| | | formData.value.marginRight = formData.value.margin |
| | | formData.value.marginBottom = formData.value.margin |
| | | formData.value.marginLeft = formData.value.margin |
| | | break |
| | | case 'padding': |
| | | formData.value.paddingTop = formData.value.padding |
| | | formData.value.paddingRight = formData.value.padding |
| | | formData.value.paddingBottom = formData.value.padding |
| | | formData.value.paddingLeft = formData.value.padding |
| | | break |
| | | case 'borderRadius': |
| | | formData.value.borderTopLeftRadius = formData.value.borderRadius |
| | | formData.value.borderTopRightRadius = formData.value.borderRadius |
| | | formData.value.borderBottomRightRadius = formData.value.borderRadius |
| | | formData.value.borderBottomLeftRadius = formData.value.borderRadius |
| | | break |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | :deep(.el-slider__runway) { |
| | | margin-right: 16px; |
| | | } |
| | | |
| | | :deep(.el-input-number) { |
| | | width: 50px; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <el-aside class="editor-left" width="261px"> |
| | | <el-scrollbar> |
| | | <el-collapse v-model="extendGroups"> |
| | | <el-collapse-item |
| | | v-for="group in groups" |
| | | :key="group.name" |
| | | :name="group.name" |
| | | :title="group.name" |
| | | > |
| | | <draggable |
| | | class="component-container" |
| | | ghost-class="draggable-ghost" |
| | | item-key="index" |
| | | :list="group.components" |
| | | :sort="false" |
| | | :group="{ name: 'component', pull: 'clone', put: false }" |
| | | :clone="handleCloneComponent" |
| | | :animation="200" |
| | | :force-fallback="false" |
| | | > |
| | | <template #item="{ element }"> |
| | | <div> |
| | | <div class="drag-placement">ç»ä»¶æ¾ç½®åºå</div> |
| | | <div class="component"> |
| | | <Icon :icon="element.icon" :size="32" /> |
| | | <span class="mt-4px text-12px">{{ element.name }}</span> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | </draggable> |
| | | </el-collapse-item> |
| | | </el-collapse> |
| | | </el-scrollbar> |
| | | </el-aside> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import draggable from 'vuedraggable' |
| | | import { componentConfigs } from '../components/mobile/index' |
| | | import { cloneDeep } from 'lodash-es' |
| | | import { DiyComponent, DiyComponentLibrary } from '@/components/DiyEditor/util' |
| | | |
| | | /** ç»ä»¶åºï¼ç®å左侧çãåºç¡ç»ä»¶ããã徿ç»ä»¶ãé¨å */ |
| | | defineOptions({ name: 'ComponentLibrary' }) |
| | | |
| | | // ç»ä»¶å表 |
| | | const props = defineProps<{ |
| | | list: DiyComponentLibrary[] |
| | | }>() |
| | | // ç»ä»¶åç» |
| | | const groups = reactive<any[]>([]) |
| | | // å±å¼çæå 颿¿ |
| | | const extendGroups = reactive<string[]>([]) |
| | | |
| | | // çå¬ list 屿§ï¼æç
§ DiyComponentLibrary ç name åç» |
| | | watch( |
| | | () => props.list, |
| | | () => { |
| | | // æ¸
餿§æ°æ® |
| | | extendGroups.length = 0 |
| | | groups.length = 0 |
| | | // éæ°çææ°æ® |
| | | props.list.forEach((group) => { |
| | | // æ¯å¦å±å¼åç» |
| | | if (group.extended) { |
| | | extendGroups.push(group.name) |
| | | } |
| | | // æ¥æ¾ç»ä»¶ |
| | | const components = group.components |
| | | .map((name) => componentConfigs[name] as DiyComponent<any>) |
| | | .filter((component) => component) |
| | | if (components.length > 0) { |
| | | groups.push({ |
| | | name: group.name, |
| | | components |
| | | }) |
| | | } |
| | | }) |
| | | }, |
| | | { |
| | | immediate: true |
| | | } |
| | | ) |
| | | |
| | | // å
éç»ä»¶ |
| | | const handleCloneComponent = (component: DiyComponent<any>) => { |
| | | const instance = cloneDeep(component) |
| | | instance.uid = new Date().getTime() |
| | | return instance |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .editor-left { |
| | | z-index: 1; |
| | | flex-shrink: 0; |
| | | user-select: none; |
| | | box-shadow: 8px 0 8px -8px rgb(0 0 0 / 12%); |
| | | |
| | | :deep(.el-collapse) { |
| | | border-top: none; |
| | | } |
| | | |
| | | :deep(.el-collapse-item__wrap) { |
| | | border-bottom: none; |
| | | } |
| | | |
| | | :deep(.el-collapse-item__content) { |
| | | padding-bottom: 0; |
| | | } |
| | | |
| | | :deep(.el-collapse-item__header) { |
| | | height: 32px; |
| | | padding: 0 24px; |
| | | line-height: 32px; |
| | | background-color: var(--el-bg-color-page); |
| | | border-bottom: none; |
| | | } |
| | | |
| | | .component-container { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | align-items: center; |
| | | } |
| | | |
| | | .component { |
| | | display: flex; |
| | | width: 86px; |
| | | height: 86px; |
| | | cursor: move; |
| | | border-right: 1px solid var(--el-border-color-lighter); |
| | | border-bottom: 1px solid var(--el-border-color-lighter); |
| | | flex-direction: column; |
| | | align-items: center; |
| | | justify-content: center; |
| | | |
| | | .el-icon { |
| | | margin-bottom: 4px; |
| | | color: gray; |
| | | } |
| | | } |
| | | |
| | | .component.active, |
| | | .component:hover { |
| | | color: var(--el-color-white); |
| | | background: var(--el-color-primary); |
| | | |
| | | .el-icon { |
| | | color: var(--el-color-white); |
| | | } |
| | | } |
| | | |
| | | .component:nth-of-type(3n) { |
| | | border-right: none; |
| | | } |
| | | } |
| | | |
| | | /* ææ½å ä½æç¤ºï¼é»è®¤ä¸æ¾ç¤º */ |
| | | .drag-placement { |
| | | display: none; |
| | | color: #fff; |
| | | } |
| | | |
| | | .drag-area { |
| | | /* ææ½å°ææºåºåæ¶çæ ·å¼ */ |
| | | .draggable-ghost { |
| | | display: flex; |
| | | width: 100%; |
| | | height: 40px; |
| | | |
| | | /* æ¡çº¹èæ¯ */ |
| | | background: linear-gradient( |
| | | 45deg, |
| | | #91a8d5 0, |
| | | #91a8d5 10%, |
| | | #94b4eb 10%, |
| | | #94b4eb 50%, |
| | | #91a8d5 50%, |
| | | #91a8d5 60%, |
| | | #94b4eb 60%, |
| | | #94b4eb |
| | | ); |
| | | background-size: 1rem 1rem; |
| | | transition: all 0.5s; |
| | | justify-content: center; |
| | | align-items: center; |
| | | |
| | | span { |
| | | display: inline-block; |
| | | width: 140px; |
| | | height: 25px; |
| | | font-size: 12px; |
| | | line-height: 25px; |
| | | color: #fff; |
| | | text-align: center; |
| | | background: #5487df; |
| | | } |
| | | |
| | | /* ææ½æ¶éèç»ä»¶ */ |
| | | .component { |
| | | display: none; |
| | | } |
| | | |
| | | /* ææ½æ¶æ¾ç¤ºå ä½æç¤º */ |
| | | .drag-placement { |
| | | display: block; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util' |
| | | |
| | | /** è½®æå¾å±æ§ */ |
| | | export interface CarouselProperty { |
| | | // ç±»åï¼é»è®¤ | å¡ç |
| | | type: 'default' | 'card' |
| | | // æç¤ºå¨æ ·å¼ï¼ç¹ | æ°å |
| | | indicator: 'dot' | 'number' |
| | | // æ¯å¦èªå¨ææ¾ |
| | | autoplay: boolean |
| | | // ææ¾é´é |
| | | interval: number |
| | | // è½®æé«åº¦ |
| | | height: number |
| | | // è½®æå
容 |
| | | items: CarouselItemProperty[] |
| | | // ç»ä»¶æ ·å¼ |
| | | style: ComponentStyle |
| | | } |
| | | // è½®æå
容屿§ |
| | | export interface CarouselItemProperty { |
| | | // ç±»åï¼å¾ç | è§é¢ |
| | | type: 'img' | 'video' |
| | | // å¾ç龿¥ |
| | | imgUrl: string |
| | | // è§é¢é¾æ¥ |
| | | videoUrl: string |
| | | // è·³è½¬é¾æ¥ |
| | | url: string |
| | | } |
| | | |
| | | // å®ä¹ç»ä»¶ |
| | | export const component = { |
| | | id: 'Carousel', |
| | | name: 'è½®æå¾', |
| | | icon: 'system-uicons:carousel', |
| | | property: { |
| | | type: 'default', |
| | | indicator: 'dot', |
| | | autoplay: false, |
| | | interval: 3, |
| | | height: 174, |
| | | items: [ |
| | | { type: 'img', imgUrl: 'https://static.iocoder.cn/mall/banner-01.jpg', videoUrl: '' }, |
| | | { type: 'img', imgUrl: 'https://static.iocoder.cn/mall/banner-02.jpg', videoUrl: '' } |
| | | ] as CarouselItemProperty[], |
| | | style: { |
| | | bgType: 'color', |
| | | bgColor: '#fff', |
| | | marginBottom: 8 |
| | | } as ComponentStyle |
| | | } |
| | | } as DiyComponent<CarouselProperty> |
| New file |
| | |
| | | <template> |
| | | <!-- æ å¾ç --> |
| | | <div |
| | | class="h-250px flex items-center justify-center bg-gray-3" |
| | | v-if="property.items.length === 0" |
| | | > |
| | | <Icon icon="tdesign:image" class="text-gray-8 text-120px!" /> |
| | | </div> |
| | | <div v-else class="relative"> |
| | | <el-carousel |
| | | :height="property.height + 'px'" |
| | | :type="property.type === 'card' ? 'card' : ''" |
| | | :autoplay="property.autoplay" |
| | | :interval="property.interval * 1000" |
| | | :indicator-position="property.indicator === 'number' ? 'none' : undefined" |
| | | @change="handleIndexChange" |
| | | > |
| | | <el-carousel-item v-for="(item, index) in property.items" :key="index"> |
| | | <el-image class="h-full w-full" :src="item.imgUrl" /> |
| | | </el-carousel-item> |
| | | </el-carousel> |
| | | <div |
| | | v-if="property.indicator === 'number'" |
| | | class="absolute bottom-10px right-10px rounded-xl bg-black p-x-8px p-y-2px text-10px text-white opacity-40" |
| | | >{{ currentIndex }} / {{ property.items.length }}</div |
| | | > |
| | | </div> |
| | | </template> |
| | | <script setup lang="ts"> |
| | | import { CarouselProperty } from './config' |
| | | |
| | | /** è½®æå¾ */ |
| | | defineOptions({ name: 'Carousel' }) |
| | | |
| | | defineProps<{ property: CarouselProperty }>() |
| | | |
| | | const currentIndex = ref(0) |
| | | const handleIndexChange = (index: number) => { |
| | | currentIndex.value = index + 1 |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"></style> |
| New file |
| | |
| | | <template> |
| | | <ComponentContainerProperty v-model="formData.style"> |
| | | <el-form label-width="80px" :model="formData"> |
| | | <el-card header="æ ·å¼è®¾ç½®" class="property-group" shadow="never"> |
| | | <el-form-item label="æ ·å¼" prop="type"> |
| | | <el-radio-group v-model="formData.type"> |
| | | <el-tooltip class="item" content="é»è®¤" placement="bottom"> |
| | | <el-radio-button value="default"> |
| | | <Icon icon="system-uicons:carousel" /> |
| | | </el-radio-button> |
| | | </el-tooltip> |
| | | <el-tooltip class="item" content="å¡ç" placement="bottom"> |
| | | <el-radio-button value="card"> |
| | | <Icon icon="ic:round-view-carousel" /> |
| | | </el-radio-button> |
| | | </el-tooltip> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="é«åº¦" prop="height"> |
| | | <el-input-number class="!w-50% mr-10px" controls-position="right" v-model="formData.height" /> px |
| | | </el-form-item> |
| | | <el-form-item label="æç¤ºå¨" prop="indicator"> |
| | | <el-radio-group v-model="formData.indicator"> |
| | | <el-radio value="dot">å°åç¹</el-radio> |
| | | <el-radio value="number">æ°å</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="æ¯å¦è½®æ" prop="autoplay"> |
| | | <el-switch v-model="formData.autoplay" /> |
| | | </el-form-item> |
| | | <el-form-item label="ææ¾é´é" prop="interval" v-if="formData.autoplay"> |
| | | <el-slider |
| | | v-model="formData.interval" |
| | | :max="10" |
| | | :min="0.5" |
| | | :step="0.5" |
| | | show-input |
| | | input-size="small" |
| | | :show-input-controls="false" |
| | | /> |
| | | <el-text type="info">åä½ï¼ç§</el-text> |
| | | </el-form-item> |
| | | </el-card> |
| | | <el-card header="å
容设置" class="property-group" shadow="never"> |
| | | <Draggable v-model="formData.items" :empty-item="{ type: 'img' }"> |
| | | <template #default="{ element }"> |
| | | <el-form-item label="ç±»å" prop="type" class="m-b-8px!" label-width="40px"> |
| | | <el-radio-group v-model="element.type"> |
| | | <el-radio value="img">å¾ç</el-radio> |
| | | <el-radio value="video">è§é¢</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item |
| | | label="å¾ç" |
| | | class="m-b-8px!" |
| | | label-width="40px" |
| | | v-if="element.type === 'img'" |
| | | > |
| | | <UploadImg |
| | | v-model="element.imgUrl" |
| | | draggable="false" |
| | | height="80px" |
| | | width="100%" |
| | | class="min-w-80px" |
| | | /> |
| | | </el-form-item> |
| | | <template v-else> |
| | | <el-form-item label="å°é¢" class="m-b-8px!" label-width="40px"> |
| | | <UploadImg |
| | | v-model="element.imgUrl" |
| | | draggable="false" |
| | | height="80px" |
| | | width="100%" |
| | | class="min-w-80px" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="è§é¢" class="m-b-8px!" label-width="40px"> |
| | | <UploadFile |
| | | v-model="element.videoUrl" |
| | | :file-type="['mp4']" |
| | | :limit="1" |
| | | :file-size="100" |
| | | class="min-w-80px" |
| | | /> |
| | | </el-form-item> |
| | | </template> |
| | | <el-form-item label="龿¥" class="m-b-8px!" label-width="40px"> |
| | | <AppLinkInput v-model="element.url" /> |
| | | </el-form-item> |
| | | </template> |
| | | </Draggable> |
| | | </el-card> |
| | | </el-form> |
| | | </ComponentContainerProperty> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { CarouselProperty } from './config' |
| | | import { useVModel } from '@vueuse/core' |
| | | |
| | | // è½®æå¾å±æ§é¢æ¿ |
| | | defineOptions({ name: 'CarouselProperty' }) |
| | | |
| | | const props = defineProps<{ modelValue: CarouselProperty }>() |
| | | const emit = defineEmits(['update:modelValue']) |
| | | const formData = useVModel(props, 'modelValue', emit) |
| | | </script> |
| | | |
| | | <style scoped lang="scss"></style> |
| New file |
| | |
| | | import * as CouponTemplateApi from '@/api/mall/promotion/coupon/couponTemplate' |
| | | import { CouponTemplateValidityTypeEnum, PromotionDiscountTypeEnum } from '@/utils/constants' |
| | | import { floatToFixed2 } from '@/utils' |
| | | import { formatDate } from '@/utils/formatTime' |
| | | import { object } from 'vue-types' |
| | | |
| | | // 伿 å¼ |
| | | export const CouponDiscount = defineComponent({ |
| | | name: 'CouponDiscount', |
| | | props: { |
| | | coupon: object<CouponTemplateApi.CouponTemplateVO>() |
| | | }, |
| | | setup(props) { |
| | | const coupon = props.coupon as CouponTemplateApi.CouponTemplateVO |
| | | // ææ£ |
| | | let value = coupon.discountPercent / 10 + '' |
| | | let suffix = ' æ' |
| | | // 满å |
| | | if (coupon.discountType === PromotionDiscountTypeEnum.PRICE.type) { |
| | | value = floatToFixed2(coupon.discountPrice) |
| | | suffix = ' å
' |
| | | } |
| | | return () => ( |
| | | <div> |
| | | <span class={'text-20px font-bold'}>{value}</span> |
| | | <span>{suffix}</span> |
| | | </div> |
| | | ) |
| | | } |
| | | }) |
| | | |
| | | // 伿 æè¿° |
| | | export const CouponDiscountDesc = defineComponent({ |
| | | name: 'CouponDiscountDesc', |
| | | props: { |
| | | coupon: object<CouponTemplateApi.CouponTemplateVO>() |
| | | }, |
| | | setup(props) { |
| | | const coupon = props.coupon as CouponTemplateApi.CouponTemplateVO |
| | | // ä½¿ç¨æ¡ä»¶ |
| | | const useCondition = coupon.usePrice > 0 ? `满${floatToFixed2(coupon.usePrice)}å
ï¼` : '' |
| | | // 伿 æè¿° |
| | | const discountDesc = |
| | | coupon.discountType === PromotionDiscountTypeEnum.PRICE.type |
| | | ? `å${floatToFixed2(coupon.discountPrice)}å
` |
| | | : `æ${coupon.discountPercent / 10.0}æ` |
| | | return () => ( |
| | | <div> |
| | | <span>{useCondition}</span> |
| | | <span>{discountDesc}</span> |
| | | </div> |
| | | ) |
| | | } |
| | | }) |
| | | |
| | | // æææ |
| | | export const CouponValidTerm = defineComponent({ |
| | | name: 'CouponValidTerm', |
| | | props: { |
| | | coupon: object<CouponTemplateApi.CouponTemplateVO>() |
| | | }, |
| | | setup(props) { |
| | | const coupon = props.coupon as CouponTemplateApi.CouponTemplateVO |
| | | const text = |
| | | coupon.validityType === CouponTemplateValidityTypeEnum.DATE.type |
| | | ? `æææï¼${formatDate(coupon.validStartTime, 'YYYY-MM-DD')} è³ ${formatDate( |
| | | coupon.validEndTime, |
| | | 'YYYY-MM-DD' |
| | | )}` |
| | | : `é¢åå第 ${coupon.fixedStartTerm} - ${coupon.fixedEndTerm} 天å
å¯ç¨` |
| | | return () => <div>{text}</div> |
| | | } |
| | | }) |
| New file |
| | |
| | | import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util' |
| | | |
| | | /** ååå¡ç屿§ */ |
| | | export interface CouponCardProperty { |
| | | // åæ° |
| | | columns: number |
| | | // èæ¯å¾ |
| | | bgImg: string |
| | | // æåé¢è² |
| | | textColor: string |
| | | // æé®æ ·å¼ |
| | | button: { |
| | | // é¢è² |
| | | color: string |
| | | // èæ¯é¢è² |
| | | bgColor: string |
| | | } |
| | | // é´è· |
| | | space: number |
| | | // 伿 å¸ç¼å·å表 |
| | | couponIds: number[] |
| | | // ç»ä»¶æ ·å¼ |
| | | style: ComponentStyle |
| | | } |
| | | |
| | | // å®ä¹ç»ä»¶ |
| | | export const component = { |
| | | id: 'CouponCard', |
| | | name: '伿 å¸', |
| | | icon: 'ep:ticket', |
| | | property: { |
| | | columns: 1, |
| | | bgImg: '', |
| | | textColor: '#E9B461', |
| | | button: { |
| | | color: '#434343', |
| | | bgColor: '' |
| | | }, |
| | | space: 0, |
| | | couponIds: [], |
| | | style: { |
| | | bgType: 'color', |
| | | bgColor: '', |
| | | marginBottom: 8 |
| | | } as ComponentStyle |
| | | } |
| | | } as DiyComponent<CouponCardProperty> |
| New file |
| | |
| | | <template> |
| | | <el-scrollbar class="z-1 min-h-30px" wrap-class="w-full" ref="containerRef"> |
| | | <div |
| | | class="flex flex-row text-12px" |
| | | :style="{ |
| | | gap: `${property.space}px`, |
| | | width: scrollbarWidth |
| | | }" |
| | | > |
| | | <div |
| | | class="box-content" |
| | | :style="{ |
| | | background: property.bgImg |
| | | ? `url(${property.bgImg}) 100% center / 100% 100% no-repeat` |
| | | : '#fff', |
| | | width: `${couponWidth}px`, |
| | | color: property.textColor |
| | | }" |
| | | v-for="(coupon, index) in couponList" |
| | | :key="index" |
| | | > |
| | | <!-- å¸å±1ï¼1å--> |
| | | <div v-if="property.columns === 1" class="m-l-16px flex flex-row justify-between p-8px"> |
| | | <div class="flex flex-col justify-evenly gap-4px"> |
| | | <!-- 伿 å¼ --> |
| | | <CouponDiscount :coupon="coupon" /> |
| | | <!-- 伿 æè¿° --> |
| | | <CouponDiscountDesc :coupon="coupon" /> |
| | | <!-- æææ --> |
| | | <CouponValidTerm :coupon="coupon" /> |
| | | </div> |
| | | <div class="flex flex-col justify-evenly"> |
| | | <div |
| | | class="rounded-20px p-x-8px p-y-2px" |
| | | :style="{ |
| | | color: property.button.color, |
| | | background: property.button.bgColor |
| | | }" |
| | | > |
| | | ç«å³é¢å |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- å¸å±2ï¼2å--> |
| | | <div |
| | | v-else-if="property.columns === 2" |
| | | class="m-l-16px flex flex-row justify-between p-8px" |
| | | > |
| | | <div class="flex flex-col justify-evenly gap-4px"> |
| | | <!-- 伿 å¼ --> |
| | | <CouponDiscount :coupon="coupon" /> |
| | | <!-- 伿 æè¿° --> |
| | | <CouponDiscountDesc :coupon="coupon" /> |
| | | <!-- é¢å说æ --> |
| | | <div v-if="coupon.totalCount >= 0"> |
| | | ä»
å©ï¼{{ coupon.totalCount - coupon.takeCount }}å¼ |
| | | </div> |
| | | <div v-else-if="coupon.totalCount === -1">ä»
å©ï¼ä¸éå¶</div> |
| | | </div> |
| | | <div class="flex flex-col"> |
| | | <div |
| | | class="h-full w-20px rounded-20px p-x-2px p-y-8px text-center" |
| | | :style="{ |
| | | color: property.button.color, |
| | | background: property.button.bgColor |
| | | }" |
| | | > |
| | | ç«å³é¢å |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- å¸å±3ï¼3å--> |
| | | <div v-else class="flex flex-col items-center justify-around gap-4px p-4px"> |
| | | <!-- 伿 å¼ --> |
| | | <CouponDiscount :coupon="coupon" /> |
| | | <!-- 伿 æè¿° --> |
| | | <CouponDiscountDesc :coupon="coupon" /> |
| | | <div |
| | | class="rounded-20px p-x-8px p-y-2px" |
| | | :style="{ |
| | | color: property.button.color, |
| | | background: property.button.bgColor |
| | | }" |
| | | > |
| | | ç«å³é¢å |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-scrollbar> |
| | | </template> |
| | | <script setup lang="ts"> |
| | | import { CouponCardProperty } from './config' |
| | | import * as CouponTemplateApi from '@/api/mall/promotion/coupon/couponTemplate' |
| | | import { CouponDiscount } from './component' |
| | | import { |
| | | CouponDiscountDesc, |
| | | CouponValidTerm |
| | | } from '@/components/DiyEditor/components/mobile/CouponCard/component' |
| | | |
| | | /** ååå¡ç */ |
| | | defineOptions({ name: 'CouponCard' }) |
| | | // å®ä¹å±æ§ |
| | | const props = defineProps<{ property: CouponCardProperty }>() |
| | | // ååå表 |
| | | const couponList = ref<CouponTemplateApi.CouponTemplateVO[]>([]) |
| | | watch( |
| | | () => props.property.couponIds, |
| | | async () => { |
| | | if (props.property.couponIds?.length > 0) { |
| | | couponList.value = await CouponTemplateApi.getCouponTemplateList(props.property.couponIds) |
| | | } |
| | | }, |
| | | { |
| | | immediate: true, |
| | | deep: true |
| | | } |
| | | ) |
| | | |
| | | // ææºå®½åº¦ |
| | | const phoneWidth = ref(375) |
| | | // å®¹å¨ |
| | | const containerRef = ref() |
| | | // æ»å¨æ¡å®½åº¦ |
| | | const scrollbarWidth = ref('100%') |
| | | // 伿 å¸ç宽度 |
| | | const couponWidth = ref(375) |
| | | // 计ç®å¸å±åæ° |
| | | watch( |
| | | () => [props.property, phoneWidth, couponList.value.length], |
| | | () => { |
| | | // æ¯åç宽度为ï¼ï¼æ»å®½åº¦ - é´è· * (åæ° - 1)ï¼/ åæ° |
| | | couponWidth.value = |
| | | (phoneWidth.value - props.property.space * (props.property.columns - 1)) / |
| | | props.property.columns |
| | | // æ¾ç¤ºæ»å¨æ¡ |
| | | scrollbarWidth.value = `${ |
| | | couponWidth.value * couponList.value.length + |
| | | props.property.space * (couponList.value.length - 1) |
| | | }px` |
| | | }, |
| | | { immediate: true, deep: true } |
| | | ) |
| | | onMounted(() => { |
| | | // æåææºå®½åº¦ |
| | | phoneWidth.value = containerRef.value?.wrapRef?.offsetWidth || 375 |
| | | }) |
| | | </script> |
| | | <style scoped lang="scss"></style> |
| New file |
| | |
| | | <template> |
| | | <ComponentContainerProperty v-model="formData.style"> |
| | | <el-form label-width="80px" :model="formData"> |
| | | <el-card header="伿 å¸å表" class="property-group" shadow="never"> |
| | | <div |
| | | v-for="(coupon, index) in couponList" |
| | | :key="index" |
| | | class="flex items-center justify-between" |
| | | > |
| | | <el-text size="large" truncated>{{ coupon.name }}</el-text> |
| | | <el-text type="info" truncated> |
| | | <span v-if="coupon.usePrice > 0">满{{ floatToFixed2(coupon.usePrice) }}å
ï¼</span> |
| | | <span v-if="coupon.discountType === PromotionDiscountTypeEnum.PRICE.type"> |
| | | å{{ floatToFixed2(coupon.discountPrice) }}å
|
| | | </span> |
| | | <span v-else> æ{{ coupon.discountPercent }}æ </span> |
| | | </el-text> |
| | | </div> |
| | | <el-form-item label-width="0"> |
| | | <el-button @click="handleAddCoupon" type="primary" plain class="m-t-8px w-full"> |
| | | <Icon icon="ep:plus" class="mr-5px" /> æ·»å |
| | | </el-button> |
| | | </el-form-item> |
| | | </el-card> |
| | | <el-card header="伿 叿 ·å¼" class="property-group" shadow="never"> |
| | | <el-form-item label="åæ°" prop="type"> |
| | | <el-radio-group v-model="formData.columns"> |
| | | <el-tooltip class="item" content="ä¸å" placement="bottom"> |
| | | <el-radio-button :value="1"> |
| | | <Icon icon="fluent:text-column-one-24-filled" /> |
| | | </el-radio-button> |
| | | </el-tooltip> |
| | | <el-tooltip class="item" content="äºå" placement="bottom"> |
| | | <el-radio-button :value="2"> |
| | | <Icon icon="fluent:text-column-two-24-filled" /> |
| | | </el-radio-button> |
| | | </el-tooltip> |
| | | <el-tooltip class="item" content="ä¸å" placement="bottom"> |
| | | <el-radio-button :value="3"> |
| | | <Icon icon="fluent:text-column-three-24-filled" /> |
| | | </el-radio-button> |
| | | </el-tooltip> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="èæ¯å¾ç" prop="bgImg"> |
| | | <UploadImg v-model="formData.bgImg" height="80px" width="100%" class="min-w-160px" /> |
| | | </el-form-item> |
| | | <el-form-item label="æåé¢è²" prop="textColor"> |
| | | <ColorInput v-model="formData.textColor" /> |
| | | </el-form-item> |
| | | <el-form-item label="æé®èæ¯" prop="button.bgColor"> |
| | | <ColorInput v-model="formData.button.bgColor" /> |
| | | </el-form-item> |
| | | <el-form-item label="æé®æå" prop="button.color"> |
| | | <ColorInput v-model="formData.button.color" /> |
| | | </el-form-item> |
| | | <el-form-item label="é´é" prop="space"> |
| | | <el-slider |
| | | v-model="formData.space" |
| | | :max="100" |
| | | :min="0" |
| | | show-input |
| | | input-size="small" |
| | | :show-input-controls="false" |
| | | /> |
| | | </el-form-item> |
| | | </el-card> |
| | | </el-form> |
| | | </ComponentContainerProperty> |
| | | <!-- 伿 å¸éæ© --> |
| | | <CouponSelect |
| | | ref="couponSelectDialog" |
| | | v-model:multiple-selection="couponList" |
| | | :take-type="CouponTemplateTakeTypeEnum.USER.type" |
| | | @change="handleCouponSelect" |
| | | /> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { CouponCardProperty } from './config' |
| | | import { useVModel } from '@vueuse/core' |
| | | import * as CouponTemplateApi from '@/api/mall/promotion/coupon/couponTemplate' |
| | | import { floatToFixed2 } from '@/utils' |
| | | import { CouponTemplateTakeTypeEnum, PromotionDiscountTypeEnum } from '@/utils/constants' |
| | | import CouponSelect from '@/views/mall/promotion/coupon/components/CouponSelect.vue' |
| | | |
| | | // 伿 å¸å¡ç屿§é¢æ¿ |
| | | defineOptions({ name: 'CouponCardProperty' }) |
| | | |
| | | const props = defineProps<{ modelValue: CouponCardProperty }>() |
| | | const emit = defineEmits(['update:modelValue']) |
| | | const formData = useVModel(props, 'modelValue', emit) |
| | | |
| | | // 伿 å¸å表 |
| | | const couponList = ref<CouponTemplateApi.CouponTemplateVO[]>([]) |
| | | const couponSelectDialog = ref() |
| | | // æ·»å 伿 å¸ |
| | | const handleAddCoupon = () => { |
| | | couponSelectDialog.value.open() |
| | | } |
| | | const handleCouponSelect = () => { |
| | | formData.value.couponIds = couponList.value.map((coupon) => coupon.id) |
| | | } |
| | | |
| | | watch( |
| | | () => formData.value.couponIds, |
| | | async () => { |
| | | if (formData.value.couponIds?.length > 0) { |
| | | couponList.value = await CouponTemplateApi.getCouponTemplateList(formData.value.couponIds) |
| | | } |
| | | }, |
| | | { |
| | | immediate: true, |
| | | deep: true |
| | | } |
| | | ) |
| | | </script> |
| | | |
| | | <style scoped lang="scss"></style> |
| New file |
| | |
| | | import { DiyComponent } from '@/components/DiyEditor/util' |
| | | |
| | | /** åå²çº¿å±æ§ */ |
| | | export interface DividerProperty { |
| | | // é«åº¦ |
| | | height: number |
| | | // 线宽 |
| | | lineWidth: number |
| | | // è¾¹è·ç±»å |
| | | paddingType: 'none' | 'horizontal' |
| | | // é¢è² |
| | | lineColor: string |
| | | // ç±»å |
| | | borderType: 'solid' | 'dashed' | 'dotted' | 'none' |
| | | } |
| | | |
| | | // å®ä¹ç»ä»¶ |
| | | export const component = { |
| | | id: 'Divider', |
| | | name: 'åå²çº¿', |
| | | icon: 'tdesign:component-divider-vertical', |
| | | property: { |
| | | height: 30, |
| | | lineWidth: 1, |
| | | paddingType: 'none', |
| | | lineColor: '#dcdfe6', |
| | | borderType: 'solid' |
| | | } |
| | | } as DiyComponent<DividerProperty> |
| New file |
| | |
| | | <template> |
| | | <div |
| | | class="flex items-center" |
| | | :style="{ |
| | | height: property.height + 'px' |
| | | }" |
| | | > |
| | | <div |
| | | class="w-full" |
| | | :style="{ |
| | | borderTopStyle: property.borderType, |
| | | borderTopColor: property.lineColor, |
| | | borderTopWidth: `${property.lineWidth}px`, |
| | | margin: property.paddingType === 'none' ? '0' : '0px 16px' |
| | | }" |
| | | ></div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { DividerProperty } from './config' |
| | | |
| | | /** 页é¢é¡¶é¨å¯¼èªæ */ |
| | | defineOptions({ name: 'Divider' }) |
| | | |
| | | defineProps<{ property: DividerProperty }>() |
| | | </script> |
| | | |
| | | <style scoped lang="scss"></style> |
| New file |
| | |
| | | <template> |
| | | <el-form label-width="80px" :model="formData"> |
| | | <el-form-item label="é«åº¦" prop="height"> |
| | | <el-slider v-model="formData.height" :min="1" :max="100" show-input input-size="small" /> |
| | | </el-form-item> |
| | | <el-form-item label="éæ©æ ·å¼" prop="borderType"> |
| | | <el-radio-group v-model="formData!.borderType"> |
| | | <el-tooltip |
| | | placement="top" |
| | | v-for="(item, index) in BORDER_TYPES" |
| | | :key="index" |
| | | :content="item.text" |
| | | > |
| | | <el-radio-button :value="item.type"> |
| | | <Icon :icon="item.icon" /> |
| | | </el-radio-button> |
| | | </el-tooltip> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <template v-if="formData.borderType !== 'none'"> |
| | | <el-form-item label="线宽" prop="lineWidth"> |
| | | <el-slider v-model="formData.lineWidth" :min="1" :max="30" show-input input-size="small" /> |
| | | </el-form-item> |
| | | <el-form-item label="å·¦å³è¾¹è·" prop="paddingType"> |
| | | <el-radio-group v-model="formData!.paddingType"> |
| | | <el-tooltip content="æ è¾¹è·" placement="top"> |
| | | <el-radio-button value="none"> |
| | | <Icon icon="tabler:box-padding" /> |
| | | </el-radio-button> |
| | | </el-tooltip> |
| | | <el-tooltip content="å·¦å³çè¾¹" placement="top"> |
| | | <el-radio-button value="horizontal"> |
| | | <Icon icon="vaadin:padding" /> |
| | | </el-radio-button> |
| | | </el-tooltip> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="é¢è²"> |
| | | <!-- åå²çº¿é¢è² --> |
| | | <ColorInput v-model="formData.lineColor" /> |
| | | </el-form-item> |
| | | </template> |
| | | </el-form> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { DividerProperty } from './config' |
| | | import { useVModel } from '@vueuse/core' |
| | | // å¯¼èªæ 屿§é¢æ¿ |
| | | defineOptions({ name: 'DividerProperty' }) |
| | | const props = defineProps<{ modelValue: DividerProperty }>() |
| | | const emit = defineEmits(['update:modelValue']) |
| | | const formData = useVModel(props, 'modelValue', emit) |
| | | |
| | | //线类å |
| | | const BORDER_TYPES = [ |
| | | { |
| | | icon: 'vaadin:line-h', |
| | | text: 'å®çº¿', |
| | | type: 'solid' |
| | | }, |
| | | { |
| | | icon: 'tabler:line-dashed', |
| | | text: 'è线', |
| | | type: 'dashed' |
| | | }, |
| | | { |
| | | icon: 'tabler:line-dotted', |
| | | text: 'ç¹çº¿', |
| | | type: 'dotted' |
| | | }, |
| | | { |
| | | icon: 'entypo:progress-empty', |
| | | text: 'æ ', |
| | | type: 'none' |
| | | } |
| | | ] |
| | | </script> |
| | | |
| | | <style scoped lang="scss"></style> |
| New file |
| | |
| | | import { DiyComponent } from '@/components/DiyEditor/util' |
| | | |
| | | // æ¬æµ®æé®å±æ§ |
| | | export interface FloatingActionButtonProperty { |
| | | // å±å¼æ¹å |
| | | direction: 'horizontal' | 'vertical' |
| | | // æ¯å¦æ¾ç¤ºæå |
| | | showText: boolean |
| | | // æé®å表 |
| | | list: FloatingActionButtonItemProperty[] |
| | | } |
| | | |
| | | // æ¬æµ®æé®é¡¹å±æ§ |
| | | export interface FloatingActionButtonItemProperty { |
| | | // å¾çå°å |
| | | imgUrl: string |
| | | // è·³è½¬è¿æ¥ |
| | | url: string |
| | | // æå |
| | | text: string |
| | | // æåé¢è² |
| | | textColor: string |
| | | } |
| | | |
| | | // å®ä¹ç»ä»¶ |
| | | export const component = { |
| | | id: 'FloatingActionButton', |
| | | name: 'æ¬æµ®æé®', |
| | | icon: 'tabler:float-right', |
| | | position: 'fixed', |
| | | property: { |
| | | direction: 'vertical', |
| | | showText: true, |
| | | list: [{ textColor: '#fff' }] |
| | | } |
| | | } as DiyComponent<FloatingActionButtonProperty> |
| New file |
| | |
| | | <template> |
| | | <div |
| | | :class="[ |
| | | 'absolute bottom-32px right-[calc(50%-375px/2+32px)] flex z-12 gap-12px items-center', |
| | | { |
| | | 'flex-row': property.direction === 'horizontal', |
| | | 'flex-col': property.direction === 'vertical' |
| | | } |
| | | ]" |
| | | > |
| | | <template v-if="expanded"> |
| | | <div |
| | | v-for="(item, index) in property.list" |
| | | :key="index" |
| | | class="flex flex-col items-center" |
| | | @click="handleActive(index)" |
| | | > |
| | | <el-image :src="item.imgUrl" fit="contain" class="h-27px w-27px"> |
| | | <template #error> |
| | | <div class="h-full w-full flex items-center justify-center"> |
| | | <Icon icon="ep:picture" :color="item.textColor" /> |
| | | </div> |
| | | </template> |
| | | </el-image> |
| | | <span v-if="property.showText" class="mt-4px text-12px" :style="{ color: item.textColor }"> |
| | | {{ item.text }} |
| | | </span> |
| | | </div> |
| | | </template> |
| | | <!-- todo: @owen 使ç¨APP主é¢è² --> |
| | | <el-button type="primary" size="large" circle @click="handleToggleFab"> |
| | | <Icon icon="ep:plus" :class="['fab-icon', { active: expanded }]" /> |
| | | </el-button> |
| | | </div> |
| | | <!-- 模æèæ¯ï¼å±å¼æ¶æ¾ç¤ºï¼ç¹å»åæå --> |
| | | <div v-if="expanded" class="modal-bg" @click="handleToggleFab"></div> |
| | | </template> |
| | | <script setup lang="ts"> |
| | | import { FloatingActionButtonProperty } from './config' |
| | | |
| | | /** æ¬æµ®æé® */ |
| | | defineOptions({ name: 'FloatingActionButton' }) |
| | | // å®ä¹å±æ§ |
| | | defineProps<{ property: FloatingActionButtonProperty }>() |
| | | |
| | | // æ¯å¦å±å¼ |
| | | const expanded = ref(false) |
| | | // å¤çå±å¼/æå |
| | | const handleToggleFab = () => { |
| | | expanded.value = !expanded.value |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | /* 模æèæ¯ */ |
| | | .modal-bg { |
| | | position: absolute; |
| | | left: calc(50% - 375px / 2); |
| | | top: 0; |
| | | z-index: 11; |
| | | width: 375px; |
| | | height: 100%; |
| | | background-color: rgba(#000000, 0.4); |
| | | } |
| | | |
| | | .fab-icon { |
| | | transform: rotate(0deg); |
| | | transition: transform 0.3s; |
| | | |
| | | &.active { |
| | | transform: rotate(135deg); |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <el-form label-width="80px" :model="formData"> |
| | | <el-card header="æé®é
ç½®" class="property-group" shadow="never"> |
| | | <el-form-item label="å±å¼æ¹å" prop="direction"> |
| | | <el-radio-group v-model="formData.direction"> |
| | | <el-radio value="vertical">åç´</el-radio> |
| | | <el-radio value="horizontal">æ°´å¹³</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="æ¾ç¤ºæå" prop="showText"> |
| | | <el-switch v-model="formData.showText" /> |
| | | </el-form-item> |
| | | </el-card> |
| | | <el-card header="æé®å表" class="property-group" shadow="never"> |
| | | <Draggable v-model="formData.list" :empty-item="{ textColor: '#fff' }"> |
| | | <template #default="{ element, index }"> |
| | | <el-form-item label="徿 " :prop="`list[${index}].imgUrl`"> |
| | | <UploadImg v-model="element.imgUrl" height="56px" width="56px" /> |
| | | </el-form-item> |
| | | <el-form-item label="æå" :prop="`list[${index}].text`"> |
| | | <InputWithColor v-model="element.text" v-model:color="element.textColor" /> |
| | | </el-form-item> |
| | | <el-form-item label="è·³è½¬é¾æ¥" :prop="`list[${index}].url`"> |
| | | <AppLinkInput v-model="element.url" /> |
| | | </el-form-item> |
| | | </template> |
| | | </Draggable> |
| | | </el-card> |
| | | </el-form> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { FloatingActionButtonProperty } from './config' |
| | | import { useVModel } from '@vueuse/core' |
| | | |
| | | // æ¬æµ®æé®å±æ§é¢æ¿ |
| | | defineOptions({ name: 'FloatingActionButtonProperty' }) |
| | | |
| | | const props = defineProps<{ modelValue: FloatingActionButtonProperty }>() |
| | | const emit = defineEmits(['update:modelValue']) |
| | | const formData = useVModel(props, 'modelValue', emit) |
| | | </script> |
| | | |
| | | <style scoped lang="scss"></style> |
| New file |
| | |
| | | import { HotZoneItemProperty } from '@/components/DiyEditor/components/mobile/HotZone/config' |
| | | import { StyleValue } from 'vue' |
| | | |
| | | // çåºçæå°å®½é« |
| | | export const HOT_ZONE_MIN_SIZE = 100 |
| | | |
| | | // æ§å¶çç±»å |
| | | export enum CONTROL_TYPE_ENUM { |
| | | LEFT, |
| | | TOP, |
| | | WIDTH, |
| | | HEIGHT |
| | | } |
| | | |
| | | // å®ä¹çåºçæ§å¶ç¹ |
| | | export interface ControlDot { |
| | | position: string |
| | | types: CONTROL_TYPE_ENUM[] |
| | | style: StyleValue |
| | | } |
| | | |
| | | // çåºç8个æ§å¶ç¹ |
| | | export const CONTROL_DOT_LIST = [ |
| | | { |
| | | position: 'å·¦ä¸è§', |
| | | types: [ |
| | | CONTROL_TYPE_ENUM.LEFT, |
| | | CONTROL_TYPE_ENUM.TOP, |
| | | CONTROL_TYPE_ENUM.WIDTH, |
| | | CONTROL_TYPE_ENUM.HEIGHT |
| | | ], |
| | | style: { left: '-5px', top: '-5px', cursor: 'nwse-resize' } |
| | | }, |
| | | { |
| | | position: '䏿¹ä¸é´', |
| | | types: [CONTROL_TYPE_ENUM.TOP, CONTROL_TYPE_ENUM.HEIGHT], |
| | | style: { left: '50%', top: '-5px', cursor: 'n-resize', transform: 'translateX(-50%)' } |
| | | }, |
| | | { |
| | | position: 'å³ä¸è§', |
| | | types: [CONTROL_TYPE_ENUM.TOP, CONTROL_TYPE_ENUM.WIDTH, CONTROL_TYPE_ENUM.HEIGHT], |
| | | style: { right: '-5px', top: '-5px', cursor: 'nesw-resize' } |
| | | }, |
| | | { |
| | | position: 'å³ä¾§ä¸é´', |
| | | types: [CONTROL_TYPE_ENUM.WIDTH], |
| | | style: { right: '-5px', top: '50%', cursor: 'e-resize', transform: 'translateX(-50%)' } |
| | | }, |
| | | { |
| | | position: 'å³ä¸è§', |
| | | types: [CONTROL_TYPE_ENUM.WIDTH, CONTROL_TYPE_ENUM.HEIGHT], |
| | | style: { right: '-5px', bottom: '-5px', cursor: 'nwse-resize' } |
| | | }, |
| | | { |
| | | position: '䏿¹ä¸é´', |
| | | types: [CONTROL_TYPE_ENUM.HEIGHT], |
| | | style: { left: '50%', bottom: '-5px', cursor: 's-resize', transform: 'translateX(-50%)' } |
| | | }, |
| | | { |
| | | position: 'å·¦ä¸è§', |
| | | types: [CONTROL_TYPE_ENUM.LEFT, CONTROL_TYPE_ENUM.WIDTH, CONTROL_TYPE_ENUM.HEIGHT], |
| | | style: { left: '-5px', bottom: '-5px', cursor: 'nesw-resize' } |
| | | }, |
| | | { |
| | | position: '左侧ä¸é´', |
| | | types: [CONTROL_TYPE_ENUM.LEFT, CONTROL_TYPE_ENUM.WIDTH], |
| | | style: { left: '-5px', top: '50%', cursor: 'w-resize', transform: 'translateX(-50%)' } |
| | | } |
| | | ] as ControlDot[] |
| | | |
| | | //region çåºçç¼©æ¾ |
| | | // çåºçç¼©æ¾æ¯ä¾ |
| | | export const HOT_ZONE_SCALE_RATE = 2 |
| | | // 缩å°ï¼ç¼©åéåææºå±å¹çå¤§å° |
| | | export const zoomOut = (list?: HotZoneItemProperty[]) => { |
| | | return ( |
| | | list?.map((hotZone) => ({ |
| | | ...hotZone, |
| | | left: (hotZone.left /= HOT_ZONE_SCALE_RATE), |
| | | top: (hotZone.top /= HOT_ZONE_SCALE_RATE), |
| | | width: (hotZone.width /= HOT_ZONE_SCALE_RATE), |
| | | height: (hotZone.height /= HOT_ZONE_SCALE_RATE) |
| | | })) || [] |
| | | ) |
| | | } |
| | | // æ¾å¤§ï¼ä½ç¨æ¯ä¸ºäºæ¹ä¾¿å¨çµèå±å¹ä¸ç¼è¾ |
| | | export const zoomIn = (list?: HotZoneItemProperty[]) => { |
| | | return ( |
| | | list?.map((hotZone) => ({ |
| | | ...hotZone, |
| | | left: (hotZone.left *= HOT_ZONE_SCALE_RATE), |
| | | top: (hotZone.top *= HOT_ZONE_SCALE_RATE), |
| | | width: (hotZone.width *= HOT_ZONE_SCALE_RATE), |
| | | height: (hotZone.height *= HOT_ZONE_SCALE_RATE) |
| | | })) || [] |
| | | ) |
| | | } |
| | | //endregion |
| | | |
| | | /** |
| | | * å°è£
çåºææ½ |
| | | * |
| | | * 注ï¼ä¸ºä»ä¹ä¸ä½¿ç¨vueuseçuseDraggableã卿¬åºæ¯ä¸ï¼å
¶ä½¿ç¨æ¹å¼æ¯è¾å¤æ |
| | | * @param hotZone çåº |
| | | * @param downEvent é¼ æ æä¸äºä»¶ |
| | | * @param callback åè°å½æ° |
| | | */ |
| | | export const useDraggable = ( |
| | | hotZone: HotZoneItemProperty, |
| | | downEvent: MouseEvent, |
| | | callback: ( |
| | | left: number, |
| | | top: number, |
| | | width: number, |
| | | height: number, |
| | | moveWidth: number, |
| | | moveHeight: number |
| | | ) => void |
| | | ) => { |
| | | // 黿¢äºä»¶å泡 |
| | | downEvent.stopPropagation() |
| | | |
| | | // ç§»å¨åçé¼ æ åæ |
| | | const { clientX: startX, clientY: startY } = downEvent |
| | | // ç§»å¨åççåºåæ ãå¤§å° |
| | | const { left, top, width, height } = hotZone |
| | | |
| | | // çå¬é¼ æ ç§»å¨ |
| | | document.onmousemove = (e) => { |
| | | // ç§»å¨å®½åº¦ |
| | | const moveWidth = e.clientX - startX |
| | | // ç§»å¨é«åº¦ |
| | | const moveHeight = e.clientY - startY |
| | | // ç§»å¨åè° |
| | | callback(left, top, width, height, moveWidth, moveHeight) |
| | | } |
| | | |
| | | // æ¾å¼é¼ æ åï¼ç»æææ½ |
| | | document.onmouseup = () => { |
| | | document.onmousemove = null |
| | | document.onmouseup = null |
| | | } |
| | | } |
| New file |
| | |
| | | <template> |
| | | <Dialog v-model="dialogVisible" title="设置çåº" width="780" @close="handleClose"> |
| | | <div ref="container" class="relative h-full w-750px"> |
| | | <el-image :src="imgUrl" class="pointer-events-none h-full w-750px select-none" /> |
| | | <div |
| | | v-for="(item, hotZoneIndex) in formData" |
| | | :key="hotZoneIndex" |
| | | class="hot-zone" |
| | | :style="{ |
| | | width: `${item.width}px`, |
| | | height: `${item.height}px`, |
| | | top: `${item.top}px`, |
| | | left: `${item.left}px` |
| | | }" |
| | | @mousedown="handleMove(item, $event)" |
| | | @dblclick="handleShowAppLinkDialog(item)" |
| | | > |
| | | <span class="pointer-events-none select-none">{{ item.name || 'åå»éæ©é¾æ¥' }}</span> |
| | | <Icon icon="ep:close" class="delete" :size="14" @click="handleRemove(item)" /> |
| | | |
| | | <!-- 8个æ§å¶ç¹ --> |
| | | <span |
| | | class="ctrl-dot" |
| | | v-for="(dot, dotIndex) in CONTROL_DOT_LIST" |
| | | :key="dotIndex" |
| | | :style="dot.style" |
| | | @mousedown="handleResize(item, dot, $event)" |
| | | ></span> |
| | | </div> |
| | | </div> |
| | | <template #footer> |
| | | <el-button @click="handleAdd" type="primary" plain> |
| | | <Icon icon="ep:plus" class="mr-5px" /> |
| | | æ·»å çåº |
| | | </el-button> |
| | | <el-button @click="handleSubmit" type="primary" plain> |
| | | <Icon icon="ep:check" class="mr-5px" /> |
| | | ç¡®å® |
| | | </el-button> |
| | | </template> |
| | | </Dialog> |
| | | <AppLinkSelectDialog ref="appLinkDialogRef" @app-link-change="handleAppLinkChange" /> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { HotZoneItemProperty } from '@/components/DiyEditor/components/mobile/HotZone/config' |
| | | import { array, string } from 'vue-types' |
| | | import { |
| | | CONTROL_DOT_LIST, |
| | | CONTROL_TYPE_ENUM, |
| | | ControlDot, |
| | | HOT_ZONE_MIN_SIZE, |
| | | useDraggable, |
| | | zoomIn, |
| | | zoomOut |
| | | } from './controller' |
| | | import { AppLink } from '@/components/AppLinkInput/data' |
| | | import { remove } from 'lodash-es' |
| | | |
| | | /** çåºç¼è¾å¯¹è¯æ¡ */ |
| | | defineOptions({ name: 'HotZoneEditDialog' }) |
| | | |
| | | // å®ä¹å±æ§ |
| | | const props = defineProps({ |
| | | modelValue: array<HotZoneItemProperty>(), |
| | | imgUrl: string().def('') |
| | | }) |
| | | const emit = defineEmits(['update:modelValue']) |
| | | const formData = ref<HotZoneItemProperty[]>([]) |
| | | |
| | | // å¼¹çªçæ¯å¦æ¾ç¤º |
| | | const dialogVisible = ref(false) |
| | | // æå¼å¼¹çª |
| | | const open = () => { |
| | | // æ¾å¤§ |
| | | formData.value = zoomIn(props.modelValue) |
| | | dialogVisible.value = true |
| | | } |
| | | // æä¾ open æ¹æ³ï¼ç¨äºæå¼å¼¹çª |
| | | defineExpose({ open }) |
| | | |
| | | // çåºå®¹å¨ |
| | | const container = ref<HTMLDivElement>() |
| | | |
| | | // å¢å çåº |
| | | const handleAdd = () => { |
| | | formData.value.push({ |
| | | width: HOT_ZONE_MIN_SIZE, |
| | | height: HOT_ZONE_MIN_SIZE, |
| | | top: 0, |
| | | left: 0 |
| | | } as HotZoneItemProperty) |
| | | } |
| | | // å é¤çåº |
| | | const handleRemove = (hotZone: HotZoneItemProperty) => { |
| | | remove(formData.value, hotZone) |
| | | } |
| | | |
| | | // ç§»å¨çåº |
| | | const handleMove = (item: HotZoneItemProperty, e: MouseEvent) => { |
| | | useDraggable(item, e, (left, top, _, __, moveWidth, moveHeight) => { |
| | | setLeft(item, left + moveWidth) |
| | | setTop(item, top + moveHeight) |
| | | }) |
| | | } |
| | | |
| | | // è°æ´çåºå¤§å°ãä½ç½® |
| | | const handleResize = (item: HotZoneItemProperty, ctrlDot: ControlDot, e: MouseEvent) => { |
| | | useDraggable(item, e, (left, top, width, height, moveWidth, moveHeight) => { |
| | | ctrlDot.types.forEach((type) => { |
| | | switch (type) { |
| | | case CONTROL_TYPE_ENUM.LEFT: |
| | | setLeft(item, left + moveWidth) |
| | | break |
| | | case CONTROL_TYPE_ENUM.TOP: |
| | | setTop(item, top + moveHeight) |
| | | break |
| | | case CONTROL_TYPE_ENUM.WIDTH: |
| | | { |
| | | // ä¸ç§»æ¶ï¼é«åº¦ä¸ºåå° |
| | | const direction = ctrlDot.types.includes(CONTROL_TYPE_ENUM.LEFT) ? -1 : 1 |
| | | setWidth(item, width + moveWidth * direction) |
| | | } |
| | | break |
| | | case CONTROL_TYPE_ENUM.HEIGHT: |
| | | { |
| | | // 左移æ¶ï¼å®½åº¦ä¸ºåå° |
| | | const direction = ctrlDot.types.includes(CONTROL_TYPE_ENUM.TOP) ? -1 : 1 |
| | | setHeight(item, height + moveHeight * direction) |
| | | } |
| | | break |
| | | } |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | // 设置Xè½´åæ |
| | | const setLeft = (item: HotZoneItemProperty, left: number) => { |
| | | // ä¸è½è¶
åºå®¹å¨ |
| | | if (left >= 0 && left <= container.value!.offsetWidth - item.width) { |
| | | item.left = left |
| | | } |
| | | } |
| | | // 设置Yè½´åæ |
| | | const setTop = (item: HotZoneItemProperty, top: number) => { |
| | | // ä¸è½è¶
åºå®¹å¨ |
| | | if (top >= 0 && top <= container.value!.offsetHeight - item.height) { |
| | | item.top = top |
| | | } |
| | | } |
| | | // 设置宽度 |
| | | const setWidth = (item: HotZoneItemProperty, width: number) => { |
| | | // ä¸è½å°äºæå°å®½åº¦ && ä¸è½è¶
åºå®¹å¨å³è¾¹ |
| | | if (width >= HOT_ZONE_MIN_SIZE && item.left + width <= container.value!.offsetWidth) { |
| | | item.width = width |
| | | } |
| | | } |
| | | // 设置é«åº¦ |
| | | const setHeight = (item: HotZoneItemProperty, height: number) => { |
| | | // ä¸è½å°äºæå°é«åº¦ && ä¸è½è¶
åºå®¹å¨åºé¨ |
| | | if (height >= HOT_ZONE_MIN_SIZE && item.top + height <= container.value!.offsetHeight) { |
| | | item.height = height |
| | | } |
| | | } |
| | | |
| | | // å¤çå¯¹è¯æ¡å
³é |
| | | const handleSubmit = () => { |
| | | // ä¼èªå¨è§¦åhandleClose |
| | | dialogVisible.value = false |
| | | } |
| | | |
| | | // å¤çå¯¹è¯æ¡å
³é |
| | | const handleClose = () => { |
| | | // ç¼©å° |
| | | const list = zoomOut(formData.value) |
| | | emit('update:modelValue', list) |
| | | } |
| | | |
| | | const activeHotZone = ref<HotZoneItemProperty>() |
| | | const appLinkDialogRef = ref() |
| | | const handleShowAppLinkDialog = (hotZone: HotZoneItemProperty) => { |
| | | activeHotZone.value = hotZone |
| | | appLinkDialogRef.value.open(hotZone.url) |
| | | } |
| | | const handleAppLinkChange = (appLink: AppLink) => { |
| | | if (!appLink || !activeHotZone.value) return |
| | | activeHotZone.value.name = appLink.name |
| | | activeHotZone.value.url = appLink.path |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .hot-zone { |
| | | position: absolute; |
| | | background: var(--el-color-primary-light-7); |
| | | opacity: 0.8; |
| | | border: 1px solid var(--el-color-primary); |
| | | color: var(--el-color-primary); |
| | | font-size: 16px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | cursor: move; |
| | | z-index: 10; |
| | | |
| | | /* æ§å¶ç¹ */ |
| | | .ctrl-dot { |
| | | position: absolute; |
| | | width: 8px; |
| | | height: 8px; |
| | | border-radius: 50%; |
| | | border: inherit; |
| | | background-color: #fff; |
| | | z-index: 11; |
| | | } |
| | | |
| | | .delete { |
| | | display: none; |
| | | position: absolute; |
| | | top: 0; |
| | | right: 0; |
| | | padding: 2px 2px 6px 6px; |
| | | background-color: var(--el-color-primary); |
| | | border-radius: 0 0 0 80%; |
| | | cursor: pointer; |
| | | color: #fff; |
| | | text-align: right; |
| | | } |
| | | |
| | | &:hover { |
| | | .delete { |
| | | display: block; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util' |
| | | |
| | | /** çåºå±æ§ */ |
| | | export interface HotZoneProperty { |
| | | // å¾çå°å |
| | | imgUrl: string |
| | | // 导èªèåå表 |
| | | list: HotZoneItemProperty[] |
| | | // ç»ä»¶æ ·å¼ |
| | | style: ComponentStyle |
| | | } |
| | | |
| | | /** çåºé¡¹ç®å±æ§ */ |
| | | export interface HotZoneItemProperty { |
| | | // 龿¥çåç§° |
| | | name: string |
| | | // 龿¥ |
| | | url: string |
| | | // 宽 |
| | | width: number |
| | | // é« |
| | | height: number |
| | | // ä¸ |
| | | top: number |
| | | // å·¦ |
| | | left: number |
| | | } |
| | | |
| | | // å®ä¹ç»ä»¶ |
| | | export const component = { |
| | | id: 'HotZone', |
| | | name: 'çåº', |
| | | icon: 'tabler:hand-click', |
| | | property: { |
| | | imgUrl: '', |
| | | list: [] as HotZoneItemProperty[], |
| | | style: { |
| | | bgType: 'color', |
| | | bgColor: '#fff', |
| | | marginBottom: 8 |
| | | } as ComponentStyle |
| | | } |
| | | } as DiyComponent<HotZoneProperty> |
| New file |
| | |
| | | <template> |
| | | <div class="relative h-full min-h-30px w-full"> |
| | | <el-image :src="property.imgUrl" class="pointer-events-none h-full w-full select-none" /> |
| | | <div |
| | | v-for="(item, index) in property.list" |
| | | :key="index" |
| | | class="hot-zone" |
| | | :style="{ |
| | | width: `${item.width}px`, |
| | | height: `${item.height}px`, |
| | | top: `${item.top}px`, |
| | | left: `${item.left}px` |
| | | }" |
| | | > |
| | | {{ item.name }} |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { HotZoneProperty } from './config' |
| | | |
| | | /** çåº */ |
| | | defineOptions({ name: 'HotZone' }) |
| | | const props = defineProps<{ property: HotZoneProperty }>() |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .hot-zone { |
| | | position: absolute; |
| | | background: var(--el-color-primary-light-7); |
| | | opacity: 0.8; |
| | | border: 1px solid var(--el-color-primary); |
| | | color: var(--el-color-primary); |
| | | font-size: 14px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | cursor: move; |
| | | z-index: 10; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <ComponentContainerProperty v-model="formData.style"> |
| | | <!-- 表å --> |
| | | <el-form label-width="80px" :model="formData" class="m-t-8px"> |
| | | <el-form-item label="ä¸ä¼ å¾ç" prop="imgUrl"> |
| | | <UploadImg v-model="formData.imgUrl" height="50px" width="auto" class="min-w-80px"> |
| | | <template #tip> |
| | | <el-text type="info" size="small"> æ¨è宽度 750</el-text> |
| | | </template> |
| | | </UploadImg> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <el-button type="primary" plain class="w-full" @click="handleOpenEditDialog"> |
| | | 设置çåº |
| | | </el-button> |
| | | </ComponentContainerProperty> |
| | | <!-- çåºç¼è¾å¯¹è¯æ¡ --> |
| | | <HotZoneEditDialog ref="editDialogRef" v-model="formData.list" :img-url="formData.imgUrl" /> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { useVModel } from '@vueuse/core' |
| | | import { HotZoneProperty } from '@/components/DiyEditor/components/mobile/HotZone/config' |
| | | import HotZoneEditDialog from './components/HotZoneEditDialog/index.vue' |
| | | |
| | | /** çåºå±æ§é¢æ¿ */ |
| | | defineOptions({ name: 'HotZoneProperty' }) |
| | | |
| | | const props = defineProps<{ modelValue: HotZoneProperty }>() |
| | | const emit = defineEmits(['update:modelValue']) |
| | | const formData = useVModel(props, 'modelValue', emit) |
| | | |
| | | // çåºç¼è¾å¯¹è¯æ¡ |
| | | const editDialogRef = ref() |
| | | // æå¼çåºç¼è¾å¯¹è¯æ¡ |
| | | const handleOpenEditDialog = () => { |
| | | editDialogRef.value.open() |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .hot-zone { |
| | | position: absolute; |
| | | background: #409effbf; |
| | | border: 1px solid var(--el-color-primary); |
| | | color: #fff; |
| | | font-size: 12px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | cursor: move; |
| | | |
| | | /* æ§å¶ç¹ */ |
| | | .ctrl-dot { |
| | | position: absolute; |
| | | width: 4px; |
| | | height: 4px; |
| | | border-radius: 50%; |
| | | background-color: #fff; |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util' |
| | | |
| | | /** å¾çå±ç¤ºå±æ§ */ |
| | | export interface ImageBarProperty { |
| | | // å¾ç龿¥ |
| | | imgUrl: string |
| | | // è·³è½¬é¾æ¥ |
| | | url: string |
| | | // ç»ä»¶æ ·å¼ |
| | | style: ComponentStyle |
| | | } |
| | | |
| | | // å®ä¹ç»ä»¶ |
| | | export const component = { |
| | | id: 'ImageBar', |
| | | name: 'å¾çå±ç¤º', |
| | | icon: 'ep:picture', |
| | | property: { |
| | | imgUrl: '', |
| | | url: '', |
| | | style: { |
| | | bgType: 'color', |
| | | bgColor: '#fff', |
| | | marginBottom: 8 |
| | | } as ComponentStyle |
| | | } |
| | | } as DiyComponent<ImageBarProperty> |
| New file |
| | |
| | | <template> |
| | | <!-- æ å¾ç --> |
| | | <div class="h-50px flex items-center justify-center bg-gray-3" v-if="!property.imgUrl"> |
| | | <Icon icon="ep:picture" class="text-gray-8 text-30px!" /> |
| | | </div> |
| | | <el-image class="min-h-30px" v-else :src="property.imgUrl" /> |
| | | </template> |
| | | <script setup lang="ts"> |
| | | import { ImageBarProperty } from './config' |
| | | |
| | | /** å¾çå±ç¤º */ |
| | | defineOptions({ name: 'ImageBar' }) |
| | | |
| | | defineProps<{ property: ImageBarProperty }>() |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | /* å¾ç */ |
| | | img { |
| | | display: block; |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <ComponentContainerProperty v-model="formData.style"> |
| | | <el-form label-width="80px" :model="formData"> |
| | | <el-form-item label="ä¸ä¼ å¾ç" prop="imgUrl"> |
| | | <UploadImg |
| | | v-model="formData.imgUrl" |
| | | draggable="false" |
| | | height="80px" |
| | | width="100%" |
| | | class="min-w-80px" |
| | | > |
| | | <template #tip> 建议宽度750 </template> |
| | | </UploadImg> |
| | | </el-form-item> |
| | | <el-form-item label="龿¥" prop="url"> |
| | | <AppLinkInput v-model="formData.url" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | </ComponentContainerProperty> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { ImageBarProperty } from './config' |
| | | import { useVModel } from '@vueuse/core' |
| | | |
| | | // å¾çå±ç¤ºå±æ§é¢æ¿ |
| | | defineOptions({ name: 'ImageBarProperty' }) |
| | | |
| | | const props = defineProps<{ modelValue: ImageBarProperty }>() |
| | | const emit = defineEmits(['update:modelValue']) |
| | | const formData = useVModel(props, 'modelValue', emit) |
| | | </script> |
| | | |
| | | <style scoped lang="scss"></style> |
| New file |
| | |
| | | import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util' |
| | | |
| | | /** 广å鿹屿§ */ |
| | | export interface MagicCubeProperty { |
| | | // ä¸åè§ |
| | | borderRadiusTop: number |
| | | // ä¸åè§ |
| | | borderRadiusBottom: number |
| | | // é´é |
| | | space: number |
| | | // 导èªèåå表 |
| | | list: MagicCubeItemProperty[] |
| | | // ç»ä»¶æ ·å¼ |
| | | style: ComponentStyle |
| | | } |
| | | |
| | | /** 广å鿹项ç®å±æ§ */ |
| | | export interface MagicCubeItemProperty { |
| | | // 徿 龿¥ |
| | | imgUrl: string |
| | | // 龿¥ |
| | | url: string |
| | | // 宽 |
| | | width: number |
| | | // é« |
| | | height: number |
| | | // ä¸ |
| | | top: number |
| | | // å·¦ |
| | | left: number |
| | | } |
| | | |
| | | // å®ä¹ç»ä»¶ |
| | | export const component = { |
| | | id: 'MagicCube', |
| | | name: '广åéæ¹', |
| | | icon: 'bi:columns', |
| | | property: { |
| | | borderRadiusTop: 0, |
| | | borderRadiusBottom: 0, |
| | | space: 0, |
| | | list: [], |
| | | style: { |
| | | bgType: 'color', |
| | | bgColor: '#fff', |
| | | marginBottom: 8 |
| | | } as ComponentStyle |
| | | } |
| | | } as DiyComponent<MagicCubeProperty> |
| New file |
| | |
| | | <template> |
| | | <div |
| | | class="relative" |
| | | :style="{ |
| | | height: `${rowCount * CUBE_SIZE}px`, |
| | | width: `${4 * CUBE_SIZE}px`, |
| | | padding: `${property.space}px` |
| | | }" |
| | | > |
| | | <div |
| | | v-for="(item, index) in property.list" |
| | | :key="index" |
| | | class="absolute" |
| | | :style="{ |
| | | width: `${item.width * CUBE_SIZE - property.space}px`, |
| | | height: `${item.height * CUBE_SIZE - property.space}px`, |
| | | top: `${item.top * CUBE_SIZE}px`, |
| | | left: `${item.left * CUBE_SIZE}px` |
| | | }" |
| | | > |
| | | <el-image |
| | | class="h-full w-full" |
| | | fit="cover" |
| | | :src="item.imgUrl" |
| | | :style="{ |
| | | borderTopLeftRadius: `${property.borderRadiusTop}px`, |
| | | borderTopRightRadius: `${property.borderRadiusTop}px`, |
| | | borderBottomLeftRadius: `${property.borderRadiusBottom}px`, |
| | | borderBottomRightRadius: `${property.borderRadiusBottom}px` |
| | | }" |
| | | > |
| | | <template #error> |
| | | <div class="image-slot"> |
| | | <div |
| | | class="flex items-center justify-center" |
| | | :style="{ |
| | | width: `${item.width * CUBE_SIZE}px`, |
| | | height: `${item.height * CUBE_SIZE}px` |
| | | }" |
| | | > |
| | | <Icon icon="ep-picture" color="gray" :size="CUBE_SIZE" /> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | </el-image> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { MagicCubeProperty } from './config' |
| | | |
| | | /** 广åéæ¹ */ |
| | | defineOptions({ name: 'MagicCube' }) |
| | | const props = defineProps<{ property: MagicCubeProperty }>() |
| | | // ä¸ä¸ªæ¹åçå¤§å° |
| | | const CUBE_SIZE = 93.75 |
| | | /** |
| | | * è®¡ç®æ¹åçè¡æ° |
| | | * è¡æ°ç¨äºè®¡ç®éæ¹çæ»ä½é«åº¦ï¼åå¨ä»¥ä¸æ
åµï¼ |
| | | * 1. æ²¡ææ°æ®æ¶ï¼é»è®¤å°±åªæ¾ç¤ºä¸è¡çé«åº¦ |
| | | * 2. åºé¨ç空ç½ä¸ç®é«åº¦ï¼ä¾å¦åªæç¬¬ä¸è¡ææ°æ®ï¼é£ä¹å°±åªæ¾ç¤ºä¸è¡çé«åº¦ |
| | | * 3. é¡¶é¨åä¸é´ç空ç½ç®é«åº¦ï¼ä¾å¦ä¸å
±æåè¡ï¼åªææåä¸è¡ææ°æ®ï¼é£ä¹ä¹æ¾ç¤ºåè¡çé«åº¦ |
| | | */ |
| | | const rowCount = computed(() => { |
| | | let count = 0 |
| | | if (props.property.list.length > 0) { |
| | | // æå¤§è¡å· |
| | | count = Math.max(...props.property.list.map((item) => item.top + item.height)) |
| | | } |
| | | // ä¿è¯è³å°æä¸è¡ |
| | | return count == 0 ? 1 : count |
| | | }) |
| | | </script> |
| | | |
| | | <style scoped lang="scss"></style> |
| New file |
| | |
| | | <template> |
| | | <ComponentContainerProperty v-model="formData.style"> |
| | | <!-- 表å --> |
| | | <el-form label-width="80px" :model="formData" class="m-t-8px"> |
| | | <el-text tag="p"> éæ¹è®¾ç½® </el-text> |
| | | <el-text type="info" size="small"> æ¯æ ¼å°ºå¯¸187 * 187 </el-text> |
| | | <MagicCubeEditor |
| | | class="m-y-16px" |
| | | v-model="formData.list" |
| | | :rows="4" |
| | | :cols="4" |
| | | @hot-area-selected="handleHotAreaSelected" |
| | | /> |
| | | <template v-for="(hotArea, index) in formData.list" :key="index"> |
| | | <template v-if="selectedHotAreaIndex === index"> |
| | | <el-form-item label="ä¸ä¼ å¾ç" :prop="`list[${index}].imgUrl`"> |
| | | <UploadImg v-model="hotArea.imgUrl" height="80px" width="80px" /> |
| | | </el-form-item> |
| | | <el-form-item label="龿¥" :prop="`list[${index}].url`"> |
| | | <AppLinkInput v-model="hotArea.url" /> |
| | | </el-form-item> |
| | | </template> |
| | | </template> |
| | | <el-form-item label="ä¸åè§" prop="borderRadiusTop"> |
| | | <el-slider |
| | | v-model="formData.borderRadiusTop" |
| | | :max="100" |
| | | :min="0" |
| | | show-input |
| | | input-size="small" |
| | | :show-input-controls="false" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="ä¸åè§" prop="borderRadiusBottom"> |
| | | <el-slider |
| | | v-model="formData.borderRadiusBottom" |
| | | :max="100" |
| | | :min="0" |
| | | show-input |
| | | input-size="small" |
| | | :show-input-controls="false" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="é´é" prop="space"> |
| | | <el-slider |
| | | v-model="formData.space" |
| | | :max="100" |
| | | :min="0" |
| | | show-input |
| | | input-size="small" |
| | | :show-input-controls="false" |
| | | /> |
| | | </el-form-item> |
| | | </el-form> |
| | | </ComponentContainerProperty> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { useVModel } from '@vueuse/core' |
| | | import { MagicCubeProperty } from '@/components/DiyEditor/components/mobile/MagicCube/config' |
| | | |
| | | /** 广å鿹屿§é¢æ¿ */ |
| | | defineOptions({ name: 'MagicCubeProperty' }) |
| | | |
| | | const props = defineProps<{ modelValue: MagicCubeProperty }>() |
| | | const emit = defineEmits(['update:modelValue']) |
| | | const formData = useVModel(props, 'modelValue', emit) |
| | | |
| | | // éä¸ççåº |
| | | const selectedHotAreaIndex = ref(-1) |
| | | const handleHotAreaSelected = (_: any, index: number) => { |
| | | selectedHotAreaIndex.value = index |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="scss"></style> |
| New file |
| | |
| | | import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util' |
| | | import { cloneDeep } from 'lodash-es' |
| | | |
| | | /** å®«æ ¼å¯¼èªå±æ§ */ |
| | | export interface MenuGridProperty { |
| | | // åæ° |
| | | column: number |
| | | // 导èªèåå表 |
| | | list: MenuGridItemProperty[] |
| | | // ç»ä»¶æ ·å¼ |
| | | style: ComponentStyle |
| | | } |
| | | |
| | | /** å®«æ ¼å¯¼èªé¡¹ç®å±æ§ */ |
| | | export interface MenuGridItemProperty { |
| | | // 徿 龿¥ |
| | | iconUrl: string |
| | | // æ é¢ |
| | | title: string |
| | | // æ é¢é¢è² |
| | | titleColor: string |
| | | // 坿 é¢ |
| | | subtitle: string |
| | | // 坿 é¢é¢è² |
| | | subtitleColor: string |
| | | // 龿¥ |
| | | url: string |
| | | // è§æ |
| | | badge: { |
| | | // æ¯å¦æ¾ç¤º |
| | | show: boolean |
| | | // è§æ æå |
| | | text: string |
| | | // è§æ æåé¢è² |
| | | textColor: string |
| | | // è§æ èæ¯é¢è² |
| | | bgColor: string |
| | | } |
| | | } |
| | | |
| | | export const EMPTY_MENU_GRID_ITEM_PROPERTY = { |
| | | title: 'æ é¢', |
| | | titleColor: '#333', |
| | | subtitle: '坿 é¢', |
| | | subtitleColor: '#bbb', |
| | | badge: { |
| | | show: false, |
| | | textColor: '#fff', |
| | | bgColor: '#FF6000' |
| | | } |
| | | } as MenuGridItemProperty |
| | | |
| | | // å®ä¹ç»ä»¶ |
| | | export const component = { |
| | | id: 'MenuGrid', |
| | | name: 'å®«æ ¼å¯¼èª', |
| | | icon: 'bi:grid-3x3-gap', |
| | | property: { |
| | | column: 3, |
| | | list: [cloneDeep(EMPTY_MENU_GRID_ITEM_PROPERTY)], |
| | | style: { |
| | | bgType: 'color', |
| | | bgColor: '#fff', |
| | | marginBottom: 8, |
| | | marginLeft: 8, |
| | | marginRight: 8, |
| | | padding: 8, |
| | | paddingTop: 8, |
| | | paddingRight: 8, |
| | | paddingBottom: 8, |
| | | paddingLeft: 8, |
| | | borderRadius: 8, |
| | | borderTopLeftRadius: 8, |
| | | borderTopRightRadius: 8, |
| | | borderBottomRightRadius: 8, |
| | | borderBottomLeftRadius: 8 |
| | | } as ComponentStyle |
| | | } |
| | | } as DiyComponent<MenuGridProperty> |
| New file |
| | |
| | | <template> |
| | | <div class="flex flex-row flex-wrap"> |
| | | <div |
| | | v-for="(item, index) in property.list" |
| | | :key="index" |
| | | class="relative flex flex-col items-center p-b-14px p-t-20px" |
| | | :style="{ width: `${100 * (1 / property.column)}%` }" |
| | | > |
| | | <!-- å³ä¸è§è§æ --> |
| | | <span |
| | | v-if="item.badge?.show" |
| | | class="absolute left-50% top-10px z-1 h-20px rounded-50% p-x-6px text-center text-12px leading-20px" |
| | | :style="{ color: item.badge.textColor, backgroundColor: item.badge.bgColor }" |
| | | > |
| | | {{ item.badge.text }} |
| | | </span> |
| | | <el-image v-if="item.iconUrl" class="h-28px w-28px" :src="item.iconUrl" /> |
| | | <span class="m-t-8px h-16px text-12px leading-16px" :style="{ color: item.titleColor }"> |
| | | {{ item.title }} |
| | | </span> |
| | | <span class="m-t-6px h-12px text-10px leading-12px" :style="{ color: item.subtitleColor }"> |
| | | {{ item.subtitle }} |
| | | </span> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { MenuGridProperty } from './config' |
| | | /** å®«æ ¼å¯¼èª */ |
| | | defineOptions({ name: 'MenuGrid' }) |
| | | defineProps<{ property: MenuGridProperty }>() |
| | | </script> |
| | | |
| | | <style scoped lang="scss"></style> |
| New file |
| | |
| | | <template> |
| | | <ComponentContainerProperty v-model="formData.style"> |
| | | <!-- 表å --> |
| | | <el-form label-width="80px" :model="formData" class="m-t-8px"> |
| | | <el-form-item label="æ¯è¡æ°é" prop="column"> |
| | | <el-radio-group v-model="formData.column"> |
| | | <el-radio :value="3">3个</el-radio> |
| | | <el-radio :value="4">4个</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | |
| | | <el-card header="èå设置" class="property-group" shadow="never"> |
| | | <Draggable v-model="formData.list" :empty-item="EMPTY_MENU_GRID_ITEM_PROPERTY"> |
| | | <template #default="{ element }"> |
| | | <el-form-item label="徿 " prop="iconUrl"> |
| | | <UploadImg v-model="element.iconUrl" height="80px" width="80px"> |
| | | <template #tip> 建议尺寸ï¼44 * 44 </template> |
| | | </UploadImg> |
| | | </el-form-item> |
| | | <el-form-item label="æ é¢" prop="title"> |
| | | <InputWithColor v-model="element.title" v-model:color="element.titleColor" /> |
| | | </el-form-item> |
| | | <el-form-item label="坿 é¢" prop="subtitle"> |
| | | <InputWithColor v-model="element.subtitle" v-model:color="element.subtitleColor" /> |
| | | </el-form-item> |
| | | <el-form-item label="龿¥" prop="url"> |
| | | <AppLinkInput v-model="element.url" /> |
| | | </el-form-item> |
| | | <el-form-item label="æ¾ç¤ºè§æ " prop="badge.show"> |
| | | <el-switch v-model="element.badge.show" /> |
| | | </el-form-item> |
| | | <template v-if="element.badge.show"> |
| | | <el-form-item label="è§æ å
容" prop="badge.text"> |
| | | <InputWithColor |
| | | v-model="element.badge.text" |
| | | v-model:color="element.badge.textColor" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="èæ¯é¢è²" prop="badge.bgColor"> |
| | | <ColorInput v-model="element.badge.bgColor" /> |
| | | </el-form-item> |
| | | </template> |
| | | </template> |
| | | </Draggable> |
| | | </el-card> |
| | | </el-form> |
| | | </ComponentContainerProperty> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { useVModel } from '@vueuse/core' |
| | | import { |
| | | EMPTY_MENU_GRID_ITEM_PROPERTY, |
| | | MenuGridProperty |
| | | } from '@/components/DiyEditor/components/mobile/MenuGrid/config' |
| | | |
| | | /** å®«æ ¼å¯¼èªå±æ§é¢æ¿ */ |
| | | defineOptions({ name: 'MenuGridProperty' }) |
| | | |
| | | const props = defineProps<{ modelValue: MenuGridProperty }>() |
| | | const emit = defineEmits(['update:modelValue']) |
| | | const formData = useVModel(props, 'modelValue', emit) |
| | | </script> |
| | | |
| | | <style scoped lang="scss"></style> |
| New file |
| | |
| | | import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util' |
| | | import { cloneDeep } from 'lodash-es' |
| | | |
| | | /** å表导èªå±æ§ */ |
| | | export interface MenuListProperty { |
| | | // 导èªèåå表 |
| | | list: MenuListItemProperty[] |
| | | // ç»ä»¶æ ·å¼ |
| | | style: ComponentStyle |
| | | } |
| | | |
| | | /** å表导èªé¡¹ç®å±æ§ */ |
| | | export interface MenuListItemProperty { |
| | | // 徿 龿¥ |
| | | iconUrl: string |
| | | // æ é¢ |
| | | title: string |
| | | // æ é¢é¢è² |
| | | titleColor: string |
| | | // 坿 é¢ |
| | | subtitle: string |
| | | // 坿 é¢é¢è² |
| | | subtitleColor: string |
| | | // 龿¥ |
| | | url: string |
| | | } |
| | | |
| | | export const EMPTY_MENU_LIST_ITEM_PROPERTY = { |
| | | title: 'æ é¢', |
| | | titleColor: '#333', |
| | | subtitle: '坿 é¢', |
| | | subtitleColor: '#bbb' |
| | | } |
| | | |
| | | // å®ä¹ç»ä»¶ |
| | | export const component = { |
| | | id: 'MenuList', |
| | | name: 'å表导èª', |
| | | icon: 'fa-solid:list', |
| | | property: { |
| | | list: [cloneDeep(EMPTY_MENU_LIST_ITEM_PROPERTY)], |
| | | style: { |
| | | bgType: 'color', |
| | | bgColor: '#fff', |
| | | marginBottom: 8 |
| | | } as ComponentStyle |
| | | } |
| | | } as DiyComponent<MenuListProperty> |
| New file |
| | |
| | | <template> |
| | | <div class="min-h-42px flex flex-col"> |
| | | <div |
| | | v-for="(item, index) in property.list" |
| | | :key="index" |
| | | class="item h-42px flex flex-row items-center justify-between gap-4px p-x-12px" |
| | | > |
| | | <div class="flex flex-1 flex-row items-center gap-8px"> |
| | | <el-image v-if="item.iconUrl" class="h-16px w-16px" :src="item.iconUrl" /> |
| | | <span class="text-16px" :style="{ color: item.titleColor }">{{ item.title }}</span> |
| | | </div> |
| | | <div class="item-center flex flex-row justify-center gap-4px"> |
| | | <span class="text-12px" :style="{ color: item.subtitleColor }">{{ item.subtitle }}</span> |
| | | <Icon icon="ep-arrow-right" color="#000" :size="16" /> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { MenuListProperty } from './config' |
| | | /** åè¡¨å¯¼èª */ |
| | | defineOptions({ name: 'MenuList' }) |
| | | defineProps<{ property: MenuListProperty }>() |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .item + .item { |
| | | border-top: 1px solid #eee; |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <ComponentContainerProperty v-model="formData.style"> |
| | | <el-text tag="p"> èå设置 </el-text> |
| | | <el-text type="info" size="small"> æå¨å·¦ä¾§çå°åç¹å¯ä»¥è°æ´é¡ºåº </el-text> |
| | | |
| | | <!-- 表å --> |
| | | <el-form label-width="60px" :model="formData" class="m-t-8px"> |
| | | <Draggable v-model="formData.list" :empty-item="EMPTY_MENU_LIST_ITEM_PROPERTY"> |
| | | <template #default="{ element }"> |
| | | <el-form-item label="徿 " prop="iconUrl"> |
| | | <UploadImg v-model="element.iconUrl" height="80px" width="80px"> |
| | | <template #tip> 建议尺寸ï¼44 * 44 </template> |
| | | </UploadImg> |
| | | </el-form-item> |
| | | <el-form-item label="æ é¢" prop="title"> |
| | | <InputWithColor v-model="element.title" v-model:color="element.titleColor" /> |
| | | </el-form-item> |
| | | <el-form-item label="坿 é¢" prop="subtitle"> |
| | | <InputWithColor v-model="element.subtitle" v-model:color="element.subtitleColor" /> |
| | | </el-form-item> |
| | | <el-form-item label="龿¥" prop="url"> |
| | | <AppLinkInput v-model="element.url" /> |
| | | </el-form-item> |
| | | </template> |
| | | </Draggable> |
| | | </el-form> |
| | | </ComponentContainerProperty> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { useVModel } from '@vueuse/core' |
| | | import { |
| | | EMPTY_MENU_LIST_ITEM_PROPERTY, |
| | | MenuListProperty |
| | | } from '@/components/DiyEditor/components/mobile/MenuList/config' |
| | | |
| | | /** å表导èªå±æ§é¢æ¿ */ |
| | | defineOptions({ name: 'MenuListProperty' }) |
| | | |
| | | const props = defineProps<{ modelValue: MenuListProperty }>() |
| | | const emit = defineEmits(['update:modelValue']) |
| | | const formData = useVModel(props, 'modelValue', emit) |
| | | </script> |
| | | |
| | | <style scoped lang="scss"></style> |
| New file |
| | |
| | | import { ComponentStyle, DiyComponent } from '@/components/DiyEditor/util' |
| | | import { cloneDeep } from 'lodash-es' |
| | | |
| | | /** èå导èªå±æ§ */ |
| | | export interface MenuSwiperProperty { |
| | | // å¸å±ï¼ 徿 +æå | 徿 |
| | | layout: 'iconText' | 'icon' |
| | | // è¡æ° |
| | | row: number |
| | | // åæ° |
| | | column: number |
| | | // 导èªèåå表 |
| | | list: MenuSwiperItemProperty[] |
| | | // ç»ä»¶æ ·å¼ |
| | | style: ComponentStyle |
| | | } |
| | | /** èå导èªé¡¹ç®å±æ§ */ |
| | | export interface MenuSwiperItemProperty { |
| | | // 徿 龿¥ |
| | | iconUrl: string |
| | | // æ é¢ |
| | | title: string |
| | | // æ é¢é¢è² |
| | | titleColor: string |
| | | // 龿¥ |
| | | url: string |
| | | // è§æ |
| | | badge: { |
| | | // æ¯å¦æ¾ç¤º |
| | | show: boolean |
| | | // è§æ æå |
| | | text: string |
| | | // è§æ æåé¢è² |
| | | textColor: string |
| | | // è§æ èæ¯é¢è² |
| | | bgColor: string |
| | | } |
| | | } |
| | | |
| | | export const EMPTY_MENU_SWIPER_ITEM_PROPERTY = { |
| | | title: 'æ é¢', |
| | | titleColor: '#333', |
| | | badge: { |
| | | show: false, |
| | | textColor: '#fff', |
| | | bgColor: '#FF6000' |
| | | } |
| | | } as MenuSwiperItemProperty |
| | | |
| | | // å®ä¹ç»ä»¶ |
| | | export const component = { |
| | | id: 'MenuSwiper', |
| | | name: 'èå导èª', |
| | | icon: 'bi:grid-3x2-gap', |
| | | property: { |
| | | layout: 'iconText', |
| | | row: 1, |
| | | column: 3, |
| | | list: [cloneDeep(EMPTY_MENU_SWIPER_ITEM_PROPERTY)], |
| | | style: { |
| | | bgType: 'color', |
| | | bgColor: '#fff', |
| | | marginBottom: 8 |
| | | } as ComponentStyle |
| | | } |
| | | } as DiyComponent<MenuSwiperProperty> |
| src/components/DiyEditor/components/mobile/MenuSwiper/index.vue
src/components/DiyEditor/components/mobile/MenuSwiper/property.vue
src/components/DiyEditor/components/mobile/NavigationBar/components/CellProperty.vue
src/components/DiyEditor/components/mobile/NavigationBar/config.ts
src/components/DiyEditor/components/mobile/NavigationBar/index.vue
src/components/DiyEditor/components/mobile/NavigationBar/property.vue
src/components/DiyEditor/components/mobile/NoticeBar/config.ts
src/components/DiyEditor/components/mobile/NoticeBar/index.vue
src/components/DiyEditor/components/mobile/NoticeBar/property.vue
src/components/DiyEditor/components/mobile/PageConfig/config.ts
src/components/DiyEditor/components/mobile/PageConfig/property.vue
src/components/DiyEditor/components/mobile/Popover/config.ts
src/components/DiyEditor/components/mobile/Popover/index.vue
src/components/DiyEditor/components/mobile/Popover/property.vue
src/components/DiyEditor/components/mobile/ProductCard/config.ts
src/components/DiyEditor/components/mobile/ProductCard/index.vue
src/components/DiyEditor/components/mobile/ProductCard/property.vue
src/components/DiyEditor/components/mobile/ProductList/config.ts
src/components/DiyEditor/components/mobile/ProductList/index.vue
src/components/DiyEditor/components/mobile/ProductList/property.vue
src/components/DiyEditor/components/mobile/PromotionArticle/config.ts
src/components/DiyEditor/components/mobile/PromotionArticle/index.vue
src/components/DiyEditor/components/mobile/PromotionArticle/property.vue
src/components/DiyEditor/components/mobile/PromotionCombination/config.ts
src/components/DiyEditor/components/mobile/PromotionCombination/index.vue
src/components/DiyEditor/components/mobile/PromotionCombination/property.vue
src/components/DiyEditor/components/mobile/PromotionPoint/config.ts
src/components/DiyEditor/components/mobile/PromotionPoint/index.vue
src/components/DiyEditor/components/mobile/PromotionPoint/property.vue
src/components/DiyEditor/components/mobile/PromotionSeckill/config.ts
src/components/DiyEditor/components/mobile/PromotionSeckill/index.vue
src/components/DiyEditor/components/mobile/PromotionSeckill/property.vue
src/components/DiyEditor/components/mobile/SearchBar/config.ts
src/components/DiyEditor/components/mobile/SearchBar/index.vue
src/components/DiyEditor/components/mobile/SearchBar/property.vue
src/components/DiyEditor/components/mobile/TabBar/config.ts
src/components/DiyEditor/components/mobile/TabBar/index.vue
src/components/DiyEditor/components/mobile/TabBar/property.vue
src/components/DiyEditor/components/mobile/TitleBar/config.ts
src/components/DiyEditor/components/mobile/TitleBar/index.vue
src/components/DiyEditor/components/mobile/TitleBar/property.vue
src/components/DiyEditor/components/mobile/UserCard/config.ts
src/components/DiyEditor/components/mobile/UserCard/index.vue
src/components/DiyEditor/components/mobile/UserCard/property.vue
src/components/DiyEditor/components/mobile/UserCoupon/config.ts
src/components/DiyEditor/components/mobile/UserCoupon/index.vue
src/components/DiyEditor/components/mobile/UserCoupon/property.vue
src/components/DiyEditor/components/mobile/UserOrder/config.ts
src/components/DiyEditor/components/mobile/UserOrder/index.vue
src/components/DiyEditor/components/mobile/UserOrder/property.vue
src/components/DiyEditor/components/mobile/UserWallet/config.ts
src/components/DiyEditor/components/mobile/UserWallet/index.vue
src/components/DiyEditor/components/mobile/UserWallet/property.vue
src/components/DiyEditor/components/mobile/VideoPlayer/config.ts
src/components/DiyEditor/components/mobile/VideoPlayer/index.vue
src/components/DiyEditor/components/mobile/VideoPlayer/property.vue
src/components/DiyEditor/components/mobile/index.ts
src/components/DiyEditor/index.vue
src/components/DiyEditor/util.ts
src/components/DocAlert/index.vue
src/components/Draggable/index.vue
src/components/Echart/index.ts
src/components/Echart/src/Echart.vue
src/components/Editor/index.ts
src/components/Editor/src/Editor.vue
src/components/Error/index.ts
src/components/Error/src/Error.vue
src/components/Form/index.ts
src/components/Form/src/Form.vue
src/components/Form/src/componentMap.ts
src/components/Form/src/components/useRenderCheckbox.tsx
src/components/Form/src/components/useRenderRadio.tsx
src/components/Form/src/components/useRenderSelect.tsx
src/components/Form/src/helper.ts
src/components/Form/src/types.ts
src/components/FormCreate/index.ts
src/components/FormCreate/src/components/DictSelect.vue
src/components/FormCreate/src/components/useApiSelect.tsx
src/components/FormCreate/src/config/index.ts
src/components/FormCreate/src/config/selectRule.ts
src/components/FormCreate/src/config/useDictSelectRule.ts
src/components/FormCreate/src/config/useEditorRule.ts
src/components/FormCreate/src/config/useSelectRule.ts
src/components/FormCreate/src/config/useUploadFileRule.ts
src/components/FormCreate/src/config/useUploadImgRule.ts
src/components/FormCreate/src/config/useUploadImgsRule.ts
src/components/FormCreate/src/type/index.ts
src/components/FormCreate/src/useFormCreateDesigner.ts
src/components/FormCreate/src/utils/index.ts
src/components/Highlight/index.ts
src/components/Highlight/src/Highlight.vue
src/components/IFrame/index.ts
src/components/IFrame/src/IFrame.vue
src/components/Icon/index.ts
src/components/Icon/src/Icon.vue
src/components/Icon/src/IconSelect.vue
src/components/Icon/src/data.ts
src/components/ImageViewer/index.ts
src/components/ImageViewer/src/ImageViewer.vue
src/components/ImageViewer/src/types.ts
src/components/Infotip/index.ts
src/components/Infotip/src/Infotip.vue
src/components/InputPassword/index.ts
src/components/InputPassword/src/InputPassword.vue
src/components/InputWithColor/index.vue
src/components/JsonEditor/index.ts
src/components/JsonEditor/src/JsonEditor.vue
src/components/JsonEditor/types/index.ts
src/components/MagicCubeEditor/index.vue
src/components/MagicCubeEditor/util.ts
src/components/Map/index.vue
src/components/MarkdownView/index.vue
src/components/OperateLogV2/index.ts
src/components/OperateLogV2/src/OperateLogV2.vue
src/components/Pagination/index.vue
src/components/Qrcode/index.ts
src/components/Qrcode/src/Qrcode.vue
src/components/RouterSearch/index.vue
src/components/Search/index.ts
src/components/Search/src/Search.vue
src/components/ShortcutDateRangePicker/index.vue
src/components/SimpleProcessDesignerV2/src/NodeHandler.vue
src/components/SimpleProcessDesignerV2/src/ProcessNodeTree.vue
src/components/SimpleProcessDesignerV2/src/SimpleProcessDesigner.vue
src/components/SimpleProcessDesignerV2/src/SimpleProcessModel.vue
src/components/SimpleProcessDesignerV2/src/SimpleProcessViewer.vue
src/components/SimpleProcessDesignerV2/src/consts.ts
src/components/SimpleProcessDesignerV2/src/index.ts
src/components/SimpleProcessDesignerV2/src/node.ts
src/components/SimpleProcessDesignerV2/src/nodes-config/ChildProcessNodeConfig.vue
src/components/SimpleProcessDesignerV2/src/nodes-config/ConditionNodeConfig.vue
src/components/SimpleProcessDesignerV2/src/nodes-config/CopyTaskNodeConfig.vue
src/components/SimpleProcessDesignerV2/src/nodes-config/DelayTimerNodeConfig.vue
src/components/SimpleProcessDesignerV2/src/nodes-config/RouterNodeConfig.vue
src/components/SimpleProcessDesignerV2/src/nodes-config/StartUserNodeConfig.vue
src/components/SimpleProcessDesignerV2/src/nodes-config/TriggerNodeConfig.vue
src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue
src/components/SimpleProcessDesignerV2/src/nodes-config/components/Condition.vue
src/components/SimpleProcessDesignerV2/src/nodes-config/components/ConditionDialog.vue
src/components/SimpleProcessDesignerV2/src/nodes-config/components/HttpRequestParamSetting.vue
src/components/SimpleProcessDesignerV2/src/nodes-config/components/HttpRequestSetting.vue
src/components/SimpleProcessDesignerV2/src/nodes-config/components/UserTaskListener.vue
src/components/SimpleProcessDesignerV2/src/nodes/ChildProcessNode.vue
src/components/SimpleProcessDesignerV2/src/nodes/CopyTaskNode.vue
src/components/SimpleProcessDesignerV2/src/nodes/DelayTimerNode.vue
src/components/SimpleProcessDesignerV2/src/nodes/EndEventNode.vue
src/components/SimpleProcessDesignerV2/src/nodes/ExclusiveNode.vue
src/components/SimpleProcessDesignerV2/src/nodes/InclusiveNode.vue
src/components/SimpleProcessDesignerV2/src/nodes/ParallelNode.vue
src/components/SimpleProcessDesignerV2/src/nodes/RouterNode.vue
src/components/SimpleProcessDesignerV2/src/nodes/StartUserNode.vue
src/components/SimpleProcessDesignerV2/src/nodes/TriggerNode.vue
src/components/SimpleProcessDesignerV2/src/nodes/UserTaskNode.vue
src/components/SimpleProcessDesignerV2/src/utils.ts
src/components/SimpleProcessDesignerV2/theme/iconfont.ttf
src/components/SimpleProcessDesignerV2/theme/iconfont.woff
src/components/SimpleProcessDesignerV2/theme/iconfont.woff2
src/components/SimpleProcessDesignerV2/theme/simple-process-designer.scss
src/components/Sticky/index.ts
src/components/Sticky/src/Sticky.vue
src/components/SummaryCard/index.vue
src/components/Table/index.ts
src/components/Table/src/Table.vue
src/components/Table/src/TableSelectForm.vue
src/components/Table/src/helper.ts
src/components/Table/src/types.ts
src/components/Tinyflow/Tinyflow.vue
src/components/Tinyflow/ui/index.css
src/components/Tinyflow/ui/index.d.ts
src/components/Tinyflow/ui/index.js
src/components/Tinyflow/ui/index.umd.js
src/components/Tooltip/index.ts
src/components/Tooltip/src/Tooltip.vue
src/components/UploadFile/index.ts
src/components/UploadFile/src/UploadFile.vue
src/components/UploadFile/src/UploadImg.vue
src/components/UploadFile/src/UploadImgs.vue
src/components/UploadFile/src/useUpload.ts
src/components/UserSelectForm/index.vue
src/components/Verifition/index.ts
src/components/Verifition/src/Verify.vue
src/components/Verifition/src/Verify/VerifyPictureWord.vue
src/components/Verifition/src/Verify/VerifyPoints.vue
src/components/Verifition/src/Verify/VerifySlide.vue
src/components/Verifition/src/Verify/index.ts
src/components/Verifition/src/utils/ase.ts
src/components/Verifition/src/utils/util.ts
src/components/VerticalButtonGroup/index.vue
src/components/XButton/index.ts
src/components/XButton/src/XButton.vue
src/components/XButton/src/XTextButton.vue
src/components/bpmnProcessDesigner/package/designer/ProcessDesigner.vue
src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue
src/components/bpmnProcessDesigner/package/designer/index.ts
src/components/bpmnProcessDesigner/package/designer/index2.ts
src/components/bpmnProcessDesigner/package/designer/plugins/content-pad/contentPadProvider.js
src/components/bpmnProcessDesigner/package/designer/plugins/content-pad/index.js
src/components/bpmnProcessDesigner/package/designer/plugins/defaultEmpty.js
src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/activitiDescriptor.json
src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/camundaDescriptor.json
src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json
src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/activiti/activitiExtension.js
src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/activiti/index.js
src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/camunda/extension.js
src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/camunda/index.js
src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/flowable/flowableExtension.js
src/components/bpmnProcessDesigner/package/designer/plugins/extension-moddle/flowable/index.js
src/components/bpmnProcessDesigner/package/designer/plugins/palette/CustomPalette.js
src/components/bpmnProcessDesigner/package/designer/plugins/palette/index.js
src/components/bpmnProcessDesigner/package/designer/plugins/palette/paletteProvider.js
src/components/bpmnProcessDesigner/package/designer/plugins/translate/customTranslate.js
src/components/bpmnProcessDesigner/package/designer/plugins/translate/zh.js
src/components/bpmnProcessDesigner/package/index.ts
src/components/bpmnProcessDesigner/package/palette/ProcessPalette.vue
src/components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue
src/components/bpmnProcessDesigner/package/penal/base/ElementBaseInfo.vue
src/components/bpmnProcessDesigner/package/penal/custom-config/ElementCustomConfig.vue
src/components/bpmnProcessDesigner/package/penal/custom-config/components/BoundaryEventTimer.vue
src/components/bpmnProcessDesigner/package/penal/custom-config/components/UserTaskCustomConfig.vue
src/components/bpmnProcessDesigner/package/penal/custom-config/data.ts
src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue
src/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue
src/components/bpmnProcessDesigner/package/penal/index.js
src/components/bpmnProcessDesigner/package/penal/listeners/ElementListeners.vue
src/components/bpmnProcessDesigner/package/penal/listeners/ProcessListenerDialog.vue
src/components/bpmnProcessDesigner/package/penal/listeners/UserTaskListeners.vue
src/components/bpmnProcessDesigner/package/penal/listeners/template.js
src/components/bpmnProcessDesigner/package/penal/listeners/utilSelf.ts
src/components/bpmnProcessDesigner/package/penal/multi-instance/ElementMultiInstance.vue
src/components/bpmnProcessDesigner/package/penal/other/ElementOtherConfig.vue
src/components/bpmnProcessDesigner/package/penal/properties/ElementProperties.vue
src/components/bpmnProcessDesigner/package/penal/signal-message/SignalAndMessage.vue
src/components/bpmnProcessDesigner/package/penal/task/ElementTask.vue
src/components/bpmnProcessDesigner/package/penal/task/data.ts
src/components/bpmnProcessDesigner/package/penal/task/task-components/CallActivity.vue
src/components/bpmnProcessDesigner/package/penal/task/task-components/HttpHeaderEditor.vue
src/components/bpmnProcessDesigner/package/penal/task/task-components/ProcessExpressionDialog.vue
src/components/bpmnProcessDesigner/package/penal/task/task-components/ReceiveTask.vue
src/components/bpmnProcessDesigner/package/penal/task/task-components/ScriptTask.vue
src/components/bpmnProcessDesigner/package/penal/task/task-components/ServiceTask.vue
src/components/bpmnProcessDesigner/package/penal/task/task-components/UserTask.vue
src/components/bpmnProcessDesigner/package/penal/time-event-config/CycleConfig.vue
src/components/bpmnProcessDesigner/package/penal/time-event-config/DurationConfig.vue
src/components/bpmnProcessDesigner/package/penal/time-event-config/TimeEventConfig.vue
src/components/bpmnProcessDesigner/package/theme/element-variables.scss
src/components/bpmnProcessDesigner/package/theme/index.scss
src/components/bpmnProcessDesigner/package/theme/process-designer.scss
src/components/bpmnProcessDesigner/package/theme/process-panel.scss
src/components/bpmnProcessDesigner/package/utils.ts
src/components/bpmnProcessDesigner/src/highlight/index.js
src/components/bpmnProcessDesigner/src/modules/custom-renderer/CustomRenderer.js
src/components/bpmnProcessDesigner/src/modules/custom-renderer/index.js
src/components/bpmnProcessDesigner/src/modules/rules/CustomRules.js
src/components/bpmnProcessDesigner/src/modules/rules/index.js
src/components/bpmnProcessDesigner/src/translations.ts
src/components/bpmnProcessDesigner/src/utils/directive/clickOutSide.js
src/components/bpmnProcessDesigner/src/utils/index.js
src/components/bpmnProcessDesigner/src/utils/xml2json.js
src/components/index.ts
src/config/axios/config.ts
src/config/axios/errorCode.ts
src/config/axios/index.ts
src/config/axios/service.ts
src/directives/index.ts
src/directives/permission/hasPermi.ts
src/directives/permission/hasRole.ts
src/hooks/event/useScrollTo.ts
src/hooks/web/useCache.ts
src/hooks/web/useConfigGlobal.ts
src/hooks/web/useCrudSchemas.ts
src/hooks/web/useDesign.ts
src/hooks/web/useEmitt.ts
src/hooks/web/useForm.ts
src/hooks/web/useGuide.ts
src/hooks/web/useI18n.ts
src/hooks/web/useIcon.ts
src/hooks/web/useLocale.ts
src/hooks/web/useMessage.ts
src/hooks/web/useNProgress.ts
src/hooks/web/useNetwork.ts
src/hooks/web/useNow.ts
src/hooks/web/usePageLoading.ts
src/hooks/web/useTable.ts
src/hooks/web/useTagsView.ts
src/hooks/web/useTimeAgo.ts
src/hooks/web/useTitle.ts
src/hooks/web/useValidator.ts
src/hooks/web/useWatermark.ts
src/layout/Layout.vue
src/layout/components/AppView.vue
src/layout/components/Breadcrumb/index.ts
src/layout/components/Breadcrumb/src/Breadcrumb.vue
src/layout/components/Breadcrumb/src/helper.ts
src/layout/components/Collapse/index.ts
src/layout/components/Collapse/src/Collapse.vue
src/layout/components/ContextMenu/index.ts
src/layout/components/ContextMenu/src/ContextMenu.vue
src/layout/components/Footer/index.ts
src/layout/components/Footer/src/Footer.vue
src/layout/components/LocaleDropdown/index.ts
src/layout/components/LocaleDropdown/src/LocaleDropdown.vue
src/layout/components/Logo/index.ts
src/layout/components/Logo/src/Logo.vue
src/layout/components/Menu/index.ts
src/layout/components/Menu/src/Menu.vue
src/layout/components/Menu/src/components/useRenderMenuItem.tsx
src/layout/components/Menu/src/components/useRenderMenuTitle.tsx
src/layout/components/Menu/src/helper.ts
src/layout/components/Message/index.ts
src/layout/components/Message/src/Message.vue
src/layout/components/Screenfull/index.ts
src/layout/components/Screenfull/src/Screenfull.vue
src/layout/components/Setting/index.ts
src/layout/components/Setting/src/Setting.vue
src/layout/components/Setting/src/components/ColorRadioPicker.vue
src/layout/components/Setting/src/components/InterfaceDisplay.vue
src/layout/components/Setting/src/components/LayoutRadioPicker.vue
src/layout/components/SizeDropdown/index.ts
src/layout/components/SizeDropdown/src/SizeDropdown.vue
src/layout/components/TabMenu/index.ts
src/layout/components/TabMenu/src/TabMenu.vue
src/layout/components/TabMenu/src/helper.ts
src/layout/components/TagsView/index.ts
src/layout/components/TagsView/src/TagsView.vue
src/layout/components/TagsView/src/helper.ts
src/layout/components/TenantVisit/index.vue
src/layout/components/ThemeSwitch/index.ts
src/layout/components/ThemeSwitch/src/ThemeSwitch.vue
src/layout/components/ToolHeader.vue
src/layout/components/UserInfo/index.ts
src/layout/components/UserInfo/src/UserInfo.vue
src/layout/components/UserInfo/src/components/LockDialog.vue
src/layout/components/UserInfo/src/components/LockPage.vue
src/layout/components/useRenderLayout.tsx
src/locales/en.ts
src/locales/zh-CN.ts
src/main.ts
src/permission.ts
src/plugins/animate.css/index.ts
src/plugins/echarts/index.ts
src/plugins/elementPlus/index.ts
src/plugins/formCreate/index.ts
src/plugins/svgIcon/index.ts
src/plugins/tongji/index.ts
src/plugins/unocss/index.ts
src/plugins/vueI18n/helper.ts
src/plugins/vueI18n/index.ts
src/router/index.ts
src/router/modules/remaining.ts
src/store/index.ts
src/store/modules/app.ts
src/store/modules/bpm/simpleWorkflow.ts
src/store/modules/dict.ts
src/store/modules/locale.ts
src/store/modules/lock.ts
src/store/modules/mall/kefu.ts
src/store/modules/permission.ts
src/store/modules/tagsView.ts
src/store/modules/user.ts
src/styles/FormCreate/fonts/fontello.woff
src/styles/FormCreate/index.scss
src/styles/global.module.scss
src/styles/index.scss
src/styles/theme.scss
src/styles/var.css
src/styles/variables.scss
src/types/components.d.ts
src/types/configGlobal.d.ts
src/types/contextMenu.d.ts
src/types/descriptions.d.ts
src/types/elementPlus.d.ts
src/types/form.d.ts
src/types/icon.d.ts
src/types/infoTip.d.ts
src/types/layout.d.ts
src/types/localeDropdown.d.ts
src/types/qrcode.d.ts
src/types/table.d.ts
src/types/theme.d.ts
src/utils/Logger.ts
src/utils/auth.ts
src/utils/color.ts
src/utils/constants.ts
src/utils/cron.ts
src/utils/dateUtil.ts
src/utils/dict.ts
src/utils/domUtils.ts
src/utils/download.ts
src/utils/encrypt.ts
src/utils/file.ts
src/utils/filt.ts
src/utils/formCreate.ts
src/utils/formRules.ts
src/utils/formatTime.ts
src/utils/formatter.ts
src/utils/index.ts
src/utils/is.ts
src/utils/jsencrypt.ts
src/utils/permission.ts
src/utils/propTypes.ts
src/utils/routerHelper.ts
src/utils/tree.ts
src/utils/tsxHelper.ts
src/views/Error/403.vue
src/views/Error/404.vue
src/views/Error/500.vue
src/views/Home/Index.vue
src/views/Home/Index2.vue
src/views/Home/echarts-data.ts
src/views/Home/types.ts
src/views/Login/Login.vue
src/views/Login/SocialLogin.vue
src/views/Login/components/ForgetPasswordForm.vue
src/views/Login/components/LoginForm.vue
src/views/Login/components/LoginFormTitle.vue
src/views/Login/components/MobileForm.vue
src/views/Login/components/QrCodeForm.vue
src/views/Login/components/RegisterForm.vue
src/views/Login/components/SSOLogin.vue
src/views/Login/components/index.ts
src/views/Login/components/useLogin.ts
src/views/Profile/Index.vue
src/views/Profile/components/BasicInfo.vue
src/views/Profile/components/ProfileUser.vue
src/views/Profile/components/ResetPwd.vue
src/views/Profile/components/UserAvatar.vue
src/views/Profile/components/UserSocial.vue
src/views/Profile/components/index.ts
src/views/Redirect/Redirect.vue
src/views/ai/chat/index/components/conversation/ConversationList.vue
src/views/ai/chat/index/components/conversation/ConversationUpdateForm.vue
src/views/ai/chat/index/components/message/MessageFileUpload.vue
src/views/ai/chat/index/components/message/MessageFiles.vue
src/views/ai/chat/index/components/message/MessageKnowledge.vue
src/views/ai/chat/index/components/message/MessageList.vue
src/views/ai/chat/index/components/message/MessageListEmpty.vue
src/views/ai/chat/index/components/message/MessageLoading.vue
src/views/ai/chat/index/components/message/MessageNewConversation.vue
src/views/ai/chat/index/components/message/MessageReasoning.vue
src/views/ai/chat/index/components/message/MessageWebSearch.vue
src/views/ai/chat/index/components/role/RoleCategoryList.vue
src/views/ai/chat/index/components/role/RoleList.vue
src/views/ai/chat/index/components/role/RoleRepository.vue
src/views/ai/chat/index/index.vue
src/views/ai/chat/manager/ChatConversationList.vue
src/views/ai/chat/manager/ChatMessageList.vue
src/views/ai/chat/manager/index.vue
src/views/ai/image/index/components/ImageCard.vue
src/views/ai/image/index/components/ImageDetail.vue
src/views/ai/image/index/components/ImageList.vue
src/views/ai/image/index/components/common/index.vue
src/views/ai/image/index/components/dall3/index.vue
src/views/ai/image/index/components/midjourney/index.vue
src/views/ai/image/index/components/stableDiffusion/index.vue
src/views/ai/image/index/index.vue
src/views/ai/image/manager/index.vue
src/views/ai/image/square/index.vue
src/views/ai/knowledge/document/form/ProcessStep.vue
src/views/ai/knowledge/document/form/SplitStep.vue
src/views/ai/knowledge/document/form/UploadStep.vue
src/views/ai/knowledge/document/form/index.vue
src/views/ai/knowledge/document/index.vue
src/views/ai/knowledge/knowledge/KnowledgeForm.vue
src/views/ai/knowledge/knowledge/index.vue
src/views/ai/knowledge/knowledge/retrieval/index.vue
src/views/ai/knowledge/segment/KnowledgeSegmentForm.vue
src/views/ai/knowledge/segment/index.vue
src/views/ai/mindmap/index/components/Left.vue
src/views/ai/mindmap/index/components/Right.vue
src/views/ai/mindmap/index/index.vue
src/views/ai/mindmap/manager/index.vue
src/views/ai/model/apiKey/ApiKeyForm.vue
src/views/ai/model/apiKey/index.vue
src/views/ai/model/chatRole/ChatRoleForm.vue
src/views/ai/model/chatRole/index.vue
src/views/ai/model/model/ModelForm.vue
src/views/ai/model/model/index.vue
src/views/ai/model/tool/ToolForm.vue
src/views/ai/model/tool/index.vue
src/views/ai/music/index/index.vue
src/views/ai/music/index/list/audioBar/index.vue
src/views/ai/music/index/list/index.vue
src/views/ai/music/index/list/songCard/index.vue
src/views/ai/music/index/list/songInfo/index.vue
src/views/ai/music/index/mode/desc.vue
src/views/ai/music/index/mode/index.vue
src/views/ai/music/index/mode/lyric.vue
src/views/ai/music/index/title/index.vue
src/views/ai/music/manager/index.vue
src/views/ai/utils/constants.ts
src/views/ai/utils/utils.ts
src/views/ai/workflow/form/BasicInfo.vue
src/views/ai/workflow/form/WorkflowDesign.vue
src/views/ai/workflow/form/index.vue
src/views/ai/workflow/index.vue
src/views/ai/write/index/components/Left.vue
src/views/ai/write/index/components/Right.vue
src/views/ai/write/index/components/Tag.vue
src/views/ai/write/index/index.vue
src/views/ai/write/manager/index.vue
src/views/bpm/category/CategoryForm.vue
src/views/bpm/category/index.vue
src/views/bpm/form/editor/index.vue
src/views/bpm/form/index.vue
src/views/bpm/group/UserGroupForm.vue
src/views/bpm/group/index.vue
src/views/bpm/model/CategoryDraggableModel.vue
src/views/bpm/model/definition/index.vue
src/views/bpm/model/form/BasicInfo.vue
src/views/bpm/model/form/ExtraSettings.vue
src/views/bpm/model/form/FormDesign.vue
src/views/bpm/model/form/PrintTemplate/Index.vue
src/views/bpm/model/form/PrintTemplate/MentionModal.vue
src/views/bpm/model/form/PrintTemplate/index.ts
src/views/bpm/model/form/PrintTemplate/module/elem-to-html.ts
src/views/bpm/model/form/PrintTemplate/module/index.ts
src/views/bpm/model/form/PrintTemplate/module/menu/ProcessRecordMenu.ts
src/views/bpm/model/form/PrintTemplate/module/parse-elem-html.ts
src/views/bpm/model/form/PrintTemplate/module/plugin.ts
src/views/bpm/model/form/PrintTemplate/module/render-elem.ts
src/views/bpm/model/form/PrintTemplate/module/utils/dom.ts
src/views/bpm/model/form/ProcessDesign.vue
src/views/bpm/model/form/editor/index.vue
src/views/bpm/model/form/index.vue
src/views/bpm/model/index.vue
src/views/bpm/oa/leave/create.vue
src/views/bpm/oa/leave/detail.vue
src/views/bpm/oa/leave/index.vue
src/views/bpm/processExpression/ProcessExpressionForm.vue
src/views/bpm/processExpression/index.vue
src/views/bpm/processInstance/create/ProcessDefinitionDetail.vue
src/views/bpm/processInstance/create/index.vue
src/views/bpm/processInstance/detail/PrintDialog.vue
src/views/bpm/processInstance/detail/ProcessInstanceBpmnViewer.vue
src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue
src/views/bpm/processInstance/detail/ProcessInstanceSimpleViewer.vue
src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue
src/views/bpm/processInstance/detail/ProcessInstanceTimeline.vue
src/views/bpm/processInstance/detail/SignDialog.vue
src/views/bpm/processInstance/detail/index.vue
src/views/bpm/processInstance/index.vue
src/views/bpm/processInstance/manager/index.vue
src/views/bpm/processInstance/report/index.vue
src/views/bpm/processListener/ProcessListenerForm.vue
src/views/bpm/processListener/index.vue
src/views/bpm/simple/SimpleModelDesign.vue
src/views/bpm/task/copy/index.vue
src/views/bpm/task/done/index.vue
src/views/bpm/task/manager/index.vue
src/views/bpm/task/todo/index.vue
src/views/crm/backlog/components/ClueFollowList.vue
src/views/crm/backlog/components/ContractAuditList.vue
src/views/crm/backlog/components/ContractRemindList.vue
src/views/crm/backlog/components/CustomerFollowList.vue
src/views/crm/backlog/components/CustomerPutPoolRemindList.vue
src/views/crm/backlog/components/CustomerTodayContactList.vue
src/views/crm/backlog/components/ReceivableAuditList.vue
src/views/crm/backlog/components/ReceivablePlanRemindList.vue
src/views/crm/backlog/components/common.ts
src/views/crm/backlog/index.vue
src/views/crm/business/BusinessForm.vue
src/views/crm/business/BusinessUpdateStatusForm.vue
src/views/crm/business/components/BusinessList.vue
src/views/crm/business/components/BusinessListModal.vue
src/views/crm/business/components/BusinessProductForm.vue
src/views/crm/business/detail/BusinessDetailsHeader.vue
src/views/crm/business/detail/BusinessDetailsInfo.vue
src/views/crm/business/detail/BusinessProductList.vue
src/views/crm/business/detail/index.vue
src/views/crm/business/index.vue
src/views/crm/business/status/BusinessStatusForm.vue
src/views/crm/business/status/index.vue
src/views/crm/clue/ClueForm.vue
src/views/crm/clue/detail/ClueDetailsHeader.vue
src/views/crm/clue/detail/ClueDetailsInfo.vue
src/views/crm/clue/detail/index.vue
src/views/crm/clue/index.vue
src/views/crm/contact/ContactForm.vue
src/views/crm/contact/components/ContactList.vue
src/views/crm/contact/components/ContactListModal.vue
src/views/crm/contact/detail/ContactDetailsHeader.vue
src/views/crm/contact/detail/ContactDetailsInfo.vue
src/views/crm/contact/detail/index.vue
src/views/crm/contact/index.vue
src/views/crm/contract/ContractForm.vue
src/views/crm/contract/components/ContractList.vue
src/views/crm/contract/components/ContractProductForm.vue
src/views/crm/contract/config/index.vue
src/views/crm/contract/detail/ContractDetailsHeader.vue
src/views/crm/contract/detail/ContractDetailsInfo.vue
src/views/crm/contract/detail/ContractProductList.vue
src/views/crm/contract/detail/index.vue
src/views/crm/contract/index.vue
src/views/crm/customer/CustomerForm.vue
src/views/crm/customer/CustomerImportForm.vue
src/views/crm/customer/detail/CustomerDetailsHeader.vue
src/views/crm/customer/detail/CustomerDetailsInfo.vue
src/views/crm/customer/detail/index.vue
src/views/crm/customer/index.vue
src/views/crm/customer/limitConfig/CustomerLimitConfigForm.vue
src/views/crm/customer/limitConfig/CustomerLimitConfigList.vue
src/views/crm/customer/limitConfig/index.vue
src/views/crm/customer/pool/CustomerDistributeForm.vue
src/views/crm/customer/pool/index.vue
src/views/crm/customer/poolConfig/index.vue
src/views/crm/followup/FollowUpRecordForm.vue
src/views/crm/followup/components/FollowUpRecordBusinessForm.vue
src/views/crm/followup/components/FollowUpRecordContactForm.vue
src/views/crm/followup/index.vue
src/views/crm/permission/components/PermissionForm.vue
src/views/crm/permission/components/PermissionList.vue
src/views/crm/permission/components/TransferForm.vue
src/views/crm/product/ProductForm.vue
src/views/crm/product/category/ProductCategoryForm.vue
src/views/crm/product/category/index.vue
src/views/crm/product/detail/ProductDetailsHeader.vue
src/views/crm/product/detail/ProductDetailsInfo.vue
src/views/crm/product/detail/index.vue
src/views/crm/product/index.vue
src/views/crm/receivable/ReceivableForm.vue
src/views/crm/receivable/components/ReceivableList.vue
src/views/crm/receivable/detail/ReceivableDetailsHeader.vue
src/views/crm/receivable/detail/ReceivableDetailsInfo.vue
src/views/crm/receivable/detail/index.vue
src/views/crm/receivable/index.vue
src/views/crm/receivable/plan/ReceivablePlanForm.vue
src/views/crm/receivable/plan/components/ReceivablePlanList.vue
src/views/crm/receivable/plan/detail/ReceivablePlanDetailsHeader.vue
src/views/crm/receivable/plan/detail/ReceivablePlanDetailsInfo.vue
src/views/crm/receivable/plan/detail/index.vue
src/views/crm/receivable/plan/index.vue
src/views/crm/statistics/customer/components/CustomerConversionStat.vue
src/views/crm/statistics/customer/components/CustomerDealCycleByArea.vue
src/views/crm/statistics/customer/components/CustomerDealCycleByProduct.vue
src/views/crm/statistics/customer/components/CustomerDealCycleByUser.vue
src/views/crm/statistics/customer/components/CustomerFollowUpSummary.vue
src/views/crm/statistics/customer/components/CustomerFollowUpType.vue
src/views/crm/statistics/customer/components/CustomerPoolSummary.vue
src/views/crm/statistics/customer/components/CustomerSummary.vue
src/views/crm/statistics/customer/index.vue
src/views/crm/statistics/funnel/components/BusinessInversionRateSummary.vue
src/views/crm/statistics/funnel/components/BusinessSummary.vue
src/views/crm/statistics/funnel/components/FunnelBusiness.vue
src/views/crm/statistics/funnel/index.vue
src/views/crm/statistics/performance/components/ContractCountPerformance.vue
src/views/crm/statistics/performance/components/ContractPricePerformance.vue
src/views/crm/statistics/performance/components/ReceivablePricePerformance.vue
src/views/crm/statistics/performance/index.vue
src/views/crm/statistics/portrait/components/PortraitCustomerArea.vue
src/views/crm/statistics/portrait/components/PortraitCustomerIndustry.vue
src/views/crm/statistics/portrait/components/PortraitCustomerLevel.vue
src/views/crm/statistics/portrait/components/PortraitCustomerSource.vue
src/views/crm/statistics/portrait/index.vue
src/views/crm/statistics/rank/components/ContactCountRank.vue
src/views/crm/statistics/rank/components/ContractCountRank.vue
src/views/crm/statistics/rank/components/ContractPriceRank.vue
src/views/crm/statistics/rank/components/CustomerCountRank.vue
src/views/crm/statistics/rank/components/FollowCountRank.vue
src/views/crm/statistics/rank/components/FollowCustomerCountRank.vue
src/views/crm/statistics/rank/components/ProductSalesRank.vue
src/views/crm/statistics/rank/components/ReceivablePriceRank.vue
src/views/crm/statistics/rank/index.vue
src/views/erp/finance/account/AccountForm.vue
src/views/erp/finance/account/index.vue
src/views/erp/finance/payment/FinancePaymentForm.vue
src/views/erp/finance/payment/components/FinancePaymentItemForm.vue
src/views/erp/finance/payment/index.vue
src/views/erp/finance/receipt/FinanceReceiptForm.vue
src/views/erp/finance/receipt/components/FinanceReceiptItemForm.vue
src/views/erp/finance/receipt/index.vue
src/views/erp/home/components/SummaryCard.vue
src/views/erp/home/components/TimeSummaryChart.vue
src/views/erp/home/index.vue
src/views/erp/product/category/ProductCategoryForm.vue
src/views/erp/product/category/index.vue
src/views/erp/product/product/ProductForm.vue
src/views/erp/product/product/index.vue
src/views/erp/product/unit/ProductUnitForm.vue
src/views/erp/product/unit/index.vue
src/views/erp/purchase/in/PurchaseInForm.vue
src/views/erp/purchase/in/components/PurchaseInItemForm.vue
src/views/erp/purchase/in/components/PurchaseInPaymentEnableList.vue
src/views/erp/purchase/in/index.vue
src/views/erp/purchase/order/PurchaseOrderForm.vue
src/views/erp/purchase/order/components/PurchaseOrderInEnableList.vue
src/views/erp/purchase/order/components/PurchaseOrderItemForm.vue
src/views/erp/purchase/order/components/PurchaseOrderReturnEnableList.vue
src/views/erp/purchase/order/index.vue
src/views/erp/purchase/return/PurchaseReturnForm.vue
src/views/erp/purchase/return/components/PurchaseReturnItemForm.vue
src/views/erp/purchase/return/components/PurchaseReturnRefundEnableList.vue
src/views/erp/purchase/return/index.vue
src/views/erp/purchase/supplier/SupplierForm.vue
src/views/erp/purchase/supplier/index.vue
src/views/erp/sale/customer/CustomerForm.vue
src/views/erp/sale/customer/index.vue
src/views/erp/sale/order/SaleOrderForm.vue
src/views/erp/sale/order/components/SaleOrderItemForm.vue
src/views/erp/sale/order/components/SaleOrderOutEnableList.vue
src/views/erp/sale/order/components/SaleOrderReturnEnableList.vue
src/views/erp/sale/order/index.vue
src/views/erp/sale/out/SaleOutForm.vue
src/views/erp/sale/out/components/SaleOutItemForm.vue
src/views/erp/sale/out/components/SaleOutReceiptEnableList.vue
src/views/erp/sale/out/index.vue
src/views/erp/sale/return/SaleReturnForm.vue
src/views/erp/sale/return/components/SaleReturnItemForm.vue
src/views/erp/sale/return/components/SaleReturnRefundEnableList.vue
src/views/erp/sale/return/index.vue
src/views/erp/stock/check/StockCheckForm.vue
src/views/erp/stock/check/components/StockCheckItemForm.vue
src/views/erp/stock/check/index.vue
src/views/erp/stock/in/StockInForm.vue
src/views/erp/stock/in/components/StockInItemForm.vue
src/views/erp/stock/in/index.vue
src/views/erp/stock/move/StockMoveForm.vue
src/views/erp/stock/move/components/StockMoveItemForm.vue
src/views/erp/stock/move/index.vue
src/views/erp/stock/out/StockOutForm.vue
src/views/erp/stock/out/components/StockOutItemForm.vue
src/views/erp/stock/out/index.vue
src/views/erp/stock/record/index.vue
src/views/erp/stock/stock/index.vue
src/views/erp/stock/warehouse/WarehouseForm.vue
src/views/erp/stock/warehouse/index.vue
src/views/infra/apiAccessLog/ApiAccessLogDetail.vue
src/views/infra/apiAccessLog/index.vue
src/views/infra/apiErrorLog/ApiErrorLogDetail.vue
src/views/infra/apiErrorLog/index.vue
src/views/infra/build/index.vue
src/views/infra/codegen/EditTable.vue
src/views/infra/codegen/ImportTable.vue
src/views/infra/codegen/PreviewCode.vue
src/views/infra/codegen/components/BasicInfoForm.vue
src/views/infra/codegen/components/ColumInfoForm.vue
src/views/infra/codegen/components/GenerateInfoForm.vue
src/views/infra/codegen/components/index.ts
src/views/infra/codegen/index.vue
src/views/infra/config/ConfigForm.vue
src/views/infra/config/index.vue
src/views/infra/dataSourceConfig/DataSourceConfigForm.vue
src/views/infra/dataSourceConfig/index.vue
src/views/infra/demo/demo01/Demo01ContactForm.vue
src/views/infra/demo/demo01/index.vue
src/views/infra/demo/demo02/Demo02CategoryForm.vue
src/views/infra/demo/demo02/index.vue
src/views/infra/demo/demo03/erp/Demo03StudentForm.vue
src/views/infra/demo/demo03/erp/components/Demo03CourseForm.vue
src/views/infra/demo/demo03/erp/components/Demo03CourseList.vue
src/views/infra/demo/demo03/erp/components/Demo03GradeForm.vue
src/views/infra/demo/demo03/erp/components/Demo03GradeList.vue
src/views/infra/demo/demo03/erp/index.vue
src/views/infra/demo/demo03/inner/Demo03StudentForm.vue
src/views/infra/demo/demo03/inner/components/Demo03CourseForm.vue
src/views/infra/demo/demo03/inner/components/Demo03CourseList.vue
src/views/infra/demo/demo03/inner/components/Demo03GradeForm.vue
src/views/infra/demo/demo03/inner/components/Demo03GradeList.vue
src/views/infra/demo/demo03/inner/index.vue
src/views/infra/demo/demo03/normal/Demo03StudentForm.vue
src/views/infra/demo/demo03/normal/components/Demo03CourseForm.vue
src/views/infra/demo/demo03/normal/components/Demo03GradeForm.vue
src/views/infra/demo/demo03/normal/index.vue
src/views/infra/druid/index.vue
src/views/infra/file/FileForm.vue
src/views/infra/file/index.vue
src/views/infra/fileConfig/FileConfigForm.vue
src/views/infra/fileConfig/index.vue
src/views/infra/job/JobDetail.vue
src/views/infra/job/JobForm.vue
src/views/infra/job/index.vue
src/views/infra/job/logger/JobLogDetail.vue
src/views/infra/job/logger/index.vue
src/views/infra/redis/index.vue
src/views/infra/server/index.vue
src/views/infra/skywalking/index.vue
src/views/infra/swagger/index.vue
src/views/infra/webSocket/index.vue
src/views/iot/alert/config/AlertConfigForm.vue
src/views/iot/alert/config/index.vue
src/views/iot/alert/record/index.vue
src/views/iot/device/device/DeviceForm.vue
src/views/iot/device/device/DeviceGroupForm.vue
src/views/iot/device/device/DeviceImportForm.vue
src/views/iot/device/device/components/DeviceTableSelect.vue
src/views/iot/device/device/detail/DeviceDetailConfig.vue
src/views/iot/device/device/detail/DeviceDetailsHeader.vue
src/views/iot/device/device/detail/DeviceDetailsInfo.vue
src/views/iot/device/device/detail/DeviceDetailsMessage.vue
src/views/iot/device/device/detail/DeviceDetailsSimulator.vue
src/views/iot/device/device/detail/DeviceDetailsThingModel.vue
src/views/iot/device/device/detail/DeviceDetailsThingModelEvent.vue
src/views/iot/device/device/detail/DeviceDetailsThingModelProperty.vue
src/views/iot/device/device/detail/DeviceDetailsThingModelPropertyHistory.vue
src/views/iot/device/device/detail/DeviceDetailsThingModelService.vue
src/views/iot/device/device/detail/index.vue
src/views/iot/device/device/index.vue
src/views/iot/device/group/DeviceGroupForm.vue
src/views/iot/device/group/index.vue
src/views/iot/home/components/ComparisonCard.vue
src/views/iot/home/components/DeviceCountCard.vue
src/views/iot/home/components/DeviceStateCountCard.vue
src/views/iot/home/components/MessageTrendCard.vue
src/views/iot/home/index.vue
src/views/iot/ota/firmware/OtaFirmwareForm.vue
src/views/iot/ota/firmware/detail/index.vue
src/views/iot/ota/firmware/index.vue
src/views/iot/ota/task/OtaTaskDetail.vue
src/views/iot/ota/task/OtaTaskForm.vue
src/views/iot/ota/task/OtaTaskList.vue
src/views/iot/product/category/ProductCategoryForm.vue
src/views/iot/product/category/index.vue
src/views/iot/product/product/ProductForm.vue
src/views/iot/product/product/components/ProductTableSelect.vue
src/views/iot/product/product/detail/ProductDetailsHeader.vue
src/views/iot/product/product/detail/ProductDetailsInfo.vue
src/views/iot/product/product/detail/index.vue
src/views/iot/product/product/index.vue
src/views/iot/rule/data/index.vue
src/views/iot/rule/data/rule/DataRuleForm.vue
src/views/iot/rule/data/rule/components/SourceConfigForm.vue
src/views/iot/rule/data/rule/index.vue
src/views/iot/rule/data/sink/DataSinkForm.vue
src/views/iot/rule/data/sink/config/HttpConfigForm.vue
src/views/iot/rule/data/sink/config/KafkaMQConfigForm.vue
src/views/iot/rule/data/sink/config/MqttConfigForm.vue
src/views/iot/rule/data/sink/config/RabbitMQConfigForm.vue
src/views/iot/rule/data/sink/config/RedisStreamConfigForm.vue
src/views/iot/rule/data/sink/config/RocketMQConfigForm.vue
src/views/iot/rule/data/sink/config/components/KeyValueEditor.vue
src/views/iot/rule/data/sink/config/index.ts
src/views/iot/rule/data/sink/index.vue
src/views/iot/rule/scene/form/RuleSceneForm.vue
src/views/iot/rule/scene/form/configs/AlertConfig.vue
src/views/iot/rule/scene/form/configs/ConditionConfig.vue
src/views/iot/rule/scene/form/configs/CurrentTimeConditionConfig.vue
src/views/iot/rule/scene/form/configs/DeviceControlConfig.vue
src/views/iot/rule/scene/form/configs/DeviceTriggerConfig.vue
src/views/iot/rule/scene/form/configs/MainConditionInnerConfig.vue
src/views/iot/rule/scene/form/configs/SubConditionGroupConfig.vue
src/views/iot/rule/scene/form/inputs/JsonParamsInput.vue
src/views/iot/rule/scene/form/inputs/ValueInput.vue
src/views/iot/rule/scene/form/sections/ActionSection.vue
src/views/iot/rule/scene/form/sections/BasicInfoSection.vue
src/views/iot/rule/scene/form/sections/TriggerSection.vue
src/views/iot/rule/scene/form/selectors/DeviceSelector.vue
src/views/iot/rule/scene/form/selectors/OperatorSelector.vue
src/views/iot/rule/scene/form/selectors/ProductSelector.vue
src/views/iot/rule/scene/form/selectors/PropertySelector.vue
src/views/iot/rule/scene/index.vue
src/views/iot/thingmodel/ThingModelEvent.vue
src/views/iot/thingmodel/ThingModelForm.vue
src/views/iot/thingmodel/ThingModelInputOutputParam.vue
src/views/iot/thingmodel/ThingModelProperty.vue
src/views/iot/thingmodel/ThingModelService.vue
src/views/iot/thingmodel/ThingModelTSL.vue
src/views/iot/thingmodel/components/DataDefinition.vue
src/views/iot/thingmodel/components/index.ts
src/views/iot/thingmodel/dataSpecs/ThingModelArrayDataSpecs.vue
src/views/iot/thingmodel/dataSpecs/ThingModelEnumDataSpecs.vue
src/views/iot/thingmodel/dataSpecs/ThingModelNumberDataSpecs.vue
src/views/iot/thingmodel/dataSpecs/ThingModelStructDataSpecs.vue
src/views/iot/thingmodel/dataSpecs/index.ts
src/views/iot/thingmodel/index.vue
src/views/iot/utils/constants.ts
src/views/mall/home/components/ComparisonCard.vue
src/views/mall/home/components/MemberStatisticsCard.vue
src/views/mall/home/components/OperationDataCard.vue
src/views/mall/home/components/ShortcutCard.vue
src/views/mall/home/components/TradeTrendCard.vue
src/views/mall/home/index.vue
src/views/mall/product/brand/BrandForm.vue
src/views/mall/product/brand/index.vue
src/views/mall/product/category/CategoryForm.vue
src/views/mall/product/category/components/ProductCategorySelect.vue
src/views/mall/product/category/index.vue
src/views/mall/product/comment/CommentForm.vue
src/views/mall/product/comment/ReplyForm.vue
src/views/mall/product/comment/index.vue
src/views/mall/product/property/PropertyForm.vue
src/views/mall/product/property/index.vue
src/views/mall/product/property/value/ValueForm.vue
src/views/mall/product/property/value/index.vue
src/views/mall/product/spu/components/SkuList.vue
src/views/mall/product/spu/components/SkuTableSelect.vue
src/views/mall/product/spu/components/SpuShowcase.vue
src/views/mall/product/spu/components/SpuTableSelect.vue
src/views/mall/product/spu/components/index.ts
src/views/mall/product/spu/form/DeliveryForm.vue
src/views/mall/product/spu/form/DescriptionForm.vue
src/views/mall/product/spu/form/InfoForm.vue
src/views/mall/product/spu/form/OtherForm.vue
src/views/mall/product/spu/form/ProductAttributes.vue
src/views/mall/product/spu/form/ProductPropertyAddForm.vue
src/views/mall/product/spu/form/SkuForm.vue
src/views/mall/product/spu/form/index.vue
src/views/mall/product/spu/index.vue
src/views/mall/promotion/article/ArticleForm.vue
src/views/mall/promotion/article/category/ArticleCategoryForm.vue
src/views/mall/promotion/article/category/index.vue
src/views/mall/promotion/article/index.vue
src/views/mall/promotion/banner/BannerForm.vue
src/views/mall/promotion/banner/index.vue
src/views/mall/promotion/bargain/activity/BargainActivityForm.vue
src/views/mall/promotion/bargain/activity/bargainActivity.data.ts
src/views/mall/promotion/bargain/activity/index.vue
src/views/mall/promotion/bargain/record/BargainRecordListDialog.vue
src/views/mall/promotion/bargain/record/index.vue
src/views/mall/promotion/combination/activity/CombinationActivityForm.vue
src/views/mall/promotion/combination/activity/combinationActivity.data.ts
src/views/mall/promotion/combination/activity/index.vue
src/views/mall/promotion/combination/components/CombinationShowcase.vue
src/views/mall/promotion/combination/components/CombinationTableSelect.vue
src/views/mall/promotion/combination/record/CombinationRecordListDialog.vue
src/views/mall/promotion/combination/record/index.vue
src/views/mall/promotion/components/SpuAndSkuList.vue
src/views/mall/promotion/components/SpuSelect.vue
src/views/mall/promotion/components/index.ts
src/views/mall/promotion/coupon/components/CouponSelect.vue
src/views/mall/promotion/coupon/components/CouponSendForm.vue
src/views/mall/promotion/coupon/components/index.ts
src/views/mall/promotion/coupon/formatter.ts
src/views/mall/promotion/coupon/index.vue
src/views/mall/promotion/coupon/template/CouponTemplateForm.vue
src/views/mall/promotion/coupon/template/index.vue
src/views/mall/promotion/discountActivity/DiscountActivityForm.vue
src/views/mall/promotion/discountActivity/discountActivity.data.ts
src/views/mall/promotion/discountActivity/index.vue
src/views/mall/promotion/diy/page/DiyPageForm.vue
src/views/mall/promotion/diy/page/decorate.vue
src/views/mall/promotion/diy/page/index.vue
src/views/mall/promotion/diy/template/DiyTemplateForm.vue
src/views/mall/promotion/diy/template/decorate.vue
src/views/mall/promotion/diy/template/index.vue
src/views/mall/promotion/kefu/components/KeFuConversationList.vue
src/views/mall/promotion/kefu/components/KeFuMessageList.vue
src/views/mall/promotion/kefu/components/asserts/a.png
src/views/mall/promotion/kefu/components/asserts/aini.png
src/views/mall/promotion/kefu/components/asserts/aixin.png
src/views/mall/promotion/kefu/components/asserts/baiyan.png
src/views/mall/promotion/kefu/components/asserts/bizui.png
src/views/mall/promotion/kefu/components/asserts/buhaoyisi.png
src/views/mall/promotion/kefu/components/asserts/bukesiyi.png
src/views/mall/promotion/kefu/components/asserts/dajing.png
src/views/mall/promotion/kefu/components/asserts/danao.png
src/views/mall/promotion/kefu/components/asserts/daxiao.png
src/views/mall/promotion/kefu/components/asserts/dianzan.png
src/views/mall/promotion/kefu/components/asserts/emo.png
src/views/mall/promotion/kefu/components/asserts/esi.png
src/views/mall/promotion/kefu/components/asserts/fadai.png
src/views/mall/promotion/kefu/components/asserts/fankun.png
src/views/mall/promotion/kefu/components/asserts/feiwen.png
src/views/mall/promotion/kefu/components/asserts/fennu.png
src/views/mall/promotion/kefu/components/asserts/ganga.png
src/views/mall/promotion/kefu/components/asserts/ganmao.png
src/views/mall/promotion/kefu/components/asserts/hanyan.png
src/views/mall/promotion/kefu/components/asserts/haochi.png
src/views/mall/promotion/kefu/components/asserts/hongxin.png
src/views/mall/promotion/kefu/components/asserts/huaixiao.png
src/views/mall/promotion/kefu/components/asserts/jingkong.png
src/views/mall/promotion/kefu/components/asserts/jingshu.png
src/views/mall/promotion/kefu/components/asserts/jingya.png
src/views/mall/promotion/kefu/components/asserts/kaixin.png
src/views/mall/promotion/kefu/components/asserts/keai.png
src/views/mall/promotion/kefu/components/asserts/keshui.png
src/views/mall/promotion/kefu/components/asserts/kun.png
src/views/mall/promotion/kefu/components/asserts/lengku.png
src/views/mall/promotion/kefu/components/asserts/liuhan.png
src/views/mall/promotion/kefu/components/asserts/liukoushui.png
src/views/mall/promotion/kefu/components/asserts/liulei.png
src/views/mall/promotion/kefu/components/asserts/mengbi.png
src/views/mall/promotion/kefu/components/asserts/mianwubiaoqing.png
src/views/mall/promotion/kefu/components/asserts/nanguo.png
src/views/mall/promotion/kefu/components/asserts/outu.png
src/views/mall/promotion/kefu/components/asserts/picture.svg
src/views/mall/promotion/kefu/components/asserts/shengqi.png
src/views/mall/promotion/kefu/components/asserts/shuizhuo.png
src/views/mall/promotion/kefu/components/asserts/tianshi.png
src/views/mall/promotion/kefu/components/asserts/xiaodiaoya.png
src/views/mall/promotion/kefu/components/asserts/xiaoku.png
src/views/mall/promotion/kefu/components/asserts/xinsui.png
src/views/mall/promotion/kefu/components/asserts/xiong.png
src/views/mall/promotion/kefu/components/asserts/yiwen.png
src/views/mall/promotion/kefu/components/asserts/yun.png
src/views/mall/promotion/kefu/components/asserts/ziya.png
src/views/mall/promotion/kefu/components/index.ts
src/views/mall/promotion/kefu/components/member/MemberInfo.vue
src/views/mall/promotion/kefu/components/member/OrderBrowsingHistory.vue
src/views/mall/promotion/kefu/components/member/ProductBrowsingHistory.vue
src/views/mall/promotion/kefu/components/message/MessageItem.vue
src/views/mall/promotion/kefu/components/message/OrderItem.vue
src/views/mall/promotion/kefu/components/message/ProductItem.vue
src/views/mall/promotion/kefu/components/tools/EmojiSelectPopover.vue
src/views/mall/promotion/kefu/components/tools/PictureSelectUpload.vue
src/views/mall/promotion/kefu/components/tools/constants.ts
src/views/mall/promotion/kefu/components/tools/emoji.ts
src/views/mall/promotion/kefu/index.vue
src/views/mall/promotion/point/activity/PointActivityForm.vue
src/views/mall/promotion/point/activity/index.vue
src/views/mall/promotion/point/activity/pointActivity.data.ts
src/views/mall/promotion/point/components/PointShowcase.vue
src/views/mall/promotion/point/components/PointTableSelect.vue
src/views/mall/promotion/rewardActivity/RewardForm.vue
src/views/mall/promotion/rewardActivity/components/RewardRule.vue
src/views/mall/promotion/rewardActivity/components/RewardRuleCouponSelect.vue
src/views/mall/promotion/rewardActivity/index.vue
src/views/mall/promotion/seckill/activity/SeckillActivityForm.vue
src/views/mall/promotion/seckill/activity/index.vue
src/views/mall/promotion/seckill/activity/seckillActivity.data.ts
src/views/mall/promotion/seckill/components/SeckillShowcase.vue
src/views/mall/promotion/seckill/components/SeckillTableSelect.vue
src/views/mall/promotion/seckill/config/SeckillConfigForm.vue
src/views/mall/promotion/seckill/config/index.vue
src/views/mall/statistics/member/components/MemberFunnelCard.vue
src/views/mall/statistics/member/components/MemberTerminalCard.vue
src/views/mall/statistics/member/index.vue
src/views/mall/statistics/product/components/ProductRank.vue
src/views/mall/statistics/product/components/ProductSummary.vue
src/views/mall/statistics/product/index.vue
src/views/mall/statistics/trade/components/TradeStatisticValue.vue
src/views/mall/statistics/trade/index.vue
src/views/mall/trade/afterSale/detail/index.vue
src/views/mall/trade/afterSale/form/AfterSaleDisagreeForm.vue
src/views/mall/trade/afterSale/index.vue
src/views/mall/trade/brokerage/record/index.vue
src/views/mall/trade/brokerage/user/BrokerageOrderListDialog.vue
src/views/mall/trade/brokerage/user/BrokerageUserCreateForm.vue
src/views/mall/trade/brokerage/user/BrokerageUserListDialog.vue
src/views/mall/trade/brokerage/user/BrokerageUserUpdateForm.vue
src/views/mall/trade/brokerage/user/index.vue
src/views/mall/trade/brokerage/withdraw/BrokerageWithdrawRejectForm.vue
src/views/mall/trade/brokerage/withdraw/index.vue
src/views/mall/trade/config/index.vue
src/views/mall/trade/delivery/express/ExpressForm.vue
src/views/mall/trade/delivery/express/index.vue
src/views/mall/trade/delivery/expressTemplate/ExpressTemplateForm.vue
src/views/mall/trade/delivery/expressTemplate/index.vue
src/views/mall/trade/delivery/pickUpOrder/index.vue
src/views/mall/trade/delivery/pickUpStore/DeliveryPickUpStoreBindForm.vue
src/views/mall/trade/delivery/pickUpStore/PickUpStoreForm.vue
src/views/mall/trade/delivery/pickUpStore/components/StoreStaffTableSelect.vue
src/views/mall/trade/delivery/pickUpStore/index.vue
src/views/mall/trade/order/components/OrderTableColumn.vue
src/views/mall/trade/order/components/index.ts
src/views/mall/trade/order/detail/index.vue
src/views/mall/trade/order/form/OrderDeliveryForm.vue
src/views/mall/trade/order/form/OrderPickUpForm.vue
src/views/mall/trade/order/form/OrderUpdateAddressForm.vue
src/views/mall/trade/order/form/OrderUpdatePriceForm.vue
src/views/mall/trade/order/form/OrderUpdateRemarkForm.vue
src/views/mall/trade/order/index.vue
src/views/member/config/index.vue
src/views/member/group/GroupForm.vue
src/views/member/group/components/MemberGroupSelect.vue
src/views/member/group/index.vue
src/views/member/level/LevelForm.vue
src/views/member/level/components/MemberLevelSelect.vue
src/views/member/level/index.vue
src/views/member/point/record/index.vue
src/views/member/signin/config/SignInConfigForm.vue
src/views/member/signin/config/index.vue
src/views/member/signin/record/index.vue
src/views/member/tag/TagForm.vue
src/views/member/tag/components/MemberTagSelect.vue
src/views/member/tag/index.vue
src/views/member/user/UserForm.vue
src/views/member/user/components/UserBalanceUpdateForm.vue
src/views/member/user/components/UserLevelUpdateForm.vue
src/views/member/user/components/UserPointUpdateForm.vue
src/views/member/user/detail/UserAccountInfo.vue
src/views/member/user/detail/UserAddressList.vue
src/views/member/user/detail/UserAftersaleList.vue
src/views/member/user/detail/UserBalanceList.vue
src/views/member/user/detail/UserBasicInfo.vue
src/views/member/user/detail/UserBrokerageList.vue
src/views/member/user/detail/UserCouponList.vue
src/views/member/user/detail/UserExperienceRecordList.vue
src/views/member/user/detail/UserFavoriteList.vue
src/views/member/user/detail/UserOrderList.vue
src/views/member/user/detail/UserPointList.vue
src/views/member/user/detail/UserSignList.vue
src/views/member/user/detail/index.vue
src/views/member/user/index.vue
src/views/mp/account/AccountForm.vue
src/views/mp/account/index.vue
src/views/mp/autoReply/components/ReplyForm.vue
src/views/mp/autoReply/components/ReplyTable.vue
src/views/mp/autoReply/components/types.ts
src/views/mp/autoReply/index.vue
src/views/mp/components/wx-account-select/index.ts
src/views/mp/components/wx-account-select/main.vue
src/views/mp/components/wx-location/index.ts
src/views/mp/components/wx-location/main.vue
src/views/mp/components/wx-material-select/index.ts
src/views/mp/components/wx-material-select/main.vue
src/views/mp/components/wx-material-select/types.ts
src/views/mp/components/wx-msg/card.scss
src/views/mp/components/wx-msg/comment.scss
src/views/mp/components/wx-msg/components/Msg.vue
src/views/mp/components/wx-msg/components/MsgEvent.vue
src/views/mp/components/wx-msg/components/MsgList.vue
src/views/mp/components/wx-msg/index.ts
src/views/mp/components/wx-msg/main.vue
src/views/mp/components/wx-msg/types.ts
src/views/mp/components/wx-music/index.ts
src/views/mp/components/wx-music/main.vue
src/views/mp/components/wx-news/index.ts
src/views/mp/components/wx-news/main.vue
src/views/mp/components/wx-reply/components/TabImage.vue
src/views/mp/components/wx-reply/components/TabMusic.vue
src/views/mp/components/wx-reply/components/TabNews.vue
src/views/mp/components/wx-reply/components/TabText.vue
src/views/mp/components/wx-reply/components/TabVideo.vue
src/views/mp/components/wx-reply/components/TabVoice.vue
src/views/mp/components/wx-reply/components/types.ts
src/views/mp/components/wx-reply/index.ts
src/views/mp/components/wx-reply/main.vue
src/views/mp/components/wx-video-play/index.ts
src/views/mp/components/wx-video-play/main.vue
src/views/mp/components/wx-voice-play/index.ts
src/views/mp/components/wx-voice-play/main.vue
src/views/mp/draft/components/CoverSelect.vue
src/views/mp/draft/components/DraftTable.vue
src/views/mp/draft/components/NewsForm.vue
src/views/mp/draft/components/index.ts
src/views/mp/draft/components/types.ts
src/views/mp/draft/editor-config.ts
src/views/mp/draft/index.vue
src/views/mp/draft/mock.js
src/views/mp/freePublish/index.vue
src/views/mp/hooks/useUpload.ts
src/views/mp/material/components/ImageTable.vue
src/views/mp/material/components/UploadFile.vue
src/views/mp/material/components/UploadVideo.vue
src/views/mp/material/components/VideoTable.vue
src/views/mp/material/components/VoiceTable.vue
src/views/mp/material/components/upload.ts
src/views/mp/material/index.vue
src/views/mp/menu/assets/iphone_backImg.png
src/views/mp/menu/assets/menu_foot.png
src/views/mp/menu/assets/menu_head.png
src/views/mp/menu/components/MenuEditor.vue
src/views/mp/menu/components/MenuPreviewer.vue
src/views/mp/menu/components/menuOptions.ts
src/views/mp/menu/components/types.ts
src/views/mp/menu/index.vue
src/views/mp/message/MessageTable.vue
src/views/mp/message/index.vue
src/views/mp/messageTemplate/MessageTemplateSendForm.vue
src/views/mp/messageTemplate/index.vue
src/views/mp/statistics/index.vue
src/views/mp/tag/TagForm.vue
src/views/mp/tag/index.vue
src/views/mp/user/UserForm.vue
src/views/mp/user/index.vue
src/views/pay/app/components/AppForm.vue
src/views/pay/app/components/channel/AlipayChannelForm.vue
src/views/pay/app/components/channel/MockChannelForm.vue
src/views/pay/app/components/channel/WalletChannelForm.vue
src/views/pay/app/components/channel/WeixinChannelForm.vue
src/views/pay/app/index.vue
src/views/pay/cashier/index.vue
src/views/pay/demo/order/index.vue
src/views/pay/demo/withdraw/DemoWithdrawForm.vue
src/views/pay/demo/withdraw/index.vue
src/views/pay/notify/NotifyDetail.vue
src/views/pay/notify/index.vue
src/views/pay/order/OrderDetail.vue
src/views/pay/order/index.vue
src/views/pay/refund/RefundDetail.vue
src/views/pay/refund/index.vue
src/views/pay/transfer/TransferDetail.vue
src/views/pay/transfer/index.vue
src/views/pay/wallet/balance/WalletForm.vue
src/views/pay/wallet/balance/index.vue
src/views/pay/wallet/rechargePackage/WalletRechargePackageForm.vue
src/views/pay/wallet/rechargePackage/index.vue
src/views/pay/wallet/transaction/WalletTransactionList.vue
src/views/report/goview/index.vue
src/views/report/jmreport/bi.vue
src/views/report/jmreport/index.vue
src/views/system/area/AreaForm.vue
src/views/system/area/index.vue
src/views/system/dept/DeptForm.vue
src/views/system/dept/index.vue
src/views/system/dict/DictTypeForm.vue
src/views/system/dict/data/DictDataForm.vue
src/views/system/dict/data/index.vue
src/views/system/dict/index.vue
src/views/system/loginlog/LoginLogDetail.vue
src/views/system/loginlog/index.vue
src/views/system/mail/account/MailAccountForm.vue
src/views/system/mail/account/index.vue
src/views/system/mail/log/MailLogDetail.vue
src/views/system/mail/log/index.vue
src/views/system/mail/template/MailTemplateForm.vue
src/views/system/mail/template/MailTemplateSendForm.vue
src/views/system/mail/template/index.vue
src/views/system/menu/MenuForm.vue
src/views/system/menu/index.vue
src/views/system/notice/NoticeForm.vue
src/views/system/notice/index.vue
src/views/system/notify/message/NotifyMessageDetail.vue
src/views/system/notify/message/index.vue
src/views/system/notify/my/MyNotifyMessageDetail.vue
src/views/system/notify/my/index.vue
src/views/system/notify/template/NotifyTemplateForm.vue
src/views/system/notify/template/NotifyTemplateSendForm.vue
src/views/system/notify/template/index.vue
src/views/system/oauth2/client/ClientForm.vue
src/views/system/oauth2/client/index.vue
src/views/system/oauth2/token/index.vue
src/views/system/operatelog/OperateLogDetail.vue
src/views/system/operatelog/index.vue
src/views/system/post/PostForm.vue
src/views/system/post/index.vue
src/views/system/role/RoleAssignMenuForm.vue
src/views/system/role/RoleDataPermissionForm.vue
src/views/system/role/RoleForm.vue
src/views/system/role/index.vue
src/views/system/sms/channel/SmsChannelForm.vue
src/views/system/sms/channel/index.vue
src/views/system/sms/log/SmsLogDetail.vue
src/views/system/sms/log/index.vue
src/views/system/sms/template/SmsTemplateForm.vue
src/views/system/sms/template/SmsTemplateSendForm.vue
src/views/system/sms/template/index.vue
src/views/system/social/client/SocialClientForm.vue
src/views/system/social/client/index.vue
src/views/system/social/user/SocialUserDetail.vue
src/views/system/social/user/index.vue
src/views/system/tenant/TenantForm.vue
src/views/system/tenant/index.vue
src/views/system/tenantPackage/TenantPackageForm.vue
src/views/system/tenantPackage/index.vue
src/views/system/user/DeptTree.vue
src/views/system/user/UserAssignRoleForm.vue
src/views/system/user/UserForm.vue
src/views/system/user/UserImportForm.vue
src/views/system/user/index.vue
stylelint.config.js
tsconfig.json
types/components.d.ts
types/env.d.ts
types/global.d.ts
types/router.d.ts
types/wangeditor-types.d.ts
uno.config.ts
vite.config.ts
web-types.json |