Commit 6a98da0c authored by zhangyao's avatar zhangyao

'1'

parents
kind: pipeline
name: dev
trigger:
branch:
- dev
clone:
disable: true
volumes:
- name: docker-sock
host:
path: /var/run/docker.sock
##-------------------------------流水线⬇-------------------------------##
steps: # 定义流水线执行步骤,这些步骤将顺序执行
- name: fetch
image: registry.cn-qingdao.aliyuncs.com/wod/devops-git:1.0
network_mode: host
- name: build # 项目打包
image: registry.cn-qingdao.aliyuncs.com/wod/devops-node:12.18.0-stretch
# 将宿主机中文件夹挂载到容器中,宿主机文件夹中的文件会被容器访问并修改,起到使用缓存的作用,避免每次运行都要重现下载依赖,提高运行速度
commands:
- unzip dist.zip
- name: docker-amd64
image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0
# 将宿主机的 docker和配置挂载到运行的 docker 容器中,那么在容器中运行 docker 命令时,等同于在宿主机中运行该docker命令
volumes:
- name: docker-sock
path: /var/run/docker.sock # 将下载依赖的目录挂载出来,防止重复下载
settings: # 当前设置
base: registry.cn-qingdao.aliyuncs.com/wod/ui-base:v6.1-amd64 # 基础镜像
dockerfile: .beagle/dockerfile
repo: zjk/zjk-ui # 生成镜像的 分组/名称
version: "v1.0.0" # 版本号
channel: amd64 # 后缀
args: "TARGETOS=linux,TARGETARCH=amd64" # 不同架构的构建参数
registry: hub.wodcloud.com # 私有仓库地址
registry_user: # 用户
from_secret: REGISTRY_USER
registry_password: # 密码
from_secret: REGISTRY_PASSWORD
- name: docker-arm64
image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker:1.0
volumes:
- name: docker-sock
path: /var/run/docker.sock
settings:
base: registry.cn-qingdao.aliyuncs.com/wod/ui-base:v6.1-arm64
dockerfile: .beagle/dockerfile
repo: zjk/zjk-ui
version: "v1.0.0"
channel: arm64
args: "TARGETOS=linux,TARGETARCH=arm64"
registry: hub.wodcloud.com
registry_user:
from_secret: REGISTRY_USER
registry_password:
from_secret: REGISTRY_PASSWORD
---
clone:
disable: true
trigger:
branch:
- master
kind: pipeline
name: master
steps:
- name: harbor-amd64
image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker-tag:1.0
volumes:
- name: docker-sock
path: /var/run/docker.sock
pull: always
environment:
http_proxy: http://10.11.92.33:1282
https_proxy: http://10.11.92.33:1282
REGISTRY_USER:
from_secret: REGISTRY_USER
REGISTRY_PASSWORD:
from_secret: REGISTRY_PASSWORD
settings:
source: hub.wodcloud.com/zjk/zjk-ui:v1.0.0-amd64
target: hub.wodcloud.com/zjk/zjk-ui:v1.0.0-amd64
registry: hub.wodcloud.com
- name: harbor-arm64
image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker-tag:1.0
volumes:
- name: docker-sock
path: /var/run/docker.sock
pull: always
environment:
http_proxy: http://10.11.92.33:1282
https_proxy: http://10.11.92.33:1282
REGISTRY_USER:
from_secret: REGISTRY_USER
REGISTRY_PASSWORD:
from_secret: REGISTRY_PASSWORD
settings:
source: hub.wodcloud.com/zjk/zjk-ui:v1.0.0-arm64
target: hub.wodcloud.com/zjk/zjk-ui:v1.0.0-arm64
registry: hub.wodcloud.com
##--------------对于需要保密的信息隐藏,减少账户信息的泄密⬇-----------------##
---
kind: secret
name: REGISTRY_USER
get:
name: REGISTRY_USER
path: devops-secrets
---
kind: secret
name: REGISTRY_PASSWORD
get:
name: REGISTRY_PASSWORD
path: devops-secrets
---
kind: secret
name: KUBERNETES_SERVER
get:
name: KUBERNETES_SERVER
path: devops-secrets
---
kind: secret
name: KUBERNETES_TOKEN
get:
name: KUBERNETES_TOKEN
path: devops-secrets
---
kind: secret
name: ACCESS_KEY_MINIO
get:
name: ACCESS_KEY_MINIO
path: devops-secrets
---
kind: secret
name: SECRET_KEY_MINIO
get:
name: SECRET_KEY_MINIO
path: devops-secrets
ARG BASE
FROM $BASE
ARG AUTHOR
ARG VERSION
LABEL maintainer=${AUTHOR} version=${VERSION}
ADD ./dist /www
\ No newline at end of file
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 8080;
listen [::]:8080;
server_name localhost;
absolute_redirect off; #取消绝对路径的重定向
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location /xcqy/manage/ui {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /xcqy/manage/ui/index.html;
}
}
# 开启gzip
gzip off;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明
gzip_comp_level 6;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
# 由于jpg,jpeg,png本来就是压缩格式,再行压缩只会消耗cpu资源,帮助并不大
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/gif;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
#压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_http_version 1.0;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
# include /etc/nginx/conf.d/*.conf;
}
\ No newline at end of file
# 告诉EditorConfig插件,这是根文件,不用继续往上查找
root = true
# 匹配全部文件
[*]
# 缩进风格,可选space、tab
indent_style = space
# 缩进的空格数
indent_size = 2
# 设置字符集
charset = utf-8
# 结尾换行符,可选lf、cr、crlf
end_of_line = lf
# 在文件结尾插入新行
trim_trailing_whitespace = true
# 删除一行中的前后空格
insert_final_newline = true
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false
# 页面标题
VITE_APP_TITLE = 专家库管理集约化平台
# 开发环境配置
VITE_APP_ENV = 'development'
# 开发环境
VITE_APP_BASE_API = '/dev-api'
# 应用访问路径 例如使用前缀 /admin/
VITE_APP_CONTEXT_PATH = '/zjk/ui/'
# 监控地址
VITE_APP_MONITOR_ADMIN = 'http://localhost:9090/admin/applications'
# SnailJob 控制台地址
VITE_APP_SNAILJOB_ADMIN = 'http://localhost:8800/snail-job'
VITE_APP_PORT = 80
# 接口加密功能开关(如需关闭 后端也必须对应关闭)
VITE_APP_ENCRYPT = true
# 接口加密传输 RSA 公钥与后端解密私钥对应 如更换需前后端一同更换
VITE_APP_RSA_PUBLIC_KEY = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdHnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=='
# 接口响应解密 RSA 私钥与后端加密公钥对应 如更换需前后端一同更换
VITE_APP_RSA_PRIVATE_KEY = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAmc3CuPiGL/LcIIm7zryCEIbl1SPzBkr75E2VMtxegyZ1lYRD+7TZGAPkvIsBcaMs6Nsy0L78n2qh+lIZMpLH8wIDAQABAkEAk82Mhz0tlv6IVCyIcw/s3f0E+WLmtPFyR9/WtV3Y5aaejUkU60JpX4m5xNR2VaqOLTZAYjW8Wy0aXr3zYIhhQQIhAMfqR9oFdYw1J9SsNc+CrhugAvKTi0+BF6VoL6psWhvbAiEAxPPNTmrkmrXwdm/pQQu3UOQmc2vCZ5tiKpW10CgJi8kCIFGkL6utxw93Ncj4exE/gPLvKcT+1Emnoox+O9kRXss5AiAMtYLJDaLEzPrAWcZeeSgSIzbL+ecokmFKSDDcRske6QIgSMkHedwND1olF8vlKsJUGK3BcdtM8w4Xq7BpSBwsloE='
# 客户端id
VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e'
# VITE_APP_CLIENT_ID = 'aaee710ecebb7d4251f8a7e7d10fad0d'
# websocket 开关 默认使用sse推送
VITE_APP_WEBSOCKET = false
# 页面标题
VITE_APP_TITLE = 专家库管理集约化平台
# 生产环境配置
VITE_APP_ENV = 'production'
# 应用访问路径 例如使用前缀 /admin/
VITE_APP_CONTEXT_PATH = '/zjk/ui/'
# 监控地址
VITE_APP_MONITOR_ADMIN = '/admin/applications'
# SnailJob 控制台地址
VITE_APP_SNAILJOB_ADMIN = '/snail-job'
# 生产环境
VITE_APP_BASE_API = ''
# 是否在打包时开启压缩,支持 gzip 和 brotli
VITE_BUILD_COMPRESS = gzip
VITE_APP_PORT = 80
# 接口加密功能开关(如需关闭 后端也必须对应关闭)
VITE_APP_ENCRYPT = true
# 接口加密传输 RSA 公钥与后端解密私钥对应 如更换需前后端一同更换
VITE_APP_RSA_PUBLIC_KEY = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdHnzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ=='
# 接口响应解密 RSA 私钥与后端加密公钥对应 如更换需前后端一同更换
VITE_APP_RSA_PRIVATE_KEY = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAmc3CuPiGL/LcIIm7zryCEIbl1SPzBkr75E2VMtxegyZ1lYRD+7TZGAPkvIsBcaMs6Nsy0L78n2qh+lIZMpLH8wIDAQABAkEAk82Mhz0tlv6IVCyIcw/s3f0E+WLmtPFyR9/WtV3Y5aaejUkU60JpX4m5xNR2VaqOLTZAYjW8Wy0aXr3zYIhhQQIhAMfqR9oFdYw1J9SsNc+CrhugAvKTi0+BF6VoL6psWhvbAiEAxPPNTmrkmrXwdm/pQQu3UOQmc2vCZ5tiKpW10CgJi8kCIFGkL6utxw93Ncj4exE/gPLvKcT+1Emnoox+O9kRXss5AiAMtYLJDaLEzPrAWcZeeSgSIzbL+ecokmFKSDDcRske6QIgSMkHedwND1olF8vlKsJUGK3BcdtM8w4Xq7BpSBwsloE='
# 客户端id
VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e'
# VITE_APP_CLIENT_ID = 'aaee710ecebb7d4251f8a7e7d10fad0d'
# websocket 开关 默认使用sse推送
VITE_APP_WEBSOCKET = false
*.sh
node_modules
*.md
*.woff
*.ttf
.vscode
.idea
dist
/public
/docs
.husky
.local
/bin
.eslintrc.cjs
prettier.config.js
src/assets
tailwind.config.js
{
"globals": {
"ComponentInternalInstance": true,
"TransferKey": true,
"ElFormRules": true,
"CheckboxValueType": true,
"PropType": true,
"DateModelType": true,
"UploadFile": true,
"ElFormInstance": true,
"ElTableInstance": true,
"ElTreeInstance": true,
"ElTreeSelectInstance": true,
"ElSelectInstance": true,
"ElUploadInstance": true,
"ElCardInstance": true,
"ElDialogInstance": true,
"ElInputInstance": true,
"ElInputNumberInstance": true,
"ElRadioInstance": true,
"ElRadioGroupInstance": true,
"ElRadioButtonInstance": true,
"ElCheckboxInstance": true,
"ElCheckboxGroupInstance": true,
"ElSwitchInstance": true,
"ElDatePickerInstance": true,
"ElTimePickerInstance": true,
"ElTimeSelectInstance": true,
"ElScrollbarInstance": true,
"ElCascaderInstance": true,
"ElColorPickerInstance": true,
"ElRateInstance": true,
"ElSliderInstance": true,
"useRouter": true,
"useRoute": true,
"EffectScope": true,
"ElTable": true,
"ElSelect": true,
"ElUpload": true,
"ElForm": true,
"ElTree": true,
"ElMessage": true,
"ElMessageBox": true,
"asyncComputed": true,
"autoResetRef": true,
"computed": true,
"computedAsync": true,
"computedEager": true,
"computedInject": true,
"computedWithControl": true,
"controlledComputed": true,
"controlledRef": true,
"createApp": true,
"createEventHook": true,
"createGlobalState": true,
"createInjectionState": true,
"createReactiveFn": true,
"createSharedComposable": true,
"createUnrefFn": true,
"customRef": true,
"debouncedRef": true,
"debouncedWatch": true,
"defineAsyncComponent": true,
"defineComponent": true,
"eagerComputed": true,
"effectScope": true,
"extendRef": true,
"getCurrentInstance": true,
"getCurrentScope": true,
"h": true,
"ignorableWatch": true,
"inject": true,
"isDefined": true,
"isProxy": true,
"isReactive": true,
"isReadonly": true,
"isRef": true,
"makeDestructurable": true,
"markRaw": true,
"nextTick": true,
"onActivated": true,
"onBeforeMount": true,
"onBeforeUnmount": true,
"onBeforeUpdate": true,
"onClickOutside": true,
"onDeactivated": true,
"onErrorCaptured": true,
"onKeyStroke": true,
"onLongPress": true,
"onMounted": true,
"onRenderTracked": true,
"onRenderTriggered": true,
"onScopeDispose": true,
"onServerPrefetch": true,
"onStartTyping": true,
"onUnmounted": true,
"onUpdated": true,
"pausableWatch": true,
"provide": true,
"reactify": true,
"reactifyObject": true,
"reactive": true,
"reactiveComputed": true,
"reactiveOmit": true,
"reactivePick": true,
"readonly": true,
"ref": true,
"refAutoReset": true,
"refDebounced": true,
"refDefault": true,
"refThrottled": true,
"refWithControl": true,
"resolveComponent": true,
"resolveDirective": true,
"resolveRef": true,
"resolveUnref": true,
"shallowReactive": true,
"shallowReadonly": true,
"shallowRef": true,
"syncRef": true,
"syncRefs": true,
"templateRef": true,
"throttledRef": true,
"throttledWatch": true,
"toRaw": true,
"toReactive": true,
"toRef": true,
"toRefs": true,
"triggerRef": true,
"tryOnBeforeMount": true,
"tryOnBeforeUnmount": true,
"tryOnMounted": true,
"tryOnScopeDispose": true,
"tryOnUnmounted": true,
"unref": true,
"unrefElement": true,
"until": true,
"useActiveElement": true,
"useArrayEvery": true,
"useArrayFilter": true,
"useArrayFind": true,
"useArrayFindIndex": true,
"useArrayFindLast": true,
"useArrayJoin": true,
"useArrayMap": true,
"useArrayReduce": true,
"useArraySome": true,
"useArrayUnique": true,
"useAsyncQueue": true,
"useAsyncState": true,
"useAttrs": true,
"useBase64": true,
"useBattery": true,
"useBluetooth": true,
"useBreakpoints": true,
"useBroadcastChannel": true,
"useBrowserLocation": true,
"useCached": true,
"useClipboard": true,
"useCloned": true,
"useColorMode": true,
"useConfirmDialog": true,
"useCounter": true,
"useCssModule": true,
"useCssVar": true,
"useCssVars": true,
"useCurrentElement": true,
"useCycleList": true,
"useDark": true,
"useDateFormat": true,
"useDebounce": true,
"useDebounceFn": true,
"useDebouncedRefHistory": true,
"useDeviceMotion": true,
"useDeviceOrientation": true,
"useDevicePixelRatio": true,
"useDevicesList": true,
"useDisplayMedia": true,
"useDocumentVisibility": true,
"useDraggable": true,
"useDropZone": true,
"useElementBounding": true,
"useElementByPoint": true,
"useElementHover": true,
"useElementSize": true,
"useElementVisibility": true,
"useEventBus": true,
"useEventListener": true,
"useEventSource": true,
"useEyeDropper": true,
"useFavicon": true,
"useFetch": true,
"useFileDialog": true,
"useFileSystemAccess": true,
"useFocus": true,
"useFocusWithin": true,
"useFps": true,
"useFullscreen": true,
"useGamepad": true,
"useGeolocation": true,
"useIdle": true,
"useImage": true,
"useInfiniteScroll": true,
"useIntersectionObserver": true,
"useInterval": true,
"useIntervalFn": true,
"useKeyModifier": true,
"useLastChanged": true,
"useLocalStorage": true,
"useMagicKeys": true,
"useManualRefHistory": true,
"useMediaControls": true,
"useMediaQuery": true,
"useMemoize": true,
"useMemory": true,
"useMounted": true,
"useMouse": true,
"useMouseInElement": true,
"useMousePressed": true,
"useMutationObserver": true,
"useNavigatorLanguage": true,
"useNetwork": true,
"useNow": true,
"useObjectUrl": true,
"useOffsetPagination": true,
"useOnline": true,
"usePageLeave": true,
"useParallax": true,
"usePermission": true,
"usePointer": true,
"usePointerLock": true,
"usePointerSwipe": true,
"usePreferredColorScheme": true,
"usePreferredContrast": true,
"usePreferredDark": true,
"usePreferredLanguages": true,
"usePreferredReducedMotion": true,
"usePrevious": true,
"useRafFn": true,
"useRefHistory": true,
"useResizeObserver": true,
"useScreenOrientation": true,
"useScreenSafeArea": true,
"useScriptTag": true,
"useScroll": true,
"useScrollLock": true,
"useSessionStorage": true,
"useShare": true,
"useSlots": true,
"useSorted": true,
"useSpeechRecognition": true,
"useSpeechSynthesis": true,
"useStepper": true,
"useStorage": true,
"useStorageAsync": true,
"useStyleTag": true,
"useSupported": true,
"useSwipe": true,
"useTemplateRefsList": true,
"useTextDirection": true,
"useTextSelection": true,
"useTextareaAutosize": true,
"useThrottle": true,
"useThrottleFn": true,
"useThrottledRefHistory": true,
"useTimeAgo": true,
"useTimeout": true,
"useTimeoutFn": true,
"useTimeoutPoll": true,
"useTimestamp": true,
"useTitle": true,
"useToNumber": true,
"useToString": true,
"useToggle": true,
"useTransition": true,
"useUrlSearchParams": true,
"useUserMedia": true,
"useVModel": true,
"useVModels": true,
"useVibrate": true,
"useVirtualList": true,
"useWakeLock": true,
"useWebNotification": true,
"useWebSocket": true,
"useWebWorker": true,
"useWebWorkerFn": true,
"useWindowFocus": true,
"useWindowScroll": true,
"useWindowSize": true,
"watch": true,
"watchArray": true,
"watchAtMost": true,
"watchDebounced": true,
"watchEffect": true,
"watchIgnorable": true,
"watchOnce": true,
"watchPausable": true,
"watchPostEffect": true,
"watchSyncEffect": true,
"watchThrottled": true,
"watchTriggerable": true,
"watchWithFilter": true,
"whenever": true,
"ImportOption": true,
"TreeType": true,
"FieldOption": true,
"PageData": true,
"storeToRefs": true,
"DictDataOption": true,
"UploadOption": true
}
}
module.exports = {
env: {
browser: true,
node: true,
es6: true
},
parser: 'vue-eslint-parser',
extends: [
'plugin:vue/vue3-recommended',
'./.eslintrc-auto-import.json',
'plugin:@typescript-eslint/recommended',
'prettier',
'plugin:prettier/recommended'
],
parserOptions: {
ecmaVersion: '2020',
sourceType: 'module',
project: './tsconfig.*?.json',
parser: '@typescript-eslint/parser'
},
plugins: ['vue', '@typescript-eslint', 'import', 'promise', 'node', 'prettier'],
rules: {
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-this-alias': 'off',
// vue
'vue/multi-word-component-names': 'off',
'vue/valid-define-props': 'off',
'vue/no-v-model-argument': 'off',
'prefer-rest-params': 'off',
// prettier
'prettier/prettier': 'error',
'@typescript-eslint/ban-types': [
'error',
{
// 关闭空类型检查 {}
extendDefaults: true,
types: {
'{}': false,
Function: false
}
}
]
},
globals: {
DialogOption: 'readonly',
OptionType: 'readonly'
}
};
.DS_Store
.history
node_modules/
dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
**/*.log
tests/**/coverage/
tests/e2e/reports
selenium-debug.log
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.local
package-lock.json
yarn.lock
pnpm-lock.yaml
# 编译生成的文件
auto-imports.d.ts
components.d.ts
vite.config.ts
/dist/*
.local
.output.js
/node_modules/**
**/*.svg
**/*.sh
/public/*
\ No newline at end of file
{
"printWidth": 150,
"tabWidth": 2,
"useTabs": false,
"semi": true,
"singleQuote": true,
"quoteProps": "preserve",
"jsxSingleQuote": false,
"bracketSameLine": false,
"trailingComma": "none",
"bracketSpacing": true,
"embeddedLanguageFormatting": "auto",
"arrowParens": "always",
"requirePragma": false,
"insertPragma": false,
"proseWrap": "preserve",
"htmlWhitespaceSensitivity": "css",
"vueIndentScriptAndStyle": false,
"endOfLine": "auto"
}
The MIT License (MIT)
Copyright (c) 2019 RuoYi-Vue-Plus
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.
## 平台简介
- 本仓库为前端技术栈 [Vue3](https://v3.cn.vuejs.org) + [TS](https://www.typescriptlang.org/) + [Element Plus](https://element-plus.org/zh-CN) + [Vite](https://cn.vitejs.dev) 版本。
- 成员项目: 基于 vben(ant-design-vue) 的前端项目 [ruoyi-plus-vben](https://gitee.com/dapppp/ruoyi-plus-vben)
- 配套后端代码仓库地址
- [RuoYi-Vue-Plus 5.X(注意版本号)](https://gitee.com/dromara/RuoYi-Vue-Plus)
- [RuoYi-Cloud-Plus 2.X(注意版本号)](https://gitee.com/dromara/RuoYi-Cloud-Plus)
## 前端运行
```bash
# 克隆项目
git clone https://gitee.com/JavaLionLi/plus-ui.git
# 安装依赖
npm install --registry=https://registry.npmmirror.com
# 启动服务
npm run dev
# 构建生产环境
npm run build:prod
# 前端访问地址 http://localhost:80
```
## 本框架与RuoYi的业务差异
| 业务 | 功能说明 | 本框架 | RuoYi |
| ------------ | ------------------------------------------------------------- | ------ | ----------------------------- |
| 租户管理 | 系统内租户的管理 如:租户套餐、过期时间、用户数量、企业信息等 | 支持 | 无 |
| 租户套餐管理 | 系统内租户所能使用的套餐管理 如:套餐内所包含的菜单等 | 支持 | 无 |
| 用户管理 | 用户的管理配置 如:新增用户、分配用户所属部门、角色、岗位等 | 支持 | 支持 |
| 部门管理 | 配置系统组织机构(公司、部门、小组) 树结构展现支持数据权限 | 支持 | 支持 |
| 岗位管理 | 配置系统用户所属担任职务 | 支持 | 支持 |
| 菜单管理 | 配置系统菜单、操作权限、按钮权限标识等 | 支持 | 支持 |
| 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分 | 支持 | 支持 |
| 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 | 支持 | 支持 |
| 参数管理 | 对系统动态配置常用参数 | 支持 | 支持 |
| 通知公告 | 系统通知公告信息发布维护 | 支持 | 支持 |
| 操作日志 | 系统正常操作日志记录和查询 系统异常信息日志记录和查询 | 支持 | 支持 |
| 登录日志 | 系统登录日志记录查询包含登录异常 | 支持 | 支持 |
| 文件管理 | 系统文件展示、上传、下载、删除等管理 | 支持 | 无 |
| 文件配置管理 | 系统文件上传、下载所需要的配置信息动态添加、修改、删除等管理 | 支持 | 无 |
| 在线用户管理 | 已登录系统的在线用户信息监控与强制踢出操作 | 支持 | 支持 |
| 定时任务 | 运行报表、任务管理(添加、修改、删除)、日志管理、执行器管理等 | 支持 | 仅支持任务与日志管理 |
| 代码生成 | 多数据源前后端代码的生成(java、html、xml、sql)支持CRUD下载 | 支持 | 仅支持单数据源 |
| 系统接口 | 根据业务代码自动生成相关的api接口文档 | 支持 | 支持 |
| 服务监控 | 监视集群系统CPU、内存、磁盘、堆栈、在线日志、Spring相关配置等 | 支持 | 仅支持单机CPU、内存、磁盘监控 |
| 缓存监控 | 对系统的缓存信息查询,命令统计等。 | 支持 | 支持 |
| 在线构建器 | 拖动表单元素生成相应的HTML代码。 | 支持 | 支持 |
| 使用案例 | 系统的一些功能案例 | 支持 | 不支持 |
## 演示图例
| | |
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| ![输入图片说明](https://foruda.gitee.com/images/1680077524361362822/270bb429_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680077619939771291/989bf9b6_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680077681751513929/1c27c5bd_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680077721559267315/74d63e23_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680077765638904515/1b75d4a6_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078026375951297/eded7a4b_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680078237104531207/0eb1b6a7_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078254306078709/5931e22f_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680078287971528493/0b9af60a_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078308138770249/8d3b6696_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680078352553634393/db5ef880_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078378238393374/601e4357_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680078414983206024/2aae27c1_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078446738419874/ecce7d59_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680078475971341775/149e8634_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078491666717143/3fadece7_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680078558863188826/fb8ced2a_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078574561685461/ae68a0b2_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680078594932772013/9d8bfec6_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078626493093532/fcfe4ff6_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680078643608812515/0295bd4f_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078685196286463/d7612c81_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680078703877318597/56fce0bc_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078716586545643/b6dbd68f_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680078734103217688/eb1e6aa6_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078759131415480/73c525d8_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680078779416197879/75e3ed02_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078802329118061/77e10915_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680078893627848351/34a1c342_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078928175016986/f126ec4a_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680078941718318363/b68a0f72_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680078963175518631/3bb769a1_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680078982294090567/b31c343d_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680079000642440444/77ca82a9_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680079020995074177/03b7d52e_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680079039367822173/76811806_1766278.png '屏幕截图') |
| ![输入图片说明](https://foruda.gitee.com/images/1680079274333484664/4dfdc7c0_1766278.png '屏幕截图') | ![输入图片说明](https://foruda.gitee.com/images/1680079290467458224/d6715fcf_1766278.png '屏幕截图') |
@echo off
echo.
echo [信息] 打包Web工程,生成dist文件。
echo.
%~d0
cd %~dp0
cd ..
yarn build:prod
pause
\ No newline at end of file
@echo off
echo.
echo [信息] 安装Web工程,生成node_modules文件。
echo.
%~d0
cd %~dp0
cd ..
yarn --registry=https://registry.npmmirror.com
pause
\ No newline at end of file
@echo off
echo.
echo [信息] 使用 Vite 命令运行 Web 工程。
echo.
%~d0
cd %~dp0
cd ..
yarn dev
pause
\ No newline at end of file
This diff is collapsed.
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="renderer" content="webkit" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
<link rel="icon" href="/logo1.png" />
<title>专家库管理集约化平台</title>
<!--[if lt IE 11
]><script>
window.location.href = '/html/ie.html';
</script><!
[endif]-->
<style>
html,
body,
#app {
height: 100%;
margin: 0px;
padding: 0px;
}
.chromeframe {
margin: 0.2em 0;
background: #ccc;
color: #000;
padding: 0.2em 0;
}
#loader-wrapper {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 999999;
}
#loader {
display: block;
position: relative;
left: 50%;
top: 50%;
width: 150px;
height: 150px;
margin: -75px 0 0 -75px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #fff;
-webkit-animation: spin 2s linear infinite;
-ms-animation: spin 2s linear infinite;
-moz-animation: spin 2s linear infinite;
-o-animation: spin 2s linear infinite;
animation: spin 2s linear infinite;
z-index: 1001;
}
#loader:before {
content: '';
position: absolute;
top: 5px;
left: 5px;
right: 5px;
bottom: 5px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #fff;
-webkit-animation: spin 3s linear infinite;
-moz-animation: spin 3s linear infinite;
-o-animation: spin 3s linear infinite;
-ms-animation: spin 3s linear infinite;
animation: spin 3s linear infinite;
}
#loader:after {
content: '';
position: absolute;
top: 15px;
left: 15px;
right: 15px;
bottom: 15px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #fff;
-moz-animation: spin 1.5s linear infinite;
-o-animation: spin 1.5s linear infinite;
-ms-animation: spin 1.5s linear infinite;
-webkit-animation: spin 1.5s linear infinite;
animation: spin 1.5s linear infinite;
}
@-webkit-keyframes spin {
0% {
-webkit-transform: rotate(0deg);
-ms-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes spin {
0% {
-webkit-transform: rotate(0deg);
-ms-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg);
transform: rotate(360deg);
}
}
#loader-wrapper .loader-section {
position: fixed;
top: 0;
width: 51%;
height: 100%;
background: #486586;
z-index: 1000;
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
transform: translateX(0);
}
#loader-wrapper .loader-section.section-left {
left: 0;
}
#loader-wrapper .loader-section.section-right {
right: 0;
}
.loaded #loader-wrapper .loader-section.section-left {
-webkit-transform: translateX(-100%);
-ms-transform: translateX(-100%);
transform: translateX(-100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
}
.loaded #loader-wrapper .loader-section.section-right {
-webkit-transform: translateX(100%);
-ms-transform: translateX(100%);
transform: translateX(100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
}
.loaded #loader {
opacity: 0;
-webkit-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.loaded #loader-wrapper {
visibility: hidden;
-webkit-transform: translateY(-100%);
-ms-transform: translateY(-100%);
transform: translateY(-100%);
-webkit-transition: all 0.3s 1s ease-out;
transition: all 0.3s 1s ease-out;
}
.no-js #loader-wrapper {
display: none;
}
.no-js h1 {
color: #222222;
}
#loader-wrapper .load_title {
font-family: 'Open Sans';
color: #fff;
font-size: 19px;
width: 100%;
text-align: center;
z-index: 9999999999999;
position: absolute;
top: 60%;
opacity: 1;
line-height: 30px;
}
#loader-wrapper .load_title span {
font-weight: normal;
font-style: italic;
font-size: 13px;
color: #fff;
opacity: 0.5;
}
</style>
</head>
<body>
<div id="app">
<div id="loader-wrapper">
<div id="loader"></div>
<div class="loader-section section-left"></div>
<div class="loader-section section-right"></div>
<div class="load_title">正在加载系统资源,请耐心等待</div>
</div>
</div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
{
"name": "jyh-zjk-ui",
"version": "5.2.2",
"description": "专家库管理集约化平台",
"author": "LionLi",
"license": "MIT",
"type": "module",
"scripts": {
"dev": "vite serve --mode development",
"build:prod": "vite build --mode production",
"build:dev": "vite build --mode development",
"preview": "vite preview",
"lint:eslint": "eslint --fix --ext .ts,.js,.vue ./src ",
"prettier": "prettier --write ."
},
"dependencies": {
"@element-plus/icons-vue": "2.3.1",
"@highlightjs/vue-plugin": "2.1.0",
"@vueup/vue-quill": "1.2.0",
"@vueuse/core": "10.9.0",
"animate.css": "4.1.1",
"await-to-js": "3.0.0",
"axios": "1.6.8",
"bpmn-js": "16.4.0",
"crypto-js": "4.2.0",
"dayjs": "^1.11.13",
"diagram-js": "12.3.0",
"didi": "9.0.2",
"echarts": "5.5.0",
"element-plus": "^2.8.8",
"events": "^3.3.0",
"file-saver": "2.0.5",
"fuse.js": "7.0.0",
"highlight.js": "11.9.0",
"image-conversion": "^2.1.1",
"js-cookie": "3.0.5",
"jsencrypt": "3.3.2",
"min-dash": "^4.2.2",
"mitt": "^3.0.1",
"nprogress": "0.2.0",
"pinia": "2.1.7",
"screenfull": "6.0.2",
"tiny-svg": "^4.1.3",
"vue": "3.4.34",
"vue-cropper": "1.1.1",
"vue-i18n": "9.10.2",
"vue-router": "4.3.2",
"vue-types": "5.1.1",
"vue3-video-play": "^1.3.2",
"vxe-table": "4.5.22"
},
"devDependencies": {
"@iconify/json": "2.2.201",
"@intlify/unplugin-vue-i18n": "3.0.1",
"@types/crypto-js": "4.2.2",
"@types/file-saver": "2.0.7",
"@types/js-cookie": "3.0.6",
"@types/node": "18.18.2",
"@types/nprogress": "0.2.3",
"@typescript-eslint/eslint-plugin": "7.3.1",
"@typescript-eslint/parser": "7.3.1",
"@unocss/preset-attributify": "0.58.6",
"@unocss/preset-icons": "0.58.6",
"@unocss/preset-uno": "0.58.6",
"@vitejs/plugin-vue": "5.0.4",
"@vue/compiler-sfc": "3.4.23",
"autoprefixer": "10.4.18",
"eslint": "8.57.0",
"eslint-config-prettier": "9.1.0",
"eslint-define-config": "2.1.0",
"eslint-plugin-import": "2.29.1",
"eslint-plugin-node": "11.1.0",
"eslint-plugin-prettier": "5.1.3",
"eslint-plugin-promise": "6.1.1",
"eslint-plugin-vue": "9.23.0",
"fast-glob": "3.3.2",
"moment": "^2.30.1",
"postcss": "8.4.36",
"prettier": "3.2.5",
"sass": "1.72.0",
"typescript": "5.4.5",
"unocss": "0.58.6",
"unplugin-auto-import": "0.17.5",
"unplugin-icons": "0.18.5",
"unplugin-vue-components": "0.26.0",
"unplugin-vue-setup-extend-plus": "1.0.1",
"vite": "5.2.12",
"vite-plugin-compression": "0.5.1",
"vite-plugin-svg-icons": "2.0.1",
"vite-plugin-vue-setup-extend": "^0.4.0",
"vitest": "1.5.0",
"vue-eslint-parser": "9.4.2",
"vue-tsc": "2.0.13",
"vue-uuid": "^3.0.0"
}
}
<template>
<el-config-provider :locale="appStore.locale" :size="appStore.size">
<router-view />
</el-config-provider>
</template>
<script setup lang="ts">
import useSettingsStore from '@/store/modules/settings';
import { handleThemeStyle } from '@/utils/theme';
import useAppStore from '@/store/modules/app';
const appStore = useAppStore();
onMounted(() => {
nextTick(() => {
// 初始化主题样式
handleThemeStyle(useSettingsStore().theme);
});
});
</script>
// 前缀
const animatePrefix = 'animate__animated ';
// 开启随机动画 随机动画值
const animateList: string[] = [
animatePrefix + 'animate__pulse',
animatePrefix + 'animate__rubberBand',
animatePrefix + 'animate__bounceIn',
animatePrefix + 'animate__bounceInLeft',
animatePrefix + 'animate__fadeIn',
animatePrefix + 'animate__fadeInLeft',
animatePrefix + 'animate__fadeInDown',
animatePrefix + 'animate__fadeInUp',
animatePrefix + 'animate__flipInX',
animatePrefix + 'animate__lightSpeedInLeft',
animatePrefix + 'animate__rotateInDownLeft',
animatePrefix + 'animate__rollIn',
animatePrefix + 'animate__rotateInDownLeft',
animatePrefix + 'animate__zoomIn',
animatePrefix + 'animate__zoomInDown',
animatePrefix + 'animate__slideInLeft',
animatePrefix + 'animate__lightSpeedIn'
];
// 关闭随机动画后的默认效果
const defaultAnimate = animatePrefix + 'animate__fadeIn';
// 搜索隐藏显示动画
const searchAnimate = {
enter: '',
leave: ''
};
// 菜单搜索动画
const menuSearchAnimate = {
enter: animatePrefix + 'animate__fadeIn',
leave: animatePrefix + 'animate__fadeOut'
};
// logo动画
const logoAnimate = {
enter: animatePrefix + 'animate__fadeIn',
leave: animatePrefix + 'animate__fadeOut'
};
export default {
animateList,
defaultAnimate,
searchAnimate,
menuSearchAnimate,
logoAnimate
};
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { AnnualInspectionAuditVO, AnnualInspectionAuditForm, AnnualInspectionAuditQuery } from '@/api/annualInspection/annualInspectionAudit/types';
/**
* 查询年检管理列表
* @param query
* @returns {*}
*/
export const listAnnualInspectionAudit = (query?: any): AxiosPromise<AnnualInspectionAuditVO[]> => {
return request({
url: '/zjk-api/annualInspectionAudit/list',
method: 'get',
params: query
});
};
/**
* 查询年检管理详细
* @param id
*/
export const getAnnualInspectionAudit = (id: string | number): AxiosPromise<AnnualInspectionAuditVO> => {
return request({
url: '/zjk-api/annualInspectionAudit/' + id,
method: 'get'
});
};
/**
* 新增年检管理
* @param data
*/
export const addAnnualInspectionAudit = (data: AnnualInspectionAuditForm) => {
return request({
url: '/zjk-api/annualInspectionAudit',
method: 'post',
data: data
});
};
/**
* 修改年检管理
* @param data
*/
export const updateAnnualInspectionAudit = (data: AnnualInspectionAuditForm) => {
return request({
url: '/zjk-api/annualInspectionAudit',
method: 'put',
data: data
});
};
/**
* 删除年检管理
* @param id
*/
export const delAnnualInspectionAudit = (id: string | number | Array<string | number>) => {
return request({
url: '/zjk-api/annualInspectionAudit/delete/' + id,
method: 'get'
});
};
/**
* 批量年检
* @param data
*/
export const batchAnnualInspection = (data: AnnualInspectionAuditForm) => {
return request({
url: '/zjk-api/annualInspectionAudit/batchAnnualInspection',
method: 'post',
data: data
});
};
export interface AnnualInspectionAuditVO {
/**
* id
*/
id: string | number;
/**
* 用户 id
*/
userId: string | number;
/**
* 专家 id
*/
expertId: string | number;
/**
* 年检编号
*/
annualInspectionSn: string;
/**
* 年检名称
*/
annualInspectionName: string;
/**
* 审核方式(1 人工年检 2 自动年检)
*/
annualInspectionType: string;
/**
* 年检状态(1 待年检 2 已通过 3 未通过)
*/
annualInspectionStatus: string;
/**
* 原因
*/
reason: string;
/**
* 审核时间
*/
auditTime: string;
}
export interface AnnualInspectionAuditForm extends BaseEntity {
/**
* id
*/
id?: string | number;
/**
* 用户 id
*/
userId?: string | number;
/**
* 专家 id
*/
expertId?: string | number;
/**
* 年检编号
*/
annualInspectionSn?: string;
/**
* 年检名称
*/
annualInspectionName?: string;
/**
* 审核方式(1 人工年检 2 自动年检)
*/
annualInspectionType?: string;
/**
* 年检状态(1 待年检 2 已通过 3 未通过)
*/
annualInspectionStatus?: string;
/**
* 原因
*/
reason?: string;
/**
* 审核时间
*/
auditTime?: string;
/**
* ID 集合
*/
ids?: Array<string | number>;
}
export interface AnnualInspectionAuditQuery extends PageQuery {
/**
* 用户 id
*/
userId?: string | number;
/**
* 专家 id
*/
expertId?: string | number;
/**
* 专家 id
*/
contact?: string | number;
/**
* 年检编号
*/
annualInspectionSn?: string;
/**
* 年检名称
*/
annualInspectionName?: string;
/**
* 原因
*/
reason: string;
/**
* 审核方式(1 人工年检 2 自动年检)
*/
annualInspectionType?: string;
/**
* 年检状态(1 待年检 2 已通过 3 未通过)
*/
annualInspectionStatus?: string;
/**
* 审核时间
*/
auditTime?: string;
/**
* 日期范围参数
*/
params?: any;
dateRangeAuditTime?: string[]
}
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { AnnualInspectionRecordsVO, AnnualInspectionRecordsForm, AnnualInspectionRecordsQuery } from '@/api/annualInspection/annualInspectionRecords/types';
/**
* 查询年检记录列表
* @param query
* @returns {*}
*/
export const listAnnualInspectionRecords = (query?: AnnualInspectionRecordsQuery): AxiosPromise<AnnualInspectionRecordsVO[]> => {
return request({
url: '/zjk-api/annualInspectionRecords/list',
method: 'get',
params: query
});
};
/**
* 查询年检记录详细
* @param id
*/
export const getAnnualInspectionRecords = (id: string | number): AxiosPromise<AnnualInspectionRecordsVO> => {
return request({
url: '/zjk-api/annualInspectionRecords/' + id,
method: 'get'
});
};
/**
* 新增年检记录
* @param data
*/
export const addAnnualInspectionRecords = (data: AnnualInspectionRecordsForm) => {
return request({
url: '/zjk-api/annualInspectionRecords',
method: 'post',
data: data
});
};
/**
* 修改年检记录
* @param data
*/
export const updateAnnualInspectionRecords = (data: AnnualInspectionRecordsForm) => {
return request({
url: '/zjk-api/annualInspectionRecords',
method: 'put',
data: data
});
};
/**
* 删除年检记录
* @param id
*/
export const delAnnualInspectionRecords = (id: string | number | Array<string | number>) => {
return request({
url: '/zjk-api/annualInspectionRecords/' + id,
method: 'delete'
});
};
export interface AnnualInspectionRecordsVO {
/**
* id
*/
id: string | number;
/**
* 用户 id
*/
userId: string | number;
/**
* 专家 id
*/
expertId: string | number;
/**
* 年检记录编号
*/
recordsSn: string;
/**
* 年检审核编号
*/
annualInspectionSn: string;
/**
* 年检名称
*/
annualInspectionName: string;
/**
* 审核方式(1 人工年检 2 自动年检)
*/
auditType: string;
/**
* 年检状态(1 待年检 2 已通过 3 未通过)
*/
annualInspectionStatus: string;
/**
* 审核时间
*/
auditTime: string;
}
export interface AnnualInspectionRecordsForm extends BaseEntity {
/**
* id
*/
id?: string | number;
/**
* 用户 id
*/
userId?: string | number;
/**
* 专家 id
*/
expertId?: string | number;
/**
* 年检记录编号
*/
recordsSn?: string;
/**
* 年检审核编号
*/
annualInspectionSn?: string;
/**
* 年检名称
*/
annualInspectionName?: string;
/**
* 审核方式(1 人工年检 2 自动年检)
*/
auditType?: string;
/**
* 年检状态(1 待年检 2 已通过 3 未通过)
*/
annualInspectionStatus?: string;
/**
* 审核时间
*/
auditTime?: string;
}
export interface AnnualInspectionRecordsQuery extends PageQuery {
/**
* 用户 id
*/
userId?: string | number;
identify?: Array<string>;
/**
* 专家 id
*/
expertId?: string | number;
/**
* 年检记录编号
*/
recordsSn?: string;
/**
* 年检审核编号
*/
annualInspectionSn?: string;
/**
* 年检名称
*/
annualInspectionName?: string;
/**
* 审核方式(1 人工年检 2 自动年检)
*/
auditType?: string;
/**
* 年检状态(1 待年检 2 已通过 3 未通过)
*/
annualInspectionStatus?: string;
/**
* 审核时间
*/
auditTime?: string;
/**
* 日期范围参数
*/
params?: any;
}
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import {CountVO,} from '@/api/backStage/expertManagement/expertStatisticalReport/types';
/**
* 专家类型统计
* @param query
* @returns {*}
*/
export const getExpertUnitTypeData = (): AxiosPromise<any> => {
return request({
url: '/zjk-api/expert/getUnitCount',
method: 'get'
});
};
/**
* 专家入库错误分析
* @param query
* @returns {*}
*/
export const getExpertErrorSts = (): AxiosPromise<any> => {
return request({
url: '/system/operlog/expertErrorSts',
method: 'get'
});
};
/**
* 专家参与项目 tpo5
* @param query
* @returns {*}
*/
export const getExpertJoinProjectData = (): AxiosPromise<any> => {
return request({
url: '/zjk-api/project/extract/expert/top5',
method: 'get'
});
};
/**
* 专家信用等级统计
* @param query
* @returns {*}
*/
export const getExpertCreditRatingData = (): AxiosPromise<any> => {
return request({
url: '/zjk-api/creditLv/list',
method: 'get'
});
};
/**
* 专家工作年限统计
* @param query
* @returns {*}
*/
export const getExpertWorkExperienceData = (): AxiosPromise<any> => {
return request({
url: '/zjk-api/expert/workProfessialYear',
method: 'get'
});
};
/**
* 专家研究领域统计
* @param query
* @returns {*}
*/
export const getExpertResearchFieldData = (query): AxiosPromise<any> => {
return request({
url: '/zjk-api/expert/getExpertPerformWorkCount',
method: 'get',
params: query
});
};
/**
* 专家学历统计
* @param query
* @returns {*}
*/
export const getExpertEducationData = (): AxiosPromise<any> => {
return request({
url: '/zjk-api/expertMajor/getExpertMajorCount',
method: 'get'
});
};
export interface topDataVO {
title: string;
data: string | number;
unit: string;
}
export interface CountVO {
expertName:string;
productCount: string | number
}
export interface HomeVO {
/**
* expertId
*/
expertId: string | number;
/**
* 姓名
*/
expertName: string;
/**
* 性别
*/
sex: number;
/**
* 生日
*/
birthDate: string;
/**
* 联系方式
*/
contact: string;
/**
* 工作单位
*/
workUnit: string;
/**
* 职务
*/
duty: string;
/**
* 政治面貌
*/
politics: string;
/**
* 毕业学校
*/
graduateSchool: string;
/**
* 专业
*/
major: string;
/**
* 邮箱
*/
email: string;
/**
* 专业技术资格
*/
professional: string;
/**
* 专业技术资格取得时间
*/
professionalAcquisitionDate: string;
/**
* 专业技术资格列表
*/
professionalList?: Array<{professional:string,professionalDate:string}>;
/**
* 从事专业
*/
workProfessial: string;
/**
* 从事专业年限
*/
workProfessialYear: number;
/**
* 照片
*/
photograph: string;
/**
* 从事工作或研究领域
*/
performWorkId: string | number;
/**
* 其他领域描述
*/
otherDescribe: string;
/**
* 主要工作经历
*/
workExperience: string;
/**
* 社会兼职情况
*/
workPluralistic: string;
/**
* 主要论著、业绩成果及获奖情况
*/
achievement: string;
/**
* 论文
*/
paperpath:string | Array<string>
/**
* 专利
*/
patentpath:string | Array<string>
/**
* 备注
*/
remark: string;
/**
* 创建人
*/
createdBy: number;
/**
* 创建时间
*/
createdTime: string;
/**
* 修改人
*/
updatedBy: number;
/**
* 修改时间
*/
updatedTime: string;
/**
* 是否删除
*/
deleteFlag: number;
/**
* 状态
*/
status: string;
/**
* 审批类型
*/
approvalType: number;
}
export interface projectVO {
/**
* projectId
*/
itemId: string | number;
/**
* 项目编号
*/
productSn: string | number;
/**
* 项目名称
*/
productName: string;
/**
* 项目负责单位
*/
productUnit: string;
/**
* 项目负责人
*/
unitBy: string;
/**
* 项目阶段
*/
itemStage: string;
/**
* 项目评审开始时间
*/
reviewTime: string;
/**
* 项目评审开始时间
*/
status: string;
/**
* 备注
*/
// remark: string;
// /**
// * 创建人
// */
// createdBy: number;
// /**
// * 创建时间
// */
// createdTime: string;
// /**
// * 修改人
// */
// updatedBy: number;
// /**
// * 修改时间
// */
// updatedTime: string;
// /**
// * 是否删除
// */
// deleteFlag: number;
}
export interface Header {
label: string;
prop: string;
align?: 'center' | 'left' | 'right';
minWidth?: string | number;
stateName?: boolean;
sex?: boolean;
tagType?: boolean;
tagState?: boolean;
tagStage?: boolean;
time?: boolean
}
export interface ListVO {
id: string | number;
expertName: string;
projectName: string;
workUnit: string;
duty: string;
evaluateTime: string;
status: string | number;
}
export interface expertV0 {
expertName: string;
photograph: string;
workUnit: string;
duty: string;
pointCount: number;
creditName: string;
reviewProjectCount: number,
leaveCount: number,
evaluateCount: number,
startDate: string,
endDate: string
}
export interface statisticalDataVO {
/**
* title
*/
title: string ;
/**
* data
*/
data: string | number;
/**
* color
*/
color: string;
}
import request from '@/utils/request';
import { OperLogQuery, OperLogVO } from './types';
import { ApprovalVO,ApprovalQuery } from './types';
import { DataChangeVO,DataChangeQuery } from './types';
import { AxiosPromise } from 'axios';
// 查询审批流程记录
export function listApproval(query: ApprovalQuery): AxiosPromise<ApprovalVO[]> {
return request({
url: '/zjk-api/approvalProcessLogs/list',
method: 'get',
params: query
});
}
// 查询数据变更记录
export function getChange( id :string | number) {
return request({
url: '/zjk-api/dataChangesLogs/' + id,
method: 'get'
});
}
// 查询数据变更记录
export function listDataChange(query: ApprovalQuery): AxiosPromise<[]> {
return request({
url: '/zjk-api/dataChangesLogs/list',
method: 'get',
params: query
});
}
// 查询操作日志列表
export function list(query: OperLogQuery): AxiosPromise<OperLogVO[]> {
return request({
url: '/monitor/operlog/list',
method: 'get',
params: query
});
}
// 删除操作日志
export function delOperlog(operId: string | number | Array<string | number>) {
return request({
url: '/monitor/operlog/' + operId,
method: 'delete'
});
}
// 清空操作日志
export function cleanOperlog() {
return request({
url: '/monitor/operlog/clean',
method: 'delete'
});
}
//操作日志记录
export interface OperLogQuery extends PageQuery {
operIp: string;
title: string;
operName: string;
businessType: string;
status: string;
orderByColumn: string;
isAsc: string;
}
export interface OperLogVO extends BaseEntity {
operId: string | number;
tenantId: string;
title: string;
businessType: number;
businessTypes: number[] | undefined;
method: string;
requestMethod: string;
operatorType: number;
operName: string;
deptName: string;
operUrl: string;
operIp: string;
operLocation: string;
operParam: string;
jsonResult: string;
status: number;
errorMsg: string;
operTime: string;
costTime: number;
}
export interface OperLogForm {
operId: number | string | undefined;
tenantId: string | number | undefined;
title: string;
businessType: number;
businessTypes: number[] | undefined;
method: string;
requestMethod: string;
operatorType: number;
operName: string;
deptName: string;
operUrl: string;
operIp: string;
operLocation: string;
operParam: string;
jsonResult: string;
status: number;
errorMsg: string;
operTime: string;
costTime: number;
}
//数据变更记录
export interface DataChangeQuery extends PageQuery {
operIp: string;
title: string;
operName: string;
businessType: string;
status: string;
orderByColumn: string;
isAsc: string;
}
export interface DataChangeVO extends BaseEntity {
operId: string | number;
tenantId: string;
title: string;
businessType: number;
businessTypes: number[] | undefined;
method: string;
requestMethod: string;
operatorType: number;
operName: string;
deptName: string;
operUrl: string;
operIp: string;
operLocation: string;
operParam: string;
jsonResult: string;
status: number;
errorMsg: string;
operTime: string;
costTime: number;
}
export interface DataChangeForm {
operId: number | string | undefined;
tenantId: string | number | undefined;
title: string;
businessType: number;
businessTypes: number[] | undefined;
method: string;
requestMethod: string;
operatorType: number;
operName: string;
deptName: string;
operUrl: string;
operIp: string;
operLocation: string;
operParam: string;
jsonResult: string;
status: number;
errorMsg: string;
operTime: string;
costTime: number;
}
//审批流程记录
export interface ApprovalQuery extends PageQuery {
actionItem: number;
actionContent: number;
startTime:string,
endTime:string,
// operName: string;
// businessType: string;
// status: string;
// orderByColumn: string;
// isAsc: string;
};
export interface ApprovalVO extends BaseEntity {
operId: string | number;
tenantId: string;
title: string;
businessType: number;
businessTypes: number[] | undefined;
method: string;
requestMethod: string;
operatorType: number;
operName: string;
deptName: string;
operUrl: string;
operIp: string;
operLocation: string;
operParam: string;
jsonResult: string;
status: number;
errorMsg: string;
operTime: string;
costTime: number;
}
//数据变更记录
export interface DataChangesLogQuery extends PageQuery {
changeType: number,
startTime: string,
endTime: string,
// operName: string;
// businessType: string;
// status: string;
// orderByColumn: string;
// isAsc: string;
}
export interface DataChangesLogsVo extends BaseEntity {
id: string | number;
changeType: string;
businessType: string;
operIp: string;
createBy: number;
createTime: string;
}
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
export const getTableList = (query?: any): AxiosPromise<any> => {
return request({
url: '/zjk-api/creditUser/blacklist',
method: 'get',
params: query
});
};
export const OutboundExpert = (query: any): AxiosPromise<any> => {
return request({
url: '/zjk-api/creditUser/outCreditId',
method: 'post',
data: query
});
};
export interface ExtractLogQuery {
extractionSn: string | number;
projectName: string;
itemId: string;
extractionStatus: string | number;
extractDate: Array<string> | string;
}
export interface ExtractLogVO extends ExtractLogQuery {
extractNum: string;
extractUserName: string;
}
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
export const getTableList = (query?: any): AxiosPromise<any> => {
return request({
url: '/zjk-api/creditUser/selectUserById',
method: 'get',
params: query
});
};
export interface ExtractLogQuery {
extractionSn: string | number;
projectName: string;
itemId: string;
extractionStatus: string | number;
extractDate: Array<string> | string;
}
export interface ExtractLogVO extends ExtractLogQuery {
extractNum: string;
extractUserName: string;
}
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
// 信用用户列表
export const getCreditList = (query?: any): AxiosPromise<any> => {
return request({
url: '/zjk-api/credit/creditList',
method: 'get',
params: query
});
};
// 排行榜 顶部内容
export const getTopInfo = (query?: any): AxiosPromise<any> => {
return request({
url: '/zjk-api/credit/pointBase',
method: 'get',
params: query
});
};
// 排行榜
export const getRanking = (query?: any): AxiosPromise<any> => {
return request({
url: '/zjk-api/creditUser/expertPointRank',
method: 'get',
params: query
});
};
export interface ExtractLogQuery {
extractionSn: string | number;
projectName: string;
itemId: string;
extractionStatus: string | number;
extractDate: Array<string> | string;
}
export interface ExtractLogVO extends ExtractLogQuery {
extractNum: string;
extractUserName: string;
}
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
export const getTableList = (query?: any): AxiosPromise<any> => {
return request({
url: '/zjk-api/project/extract/list',
method: 'get',
params: query
});
};
export const addMotivate = (query: any): AxiosPromise<any> => {
return request({
url: '/zjk-api/expert/',
method: 'post',
data: query
});
};
export const updateMotivate = (query: any): AxiosPromise<any> => {
return request({
url: '/zjk-api/expert/',
method: 'put',
data: query
});
};
export const setStatus = (query: any): AxiosPromise<any> => {
return request({
url: '/zjk-api/expert/',
method: 'post',
data: query
});
};
export const deleteMotivate = (query: any): AxiosPromise<any> => {
return request({
url: '/zjk-api/project/extract/delete',
method: 'delete',
data: query
});
};
export interface ExtractLogQuery {
extractionSn: string | number;
projectName: string;
itemId: string;
extractionStatus: string | number;
extractDate: Array<string> | string;
}
export interface ExtractLogVO extends ExtractLogQuery {
extractNum: string;
extractUserName: string;
}
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
// 信用奖惩管理
export const getTableList = (query?: any): AxiosPromise<any> => {
return request({
url: '/zjk-api/creditReward/queryRewardlist',
method: 'get',
params: query
});
};
// 信用等级管理
export const getLevelList = (query?: any): AxiosPromise<any> => {
return request({
url: '/zjk-api/creditLv/list',
method: 'get',
params: query
});
};
// 获取信用规则列表
export const getRuleList = (query?: any): AxiosPromise<any> => {
return request({
url: '/zjk-api/creditReward/ruleList',
method: 'get',
params: query
});
};
export interface ExtractLogQuery {
extractionSn: string | number;
projectName: string;
itemId: string;
extractionStatus: string | number;
extractDate: Array<string> | string;
}
export interface ExtractLogVO extends ExtractLogQuery {
extractNum: string;
extractUserName: string;
}
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
export const getData = (query): AxiosPromise<any> => {
return request({
url: '/zjk-api/learningMaterials/list',
method: 'get',
params: query
});
};
export const addFile = (query): AxiosPromise<any> => {
return request({
url: '/zjk-api/learningMaterials/add',
method: 'post',
data: query
});
};
export const delFile = (id): AxiosPromise<any> => {
return request({
url: `/zjk-api/learningMaterials/delete/${id}`,
method: 'get',
});
};
export const logLearn = (id): AxiosPromise<any> => {
return request({
url: `/zjk-api/learningCreditRecord/add`,
method: 'post',
data:{
learningId: id
}
});
};
\ No newline at end of file
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { DemoVO, DemoForm, DemoQuery } from '@/api/demo/demo/types';
/**
* 查询测试单列表
* @param query
* @returns {*}
*/
export const listDemo = (query?: DemoQuery): AxiosPromise<DemoVO[]> => {
return request({
url: '/demo/demo/list',
method: 'get',
params: query
});
};
/**
* 查询测试单详细
* @param id
*/
export const getDemo = (id: string | number): AxiosPromise<DemoVO> => {
return request({
url: '/demo/demo/' + id,
method: 'get'
});
};
/**
* 新增测试单
* @param data
*/
export const addDemo = (data: DemoForm) => {
return request({
url: '/demo/demo',
method: 'post',
data: data
});
};
/**
* 修改测试单
* @param data
*/
export const updateDemo = (data: DemoForm) => {
return request({
url: '/demo/demo',
method: 'put',
data: data
});
};
/**
* 删除测试单
* @param id
*/
export const delDemo = (id: string | number | Array<string | number>) => {
return request({
url: '/demo/demo/' + id,
method: 'delete'
});
};
export interface DemoVO {
/**
* 主键
*/
id: string | number;
/**
* 部门id
*/
deptId: string | number;
/**
* 用户id
*/
userId: string | number;
/**
* 排序号
*/
orderNum: number;
/**
* key键
*/
testKey: string;
/**
* 值
*/
value: string;
}
export interface DemoForm extends BaseEntity {
/**
* 主键
*/
id?: string | number;
/**
* 部门id
*/
deptId?: string | number;
/**
* 用户id
*/
userId?: string | number;
/**
* 排序号
*/
orderNum?: number;
/**
* key键
*/
testKey?: string;
/**
* 值
*/
value?: string;
}
export interface DemoQuery extends PageQuery {
/**
* 部门id
*/
deptId?: string | number;
/**
* 用户id
*/
userId?: string | number;
/**
* 排序号
*/
orderNum?: number;
/**
* key键
*/
testKey?: string;
/**
* 值
*/
value?: string;
}
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { TreeVO, TreeForm, TreeQuery } from '@/api/demo/tree/types';
/**
* 查询测试树列表
* @param query
* @returns {*}
*/
export const listTree = (query?: TreeQuery): AxiosPromise<TreeVO[]> => {
return request({
url: '/demo/tree/list',
method: 'get',
params: query
});
};
/**
* 查询测试树详细
* @param id
*/
export const getTree = (id: string | number): AxiosPromise<TreeVO> => {
return request({
url: '/demo/tree/' + id,
method: 'get'
});
};
/**
* 新增测试树
* @param data
*/
export const addTree = (data: TreeForm) => {
return request({
url: '/demo/tree',
method: 'post',
data: data
});
};
/**
* 修改测试树
* @param data
*/
export const updateTree = (data: TreeForm) => {
return request({
url: '/demo/tree',
method: 'put',
data: data
});
};
/**
* 删除测试树
* @param id
*/
export const delTree = (id: string | number | Array<string | number>) => {
return request({
url: '/demo/tree/' + id,
method: 'delete'
});
};
export interface TreeVO {
/**
* 主键
*/
id: string | number;
/**
* 父id
*/
parentId: string | number;
/**
* 部门id
*/
deptId: string | number;
/**
* 用户id
*/
userId: string | number;
/**
* 值
*/
treeName: string;
/**
* 子对象
*/
children: TreeVO[];
}
export interface TreeForm extends BaseEntity {
/**
* 主键
*/
id?: string | number;
/**
* 父id
*/
parentId?: string | number;
/**
* 部门id
*/
deptId?: string | number;
/**
* 用户id
*/
userId?: string | number;
/**
* 值
*/
treeName?: string;
}
export interface TreeQuery {
/**
* 父id
*/
parentId?: string | number;
/**
* 部门id
*/
deptId?: string | number;
/**
* 用户id
*/
userId?: string | number;
/**
* 值
*/
treeName?: string;
}
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
export const getDetail = (id?: string): AxiosPromise<any[]> => {
return request({
url: `/zjk/evaluate/detail/${id}`,
method: 'get'
});
};
export const getFile = (ossId?: string): AxiosPromise<any[]> => {
return request({
url: `/resource/oss/listByIds/${ossId}`,
method: 'get'
});
};
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
export const setEvaluate = (query?: any): AxiosPromise<any[]> => {
return request({
url: '/zjk/evaluate',
method: 'post',
data: query
});
};
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { ListVO, ListQuery } from './types';
export const listList = (query?: ListQuery): AxiosPromise<ListVO[]> => {
return request({
url: '/zjk/evaluate/listToOrg',
method: 'get',
params: query
});
};
export interface ListVO {
id: string | number;
expertName: string;
projectName: string;
workUnit: string;
duty: string;
evaluateTime: string;
status: string | number;
}
export interface ListQuery {
pageNum: number;
pageSize: number;
expertName: string;
projectName: string;
}
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { MutualVO, MutualQuery } from './types';
export const listMutual = (query?: MutualQuery): AxiosPromise<MutualVO[]> => {
return request({
url: '/zjk-api/evaluate/listToZj',
method: 'get',
params: query
});
};
export interface MutualVO {
id: string | number;
expertName: string;
projectName: string;
workUnit: string;
duty: string;
evaluateTime: string;
status: string | number;
}
export interface MutualQuery {
pageNum: number;
pageSize: number;
expertName: string;
projectName: string;
}
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
export const getBaseData = (): AxiosPromise<any> => {
return request({
url: '/zjk-api/evaluate/stsNum',
method: 'get'
});
};
export const getChartData = (key): AxiosPromise<any> => {
return request({
url: '/zjk-api/evaluate/stsChart',
method: 'get',
params: {
rangeMonth: key
}
});
};
export const getListData = (query): AxiosPromise<any> => {
return request({
url: '/zjk-api/evaluate/stsList',
method: 'get',
params: query
});
};
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { ApprovalVO, ApprovalForm, ApprovalQuery } from '@/api/expert/approval/types';
/**
* 查询expert列表
* @param query
* @returns {*}
*/
export const listExpert = (query?: ApprovalQuery): AxiosPromise<ApprovalVO[]> => {
return request({
url: '/zjk-api/expert/list',
method: 'get',
params: query
});
};
/**
* 查询expert详细
* @param id
*/
export const getExpert = (id: string | number): AxiosPromise<ApprovalVO> => {
return request({
url: '/zjk-api/expert/' + id,
method: 'get'
});
};
/**
* 审批
* @param data
*/
export const approvalExpert = (data) => {
return request({
url: '/zjk-api/expert/approval',
method: 'post',
data: data
});
};
/**
* 新增expert
* @param data
*/
export const addExpert = (data: ApprovalForm) => {
return request({
url: '/zjk-api/expert/save',
method: 'post',
data: data
});
};
/**
* 修改expert
* @param data
*/
export const updateExpert = (data: ApprovalForm) => {
return request({
url: '/zjk-api/expert/update',
method: 'post',
data: data
});
};
/**
* 删除expert
* @param id
*/
export const delExpert = (id: string | number | Array<string | number>) => {
return request({
url: '/zjk-api/expert/delete/' + id,
method: 'get'
});
};
export interface ApprovalVO {
/**
* expertId
*/
expertId: string | number;
/**
* 姓名
*/
expertName: string;
/**
* 性别
*/
sex: number;
/**
* 生日
*/
birthDate: string;
/**
* 联系方式
*/
contact: string;
/**
* 工作单位
*/
workUnit: string;
/**
* 职务
*/
duty: string;
/**
* 政治面貌
*/
politics: string;
/**
* 毕业学校
*/
graduateSchool: string;
/**
* 专业
*/
major: string;
/**
* 邮箱
*/
email: string;
/**
* 专业技术资格
*/
professional: string;
/**
* 专业技术资格取得时间
*/
professionalAcquisitionDate: string;
/**
* 专业技术资格列表
*/
professionalList?: Array<{professional:string,professionalDate:string}>;
/**
* 从事专业
*/
workProfessial: string;
/**
* 从事专业年限
*/
workProfessialYear: number;
/**
* 照片
*/
photograph: string;
/**
* 从事工作或研究领域
*/
performWorkId: string | number;
/**
* 其他领域描述
*/
otherDescribe: string;
/**
* 主要工作经历
*/
workExperience: string;
/**
* 社会兼职情况
*/
workPluralistic: string;
/**
* 主要论著、业绩成果及获奖情况
*/
achievement: string;
/**
* 论文
*/
paperpath:string | Array<string>
/**
* 专利
*/
patentpath:string | Array<string>
/**
* 备注
*/
remark: string;
/**
* 创建人
*/
createdBy: number;
/**
* 创建时间
*/
createdTime: string;
/**
* 修改人
*/
updatedBy: number;
/**
* 修改时间
*/
updatedTime: string;
/**
* 是否删除
*/
deleteFlag: number;
/**
* 状态
*/
status: string;
/**
* 审批类型
*/
approvalType: number;
}
export interface ApprovalForm extends BaseEntity {
/**
* expertId
*/
id?: string | number;
/**
* 姓名
*/
expertName?: string;
/**
* 性别
*/
sex?: number | undefined;
/**
* 生日
*/
birthDate?: string;
isRecommend?: string;
unitType?: string;
/**
* 单位类型其他
*/
unitTypeDescribe?: string;
idCard?: string;
/**
* 联系方式
*/
contact?: string;
/**
* 工作单位
*/
workUnit?: string;
/**
* 职务
*/
duty?: string;
/**
* 政治面貌
*/
politics?: string;
/**
* 毕业学校
*/
graduateSchool?: string;
/**
* 专业
*/
major?: string;
majorList?: [{ major: '', degree: '' }],//专业
/**
* 居住地址 - 省
*/
province?: string;
/**
* 居住地址 - 市
*/
city?: string;
/**
* 居住地址 - 区
*/
area?: string;
/**
* 详细地址
*/
address?: string;
/**
* 邮箱
*/
email?: string;
/**
* 专业技术资格
*/
professional?: string;
/**
* 专业技术资格取得时间
*/
professionalAcquisitionDate?: string;
/**
* 专业技术资格列表
*/
professionalList?: Array<{professional:string,professionalDate:string}>;
/**
* 从事专业
*/
workProfessial?: string;
/**
* 从事专业年限
*/
workProfessialYear?: number | string;
/**
* 照片
*/
photograph?: string;
/**
* 从事工作或研究领域
*/
performWork?: Array<string | number>;
performWorkId?: string;
/**
* 其他领域描述
*/
otherDescribe?: string;
/**
* 主要工作经历
*/
workExperience?: string;
/**
* 社会兼职情况
*/
workPluralistic?: string;
/**
* 主要论著、业绩成果及获奖情况
*/
achievement?: string;
zjkExpertAwardsList?: Array<{ awardsContent: string, registerSn: string}>;
/**
* 论文
*/
paperpath:string | Array<string>;
zjkExpertPaperList?: Array<{paperName:string,periodicalNumber:string,paperPath:string, originalName?:string,url?:string,}>;
/**
* 专利
*/
patentpath:string | Array<string>;
zjkExpertPatentList?: Array<{nameInvention:string,patentNumber:string,patentPath:string, originalName?:string ,url?:string,}>;
/**
* 备注
*/
remark?: string;
/**
* 创建人
*/
createdBy?: number;
/**
* 创建时间
*/
createdTime?: string;
/**
* 修改人
*/
updatedBy?: number;
/**
* 修改时间
*/
updatedTime?: string;
/**
* 是否删除
*/
deleteFlag?: number;
/**
* 审批人
*/
approver: string;
/**
* 审批类型
*/
approvalType: number;
/**
* 审批选择
*/
approvalValue: string;
/**
* 审批意见
*/
approvalOpinion : string;
otherPath?: string;
/**
* 职称等级
*/
positionTitleLevel: string;
/**
* 专家来源
*/
expertSources: string;
placeList?: Array<string | number>;
/**
* 籍贯
*/
origin?: string;
}
export interface ApprovalQuery extends PageQuery {
/**
* expertId
*/
expertId?: string | number;
/**
* 姓名
*/
expertName?: string;
/**
* 性别
*/
sex?: number;
/**
* 生日
*/
birthDate?: string;
/**
* 联系方式
*/
contact?: string;
/**
* 工作单位
*/
workUnit?: string;
/**
* 职务
*/
duty?: string;
/**
* 政治面貌
*/
politics?: string;
/**
* 毕业学校
*/
graduateSchool?: string;
/**
* 专业
*/
major?: string;
/**
* 邮箱
*/
email?: string;
/**
* 专业技术资格
*/
professional?: string;
/**
* 专业技术资格取得时间
*/
professionalAcquisitionDate?: string;
/**
* 从事专业
*/
workProfessial?: string;
/**
* 从事专业年限
*/
workProfessialYear?: number;
/**
* 照片
*/
photograph?: string;
/**
* 从事工作或研究领域
*/
performWorkId?: string | number;
/**
* 其他领域描述
*/
otherDescribe?: string;
/**
* 主要工作经历
*/
workExperience?: string;
/**
* 社会兼职情况
*/
workPluralistic?: string;
/**
* 主要论著、业绩成果及获奖情况
*/
achievement?: string;
/**
* 创建人
*/
createdBy?: number;
/**
* 创建时间
*/
createdTime?: string;
/**
* 修改人
*/
updatedBy?: number;
/**
* 修改时间
*/
updatedTime?: string;
/**
* 是否删除
*/
deleteFlag?: number;
/**
* 日期范围参数
*/
params?: any;
/**
* 状态
*/
status: string;
}
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { EnterVO, EnterForm, EnterQuery } from '@/api/expert/enterRecord/types';
/**
* 查询expert列表
* @param query
* @returns {*}
*/
export const listExpert = (query?: EnterQuery): AxiosPromise<EnterVO[]> => {
return request({
url: '/zjk-api/expertLog/list',
method: 'get',
params: query
});
};
/**
* 查询expert详细
* @param id
*/
export const getExpert = (id: string | number): AxiosPromise<EnterVO> => {
return request({
url: '/zjk-api/expert/' + id,
method: 'get'
});
};
/**
* 新增expert
* @param data
*/
export const addExpert = (data: EnterForm) => {
return request({
url: '/zjk-api/expert/save',
method: 'post',
data: data
});
};
/**
* 修改expert
* @param data
*/
export const updateExpert = (data: EnterForm) => {
return request({
url: '/zjk-api/expert/update',
method: 'post',
data: data
});
};
/**
* 删除expert
* @param id
*/
export const delExpert = (id: string | number | Array<string | number>) => {
return request({
url: '/zjk-api/expert/delete/' + id,
method: 'get'
});
};
export interface EnterVO {
/**
* expertId
*/
expertId: string | number;
id: string | number;
/**
* 姓名
*/
name: string;
// expertName: string;
/**
* 性别
*/
sex: number;
/**
* 生日
*/
birthDate: string;
/**
* 联系方式
*/
contactInfo: string;
// contact: string;
/**
* 工作单位
*/
organization: string;
// workUnit: string;
/**
* 职务
*/
position: string;
// duty: string;
/**
* 入库结果
*/
entryResult: string;
/**
* 申请时间
*/
applicationTime: string;
/**
* 驳回理由
*/
rejectionReason: string;
// rejectReason: string;
/**
* 政治面貌
*/
// politics: string;
/**
* 毕业学校
*/
// graduateSchool: string;
/**
* 专业
*/
// major: string;
/**
* 邮箱
*/
// email: string;
/**
* 专业技术资格
*/
// professional: string;
/**
* 专业技术资格取得时间
*/
// professionalAcquisitionDate: string;
/**
* 从事专业
*/
// workProfessial: string;
/**
* 从事专业年限
*/
// workProfessialYear: number;
/**
* 照片
*/
// photograph: string;
/**
* 从事工作或研究领域
*/
// performWorkId: string | number;
/**
* 其他领域描述
*/
// otherDescribe: string;
/**
* 主要工作经历
*/
// workExperience: string;
/**
* 社会兼职情况
*/
// workPluralistic: string;
/**
* 主要论著、业绩成果及获奖情况
*/
// achievement: string;
/**
* 备注
*/
// remark: string;
/**
* 创建人
*/
createdBy: number;
/**
* 创建时间
*/
createdTime: string;
/**
* 修改人
*/
updatedBy: number;
/**
* 修改时间
*/
updatedTime: string;
/**
* 是否删除
*/
deleteFlag: number;
/**
* 审批类型
*/
approvalType: number;
}
export interface EnterForm extends BaseEntity {
/**
* expertId
*/
expertId?: string | number;
/**
* 姓名
*/
expertName?: string;
/**
* 性别
*/
sex?: number | undefined;
/**
* 生日
*/
birthDate?: string;
/**
* 联系方式
*/
contact?: string;
/**
* 工作单位
*/
workUnit?: string;
/**
* 职务
*/
duty?: string;
/**
* 政治面貌
*/
politics?: string;
/**
* 毕业学校
*/
graduateSchool?: string;
/**
* 专业
*/
major?: string;
/**
* 邮箱
*/
email?: string;
/**
* 专业技术资格
*/
professional?: string;
/**
* 专业技术资格取得时间
*/
professionalAcquisitionDate?: string;
/**
* 从事专业
*/
workProfessial?: string;
/**
* 从事专业年限
*/
workProfessialYear?: number;
/**
* 照片
*/
photograph?: string;
/**
* 从事工作或研究领域
*/
performWork?: Array<string | number>;
performWorkId?: string;
/**
* 其他领域描述
*/
otherDescribe?: string;
/**
* 主要工作经历
*/
workExperience?: string;
/**
* 社会兼职情况
*/
workPluralistic?: string;
/**
* 主要论著、业绩成果及获奖情况
*/
achievement?: string;
/**
* 备注
*/
remark?: string;
/**
* 创建人
*/
createdBy?: number;
/**
* 创建时间
*/
createdTime?: string;
/**
* 修改人
*/
updatedBy?: number;
/**
* 修改时间
*/
updatedTime?: string;
/**
* 是否删除
*/
deleteFlag?: number;
/**
* 审批人
*/
approver: string;
/**
* 审批类型
*/
approvalType: number;
/**
* 审批意见
*/
approvalOpinion : string;
}
export interface EnterQuery extends PageQuery {
/**
* expertId
*/
expertId?: string | number;
/**
* 姓名
*/
name?: string;
/**
* 工作单位
*/
organization?: string;
/**
* 入库结果
*/
entryResult: string;
/**
* 申请时间 开始日期
*/
applyStartTime: string;
/**
* 申请时间 结束日期
*/
applyEndTime: string;
/**
* 性别
*/
// sex?: number;
/**
* 生日
*/
// birthDate?: string;
/**
* 联系方式
*/
// contact?: string;
/**
* 职务
*/
// duty?: string;
/**
* 政治面貌
*/
// politics?: string;
/**
* 毕业学校
*/
// graduateSchool?: string;
/**
* 专业
*/
// major?: string;
/**
* 邮箱
*/
// email?: string;
/**
* 专业技术资格
*/
// professional?: string;
/**
* 专业技术资格取得时间
*/
// professionalAcquisitionDate?: string;
/**
* 从事专业
*/
// workProfessial?: string;
/**
* 从事专业年限
*/
// workProfessialYear?: number;
/**
* 照片
*/
// photograph?: string;
/**
* 从事工作或研究领域
*/
// performWorkId?: string | number;
/**
* 其他领域描述
*/
// otherDescribe?: string;
/**
* 主要工作经历
*/
// workExperience?: string;
/**
* 社会兼职情况
*/
// workPluralistic?: string;
/**
* 主要论著、业绩成果及获奖情况
*/
// achievement?: string;
/**
* 创建人
*/
createdBy?: number;
/**
* 创建时间
*/
createdTime?: string;
/**
* 修改人
*/
updatedBy?: number;
/**
* 修改时间
*/
updatedTime?: string;
/**
* 是否删除
*/
deleteFlag?: number;
/**
* 日期范围参数
*/
params?: any;
/**
* 状态
*/
// status: string;
}
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { ExpertVO, ExpertForm, ExpertQuery } from '@/api/expert/expert/types';
/**
* 专家查找expert列表
* @param query
* @returns {*}
*/
export const queryProList = (): AxiosPromise<[]> => {
return request({
url: '/zjk-api/expertProfessional/professionalList',
method: 'get'
});
};
/**
* 专家查找expert列表
* @param query
* @returns {*}
*/
export const queryExpert = (data): AxiosPromise<ExpertVO[]> => {
return request({
url: '/zjk-api/expert/expertInquiry',
method: 'get',
params: data
});
};
/**
* 查询expert列表
* @param query
* @returns {*}
*/
export const listExpert = (query?: ExpertQuery): AxiosPromise<ExpertVO[]> => {
return request({
url: '/zjk-api/expert/expertList',
method: 'get',
params: query
});
};
/**
* 查询expert详细
* @param id
*/
export const getExpert = (id: string | number): AxiosPromise<ExpertVO> => {
return request({
url: '/zjk-api/expert/' + id,
method: 'get'
});
};
/**
* 新增expert
* @param data
*/
export const addExpert = (data: ExpertForm) => {
return request({
url: '/zjk-api/expert/save',
method: 'post',
data: data
});
};
/**
* 用户输入错误次数统计
*/
export const sendUserInputError = (data: any) => {
return request({
url: '/system/operlog/saveLog',
method: 'post',
data
});
}
/**
* 修改expert
* @param data
*/
export const updateExpert = (data: ExpertForm) => {
return request({
url: '/zjk-api/expert/update',
method: 'post',
data: data
});
};
/**
* 删除expert
* @param id
*/
export const delExpert = (id: string | number | Array<string | number>) => {
return request({
url: '/zjk-api/expert/delete/' + id,
method: 'get'
});
};
/**
* 手动移入黑名单
* @param id
*/
export const moveToBlack = (data) => {
return request({
url: '/zjk-api/creditUser/moveToBlacklist',
method: 'post',
data
});
};
/**
* 手动移出黑名单
* @param id
*/
export const moveBackBlack = (data) => {
return request({
url: '/zjk-api/creditUser/removeTheBlacklist',
method: 'post',
data
});
};
export const getFile = (ossId?: string): AxiosPromise<any[]> => {
return request({
url: `/resource/oss/listByIds/${ossId}`,
method: 'get'
});
};
This diff is collapsed.
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { ExpertRecommendVO, ExpertRecommendForm, ExpertRecommendQuery } from '@/api/expert/expertRecommend/types';
/**
* 查询专家推荐记录
* @param query
* @returns {*}
*/
export const listRecommendRecord = (query?: ExpertRecommendQuery): AxiosPromise<ExpertRecommendVO[]> => {
return request({
url: '/zjk-api/expertRecommend/queryExpertRecommendList',
method: 'get',
params: query
});
};
/**
* 查询专家推荐信息列表
* @param query
* @returns {*}
*/
export const listExpertRecommend = (query?: ExpertRecommendQuery): AxiosPromise<ExpertRecommendVO[]> => {
return request({
url: '/zjk-api/expertRecommend/list',
method: 'get',
params: query
});
};
/**
* 查询专家推荐信息详细
* @param id
*/
export const getExpertRecommend = (id: string | number): AxiosPromise<ExpertRecommendVO> => {
return request({
url: '/zjk-api/expertRecommend/' + id,
method: 'get'
});
};
/**
* 新增专家推荐信息
* @param data
*/
export const addExpertRecommend = (data: ExpertRecommendForm) => {
return request({
url: '/zjk-api/expertRecommend',
method: 'post',
data: data
});
};
/**
* 修改专家推荐信息
* @param data
*/
export const updateExpertRecommend = (data: ExpertRecommendForm) => {
return request({
url: '/zjk-api/expertRecommend',
method: 'put',
data: data
});
};
/**
* 删除专家推荐信息
* @param id
*/
export const delExpertRecommend = (id: string | number | Array<string | number>) => {
return request({
url: '/zjk-api/expertRecommend/' + id,
method: 'delete'
});
};
export interface ExpertRecommendVO {
id:string;
/**
* 推荐专家姓名
*/
expertName: string;
/**
* 专家手机号
*/
expertPhone: string;
/**
* 推荐理由
*/
reason: string;
/**
* 推荐状态 1 待审批 2 通过 3 驳回
*/
status: string;
}
export interface ExpertRecommendForm extends BaseEntity {
/**
* id
*/
id?: string | number;
/**
* 专家 id
*/
expertId?: string | number;
/**
* 用户 id
*/
userId?: string | number;
/**
* 推荐专家姓名
*/
expertName?: string;
/**
* 专家手机号
*/
expertPhone?: string;
/**
* 推荐理由
*/
reason?: string;
/**
* 推荐状态 1 待审批 2 通过 3 驳回
*/
status?: string;
}
export interface ExpertRecommendQuery extends PageQuery {
/**
* 专家 id
*/
expertId?: string | number;
/**
* 用户 id
*/
userId?: string | number;
/**
* 推荐专家姓名
*/
expertName?: string;
/**
* 专家手机号
*/
expertPhone?: string;
/**
* 推荐理由
*/
reason?: string;
/**
* 推荐状态 1 待审批 2 通过 3 驳回
*/
status?: string;
/**
* 日期范围参数
*/
params?: any;
}
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import {HomeVO, HomeForm, HomeQuery, CountVO, ListVO, expertV0, AllCountVO} from '@/api/expert/homePage/types';
/**
* 查询所有统计-机构管理员
* @param query
* @returns {*}
*/
export const getExpertAllCount = (): AxiosPromise<AllCountVO> => {
return request({
url: '/zjk-api/zjkHome/getJgStatistics',
method: 'get'
});
};
/**
* 查询已入库专家总人数-机构管理员
* @param query
* @returns {*}
*/
export const getExpertCount = (): AxiosPromise<CountVO> => {
return request({
url: '/zjk-api/expert/getExpertCount',
method: 'get'
});
};
/**
* 获取黑名单专家总人数-机构管理员
* @param query
* @returns {*}
*/
export const getBlacklistCount = (): AxiosPromise<CountVO> => {
return request({
url: '/zjk-api/creditUser/getBlacklistCount',
method: 'get'
});
};
/**
* 获取评审项目数量-机构管理员
* @param query
* @returns {*}
*/
export const getReviewProjectCount = (): AxiosPromise<CountVO> => {
return request({
url: '/zjk-api/reviewPhase/getReview/count',
method: 'get'
});
};
/**
* 获取项目总结完成数-机构管理员
* @param query
* @returns {*}
*/
export const getProjectSummaryCount = (): AxiosPromise<CountVO> => {
return request({
url: '/zjk-api/productSummarize/getCount',
method: 'get'
});
};
/**
* 获取优秀信用专家人数-机构管理员
* @param query
* @returns {*}
*/
export const getExcellentCreditExpertCount = (): AxiosPromise<CountVO> => {
return request({
url: '/zjk-api/creditUser/getCount',
method: 'get'
});
};
/**
* 获取专家请假总次数-机构管理员
* @param query
* @returns {*}
*/
export const getExpertLeaveCount = (): AxiosPromise<CountVO> => {
return request({
url: '/zjk-api/leave/stsNum',
method: 'get'
});
};
/**
* 获取项目总数-厅局管理员
* @param query
* @returns {*}
*/
export const getProductPanoramaCount = (): AxiosPromise<CountVO> => {
return request({
url: '/zjk-api/product/getProductPanoramaCount',
method: 'get'
});
};
/**
* 获取专家信息
* @param query
* @returns {*}
*/
export const getExpertInfoData = (): AxiosPromise<expertV0> => {
return request({
url: '/zjk-api/expert/getExpertBaseInfo',
method: 'get'
});
};
/**
* 查询待审批专家列表
* @param query
* @returns {*}
*/
export const getPendingApprovalList = (query?: HomeQuery): AxiosPromise<HomeVO[]> => {
return request({
url: '/zjk-api/expert/pendingApproval',
method: 'get',
params: query
});
};
/**
* 查询待评价专家-管理员
* @param query
* @returns {*}
*/
export const getExpertEvaluatedList = (query?: HomeQuery): AxiosPromise<HomeVO[]> => {
return request({
url: '/zjk/evaluate/listToOrg',
method: 'get',
params: query
});
};
/**
* 查询机构管理员-请假审批
* @param query
* @returns {*}
*/
export const getMechanismLeaveApprovalList = (query?: HomeQuery): AxiosPromise<HomeVO[]> => {
return request({
url: '/zjk-api/leave/splist',
method: 'get',
params: query
});
};
/**
* 查询待接受项目列表-专家
* @param query
* @returns {*}
*/
export const getAcceptProjectList = (query?: HomeQuery): AxiosPromise<HomeVO[]> => {
return request({
url: '/zjk-api/leave/prosForAccept',
method: 'get',
params: query
});
};
/**
* 查询待参评项目列表-专家
* @param query
* @returns {*}
*/
export const getParticipatingProjectsList = (query?: HomeQuery): AxiosPromise<HomeVO[]> => {
return request({
url: '/zjk-api/leave/prosForJoin',
method: 'get',
params: query
});
};
/**
* 查询待互评专家-专家
* @param query
* @returns {*}
*/
export const listMutual = (query?: HomeQuery): AxiosPromise<ListVO[]> => {
return request({
url: '/zjk-api/evaluate/listToZj',
method: 'get',
params: query
});
};
/**
* 查询待互评专家-项目
* @param query
* @returns {*}
*/
export const listToXm = (query?: HomeQuery): AxiosPromise<ListVO[]> => {
return request({
url: '/zjk-api/evaluate/listToXm',
method: 'get',
params: query
});
};
/**
* 查询expert详细
* @param id
*/
export const getExpert = (id: string | number): AxiosPromise<HomeVO> => {
return request({
url: '/zjk-api/expert/' + id,
method: 'get'
});
};
/**
* 新增expert
* @param data
*/
export const addExpert = (data: HomeForm) => {
return request({
url: '/zjk-api/expert/save',
method: 'post',
data: data
});
};
/**
* 修改expert
* @param data
*/
export const updateExpert = (data: HomeForm) => {
return request({
url: '/zjk-api/expert/update',
method: 'post',
data: data
});
};
/**
* 删除expert
* @param id
*/
export const delExpert = (id: string | number | Array<string | number>) => {
return request({
url: '/zjk-api/expert/delete/' + id,
method: 'get'
});
};
export const setLeave = (query: any): AxiosPromise<any> => {
return request({
url: '/zjk/leave/leaveForPro',
method: 'post',
data: query
});
};
export const setAccept = (query: any): AxiosPromise<any> => {
return request({
url: '/zjk/leave/setAccept',
method: 'post',
data: query
});
};
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
export const chartBase = (id?: string): AxiosPromise<any> => {
return request({
url: '/zjk-api/chart/chartBase',
method: 'get',
params:{
userId: id
}
});
};
export const sameOther = (id?: string): AxiosPromise<any> => {
return request({
url: '/zjk-api/chart/sameOther',
method: 'get',
params:{
userId: id
}
});
};
export const expertList = (id?: string): AxiosPromise<any> => {
return request({
url: '/zjk-api/chart/users',
method: 'get',
params:{
userId: id
}
});
};
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment