commit a6967b40739f57f5186aed2c39b5d3334976f5e2 Author: clay Date: Fri Dec 13 23:09:13 2024 +0800 feat: 初始化 diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..042a941 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,41 @@ +### Java template +# Compiled class file +*.class +# Log file +*.log +# BlueJ files +*.ctxt +# Mobile Tools for Java (J2ME) +.mtj.tmp/ +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +### Maven template +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +# https://github.com/takari/maven-wrapper#usage-without-binary-jar +.mvn/wrapper/maven-wrapper.jar +### Example user template template +### Example user template +# IntelliJ project files +.idea +*.iml +out +gen +!build +!default.conf +!nginx.conf diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..0d74524 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,98 @@ +kind: pipeline +type: docker +name: mosr-web +platform: + os: linux + arch: arm64 +steps: + + + - name: build-package + image: node:16.20.0 + volumes: + - name: cache + path: /drone/src/node_modules + commands: + - export CI=false + - mkdir -p /app/build/$DRONE_REPO_NAME + - rm -rf /app/build/$DRONE_REPO_NAME/* + - cp deployment.yml /app/build/$DRONE_REPO_NAME/ + - cp Dockerfile /app/build/$DRONE_REPO_NAME/ + - cp .dockerignore /app/build/$DRONE_REPO_NAME/ + - cp default.conf /app/build/$DRONE_REPO_NAME/ + - cp docker.sh /app/build/$DRONE_REPO_NAME/ + - cp nginx.conf /app/build/$DRONE_REPO_NAME/ + - npm -v + - mkdir -p ./node_modules + - export NODE_MODULES_PATH=`pwd`/node_modules + - npm config set registry https://registry.npmmirror.com + - set NODE_OPTIONS=--openssl-legacy-provider + - npm install + - npm run build + - ls /app/build/$DRONE_REPO_NAME/ + - echo $NODE_MODULES_PATH + - cp -r dist /app/build/$DRONE_REPO_NAME + + + - name: build-docker-prod # 制作docker镜像 + image: 10.7.127.190:38080/docker/docker # 使用官方docker镜像 + volumes: # 将容器内目录挂载到宿主机 + - name: docker + path: /var/run/docker.sock # 挂载宿主机的docker + - name: config + path: /config + environment: # 获取到密文的docker用户名和密码 + DOCKER_USERNAME: + from_secret: docker_username + DOCKER_PASSWORD: + from_secret: docker_password + REGISTRY: + from_secret: registry + REGISTRY_NAMESPACE: + from_secret: registry_namespace + commands: # 定义在Docker容器中执行的shell命令 + - cat Dockerfile + - sed -i 's/$REGISTRY/'"$REGISTRY"'/' deployment.yml + - sed -i 's/$REGISTRY_NAMESPACE/'"$REGISTRY_NAMESPACE"'/' deployment.yml + - sed -i 's/$DRONE_REPO_NAME/'"$DRONE_REPO_NAME"'/' deployment.yml + - sed -i 's/$DRONE_COMMIT/'"$DRONE_COMMIT"'/' deployment.yml + - sed -i 's/$PORTS_NAME/'"dasdafas"'/' deployment.yml + - sed -i 's/$PORTS_PORT/'"8081"'/' deployment.yml + - sed -i 's/$PROFILES/'"mosr"'/' nginx.conf + # docker登录,不能在脚本中登录,并且不能使用docker login -u -p + - echo $DOCKER_PASSWORD | docker login $REGISTRY --username $DOCKER_USERNAME --password-stdin + - chmod +x docker.sh + - cat docker.sh + - sh docker.sh + # 执行完脚本删除本次制作的docker镜像,避免多次后当前runner空间不足 + - docker rmi -f $(docker images | grep $DRONE_REPO_NAME | awk '{print $3}') + + + - name: drone-rancher-prod # rancher运行 + image: bitnami/kubectl:1.26.13-debian-11-r1 + volumes: # 将容器内目录挂载到宿主机 + - name: config + path: /app/config # 将kubectl 配置文件挂载出来 + commands: # 定义在Docker容器中执行的shell命令 + # 将deployment中定义的变量替换为drone中的内置变量 + - kubectl apply -f deployment.yml -n emosr --kubeconfig=/app/config/base-taishan-kubectl.yml + + + +volumes: + - name: cache + host: + path: /home/npm/emosr-web + - name: config # k8s对接的配置文件 + host: + path: /home/kubect + - name: docker # 宿主机中的docker + host: + path: /var/run/docker.sock + +load: +trigger: + branch: + - prod + event: + - push diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..52ccbeb --- /dev/null +++ b/.env.development @@ -0,0 +1,2 @@ +# 开发环境基地址 +VITE_BASE_URL='/api' diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..ed9074e --- /dev/null +++ b/.env.production @@ -0,0 +1,3 @@ +# 生产环境基地址 +VITE_BASE_URL='/api' + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b737b8e --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d19f127 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM 10.7.127.190:38080/nginx:latest + +RUN rm -rf /etc/nginx/conf.d/default.conf +RUN rm -rf /etc/nginx/nginx.conf +COPY default.conf /etc/nginx/conf.d +COPY nginx.conf /etc/nginx/ + +#RUN useradd -b /home/clay -m -s /bin/bash clay +#RUN chmod a+xr -R /home/clay && chown clay:clay -R /home/clay +#USER clay + +COPY ./dist /home/clay + +WORKDIR /home/clay + + +EXPOSE 80 diff --git a/README.md b/README.md new file mode 100644 index 0000000..0e7792c --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# 科技创新项目管理平台 + diff --git a/default.conf b/default.conf new file mode 100644 index 0000000..f85e348 --- /dev/null +++ b/default.conf @@ -0,0 +1,19 @@ +server { + listen 80; + listen [::]:80; + + location /api { + proxy_pass http://gateway.dev.svc.cluster.local:8080; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Port $server_port; + #proxy_set_header Host $host; + rewrite "^/api/(.*)$" /$1 break; + } + + location / { + root /home/clay; + index index.html index.htm; + } + +} diff --git a/deployment.yml b/deployment.yml new file mode 100644 index 0000000..3f1ab83 --- /dev/null +++ b/deployment.yml @@ -0,0 +1,51 @@ +apiVersion: v1 +kind: Service +metadata: + name: $DRONE_REPO_NAME +spec: + type: NodePort + ports: + - name: $PORTS_NAME + nodePort: $PORTS_PORT + port: 80 + protocol: TCP + targetPort: 80 + selector: + app: $DRONE_REPO_NAME + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: $DRONE_REPO_NAME +spec: + replicas: 1 + selector: + matchLabels: + app: $DRONE_REPO_NAME + template: + metadata: + labels: + app: $DRONE_REPO_NAME + spec: + imagePullSecrets: + - name: harbor + containers: + - image: $REGISTRY/$REGISTRY_NAMESPACE/$DRONE_REPO_NAME:$DRONE_COMMIT + name: $DRONE_REPO_NAME + imagePullPolicy: Always + env: + - name: TIME_ZONE + value: Asia/Shanghai + - name: REF_NAME + value: dev + resources: + requests: + memory: 0.1Gi + cpu: 0.1 + limits: + memory: 2Gi + cpu: 2 + ports: + - containerPort: 80 + name: app-port diff --git a/docker.sh b/docker.sh new file mode 100644 index 0000000..dbe7f9d --- /dev/null +++ b/docker.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# 定义应用组名 +group_name='clay' +# 定义应用名称 +app_name=$DRONE_REPO_NAME +# 定义应用版本 +app_version=$DRONE_COMMIT +echo ${app_version} +# 打包编译docker镜像 +echo '----build image start----' +docker build -t ${group_name}/${app_name} . +echo '----build image success----' +docker tag ${group_name}/${app_name} $REGISTRY/$REGISTRY_NAMESPACE/${app_name}:${app_version} +docker push $REGISTRY/$REGISTRY_NAMESPACE/${app_name}:${app_version} +echo 'push success' diff --git a/index.html b/index.html new file mode 100644 index 0000000..8308d5a --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + 科技创新项目管理平台 + + +
+ + + diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..3c6a8f4 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,51 @@ +user nginx; +worker_processes auto; + +error_log /var/log/nginx/error.log notice; +pid /var/run/nginx.pid; + + +events { + worker_connections 1024; +} +http { + include /etc/nginx/mime.types; + default_type application/octet-stream; + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Headers' '*'; + add_header 'Access-Control-Allow-Methods' '*'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + + keepalive_timeout 65; + + server { + listen 80; + listen [::]:80; + + location /api { + proxy_pass http://gateway.emosr.svc.cluster.local:8080; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Port $server_port; + proxy_set_header Host $host; + rewrite "^/api/(.*)$" /$1 break; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + client_max_body_size 30m; + } + + location / { + root /home/clay; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } +} +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f2404dc --- /dev/null +++ b/package.json @@ -0,0 +1,53 @@ +{ + "name": "mosr-web", + "version": "0.0.0", + "private": true, + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@antv/g6": "^3.5.7", + "@tinymce/tinymce-vue": "^4.0.7", + "axios": "^1.4.0", + "d3": "^7.8.5", + "docx-preview": "^0.3.2", + "echarts": "^5.4.2", + "element-plus": "^2.6.0", + "file-saver": "^2.0.5", + "highlight.js": "9.18.5", + "jquery": "^3.6.0", + "js-cookie": "^3.0.5", + "nprogress": "^0.2.0", + "pinia": "^2.0.35", + "sass": "^1.62.1", + "scss": "^0.2.4", + "sql-formatter": "^2.3.4", + "tinymce": "^5.0.4", + "unplugin-icons": "^0.16.1", + "vite-plugin-inspect": "^0.7.26", + "vue": "^3.2.47", + "vue-clipboard3": "^2.0.0", + "vue-codemirror": "^6.1.1", + "vue-json-viewer": "^3.0.4", + "vue-router": "^4.1.6", + "vue3-pdf-app": "^1.0.3", + "vue3-print-nb": "^0.1.4", + "vuedraggable": "^4.1.0", + "xlsx": "^0.18.5", + "xlsx-style-vite": "^0.0.2" + }, + "devDependencies": { + "@codemirror/lang-java": "^6.0.1", + "@codemirror/lang-javascript": "^6.1.9", + "@codemirror/lang-sql": "^6.5.4", + "@vitejs/plugin-vue": "^4.2.1", + "@vitejs/plugin-vue-jsx": "^3.0.1", + "lodash": "^4.17.21", + "unplugin-auto-import": "^0.15.3", + "unplugin-vue-components": "^0.24.1", + "vite": "^4.3.4", + "vite-plugin-svg-icons": "^0.4.0" + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..9d77955 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/home1.png b/public/home1.png new file mode 100644 index 0000000..057c601 Binary files /dev/null and b/public/home1.png differ diff --git a/public/home2.png b/public/home2.png new file mode 100644 index 0000000..9e7783d Binary files /dev/null and b/public/home2.png differ diff --git a/public/home3.png b/public/home3.png new file mode 100644 index 0000000..bf119af Binary files /dev/null and b/public/home3.png differ diff --git a/public/home4.png b/public/home4.png new file mode 100644 index 0000000..932d99e Binary files /dev/null and b/public/home4.png differ diff --git a/public/langs/zh_CN.js b/public/langs/zh_CN.js new file mode 100644 index 0000000..96e067c --- /dev/null +++ b/public/langs/zh_CN.js @@ -0,0 +1 @@ +tinymce.addI18n("zh_CN",{"Redo":"\u91cd\u505a","Undo":"\u64a4\u9500","Cut":"\u526a\u5207","Copy":"\u590d\u5236","Paste":"\u7c98\u8d34","Select all":"\u5168\u9009","New document":"\u65b0\u5efa\u6587\u6863","Ok":"\u786e\u5b9a","Cancel":"\u53d6\u6d88","Visual aids":"\u7f51\u683c\u7ebf","Bold":"\u7c97\u4f53","Italic":"\u659c\u4f53","Underline":"\u4e0b\u5212\u7ebf","Strikethrough":"\u5220\u9664\u7ebf","Superscript":"\u4e0a\u6807","Subscript":"\u4e0b\u6807","Clear formatting":"\u6e05\u9664\u683c\u5f0f","Remove":"\u79fb\u9664","Align left":"\u5de6\u5bf9\u9f50","Align center":"\u5c45\u4e2d\u5bf9\u9f50","Align right":"\u53f3\u5bf9\u9f50","No alignment":"\u672a\u5bf9\u9f50","Justify":"\u4e24\u7aef\u5bf9\u9f50","Bullet list":"\u65e0\u5e8f\u5217\u8868","Numbered list":"\u6709\u5e8f\u5217\u8868","Decrease indent":"\u51cf\u5c11\u7f29\u8fdb","Increase indent":"\u589e\u52a0\u7f29\u8fdb","Close":"\u5173\u95ed","Formats":"\u683c\u5f0f","Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":"\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u6253\u5f00\u526a\u8d34\u677f\uff0c\u8bf7\u4f7f\u7528Ctrl+X/C/V\u7b49\u5feb\u6377\u952e\u3002","Headings":"\u6807\u9898","Heading 1":"\u4e00\u7ea7\u6807\u9898","Heading 2":"\u4e8c\u7ea7\u6807\u9898","Heading 3":"\u4e09\u7ea7\u6807\u9898","Heading 4":"\u56db\u7ea7\u6807\u9898","Heading 5":"\u4e94\u7ea7\u6807\u9898","Heading 6":"\u516d\u7ea7\u6807\u9898","Preformatted":"\u9884\u5148\u683c\u5f0f\u5316\u7684","Div":"Div","Pre":"\u524d\u8a00","Code":"\u4ee3\u7801","Paragraph":"\u6bb5\u843d","Blockquote":"\u5f15\u6587\u533a\u5757","Inline":"\u6587\u672c","Blocks":"\u6837\u5f0f","Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.":"\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002","Fonts":"\u5b57\u4f53","Font sizes":"\u5b57\u4f53\u5927\u5c0f","Class":"\u7c7b\u578b","Browse for an image":"\u6d4f\u89c8\u56fe\u50cf","OR":"\u6216","Drop an image here":"\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64","Upload":"\u4e0a\u4f20","Uploading image":"\u4e0a\u4f20\u56fe\u7247","Block":"\u5757","Align":"\u5bf9\u9f50","Default":"\u9884\u8bbe","Circle":"\u7a7a\u5fc3\u5706","Disc":"\u5b9e\u5fc3\u5706","Square":"\u5b9e\u5fc3\u65b9\u5757","Lower Alpha":"\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd","Lower Greek":"\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd","Lower Roman":"\u5c0f\u5199\u7f57\u9a6c\u6570\u5b57","Upper Alpha":"\u5927\u5199\u82f1\u6587\u5b57\u6bcd","Upper Roman":"\u5927\u5199\u7f57\u9a6c\u6570\u5b57","Anchor...":"\u951a\u70b9...","Anchor":"\u951a\u70b9","Name":"\u540d\u79f0","ID":"ID","ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.":"ID\u5e94\u8be5\u4ee5\u82f1\u6587\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u9762\u53ea\u80fd\u6709\u82f1\u6587\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002","You have unsaved changes are you sure you want to navigate away?":"\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f","Restore last draft":"\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f","Special character...":"\u7279\u6b8a\u5b57\u7b26...","Special Character":"\u7279\u6b8a\u5b57\u7b26","Source code":"\u6e90\u4ee3\u7801","Insert/Edit code sample":"\u63d2\u5165/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b","Language":"\u8bed\u8a00","Code sample...":"\u793a\u4f8b\u4ee3\u7801...","Left to right":"\u7531\u5de6\u5230\u53f3","Right to left":"\u7531\u53f3\u5230\u5de6","Title":"\u6807\u9898","Fullscreen":"\u5168\u5c4f","Action":"\u52a8\u4f5c","Shortcut":"\u5feb\u6377\u65b9\u5f0f","Help":"\u5e2e\u52a9","Address":"\u5730\u5740","Focus to menubar":"\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f","Focus to toolbar":"\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f","Focus to element path":"\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84","Focus to contextual toolbar":"\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355","Insert link (if link plugin activated)":"\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)","Save (if save plugin activated)":"\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)","Find (if searchreplace plugin activated)":"\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)","Plugins installed ({0}):":"\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):","Premium plugins:":"\u4f18\u79c0\u63d2\u4ef6\uff1a","Learn more...":"\u4e86\u89e3\u66f4\u591a...","You are using {0}":"\u4f60\u6b63\u5728\u4f7f\u7528 {0}","Plugins":"\u63d2\u4ef6","Handy Shortcuts":"\u5feb\u6377\u952e","Horizontal line":"\u6c34\u5e73\u5206\u5272\u7ebf","Insert/edit image":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","Alternative description":"\u66ff\u4ee3\u63cf\u8ff0","Accessibility":"\u8f85\u52a9\u529f\u80fd","Image is decorative":"\u56fe\u50cf\u662f\u88c5\u9970\u6027\u7684","Source":"\u6e90","Dimensions":"\u5c3a\u5bf8","Constrain proportions":"\u4fdd\u6301\u6bd4\u4f8b","General":"\u4e00\u822c","Advanced":"\u9ad8\u7ea7","Style":"\u6837\u5f0f","Vertical space":"\u5782\u76f4\u95f4\u8ddd","Horizontal space":"\u6c34\u5e73\u95f4\u8ddd","Border":"\u6846\u7ebf","Insert image":"\u63d2\u5165\u56fe\u7247","Image...":"\u56fe\u7247...","Image list":"\u56fe\u7247\u6e05\u5355","Resize":"\u8c03\u6574\u5927\u5c0f","Insert date/time":"\u63d2\u5165\u65e5\u671f/\u65f6\u95f4","Date/time":"\u65e5\u671f/\u65f6\u95f4","Insert/edit link":"\u63d2\u5165/\u7f16\u8f91\u94fe\u63a5","Text to display":"\u8981\u663e\u793a\u7684\u6587\u672c","Url":"\u5730\u5740","Open link in...":"\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...","Current window":"\u5f53\u524d\u7a97\u53e3","None":"\u65e0","New window":"\u65b0\u7a97\u53e3","Open link":"\u6253\u5f00\u94fe\u63a5","Remove link":"\u79fb\u9664\u94fe\u63a5","Anchors":"\u951a\u70b9","Link...":"\u94fe\u63a5...","Paste or type a link":"\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5","The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?":"\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto: \u524d\u7f00\u5417\uff1f","The URL you entered seems to be an external link. Do you want to add the required http:// prefix?":"\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:// \u524d\u7f00\u5417\uff1f","The URL you entered seems to be an external link. Do you want to add the required https:// prefix?":"\u60a8\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\u3002\u60a8\u60f3\u6dfb\u52a0\u6240\u9700\u7684 https:// \u524d\u7f00\u5417\uff1f","Link list":"\u94fe\u63a5\u6e05\u5355","Insert video":"\u63d2\u5165\u89c6\u9891","Insert/edit video":"\u63d2\u5165/\u7f16\u8f91\u89c6\u9891","Insert/edit media":"\u63d2\u5165/\u7f16\u8f91\u5a92\u4f53","Alternative source":"\u955c\u50cf","Alternative source URL":"\u66ff\u4ee3\u6765\u6e90\u7f51\u5740","Media poster (Image URL)":"\u5c01\u9762(\u56fe\u7247\u5730\u5740)","Paste your embed code below:":"\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:","Embed":"\u5185\u5d4c","Media...":"\u591a\u5a92\u4f53...","Nonbreaking space":"\u4e0d\u95f4\u65ad\u7a7a\u683c","Page break":"\u5206\u9875\u7b26","Paste as text":"\u7c98\u8d34\u4e3a\u6587\u672c","Preview":"\u9884\u89c8","Print":"\u6253\u5370","Print...":"\u6253\u5370...","Save":"\u4fdd\u5b58","Find":"\u5bfb\u627e","Replace with":"\u66ff\u6362\u4e3a","Replace":"\u66ff\u6362","Replace all":"\u66ff\u6362\u5168\u90e8","Previous":"\u4e0a\u4e00\u4e2a","Next":"\u4e0b\u4e00\u4e2a","Find and Replace":"\u67e5\u627e\u548c\u66ff\u6362","Find and replace...":"\u67e5\u627e\u5e76\u66ff\u6362...","Could not find the specified string.":"\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9\u3002","Match case":"\u5927\u5c0f\u5199\u5339\u914d","Find whole words only":"\u5168\u5b57\u5339\u914d","Find in selection":"\u5728\u9009\u533a\u4e2d\u67e5\u627e","Insert table":"\u63d2\u5165\u8868\u683c","Table properties":"\u8868\u683c\u5c5e\u6027","Delete table":"\u5220\u9664\u8868\u683c","Cell":"\u5355\u5143\u683c","Row":"\u884c","Column":"\u680f\u76ee","Cell properties":"\u5355\u5143\u683c\u5c5e\u6027","Merge cells":"\u5408\u5e76\u5355\u5143\u683c","Split cell":"\u62c6\u5206\u5355\u5143\u683c","Insert row before":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c","Insert row after":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","Delete row":"\u5220\u9664\u884c","Row properties":"\u884c\u5c5e\u6027","Cut row":"\u526a\u5207\u884c","Cut column":"\u526a\u5207\u5217","Copy row":"\u590d\u5236\u884c","Copy column":"\u590d\u5236\u5217","Paste row before":"\u7c98\u8d34\u884c\u5230\u4e0a\u65b9","Paste column before":"\u7c98\u8d34\u6b64\u5217\u524d","Paste row after":"\u7c98\u8d34\u884c\u5230\u4e0b\u65b9","Paste column after":"\u7c98\u8d34\u540e\u9762\u7684\u5217","Insert column before":"\u5728\u5de6\u4fa7\u63d2\u5165\u5217","Insert column after":"\u5728\u53f3\u4fa7\u63d2\u5165\u5217","Delete column":"\u5220\u9664\u5217","Cols":"\u5217","Rows":"\u884c\u6570","Width":"\u5bbd\u5ea6","Height":"\u9ad8\u5ea6","Cell spacing":"\u5355\u5143\u683c\u5916\u95f4\u8ddd","Cell padding":"\u5355\u5143\u683c\u5185\u8fb9\u8ddd","Row clipboard actions":"\u884c\u526a\u8d34\u677f\u64cd\u4f5c","Column clipboard actions":"\u5217\u526a\u8d34\u677f\u64cd\u4f5c","Table styles":"\u8868\u683c\u6837\u5f0f","Cell styles":"\u5355\u5143\u683c\u6837\u5f0f","Column header":"\u5217\u6807\u9898","Row header":"\u884c\u5934","Table caption":"\u8868\u683c\u6807\u9898","Caption":"\u6807\u9898","Show caption":"\u663e\u793a\u6807\u9898","Left":"\u5de6","Center":"\u5c45\u4e2d","Right":"\u53f3","Cell type":"\u50a8\u5b58\u683c\u522b","Scope":"\u8303\u56f4","Alignment":"\u5bf9\u9f50","Horizontal align":"\u6c34\u5e73\u5bf9\u9f50","Vertical align":"\u5782\u76f4\u5bf9\u9f50","Top":"\u4e0a\u65b9\u5bf9\u9f50","Middle":"\u5c45\u4e2d\u5bf9\u9f50","Bottom":"\u4e0b\u65b9\u5bf9\u9f50","Header cell":"\u8868\u5934\u5355\u5143\u683c","Row group":"\u884c\u7ec4","Column group":"\u5217\u7ec4","Row type":"\u884c\u7c7b\u578b","Header":"\u8868\u5934","Body":"\u8868\u4f53","Footer":"\u8868\u5c3e","Border color":"\u6846\u7ebf\u989c\u8272","Solid":"\u5b9e\u7ebf","Dotted":"\u865a\u7ebf","Dashed":"\u865a\u7ebf","Double":"\u53cc\u7cbe\u5ea6","Groove":"\u51f9\u69fd","Ridge":"\u6d77\u810a\u5ea7","Inset":"\u5d4c\u5165","Outset":"\u5916\u7f6e","Hidden":"\u9690\u85cf","Insert template...":"\u63d2\u5165\u6a21\u677f...","Templates":"\u6a21\u677f","Template":"\u6a21\u677f","Insert Template":"\u63d2\u5165\u6a21\u677f","Text color":"\u6587\u672c\u989c\u8272","Background color":"\u80cc\u666f\u989c\u8272","Custom...":"\u81ea\u5b9a\u4e49......","Custom color":"\u81ea\u5b9a\u4e49\u989c\u8272","No color":"\u65e0","Remove color":"\u79fb\u9664\u989c\u8272","Show blocks":"\u663e\u793a\u533a\u5757\u8fb9\u6846","Show invisible characters":"\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26","Word count":"\u5b57\u6570","Count":"\u8ba1\u6570","Document":"\u6587\u6863","Selection":"\u9009\u62e9","Words":"\u5355\u8bcd","Words: {0}":"\u5b57\u6570\uff1a{0}","{0} words":"{0} \u5b57","File":"\u6587\u4ef6","Edit":"\u7f16\u8f91","Insert":"\u63d2\u5165","View":"\u67e5\u770b","Format":"\u683c\u5f0f","Table":"\u8868\u683c","Tools":"\u5de5\u5177","Powered by {0}":"\u7531{0}\u9a71\u52a8","Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help":"\u7f16\u8f91\u533a\u3002\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9","Image title":"\u56fe\u7247\u6807\u9898","Border width":"\u8fb9\u6846\u5bbd\u5ea6","Border style":"\u8fb9\u6846\u6837\u5f0f","Error":"\u9519\u8bef","Warn":"\u8b66\u544a","Valid":"\u6709\u6548","To open the popup, press Shift+Enter":"\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846","Rich Text Area":"\u5bcc\u6587\u672c\u533a\u57df","Rich Text Area. Press ALT-0 for help.":"\u7f16\u8f91\u533a\u3002\u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9\u3002","System Font":"\u7cfb\u7edf\u5b57\u4f53","Failed to upload image: {0}":"\u56fe\u7247\u4e0a\u4f20\u5931\u8d25: {0}","Failed to load plugin: {0} from url {1}":"\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0} \u6765\u81ea\u94fe\u63a5 {1}","Failed to load plugin url: {0}":"\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25 \u94fe\u63a5: {0}","Failed to initialize plugin: {0}":"\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}","example":"\u793a\u4f8b","Search":"\u641c\u7d22","All":"\u5168\u90e8","Currency":"\u8d27\u5e01","Text":"\u6587\u5b57","Quotations":"\u5f15\u7528","Mathematical":"\u6570\u5b66","Extended Latin":"\u62c9\u4e01\u8bed\u6269\u5145","Symbols":"\u7b26\u53f7","Arrows":"\u7bad\u5934","User Defined":"\u81ea\u5b9a\u4e49","dollar sign":"\u7f8e\u5143\u7b26\u53f7","currency sign":"\u8d27\u5e01\u7b26\u53f7","euro-currency sign":"\u6b27\u5143\u7b26\u53f7","colon sign":"\u5192\u53f7","cruzeiro sign":"\u514b\u9c81\u8d5b\u7f57\u5e01\u7b26\u53f7","french franc sign":"\u6cd5\u90ce\u7b26\u53f7","lira sign":"\u91cc\u62c9\u7b26\u53f7","mill sign":"\u5bc6\u5c14\u7b26\u53f7","naira sign":"\u5948\u62c9\u7b26\u53f7","peseta sign":"\u6bd4\u585e\u5854\u7b26\u53f7","rupee sign":"\u5362\u6bd4\u7b26\u53f7","won sign":"\u97e9\u5143\u7b26\u53f7","new sheqel sign":"\u65b0\u8c22\u514b\u5c14\u7b26\u53f7","dong sign":"\u8d8a\u5357\u76fe\u7b26\u53f7","kip sign":"\u8001\u631d\u57fa\u666e\u7b26\u53f7","tugrik sign":"\u56fe\u683c\u91cc\u514b\u7b26\u53f7","drachma sign":"\u5fb7\u62c9\u514b\u9a6c\u7b26\u53f7","german penny symbol":"\u5fb7\u56fd\u4fbf\u58eb\u7b26\u53f7","peso sign":"\u6bd4\u7d22\u7b26\u53f7","guarani sign":"\u74dc\u62c9\u5c3c\u7b26\u53f7","austral sign":"\u6fb3\u5143\u7b26\u53f7","hryvnia sign":"\u683c\u91cc\u592b\u5c3c\u4e9a\u7b26\u53f7","cedi sign":"\u585e\u5730\u7b26\u53f7","livre tournois sign":"\u91cc\u5f17\u5f17\u5c14\u7b26\u53f7","spesmilo sign":"spesmilo\u7b26\u53f7","tenge sign":"\u575a\u6208\u7b26\u53f7","indian rupee sign":"\u5370\u5ea6\u5362\u6bd4","turkish lira sign":"\u571f\u8033\u5176\u91cc\u62c9","nordic mark sign":"\u5317\u6b27\u9a6c\u514b","manat sign":"\u9a6c\u7eb3\u7279\u7b26\u53f7","ruble sign":"\u5362\u5e03\u7b26\u53f7","yen character":"\u65e5\u5143\u5b57\u6837","yuan character":"\u4eba\u6c11\u5e01\u5143\u5b57\u6837","yuan character, in hong kong and taiwan":"\u5143\u5b57\u6837\uff08\u6e2f\u53f0\u5730\u533a\uff09","yen/yuan character variant one":"\u5143\u5b57\u6837\uff08\u5927\u5199\uff09","Emojis":"Emojis","Emojis...":"Emojis...","Loading emojis...":"\u6b63\u5728\u52a0\u8f7dEmojis...","Could not load emojis":"\u65e0\u6cd5\u52a0\u8f7dEmojis","People":"\u4eba\u7c7b","Animals and Nature":"\u52a8\u7269\u548c\u81ea\u7136","Food and Drink":"\u98df\u7269\u548c\u996e\u54c1","Activity":"\u6d3b\u52a8","Travel and Places":"\u65c5\u6e38\u548c\u5730\u70b9","Objects":"\u7269\u4ef6","Flags":"\u65d7\u5e1c","Characters":"\u5b57\u7b26","Characters (no spaces)":"\u5b57\u7b26(\u65e0\u7a7a\u683c)","{0} characters":"{0} \u4e2a\u5b57\u7b26","Error: Form submit field collision.":"\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81\u3002","Error: No form element found.":"\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6\u3002","Color swatch":"\u989c\u8272\u6837\u672c","Color Picker":"\u9009\u8272\u5668","Invalid hex color code: {0}":"\u5341\u516d\u8fdb\u5236\u989c\u8272\u4ee3\u7801\u65e0\u6548\uff1a {0}","Invalid input":"\u65e0\u6548\u8f93\u5165","R":"R","Red component":"\u7ea2\u8272\u90e8\u5206","G":"G","Green component":"\u7eff\u8272\u90e8\u5206","B":"B","Blue component":"\u767d\u8272\u90e8\u5206","#":"#","Hex color code":"\u5341\u516d\u8fdb\u5236\u989c\u8272\u4ee3\u7801","Range 0 to 255":"\u8303\u56f40\u81f3255","Turquoise":"\u9752\u7eff\u8272","Green":"\u7eff\u8272","Blue":"\u84dd\u8272","Purple":"\u7d2b\u8272","Navy Blue":"\u6d77\u519b\u84dd","Dark Turquoise":"\u6df1\u84dd\u7eff\u8272","Dark Green":"\u6df1\u7eff\u8272","Medium Blue":"\u4e2d\u84dd\u8272","Medium Purple":"\u4e2d\u7d2b\u8272","Midnight Blue":"\u6df1\u84dd\u8272","Yellow":"\u9ec4\u8272","Orange":"\u6a59\u8272","Red":"\u7ea2\u8272","Light Gray":"\u6d45\u7070\u8272","Gray":"\u7070\u8272","Dark Yellow":"\u6697\u9ec4\u8272","Dark Orange":"\u6df1\u6a59\u8272","Dark Red":"\u6df1\u7ea2\u8272","Medium Gray":"\u4e2d\u7070\u8272","Dark Gray":"\u6df1\u7070\u8272","Light Green":"\u6d45\u7eff\u8272","Light Yellow":"\u6d45\u9ec4\u8272","Light Red":"\u6d45\u7ea2\u8272","Light Purple":"\u6d45\u7d2b\u8272","Light Blue":"\u6d45\u84dd\u8272","Dark Purple":"\u6df1\u7d2b\u8272","Dark Blue":"\u6df1\u84dd\u8272","Black":"\u9ed1\u8272","White":"\u767d\u8272","Switch to or from fullscreen mode":"\u5207\u6362\u5168\u5c4f\u6a21\u5f0f","Open help dialog":"\u6253\u5f00\u5e2e\u52a9\u5bf9\u8bdd\u6846","history":"\u5386\u53f2","styles":"\u6837\u5f0f","formatting":"\u683c\u5f0f\u5316","alignment":"\u5bf9\u9f50","indentation":"\u7f29\u8fdb","Font":"\u5b57\u4f53","Size":"\u5b57\u53f7","More...":"\u66f4\u591a...","Select...":"\u9009\u62e9...","Preferences":"\u9996\u9009\u9879","Yes":"\u662f","No":"\u5426","Keyboard Navigation":"\u952e\u76d8\u6307\u5f15","Version":"\u7248\u672c","Code view":"\u4ee3\u7801\u89c6\u56fe","Open popup menu for split buttons":"\u6253\u5f00\u5f39\u51fa\u5f0f\u83dc\u5355\uff0c\u7528\u4e8e\u62c6\u5206\u6309\u94ae","List Properties":"\u5217\u8868\u5c5e\u6027","List properties...":"\u6807\u9898\u5b57\u4f53\u5c5e\u6027","Start list at number":"\u4ee5\u6570\u5b57\u5f00\u59cb\u5217\u8868","Line height":"\u884c\u9ad8","Dropped file type is not supported":"\u6b64\u6587\u4ef6\u7c7b\u578b\u4e0d\u652f\u6301\u62d6\u653e","Loading...":"\u52a0\u8f7d\u4e2d...","ImageProxy HTTP error: Rejected request":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u8bf7\u6c42\u88ab\u62d2\u7edd","ImageProxy HTTP error: Could not find Image Proxy":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u65e0\u6cd5\u627e\u5230\u56fe\u7247\u4ee3\u7406","ImageProxy HTTP error: Incorrect Image Proxy URL":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u56fe\u7247\u4ee3\u7406\u5730\u5740\u9519\u8bef","ImageProxy HTTP error: Unknown ImageProxy error":"\u56fe\u7247\u4ee3\u7406\u8bf7\u6c42\u9519\u8bef\uff1a\u672a\u77e5\u7684\u56fe\u7247\u4ee3\u7406\u9519\u8bef"}); diff --git a/public/loading.gif b/public/loading.gif new file mode 100644 index 0000000..3fcefe7 Binary files /dev/null and b/public/loading.gif differ diff --git a/public/people.png b/public/people.png new file mode 100644 index 0000000..8ea0ecb Binary files /dev/null and b/public/people.png differ diff --git a/public/skins/content/default/content.css b/public/skins/content/default/content.css new file mode 100644 index 0000000..7517787 --- /dev/null +++ b/public/skins/content/default/content.css @@ -0,0 +1,61 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + line-height: 1.4; + margin: 1rem; +} +table { + border-collapse: collapse; +} +/* Apply a default padding if legacy cellpadding attribute is missing */ +table:not([cellpadding]) th, +table:not([cellpadding]) td { + padding: 0.4rem; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-width"]) th, +table[border]:not([border="0"]):not([style*="border-width"]) td { + border-width: 1px; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-style"]) th, +table[border]:not([border="0"]):not([style*="border-style"]) td { + border-style: solid; +} +/* Set default table styles if a table has a positive border attribute + and no inline css */ +table[border]:not([border="0"]):not([style*="border-color"]) th, +table[border]:not([border="0"]):not([style*="border-color"]) td { + border-color: #ccc; +} +figure { + display: table; + margin: 1rem auto; +} +figure figcaption { + color: #999; + display: block; + margin-top: 0.25rem; + text-align: center; +} +hr { + border-color: #ccc; + border-style: solid; + border-width: 1px 0 0 0; +} +code { + background-color: #e8e8e8; + border-radius: 3px; + padding: 0.1rem 0.2rem; +} +.mce-content-body:not([dir=rtl]) blockquote { + border-left: 2px solid #ccc; + margin-left: 1.5rem; + padding-left: 1rem; +} +.mce-content-body[dir=rtl] blockquote { + border-right: 2px solid #ccc; + margin-right: 1.5rem; + padding-right: 1rem; +} diff --git a/public/skins/content/default/content.min.css b/public/skins/content/default/content.min.css new file mode 100644 index 0000000..54bb28d --- /dev/null +++ b/public/skins/content/default/content.min.css @@ -0,0 +1 @@ +body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen,Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif;line-height:1.4;margin:1rem}table{border-collapse:collapse}table:not([cellpadding]) td,table:not([cellpadding]) th{padding:.4rem}table[border]:not([border="0"]):not([style*=border-width]) td,table[border]:not([border="0"]):not([style*=border-width]) th{border-width:1px}table[border]:not([border="0"]):not([style*=border-style]) td,table[border]:not([border="0"]):not([style*=border-style]) th{border-style:solid}table[border]:not([border="0"]):not([style*=border-color]) td,table[border]:not([border="0"]):not([style*=border-color]) th{border-color:#ccc}figure{display:table;margin:1rem auto}figure figcaption{color:#999;display:block;margin-top:.25rem;text-align:center}hr{border-color:#ccc;border-style:solid;border-width:1px 0 0 0}code{background-color:#e8e8e8;border-radius:3px;padding:.1rem .2rem}.mce-content-body:not([dir=rtl]) blockquote{border-left:2px solid #ccc;margin-left:1.5rem;padding-left:1rem}.mce-content-body[dir=rtl] blockquote{border-right:2px solid #ccc;margin-right:1.5rem;padding-right:1rem} diff --git a/public/skins/ui/oxide/content.css b/public/skins/ui/oxide/content.css new file mode 100644 index 0000000..08c8d6e --- /dev/null +++ b/public/skins/ui/oxide/content.css @@ -0,0 +1,785 @@ +.mce-content-body .mce-item-anchor { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; +} +.mce-content-body .mce-item-anchor:empty { + cursor: default; + display: inline-block; + height: 12px !important; + padding: 0 2px; + -webkit-user-modify: read-only; + -moz-user-modify: read-only; + -webkit-user-select: all; + -moz-user-select: all; + user-select: all; + width: 8px !important; +} +.mce-content-body .mce-item-anchor:not(:empty) { + background-position-x: 2px; + display: inline-block; + padding-left: 12px; +} +.mce-content-body .mce-item-anchor[data-mce-selected] { + outline-offset: 1px; +} +.tox-comments-visible .tox-comment[contenteditable="false"]:not([data-mce-selected]), +.tox-comments-visible span.tox-comment img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #ffe89d; +} +.tox-comments-visible .tox-comment[contenteditable="false"][data-mce-annotation-active="true"]:not([data-mce-selected]) { + outline: 3px solid #fed635; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] img:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > audio:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] > video:not([data-mce-selected]), +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"] span.mce-preview-object:not([data-mce-selected]) { + outline: 3px solid #fed635; +} +.tox-comments-visible span.tox-comment:not([data-mce-selected]) { + background-color: #ffe89d; + outline: none; +} +.tox-comments-visible span.tox-comment[data-mce-annotation-active="true"]:not([data-mce-selected="inline-boundary"]) { + background-color: #fed635; +} +.tox-checklist > li:not(.tox-checklist--hidden) { + list-style: none; + margin: 0.25em 0; +} +.tox-checklist > li:not(.tox-checklist--hidden)::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); + cursor: pointer; + height: 1em; + margin-left: -1.5em; + margin-top: 0.125em; + position: absolute; + width: 1em; +} +.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before { + content: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); +} +[dir=rtl] .tox-checklist > li:not(.tox-checklist--hidden)::before { + margin-left: 0; + margin-right: -1.5em; +} +/* stylelint-disable */ +/* http://prismjs.com/ */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + -moz-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + hyphens: none; +} +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: 0.5em 0; + overflow: auto; +} +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: 0.1em; + border-radius: 0.3em; + white-space: normal; +} +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} +.token.punctuation { + color: #999; +} +.token.namespace { + opacity: 0.7; +} +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + /* This background color was intended by the author of this theme. */ + background: hsla(0, 0%, 100%, 0.5); +} +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} +.token.function, +.token.class-name { + color: #DD4A68; +} +.token.regex, +.token.important, +.token.variable { + color: #e90; +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} +.token.entity { + cursor: help; +} +/* stylelint-enable */ +.mce-content-body { + overflow-wrap: break-word; + word-wrap: break-word; +} +.mce-content-body .mce-visual-caret { + background-color: black; + background-color: currentColor; + position: absolute; +} +.mce-content-body .mce-visual-caret-hidden { + display: none; +} +.mce-content-body *[data-mce-caret] { + left: -1000px; + margin: 0; + padding: 0; + position: absolute; + right: auto; + top: 0; +} +.mce-content-body .mce-offscreen-selection { + left: -2000000px; + max-width: 1000000px; + position: absolute; +} +.mce-content-body *[contentEditable=false] { + cursor: default; +} +.mce-content-body *[contentEditable=true] { + cursor: text; +} +.tox-cursor-format-painter { + cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default; +} +div.mce-footnotes hr { + margin-inline-end: auto; + margin-inline-start: 0; + width: 25%; +} +div.mce-footnotes li > a.mce-footnotes-backlink { + text-decoration: none; +} +@media print { + sup.mce-footnote a { + color: black; + text-decoration: none; + } + div.mce-footnotes { + break-inside: avoid; + width: 100%; + } + div.mce-footnotes li > a.mce-footnotes-backlink { + display: none; + } +} +.mce-content-body figure.align-left { + float: left; +} +.mce-content-body figure.align-right { + float: right; +} +.mce-content-body figure.image.align-center { + display: table; + margin-left: auto; + margin-right: auto; +} +.mce-preview-object { + border: 1px solid gray; + display: inline-block; + line-height: 0; + margin: 0 2px 0 2px; + position: relative; +} +.mce-preview-object .mce-shim { + background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-preview-object[data-mce-selected="2"] .mce-shim { + display: none; +} +.mce-content-body .mce-mergetag { + cursor: default !important; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +.mce-content-body .mce-mergetag:hover { + background-color: rgba(0, 108, 231, 0.1); +} +.mce-content-body .mce-mergetag-affix { + background-color: rgba(0, 108, 231, 0.1); + color: #006ce7; +} +.mce-object { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; + border: 1px dashed #aaa; +} +.mce-pagebreak { + border: 1px dashed #aaa; + cursor: default; + display: block; + height: 5px; + margin-top: 15px; + page-break-before: always; + width: 100%; +} +@media print { + .mce-pagebreak { + border: 0; + } +} +.tiny-pageembed .mce-shim { + background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tiny-pageembed[data-mce-selected="2"] .mce-shim { + display: none; +} +.tiny-pageembed { + display: inline-block; + position: relative; +} +.tiny-pageembed--21by9, +.tiny-pageembed--16by9, +.tiny-pageembed--4by3, +.tiny-pageembed--1by1 { + display: block; + overflow: hidden; + padding: 0; + position: relative; + width: 100%; +} +.tiny-pageembed--21by9 { + padding-top: 42.857143%; +} +.tiny-pageembed--16by9 { + padding-top: 56.25%; +} +.tiny-pageembed--4by3 { + padding-top: 75%; +} +.tiny-pageembed--1by1 { + padding-top: 100%; +} +.tiny-pageembed--21by9 iframe, +.tiny-pageembed--16by9 iframe, +.tiny-pageembed--4by3 iframe, +.tiny-pageembed--1by1 iframe { + border: 0; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-content-body[data-mce-placeholder] { + position: relative; +} +.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before { + color: rgba(34, 47, 62, 0.7); + content: attr(data-mce-placeholder); + position: absolute; +} +.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before { + left: 1px; +} +.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before { + right: 1px; +} +.mce-content-body div.mce-resizehandle { + background-color: #4099ff; + border-color: #4099ff; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + height: 10px; + position: absolute; + width: 10px; + z-index: 1298; +} +.mce-content-body div.mce-resizehandle:hover { + background-color: #4099ff; +} +.mce-content-body div.mce-resizehandle:nth-of-type(1) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(2) { + cursor: nesw-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(3) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(4) { + cursor: nesw-resize; +} +.mce-content-body .mce-resize-backdrop { + z-index: 10000; +} +.mce-content-body .mce-clonedresizable { + cursor: default; + opacity: 0.5; + outline: 1px dashed black; + position: absolute; + z-index: 10001; +} +.mce-content-body .mce-clonedresizable.mce-resizetable-columns th, +.mce-content-body .mce-clonedresizable.mce-resizetable-columns td { + border: 0; +} +.mce-content-body .mce-resize-helper { + background: #555; + background: rgba(0, 0, 0, 0.75); + border: 1px; + border-radius: 3px; + color: white; + display: none; + font-family: sans-serif; + font-size: 12px; + line-height: 14px; + margin: 5px 10px; + padding: 5px; + position: absolute; + white-space: nowrap; + z-index: 10002; +} +.tox-rtc-user-selection { + position: relative; +} +.tox-rtc-user-cursor { + bottom: 0; + cursor: default; + position: absolute; + top: 0; + width: 2px; +} +.tox-rtc-user-cursor::before { + background-color: inherit; + border-radius: 50%; + content: ''; + display: block; + height: 8px; + position: absolute; + right: -3px; + top: -3px; + width: 8px; +} +.tox-rtc-user-cursor:hover::after { + background-color: inherit; + border-radius: 100px; + box-sizing: border-box; + color: #fff; + content: attr(data-user); + display: block; + font-size: 12px; + font-weight: bold; + left: -5px; + min-height: 8px; + min-width: 8px; + padding: 0 12px; + position: absolute; + top: -11px; + white-space: nowrap; + z-index: 1000; +} +.tox-rtc-user-selection--1 .tox-rtc-user-cursor { + background-color: #2dc26b; +} +.tox-rtc-user-selection--2 .tox-rtc-user-cursor { + background-color: #e03e2d; +} +.tox-rtc-user-selection--3 .tox-rtc-user-cursor { + background-color: #f1c40f; +} +.tox-rtc-user-selection--4 .tox-rtc-user-cursor { + background-color: #3598db; +} +.tox-rtc-user-selection--5 .tox-rtc-user-cursor { + background-color: #b96ad9; +} +.tox-rtc-user-selection--6 .tox-rtc-user-cursor { + background-color: #e67e23; +} +.tox-rtc-user-selection--7 .tox-rtc-user-cursor { + background-color: #aaa69d; +} +.tox-rtc-user-selection--8 .tox-rtc-user-cursor { + background-color: #f368e0; +} +.tox-rtc-remote-image { + background: #eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center; + border: 1px solid #ccc; + min-height: 240px; + min-width: 320px; +} +.mce-match-marker { + background: #aaa; + color: #fff; +} +.mce-match-marker-selected { + background: #39f; + color: #fff; +} +.mce-match-marker-selected::-moz-selection { + background: #39f; + color: #fff; +} +.mce-match-marker-selected::selection { + background: #39f; + color: #fff; +} +.mce-content-body img[data-mce-selected], +.mce-content-body video[data-mce-selected], +.mce-content-body audio[data-mce-selected], +.mce-content-body object[data-mce-selected], +.mce-content-body embed[data-mce-selected], +.mce-content-body table[data-mce-selected], +.mce-content-body details[data-mce-selected] { + outline: 3px solid #b4d7ff; +} +.mce-content-body hr[data-mce-selected] { + outline: 3px solid #b4d7ff; + outline-offset: 1px; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false][data-mce-selected] { + cursor: not-allowed; + outline: 3px solid #b4d7ff; +} +.mce-content-body.mce-content-readonly *[contentEditable=true]:focus, +.mce-content-body.mce-content-readonly *[contentEditable=true]:hover { + outline: none; +} +.mce-content-body *[data-mce-selected="inline-boundary"] { + background-color: #b4d7ff; +} +.mce-content-body .mce-edit-focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body td[data-mce-selected], +.mce-content-body th[data-mce-selected] { + position: relative; +} +.mce-content-body td[data-mce-selected]::-moz-selection, +.mce-content-body th[data-mce-selected]::-moz-selection { + background: none; +} +.mce-content-body td[data-mce-selected]::selection, +.mce-content-body th[data-mce-selected]::selection { + background: none; +} +.mce-content-body td[data-mce-selected] *, +.mce-content-body th[data-mce-selected] * { + outline: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +.mce-content-body td[data-mce-selected]::after, +.mce-content-body th[data-mce-selected]::after { + background-color: rgba(180, 215, 255, 0.7); + border: 1px solid rgba(180, 215, 255, 0.7); + bottom: -1px; + content: ''; + left: -1px; + mix-blend-mode: multiply; + position: absolute; + right: -1px; + top: -1px; +} +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + .mce-content-body td[data-mce-selected]::after, + .mce-content-body th[data-mce-selected]::after { + border-color: rgba(0, 84, 180, 0.7); + } +} +.mce-content-body img[data-mce-selected]::-moz-selection { + background: none; +} +.mce-content-body img[data-mce-selected]::selection { + background: none; +} +.ephox-snooker-resizer-bar { + background-color: #b4d7ff; + opacity: 0; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +.ephox-snooker-resizer-cols { + cursor: col-resize; +} +.ephox-snooker-resizer-rows { + cursor: row-resize; +} +.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging { + opacity: 1; +} +.mce-spellchecker-word { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; + height: 2rem; +} +.mce-spellchecker-grammar { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; +} +.mce-toc { + border: 1px solid gray; +} +.mce-toc h2 { + margin: 4px; +} +.mce-toc li { + list-style-type: none; +} +[data-mce-block] { + display: block; +} +table[style*="border-width: 0px"], +.mce-item-table:not([border]), +.mce-item-table[border="0"], +table[style*="border-width: 0px"] td, +.mce-item-table:not([border]) td, +.mce-item-table[border="0"] td, +table[style*="border-width: 0px"] th, +.mce-item-table:not([border]) th, +.mce-item-table[border="0"] th, +table[style*="border-width: 0px"] caption, +.mce-item-table:not([border]) caption, +.mce-item-table[border="0"] caption { + border: 1px dashed #bbb; +} +.mce-visualblocks p, +.mce-visualblocks h1, +.mce-visualblocks h2, +.mce-visualblocks h3, +.mce-visualblocks h4, +.mce-visualblocks h5, +.mce-visualblocks h6, +.mce-visualblocks div:not([data-mce-bogus]), +.mce-visualblocks section, +.mce-visualblocks article, +.mce-visualblocks blockquote, +.mce-visualblocks address, +.mce-visualblocks pre, +.mce-visualblocks figure, +.mce-visualblocks figcaption, +.mce-visualblocks hgroup, +.mce-visualblocks aside, +.mce-visualblocks ul, +.mce-visualblocks ol, +.mce-visualblocks dl { + background-repeat: no-repeat; + border: 1px dashed #bbb; + margin-left: 3px; + padding-top: 10px; +} +.mce-visualblocks p { + background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); +} +.mce-visualblocks h1 { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); +} +.mce-visualblocks h2 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); +} +.mce-visualblocks h3 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); +} +.mce-visualblocks h4 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); +} +.mce-visualblocks h5 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); +} +.mce-visualblocks h6 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); +} +.mce-visualblocks div:not([data-mce-bogus]) { + background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); +} +.mce-visualblocks section { + background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); +} +.mce-visualblocks article { + background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); +} +.mce-visualblocks blockquote { + background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); +} +.mce-visualblocks address { + background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); +} +.mce-visualblocks pre { + background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); +} +.mce-visualblocks figure { + background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); +} +.mce-visualblocks figcaption { + border: 1px dashed #bbb; +} +.mce-visualblocks hgroup { + background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); +} +.mce-visualblocks aside { + background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); +} +.mce-visualblocks ul { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==); +} +.mce-visualblocks ol { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); +} +.mce-visualblocks dl { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); +} +.mce-visualblocks:not([dir=rtl]) p, +.mce-visualblocks:not([dir=rtl]) h1, +.mce-visualblocks:not([dir=rtl]) h2, +.mce-visualblocks:not([dir=rtl]) h3, +.mce-visualblocks:not([dir=rtl]) h4, +.mce-visualblocks:not([dir=rtl]) h5, +.mce-visualblocks:not([dir=rtl]) h6, +.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]), +.mce-visualblocks:not([dir=rtl]) section, +.mce-visualblocks:not([dir=rtl]) article, +.mce-visualblocks:not([dir=rtl]) blockquote, +.mce-visualblocks:not([dir=rtl]) address, +.mce-visualblocks:not([dir=rtl]) pre, +.mce-visualblocks:not([dir=rtl]) figure, +.mce-visualblocks:not([dir=rtl]) figcaption, +.mce-visualblocks:not([dir=rtl]) hgroup, +.mce-visualblocks:not([dir=rtl]) aside, +.mce-visualblocks:not([dir=rtl]) ul, +.mce-visualblocks:not([dir=rtl]) ol, +.mce-visualblocks:not([dir=rtl]) dl { + margin-left: 3px; +} +.mce-visualblocks[dir=rtl] p, +.mce-visualblocks[dir=rtl] h1, +.mce-visualblocks[dir=rtl] h2, +.mce-visualblocks[dir=rtl] h3, +.mce-visualblocks[dir=rtl] h4, +.mce-visualblocks[dir=rtl] h5, +.mce-visualblocks[dir=rtl] h6, +.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]), +.mce-visualblocks[dir=rtl] section, +.mce-visualblocks[dir=rtl] article, +.mce-visualblocks[dir=rtl] blockquote, +.mce-visualblocks[dir=rtl] address, +.mce-visualblocks[dir=rtl] pre, +.mce-visualblocks[dir=rtl] figure, +.mce-visualblocks[dir=rtl] figcaption, +.mce-visualblocks[dir=rtl] hgroup, +.mce-visualblocks[dir=rtl] aside, +.mce-visualblocks[dir=rtl] ul, +.mce-visualblocks[dir=rtl] ol, +.mce-visualblocks[dir=rtl] dl { + background-position-x: right; + margin-right: 3px; +} +.mce-nbsp, +.mce-shy { + background: #aaa; +} +.mce-shy::after { + content: '-'; +} +body { + font-family: sans-serif; +} +table { + border-collapse: collapse; +} diff --git a/public/skins/ui/oxide/content.min.css b/public/skins/ui/oxide/content.min.css new file mode 100644 index 0000000..58c9b4b --- /dev/null +++ b/public/skins/ui/oxide/content.min.css @@ -0,0 +1 @@ +.mce-content-body .mce-item-anchor{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center}.mce-content-body .mce-item-anchor:empty{cursor:default;display:inline-block;height:12px!important;padding:0 2px;-webkit-user-modify:read-only;-moz-user-modify:read-only;-webkit-user-select:all;-moz-user-select:all;user-select:all;width:8px!important}.mce-content-body .mce-item-anchor:not(:empty){background-position-x:2px;display:inline-block;padding-left:12px}.mce-content-body .mce-item-anchor[data-mce-selected]{outline-offset:1px}.tox-comments-visible .tox-comment[contenteditable=false]:not([data-mce-selected]),.tox-comments-visible span.tox-comment img:not([data-mce-selected]),.tox-comments-visible span.tox-comment span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment>video:not([data-mce-selected]){outline:3px solid #ffe89d}.tox-comments-visible .tox-comment[contenteditable=false][data-mce-annotation-active=true]:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] img:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true] span.mce-preview-object:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>audio:not([data-mce-selected]),.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]>video:not([data-mce-selected]){outline:3px solid #fed635}.tox-comments-visible span.tox-comment:not([data-mce-selected]){background-color:#ffe89d;outline:0}.tox-comments-visible span.tox-comment[data-mce-annotation-active=true]:not([data-mce-selected=inline-boundary]){background-color:#fed635}.tox-checklist>li:not(.tox-checklist--hidden){list-style:none;margin:.25em 0}.tox-checklist>li:not(.tox-checklist--hidden)::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A");cursor:pointer;height:1em;margin-left:-1.5em;margin-top:.125em;position:absolute;width:1em}.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before{content:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A")}[dir=rtl] .tox-checklist>li:not(.tox-checklist--hidden)::before{margin-left:0;margin-right:-1.5em}code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.mce-content-body{overflow-wrap:break-word;word-wrap:break-word}.mce-content-body .mce-visual-caret{background-color:#000;background-color:currentColor;position:absolute}.mce-content-body .mce-visual-caret-hidden{display:none}.mce-content-body [data-mce-caret]{left:-1000px;margin:0;padding:0;position:absolute;right:auto;top:0}.mce-content-body .mce-offscreen-selection{left:-2000000px;max-width:1000000px;position:absolute}.mce-content-body [contentEditable=false]{cursor:default}.mce-content-body [contentEditable=true]{cursor:text}.tox-cursor-format-painter{cursor:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"),default}div.mce-footnotes hr{margin-inline-end:auto;margin-inline-start:0;width:25%}div.mce-footnotes li>a.mce-footnotes-backlink{text-decoration:none}@media print{sup.mce-footnote a{color:#000;text-decoration:none}div.mce-footnotes{break-inside:avoid;width:100%}div.mce-footnotes li>a.mce-footnotes-backlink{display:none}}.mce-content-body figure.align-left{float:left}.mce-content-body figure.align-right{float:right}.mce-content-body figure.image.align-center{display:table;margin-left:auto;margin-right:auto}.mce-preview-object{border:1px solid gray;display:inline-block;line-height:0;margin:0 2px 0 2px;position:relative}.mce-preview-object .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-content-body .mce-mergetag{cursor:default!important;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body .mce-mergetag:hover{background-color:rgba(0,108,231,.1)}.mce-content-body .mce-mergetag-affix{background-color:rgba(0,108,231,.1);color:#006ce7}.mce-object{background:transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center;border:1px dashed #aaa}.mce-pagebreak{border:1px dashed #aaa;cursor:default;display:block;height:5px;margin-top:15px;page-break-before:always;width:100%}@media print{.mce-pagebreak{border:0}}.tiny-pageembed .mce-shim{background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);height:100%;left:0;position:absolute;top:0;width:100%}.tiny-pageembed[data-mce-selected="2"] .mce-shim{display:none}.tiny-pageembed{display:inline-block;position:relative}.tiny-pageembed--16by9,.tiny-pageembed--1by1,.tiny-pageembed--21by9,.tiny-pageembed--4by3{display:block;overflow:hidden;padding:0;position:relative;width:100%}.tiny-pageembed--21by9{padding-top:42.857143%}.tiny-pageembed--16by9{padding-top:56.25%}.tiny-pageembed--4by3{padding-top:75%}.tiny-pageembed--1by1{padding-top:100%}.tiny-pageembed--16by9 iframe,.tiny-pageembed--1by1 iframe,.tiny-pageembed--21by9 iframe,.tiny-pageembed--4by3 iframe{border:0;height:100%;left:0;position:absolute;top:0;width:100%}.mce-content-body[data-mce-placeholder]{position:relative}.mce-content-body[data-mce-placeholder]:not(.mce-visualblocks)::before{color:rgba(34,47,62,.7);content:attr(data-mce-placeholder);position:absolute}.mce-content-body:not([dir=rtl])[data-mce-placeholder]:not(.mce-visualblocks)::before{left:1px}.mce-content-body[dir=rtl][data-mce-placeholder]:not(.mce-visualblocks)::before{right:1px}.mce-content-body div.mce-resizehandle{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;height:10px;position:absolute;width:10px;z-index:1298}.mce-content-body div.mce-resizehandle:hover{background-color:#4099ff}.mce-content-body div.mce-resizehandle:nth-of-type(1){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(2){cursor:nesw-resize}.mce-content-body div.mce-resizehandle:nth-of-type(3){cursor:nwse-resize}.mce-content-body div.mce-resizehandle:nth-of-type(4){cursor:nesw-resize}.mce-content-body .mce-resize-backdrop{z-index:10000}.mce-content-body .mce-clonedresizable{cursor:default;opacity:.5;outline:1px dashed #000;position:absolute;z-index:10001}.mce-content-body .mce-clonedresizable.mce-resizetable-columns td,.mce-content-body .mce-clonedresizable.mce-resizetable-columns th{border:0}.mce-content-body .mce-resize-helper{background:#555;background:rgba(0,0,0,.75);border:1px;border-radius:3px;color:#fff;display:none;font-family:sans-serif;font-size:12px;line-height:14px;margin:5px 10px;padding:5px;position:absolute;white-space:nowrap;z-index:10002}.tox-rtc-user-selection{position:relative}.tox-rtc-user-cursor{bottom:0;cursor:default;position:absolute;top:0;width:2px}.tox-rtc-user-cursor::before{background-color:inherit;border-radius:50%;content:'';display:block;height:8px;position:absolute;right:-3px;top:-3px;width:8px}.tox-rtc-user-cursor:hover::after{background-color:inherit;border-radius:100px;box-sizing:border-box;color:#fff;content:attr(data-user);display:block;font-size:12px;font-weight:700;left:-5px;min-height:8px;min-width:8px;padding:0 12px;position:absolute;top:-11px;white-space:nowrap;z-index:1000}.tox-rtc-user-selection--1 .tox-rtc-user-cursor{background-color:#2dc26b}.tox-rtc-user-selection--2 .tox-rtc-user-cursor{background-color:#e03e2d}.tox-rtc-user-selection--3 .tox-rtc-user-cursor{background-color:#f1c40f}.tox-rtc-user-selection--4 .tox-rtc-user-cursor{background-color:#3598db}.tox-rtc-user-selection--5 .tox-rtc-user-cursor{background-color:#b96ad9}.tox-rtc-user-selection--6 .tox-rtc-user-cursor{background-color:#e67e23}.tox-rtc-user-selection--7 .tox-rtc-user-cursor{background-color:#aaa69d}.tox-rtc-user-selection--8 .tox-rtc-user-cursor{background-color:#f368e0}.tox-rtc-remote-image{background:#eaeaea url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2236%22%20height%3D%2212%22%20viewBox%3D%220%200%2036%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2218%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.33s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%20%20%3Ccircle%20cx%3D%2230%22%20cy%3D%226%22%20r%3D%223%22%20fill%3D%22rgba(0%2C%200%2C%200%2C%20.2)%22%3E%0A%20%20%20%20%3Canimate%20attributeName%3D%22r%22%20values%3D%223%3B5%3B3%22%20calcMode%3D%22linear%22%20begin%3D%22.66s%22%20dur%3D%221s%22%20repeatCount%3D%22indefinite%22%20%2F%3E%0A%20%20%3C%2Fcircle%3E%0A%3C%2Fsvg%3E%0A") no-repeat center center;border:1px solid #ccc;min-height:240px;min-width:320px}.mce-match-marker{background:#aaa;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-match-marker-selected::-moz-selection{background:#39f;color:#fff}.mce-match-marker-selected::selection{background:#39f;color:#fff}.mce-content-body audio[data-mce-selected],.mce-content-body details[data-mce-selected],.mce-content-body embed[data-mce-selected],.mce-content-body img[data-mce-selected],.mce-content-body object[data-mce-selected],.mce-content-body table[data-mce-selected],.mce-content-body video[data-mce-selected]{outline:3px solid #b4d7ff}.mce-content-body hr[data-mce-selected]{outline:3px solid #b4d7ff;outline-offset:1px}.mce-content-body [contentEditable=false] [contentEditable=true]:focus{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false] [contentEditable=true]:hover{outline:3px solid #b4d7ff}.mce-content-body [contentEditable=false][data-mce-selected]{cursor:not-allowed;outline:3px solid #b4d7ff}.mce-content-body.mce-content-readonly [contentEditable=true]:focus,.mce-content-body.mce-content-readonly [contentEditable=true]:hover{outline:0}.mce-content-body [data-mce-selected=inline-boundary]{background-color:#b4d7ff}.mce-content-body .mce-edit-focus{outline:3px solid #b4d7ff}.mce-content-body td[data-mce-selected],.mce-content-body th[data-mce-selected]{position:relative}.mce-content-body td[data-mce-selected]::-moz-selection,.mce-content-body th[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body td[data-mce-selected]::selection,.mce-content-body th[data-mce-selected]::selection{background:0 0}.mce-content-body td[data-mce-selected] *,.mce-content-body th[data-mce-selected] *{outline:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{background-color:rgba(180,215,255,.7);border:1px solid rgba(180,215,255,.7);bottom:-1px;content:'';left:-1px;mix-blend-mode:multiply;position:absolute;right:-1px;top:-1px}@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){.mce-content-body td[data-mce-selected]::after,.mce-content-body th[data-mce-selected]::after{border-color:rgba(0,84,180,.7)}}.mce-content-body img[data-mce-selected]::-moz-selection{background:0 0}.mce-content-body img[data-mce-selected]::selection{background:0 0}.ephox-snooker-resizer-bar{background-color:#b4d7ff;opacity:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:1}.mce-spellchecker-word{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.75'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default;height:2rem}.mce-spellchecker-grammar{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%2300A835'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A");background-position:0 calc(100% + 1px);background-repeat:repeat-x;background-size:auto 6px;cursor:default}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}[data-mce-block]{display:block}.mce-item-table:not([border]),.mce-item-table:not([border]) caption,.mce-item-table:not([border]) td,.mce-item-table:not([border]) th,.mce-item-table[border="0"],.mce-item-table[border="0"] caption,.mce-item-table[border="0"] td,.mce-item-table[border="0"] th,table[style*="border-width: 0px"],table[style*="border-width: 0px"] caption,table[style*="border-width: 0px"] td,table[style*="border-width: 0px"] th{border:1px dashed #bbb}.mce-visualblocks address,.mce-visualblocks article,.mce-visualblocks aside,.mce-visualblocks blockquote,.mce-visualblocks div:not([data-mce-bogus]),.mce-visualblocks dl,.mce-visualblocks figcaption,.mce-visualblocks figure,.mce-visualblocks h1,.mce-visualblocks h2,.mce-visualblocks h3,.mce-visualblocks h4,.mce-visualblocks h5,.mce-visualblocks h6,.mce-visualblocks hgroup,.mce-visualblocks ol,.mce-visualblocks p,.mce-visualblocks pre,.mce-visualblocks section,.mce-visualblocks ul{background-repeat:no-repeat;border:1px dashed #bbb;margin-left:3px;padding-top:10px}.mce-visualblocks p{background-image:url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}.mce-visualblocks h1{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}.mce-visualblocks h2{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}.mce-visualblocks h3{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}.mce-visualblocks h4{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}.mce-visualblocks h5{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}.mce-visualblocks h6{background-image:url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}.mce-visualblocks div:not([data-mce-bogus]){background-image:url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}.mce-visualblocks section{background-image:url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}.mce-visualblocks article{background-image:url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}.mce-visualblocks blockquote{background-image:url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}.mce-visualblocks address{background-image:url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}.mce-visualblocks pre{background-image:url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}.mce-visualblocks figure{background-image:url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}.mce-visualblocks figcaption{border:1px dashed #bbb}.mce-visualblocks hgroup{background-image:url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}.mce-visualblocks aside{background-image:url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}.mce-visualblocks ul{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==)}.mce-visualblocks ol{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==)}.mce-visualblocks dl{background-image:url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==)}.mce-visualblocks:not([dir=rtl]) address,.mce-visualblocks:not([dir=rtl]) article,.mce-visualblocks:not([dir=rtl]) aside,.mce-visualblocks:not([dir=rtl]) blockquote,.mce-visualblocks:not([dir=rtl]) div:not([data-mce-bogus]),.mce-visualblocks:not([dir=rtl]) dl,.mce-visualblocks:not([dir=rtl]) figcaption,.mce-visualblocks:not([dir=rtl]) figure,.mce-visualblocks:not([dir=rtl]) h1,.mce-visualblocks:not([dir=rtl]) h2,.mce-visualblocks:not([dir=rtl]) h3,.mce-visualblocks:not([dir=rtl]) h4,.mce-visualblocks:not([dir=rtl]) h5,.mce-visualblocks:not([dir=rtl]) h6,.mce-visualblocks:not([dir=rtl]) hgroup,.mce-visualblocks:not([dir=rtl]) ol,.mce-visualblocks:not([dir=rtl]) p,.mce-visualblocks:not([dir=rtl]) pre,.mce-visualblocks:not([dir=rtl]) section,.mce-visualblocks:not([dir=rtl]) ul{margin-left:3px}.mce-visualblocks[dir=rtl] address,.mce-visualblocks[dir=rtl] article,.mce-visualblocks[dir=rtl] aside,.mce-visualblocks[dir=rtl] blockquote,.mce-visualblocks[dir=rtl] div:not([data-mce-bogus]),.mce-visualblocks[dir=rtl] dl,.mce-visualblocks[dir=rtl] figcaption,.mce-visualblocks[dir=rtl] figure,.mce-visualblocks[dir=rtl] h1,.mce-visualblocks[dir=rtl] h2,.mce-visualblocks[dir=rtl] h3,.mce-visualblocks[dir=rtl] h4,.mce-visualblocks[dir=rtl] h5,.mce-visualblocks[dir=rtl] h6,.mce-visualblocks[dir=rtl] hgroup,.mce-visualblocks[dir=rtl] ol,.mce-visualblocks[dir=rtl] p,.mce-visualblocks[dir=rtl] pre,.mce-visualblocks[dir=rtl] section,.mce-visualblocks[dir=rtl] ul{background-position-x:right;margin-right:3px}.mce-nbsp,.mce-shy{background:#aaa}.mce-shy::after{content:'-'}body{font-family:sans-serif}table{border-collapse:collapse} diff --git a/public/skins/ui/oxide/skin.css b/public/skins/ui/oxide/skin.css new file mode 100644 index 0000000..c64aa05 --- /dev/null +++ b/public/skins/ui/oxide/skin.css @@ -0,0 +1,3719 @@ +.tox { + box-shadow: none; + box-sizing: content-box; + color: #222f3e; + cursor: auto; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + font-style: normal; + font-weight: normal; + line-height: normal; + -webkit-tap-highlight-color: transparent; + text-decoration: none; + text-shadow: none; + text-transform: none; + vertical-align: initial; + white-space: normal; +} +.tox *:not(svg):not(rect) { + box-sizing: inherit; + color: inherit; + cursor: inherit; + direction: inherit; + font-family: inherit; + font-size: inherit; + font-style: inherit; + font-weight: inherit; + line-height: inherit; + -webkit-tap-highlight-color: inherit; + text-align: inherit; + text-decoration: inherit; + text-shadow: inherit; + text-transform: inherit; + vertical-align: inherit; + white-space: inherit; +} +.tox *:not(svg):not(rect) { + /* stylelint-disable-line no-duplicate-selectors */ + background: transparent; + border: 0; + box-shadow: none; + float: none; + height: auto; + margin: 0; + max-width: none; + outline: 0; + padding: 0; + position: static; + width: auto; +} +.tox:not([dir=rtl]) { + direction: ltr; + text-align: left; +} +.tox[dir=rtl] { + direction: rtl; + text-align: right; +} +.tox-tinymce { + border: 2px solid #eeeeee; + border-radius: 10px; + box-shadow: none; + box-sizing: border-box; + display: flex; + flex-direction: column; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + overflow: hidden; + position: relative; + visibility: inherit !important; +} +.tox.tox-tinymce-inline { + border: none; + box-shadow: none; + overflow: initial; +} +.tox.tox-tinymce-inline .tox-editor-container { + overflow: initial; +} +.tox.tox-tinymce-inline .tox-editor-header { + background-color: #fff; + border: 2px solid #eeeeee; + border-radius: 10px; + box-shadow: none; + overflow: hidden; +} +.tox-tinymce-aux { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + z-index: 1300; +} +.tox-tinymce *:focus, +.tox-tinymce-aux *:focus { + outline: none; +} +button::-moz-focus-inner { + border: 0; +} +.tox[dir=rtl] .tox-icon--flip svg { + transform: rotateY(180deg); +} +.tox .accessibility-issue__header { + align-items: center; + display: flex; + margin-bottom: 4px; +} +.tox .accessibility-issue__description { + align-items: stretch; + border-radius: 6px; + display: flex; + justify-content: space-between; +} +.tox .accessibility-issue__description > div { + padding-bottom: 4px; +} +.tox .accessibility-issue__description > div > div { + align-items: center; + display: flex; + margin-bottom: 4px; +} +.tox .accessibility-issue__description > div > div .tox-icon svg { + display: block; +} +.tox .accessibility-issue__repair { + margin-top: 16px; +} +.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description { + background-color: rgba(0, 101, 216, 0.1); + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2 { + color: #006ce7; +} +.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg { + fill: #006ce7; +} +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon { + background-color: #006ce7; + color: #fff; +} +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover, +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus { + background-color: #0060ce; +} +.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active { + background-color: #0054b4; +} +.tox .tox-dialog__body-content .accessibility-issue--warn { + /* stylelint-disable-next-line no-descending-specificity */ +} +.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description { + background-color: rgba(255, 165, 0, 0.08); + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2 { + color: #8f5d00; +} +.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg { + fill: #8f5d00; +} +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon { + background-color: #FFE89D; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover, +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus { + background-color: #F2D574; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active { + background-color: #E8C657; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--error { + /* stylelint-disable-next-line no-descending-specificity */ +} +.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description { + background-color: rgba(204, 0, 0, 0.1); + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2 { + color: #c00; +} +.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg { + fill: #c00; +} +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon { + background-color: #F2BFBF; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover, +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus { + background-color: #E9A4A4; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active { + background-color: #EE9494; + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description { + background-color: rgba(120, 171, 70, 0.1); + color: #222f3e; +} +.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description > *:last-child { + display: none; +} +.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2 { + color: #527530; +} +.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg { + fill: #527530; +} +.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1, +.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2 { + font-size: 14px; + margin-top: 0; +} +.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button { + margin-left: 4px; +} +.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) { + margin-left: auto; +} +.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description { + padding: 4px 4px 4px 8px; +} +.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button { + margin-right: 4px; +} +.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header > *:nth-last-child(2) { + margin-right: auto; +} +.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description { + padding: 4px 8px 4px 4px; +} +.tox .tox-advtemplate .tox-form__grid { + flex: 1; +} +.tox .tox-advtemplate .tox-form__grid > div:first-child { + display: flex; + flex-direction: column; + width: 30%; +} +.tox .tox-advtemplate .tox-form__grid > div:first-child > div:nth-child(2) { + flex-basis: 0; + flex-grow: 1; + overflow: auto; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid > div:first-child { + width: 100%; + } +} +.tox .tox-advtemplate iframe { + border-color: #eeeeee; + border-radius: 10px; + border-style: solid; + border-width: 1px; + margin: 0 10px; +} +.tox .tox-anchorbar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-bottom-anchorbar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-bar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-button { + background-color: #006ce7; + background-image: none; + background-position: 0 0; + background-repeat: repeat; + border-color: #006ce7; + border-radius: 6px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + color: #fff; + cursor: pointer; + display: inline-block; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 14px; + font-style: normal; + font-weight: bold; + letter-spacing: normal; + line-height: 24px; + margin: 0; + outline: none; + padding: 4px 16px; + position: relative; + text-align: center; + text-decoration: none; + text-transform: none; + white-space: nowrap; +} +.tox .tox-button::before { + border-radius: 6px; + bottom: -1px; + box-shadow: inset 0 0 0 2px #fff, 0 0 0 1px #006ce7, 0 0 0 3px rgba(0, 108, 231, 0.25); + content: ''; + left: -1px; + opacity: 0; + pointer-events: none; + position: absolute; + right: -1px; + top: -1px; +} +.tox .tox-button[disabled] { + background-color: #006ce7; + background-image: none; + border-color: #006ce7; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); + cursor: not-allowed; +} +.tox .tox-button:focus:not(:disabled) { + background-color: #0060ce; + background-image: none; + border-color: #0060ce; + box-shadow: none; + color: #fff; +} +.tox .tox-button:focus-visible:not(:disabled)::before { + opacity: 1; +} +.tox .tox-button:hover:not(:disabled) { + background-color: #0060ce; + background-image: none; + border-color: #0060ce; + box-shadow: none; + color: #fff; +} +.tox .tox-button:active:not(:disabled) { + background-color: #0054b4; + background-image: none; + border-color: #0054b4; + box-shadow: none; + color: #fff; +} +.tox .tox-button.tox-button--enabled { + background-color: #0054b4; + background-image: none; + border-color: #0054b4; + box-shadow: none; + color: #fff; +} +.tox .tox-button.tox-button--enabled[disabled] { + background-color: #0054b4; + background-image: none; + border-color: #0054b4; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); + cursor: not-allowed; +} +.tox .tox-button.tox-button--enabled:focus:not(:disabled) { + background-color: #00489b; + background-image: none; + border-color: #00489b; + box-shadow: none; + color: #fff; +} +.tox .tox-button.tox-button--enabled:hover:not(:disabled) { + background-color: #00489b; + background-image: none; + border-color: #00489b; + box-shadow: none; + color: #fff; +} +.tox .tox-button.tox-button--enabled:active:not(:disabled) { + background-color: #003c81; + background-image: none; + border-color: #003c81; + box-shadow: none; + color: #fff; +} +.tox .tox-button--icon-and-text, +.tox .tox-button.tox-button--icon-and-text, +.tox .tox-button.tox-button--secondary.tox-button--icon-and-text { + display: flex; + padding: 5px 4px; +} +.tox .tox-button--icon-and-text .tox-icon svg, +.tox .tox-button.tox-button--icon-and-text .tox-icon svg, +.tox .tox-button.tox-button--secondary.tox-button--icon-and-text .tox-icon svg { + display: block; + fill: currentColor; +} +.tox .tox-button--secondary { + background-color: #f0f0f0; + background-image: none; + background-position: 0 0; + background-repeat: repeat; + border-color: #f0f0f0; + border-radius: 6px; + border-style: solid; + border-width: 1px; + box-shadow: none; + color: #222f3e; + font-size: 14px; + font-style: normal; + font-weight: bold; + letter-spacing: normal; + outline: none; + padding: 4px 16px; + text-decoration: none; + text-transform: none; +} +.tox .tox-button--secondary[disabled] { + background-color: #f0f0f0; + background-image: none; + border-color: #f0f0f0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); +} +.tox .tox-button--secondary:focus:not(:disabled) { + background-color: #e3e3e3; + background-image: none; + border-color: #e3e3e3; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--secondary:hover:not(:disabled) { + background-color: #e3e3e3; + background-image: none; + border-color: #e3e3e3; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--secondary:active:not(:disabled) { + background-color: #d6d6d6; + background-image: none; + border-color: #d6d6d6; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--secondary.tox-button--enabled { + background-color: #a8c8ed; + background-image: none; + border-color: #a8c8ed; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--secondary.tox-button--enabled[disabled] { + background-color: #a8c8ed; + background-image: none; + border-color: #a8c8ed; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); +} +.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled) { + background-color: #93bbe9; + background-image: none; + border-color: #93bbe9; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled) { + background-color: #93bbe9; + background-image: none; + border-color: #93bbe9; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled) { + background-color: #7daee4; + background-image: none; + border-color: #7daee4; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--icon, +.tox .tox-button.tox-button--icon, +.tox .tox-button.tox-button--secondary.tox-button--icon { + padding: 4px; +} +.tox .tox-button--icon .tox-icon svg, +.tox .tox-button.tox-button--icon .tox-icon svg, +.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg { + display: block; + fill: currentColor; +} +.tox .tox-button-link { + background: 0; + border: none; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + font-weight: normal; + line-height: 1.3; + margin: 0; + padding: 0; + white-space: nowrap; +} +.tox .tox-button-link--sm { + font-size: 14px; +} +.tox .tox-button--naked { + background-color: transparent; + border-color: transparent; + box-shadow: unset; + color: #222f3e; +} +.tox .tox-button--naked[disabled] { + background-color: rgba(34, 47, 62, 0.12); + border-color: transparent; + box-shadow: unset; + color: rgba(34, 47, 62, 0.5); +} +.tox .tox-button--naked:hover:not(:disabled) { + background-color: rgba(34, 47, 62, 0.12); + border-color: transparent; + box-shadow: unset; + color: #222f3e; +} +.tox .tox-button--naked:focus:not(:disabled) { + background-color: rgba(34, 47, 62, 0.12); + border-color: transparent; + box-shadow: unset; + color: #222f3e; +} +.tox .tox-button--naked:active:not(:disabled) { + background-color: rgba(34, 47, 62, 0.18); + border-color: transparent; + box-shadow: unset; + color: #222f3e; +} +.tox .tox-button--naked .tox-icon svg { + fill: currentColor; +} +.tox .tox-button--naked.tox-button--icon:hover:not(:disabled) { + color: #222f3e; +} +.tox .tox-checkbox { + align-items: center; + border-radius: 6px; + cursor: pointer; + display: flex; + height: 36px; + min-width: 36px; +} +.tox .tox-checkbox__input { + /* Hide from view but visible to screen readers */ + height: 1px; + overflow: hidden; + position: absolute; + top: auto; + width: 1px; +} +.tox .tox-checkbox__icons { + align-items: center; + border-radius: 6px; + box-shadow: 0 0 0 2px transparent; + box-sizing: content-box; + display: flex; + height: 24px; + justify-content: center; + padding: calc(4px - 1px); + width: 24px; +} +.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: block; + fill: rgba(34, 47, 62, 0.3); +} +.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + display: none; + fill: #006ce7; +} +.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg { + display: none; + fill: #006ce7; +} +.tox .tox-checkbox--disabled { + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: none; +} +.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__checked svg { + display: block; +} +.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: none; +} +.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + display: block; +} +.tox input.tox-checkbox__input:focus + .tox-checkbox__icons { + border-radius: 6px; + box-shadow: inset 0 0 0 1px #006ce7; + padding: calc(4px - 1px); +} +.tox:not([dir=rtl]) .tox-checkbox__label { + margin-left: 4px; +} +.tox:not([dir=rtl]) .tox-checkbox__input { + left: -10000px; +} +.tox:not([dir=rtl]) .tox-bar .tox-checkbox { + margin-left: 4px; +} +.tox[dir=rtl] .tox-checkbox__label { + margin-right: 4px; +} +.tox[dir=rtl] .tox-checkbox__input { + right: -10000px; +} +.tox[dir=rtl] .tox-bar .tox-checkbox { + margin-right: 4px; +} +.tox { + /* stylelint-disable-next-line no-descending-specificity */ +} +.tox .tox-collection--toolbar .tox-collection__group { + display: flex; + padding: 0; +} +.tox .tox-collection--grid .tox-collection__group { + display: flex; + flex-wrap: wrap; + max-height: 208px; + overflow-x: hidden; + overflow-y: auto; + padding: 0; +} +.tox .tox-collection--list .tox-collection__group { + border-bottom-width: 0; + border-color: #e3e3e3; + border-left-width: 0; + border-right-width: 0; + border-style: solid; + border-top-width: 1px; + padding: 4px 0; +} +.tox .tox-collection--list .tox-collection__group:first-child { + border-top-width: 0; +} +.tox .tox-collection__group-heading { + background-color: #fcfcfc; + color: rgba(34, 47, 62, 0.7); + cursor: default; + font-size: 12px; + font-style: normal; + font-weight: normal; + margin-bottom: 4px; + margin-top: -4px; + padding: 4px 8px; + text-transform: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +.tox .tox-collection__item { + align-items: center; + border-radius: 3px; + color: #222f3e; + display: flex; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; +} +.tox .tox-collection--list .tox-collection__item { + padding: 4px 8px; +} +.tox .tox-collection--toolbar .tox-collection__item { + border-radius: 3px; + padding: 4px; +} +.tox .tox-collection--grid .tox-collection__item { + border-radius: 3px; + padding: 4px; +} +.tox .tox-collection--list .tox-collection__item--enabled { + background-color: #fff; + color: #222f3e; +} +.tox .tox-collection--list .tox-collection__item--active { + background-color: #cce2fa; +} +.tox .tox-collection--toolbar .tox-collection__item--enabled { + background-color: #a6ccf7; + color: #222f3e; +} +.tox .tox-collection--toolbar .tox-collection__item--active { + background-color: #cce2fa; +} +.tox .tox-collection--grid .tox-collection__item--enabled { + background-color: #a6ccf7; + color: #222f3e; +} +.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + background-color: #cce2fa; + color: #222f3e; +} +.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + color: #222f3e; +} +.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled) { + color: #222f3e; +} +.tox .tox-collection__item-icon, +.tox .tox-collection__item-checkmark { + align-items: center; + display: flex; + height: 24px; + justify-content: center; + width: 24px; +} +.tox .tox-collection__item-icon svg, +.tox .tox-collection__item-checkmark svg { + fill: currentColor; +} +.tox .tox-collection--toolbar-lg .tox-collection__item-icon { + height: 48px; + width: 48px; +} +.tox .tox-collection__item-label { + color: currentColor; + display: inline-block; + flex: 1; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 24px; + text-transform: none; + word-break: break-all; +} +.tox .tox-collection__item-accessory { + color: rgba(34, 47, 62, 0.7); + display: inline-block; + font-size: 14px; + height: 24px; + line-height: 24px; + text-transform: none; +} +.tox .tox-collection__item-caret { + align-items: center; + display: flex; + min-height: 24px; +} +.tox .tox-collection__item-caret::after { + content: ''; + font-size: 0; + min-height: inherit; +} +.tox .tox-collection__item-caret svg { + fill: #222f3e; +} +.tox .tox-collection__item--state-disabled { + background-color: transparent; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg { + display: none; +} +.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory + .tox-collection__item-checkmark { + display: none; +} +.tox .tox-collection--horizontal { + background-color: #fff; + border: 1px solid #e3e3e3; + border-radius: 6px; + box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15); + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: nowrap; + margin-bottom: 0; + overflow-x: auto; + padding: 0; +} +.tox .tox-collection--horizontal .tox-collection__group { + align-items: center; + display: flex; + flex-wrap: nowrap; + margin: 0; + padding: 0 4px; +} +.tox .tox-collection--horizontal .tox-collection__item { + height: 28px; + margin: 6px 1px 5px 0; + padding: 0 4px; +} +.tox .tox-collection--horizontal .tox-collection__item-label { + white-space: nowrap; +} +.tox .tox-collection--horizontal .tox-collection__item-caret { + margin-left: 4px; +} +.tox .tox-collection__item-container { + display: flex; +} +.tox .tox-collection__item-container--row { + align-items: center; + flex: 1 1 auto; + flex-direction: row; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--align-left { + margin-right: auto; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--align-right { + justify-content: flex-end; + margin-left: auto; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top { + align-items: flex-start; + margin-bottom: auto; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle { + align-items: center; +} +.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom { + align-items: flex-end; + margin-top: auto; +} +.tox .tox-collection__item-container--column { + align-self: center; + flex: 1 1 auto; + flex-direction: column; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--align-left { + align-items: flex-start; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--align-right { + align-items: flex-end; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top { + align-self: flex-start; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle { + align-self: center; +} +.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom { + align-self: flex-end; +} +.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type) { + border-right: 1px solid transparent; +} +.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > *:not(:first-child) { + margin-left: 8px; +} +.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child { + margin-left: 4px; +} +.tox:not([dir=rtl]) .tox-collection__item-accessory { + margin-left: 16px; + text-align: right; +} +.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret { + margin-left: 16px; +} +.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type) { + border-left: 1px solid transparent; +} +.tox[dir=rtl] .tox-collection--list .tox-collection__item > *:not(:first-child) { + margin-right: 8px; +} +.tox[dir=rtl] .tox-collection--list .tox-collection__item > .tox-collection__item-label:first-child { + margin-right: 4px; +} +.tox[dir=rtl] .tox-collection__item-accessory { + margin-right: 16px; + text-align: left; +} +.tox[dir=rtl] .tox-collection .tox-collection__item-caret { + margin-right: 16px; + transform: rotateY(180deg); +} +.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret { + margin-right: 4px; +} +.tox .tox-color-picker-container { + display: flex; + flex-direction: row; + height: 225px; + margin: 0; +} +.tox .tox-sv-palette { + box-sizing: border-box; + display: flex; + height: 100%; +} +.tox .tox-sv-palette-spectrum { + height: 100%; +} +.tox .tox-sv-palette, +.tox .tox-sv-palette-spectrum { + width: 225px; +} +.tox .tox-sv-palette-thumb { + background: none; + border: 1px solid black; + border-radius: 50%; + box-sizing: content-box; + height: 12px; + position: absolute; + width: 12px; +} +.tox .tox-sv-palette-inner-thumb { + border: 1px solid white; + border-radius: 50%; + height: 10px; + position: absolute; + width: 10px; +} +.tox .tox-hue-slider { + box-sizing: border-box; + height: 100%; + width: 25px; +} +.tox .tox-hue-slider-spectrum { + background: linear-gradient(to bottom, #f00, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, #f00); + height: 100%; + width: 100%; +} +.tox .tox-hue-slider, +.tox .tox-hue-slider-spectrum { + width: 20px; +} +.tox .tox-hue-slider-thumb { + background: white; + border: 1px solid black; + box-sizing: content-box; + height: 4px; + width: 100%; +} +.tox .tox-rgb-form { + display: flex; + flex-direction: column; + justify-content: space-between; +} +.tox .tox-rgb-form div { + align-items: center; + display: flex; + justify-content: space-between; + margin-bottom: 5px; + width: inherit; +} +.tox .tox-rgb-form input { + width: 6em; +} +.tox .tox-rgb-form input.tox-invalid { + /* Need !important to override Chrome's focus styling unfortunately */ + border: 1px solid red !important; +} +.tox .tox-rgb-form .tox-rgba-preview { + border: 1px solid black; + flex-grow: 2; + margin-bottom: 0; +} +.tox:not([dir=rtl]) .tox-sv-palette { + margin-right: 15px; +} +.tox:not([dir=rtl]) .tox-hue-slider { + margin-right: 15px; +} +.tox:not([dir=rtl]) .tox-hue-slider-thumb { + margin-left: -1px; +} +.tox:not([dir=rtl]) .tox-rgb-form label { + margin-right: 0.5em; +} +.tox[dir=rtl] .tox-sv-palette { + margin-left: 15px; +} +.tox[dir=rtl] .tox-hue-slider { + margin-left: 15px; +} +.tox[dir=rtl] .tox-hue-slider-thumb { + margin-right: -1px; +} +.tox[dir=rtl] .tox-rgb-form label { + margin-left: 0.5em; +} +.tox .tox-toolbar .tox-swatches, +.tox .tox-toolbar__primary .tox-swatches, +.tox .tox-toolbar__overflow .tox-swatches { + margin: 5px 0 6px 11px; +} +.tox .tox-collection--list .tox-collection__group .tox-swatches-menu { + border: 0; + margin: -4px -4px; +} +.tox .tox-swatches__row { + display: flex; +} +.tox .tox-swatch { + height: 30px; + transition: transform 0.15s, box-shadow 0.15s; + width: 30px; +} +.tox .tox-swatch:hover, +.tox .tox-swatch:focus { + box-shadow: 0 0 0 1px rgba(127, 127, 127, 0.3) inset; + transform: scale(0.8); +} +.tox .tox-swatch--remove { + align-items: center; + display: flex; + justify-content: center; +} +.tox .tox-swatch--remove svg path { + stroke: #e74c3c; +} +.tox .tox-swatches__picker-btn { + align-items: center; + background-color: transparent; + border: 0; + cursor: pointer; + display: flex; + height: 30px; + justify-content: center; + outline: none; + padding: 0; + width: 30px; +} +.tox .tox-swatches__picker-btn svg { + fill: #222f3e; + height: 24px; + width: 24px; +} +.tox .tox-swatches__picker-btn:hover { + background: #cce2fa; +} +.tox div.tox-swatch:not(.tox-swatch--remove) svg { + display: none; + fill: #222f3e; + height: 24px; + margin: calc((30px - 24px) / 2) calc((30px - 24px) / 2); + width: 24px; +} +.tox div.tox-swatch:not(.tox-swatch--remove) svg path { + fill: #fff; + paint-order: stroke; + stroke: #222f3e; + stroke-width: 2px; +} +.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg { + display: block; +} +.tox:not([dir=rtl]) .tox-swatches__picker-btn { + margin-left: auto; +} +.tox[dir=rtl] .tox-swatches__picker-btn { + margin-right: auto; +} +.tox .tox-comment-thread { + background: #fff; + position: relative; +} +.tox .tox-comment-thread > *:not(:first-child) { + margin-top: 8px; +} +.tox .tox-comment { + background: #fff; + border: 1px solid #eeeeee; + border-radius: 6px; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); + padding: 8px 8px 16px 8px; + position: relative; +} +.tox .tox-comment__header { + align-items: center; + color: #222f3e; + display: flex; + justify-content: space-between; +} +.tox .tox-comment__date { + color: #222f3e; + font-size: 12px; + line-height: 18px; +} +.tox .tox-comment__body { + color: #222f3e; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + margin-top: 8px; + position: relative; + text-transform: initial; +} +.tox .tox-comment__body textarea { + resize: none; + white-space: normal; + width: 100%; +} +.tox .tox-comment__expander { + padding-top: 8px; +} +.tox .tox-comment__expander p { + color: rgba(34, 47, 62, 0.7); + font-size: 14px; + font-style: normal; +} +.tox .tox-comment__body p { + margin: 0; +} +.tox .tox-comment__buttonspacing { + padding-top: 16px; + text-align: center; +} +.tox .tox-comment-thread__overlay::after { + background: #fff; + bottom: 0; + content: ""; + display: flex; + left: 0; + opacity: 0.9; + position: absolute; + right: 0; + top: 0; + z-index: 5; +} +.tox .tox-comment__reply { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + justify-content: flex-end; + margin-top: 8px; +} +.tox .tox-comment__reply > *:first-child { + margin-bottom: 8px; + width: 100%; +} +.tox .tox-comment__edit { + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + margin-top: 16px; +} +.tox .tox-comment__gradient::after { + background: linear-gradient(rgba(255, 255, 255, 0), #fff); + bottom: 0; + content: ""; + display: block; + height: 5em; + margin-top: -40px; + position: absolute; + width: 100%; +} +.tox .tox-comment__overlay { + background: #fff; + bottom: 0; + display: flex; + flex-direction: column; + flex-grow: 1; + left: 0; + opacity: 0.9; + position: absolute; + right: 0; + text-align: center; + top: 0; + z-index: 5; +} +.tox .tox-comment__loading-text { + align-items: center; + color: #222f3e; + display: flex; + flex-direction: column; + position: relative; +} +.tox .tox-comment__loading-text > div { + padding-bottom: 16px; +} +.tox .tox-comment__overlaytext { + bottom: 0; + flex-direction: column; + font-size: 14px; + left: 0; + padding: 1em; + position: absolute; + right: 0; + top: 0; + z-index: 10; +} +.tox .tox-comment__overlaytext p { + background-color: #fff; + box-shadow: 0 0 8px 8px #fff; + color: #222f3e; + text-align: center; +} +.tox .tox-comment__overlaytext div:nth-of-type(2) { + font-size: 0.8em; +} +.tox .tox-comment__busy-spinner { + align-items: center; + background-color: #fff; + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 20; +} +.tox .tox-comment__scroll { + display: flex; + flex-direction: column; + flex-shrink: 1; + overflow: auto; +} +.tox .tox-conversations { + margin: 8px; +} +.tox:not([dir=rtl]) .tox-comment__edit { + margin-left: 8px; +} +.tox:not([dir=rtl]) .tox-comment__buttonspacing > *:last-child, +.tox:not([dir=rtl]) .tox-comment__edit > *:last-child, +.tox:not([dir=rtl]) .tox-comment__reply > *:last-child { + margin-left: 8px; +} +.tox[dir=rtl] .tox-comment__edit { + margin-right: 8px; +} +.tox[dir=rtl] .tox-comment__buttonspacing > *:last-child, +.tox[dir=rtl] .tox-comment__edit > *:last-child, +.tox[dir=rtl] .tox-comment__reply > *:last-child { + margin-right: 8px; +} +.tox .tox-user { + align-items: center; + display: flex; +} +.tox .tox-user__avatar svg { + fill: rgba(34, 47, 62, 0.7); +} +.tox .tox-user__avatar img { + border-radius: 50%; + height: 36px; + object-fit: cover; + vertical-align: middle; + width: 36px; +} +.tox .tox-user__name { + color: #222f3e; + font-size: 14px; + font-style: normal; + font-weight: bold; + line-height: 18px; + text-transform: none; +} +.tox:not([dir=rtl]) .tox-user__avatar svg, +.tox:not([dir=rtl]) .tox-user__avatar img { + margin-right: 8px; +} +.tox:not([dir=rtl]) .tox-user__avatar + .tox-user__name { + margin-left: 8px; +} +.tox[dir=rtl] .tox-user__avatar svg, +.tox[dir=rtl] .tox-user__avatar img { + margin-left: 8px; +} +.tox[dir=rtl] .tox-user__avatar + .tox-user__name { + margin-right: 8px; +} +.tox .tox-dialog-wrap { + align-items: center; + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: fixed; + right: 0; + top: 0; + z-index: 1100; +} +.tox .tox-dialog-wrap__backdrop { + background-color: rgba(255, 255, 255, 0.75); + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1; +} +.tox .tox-dialog-wrap__backdrop--opaque { + background-color: #fff; +} +.tox .tox-dialog { + background-color: #fff; + border-color: #eeeeee; + border-radius: 10px; + border-style: solid; + border-width: 0px; + box-shadow: 0 16px 16px -10px rgba(34, 47, 62, 0.15), 0 0 40px 1px rgba(34, 47, 62, 0.15); + display: flex; + flex-direction: column; + max-height: 100%; + max-width: 480px; + overflow: hidden; + position: relative; + width: 95vw; + z-index: 2; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-dialog { + align-self: flex-start; + margin: 8px auto; + max-height: calc(100vh - 8px * 2); + width: calc(100vw - 16px); + } +} +.tox .tox-dialog-inline { + z-index: 1100; +} +.tox .tox-dialog__header { + align-items: center; + background-color: #fff; + border-bottom: none; + color: #222f3e; + display: flex; + font-size: 16px; + justify-content: space-between; + padding: 8px 16px 0 16px; + position: relative; +} +.tox .tox-dialog__header .tox-button { + z-index: 1; +} +.tox .tox-dialog__draghandle { + cursor: grab; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tox .tox-dialog__draghandle:active { + cursor: grabbing; +} +.tox .tox-dialog__dismiss { + margin-left: auto; +} +.tox .tox-dialog__title { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 20px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + margin: 0; + text-transform: none; +} +.tox .tox-dialog__body { + color: #222f3e; + display: flex; + flex: 1; + font-size: 16px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + min-width: 0; + text-align: left; + text-transform: none; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-dialog__body { + flex-direction: column; + } +} +.tox .tox-dialog__body-nav { + align-items: flex-start; + display: flex; + flex-direction: column; + flex-shrink: 0; + padding: 16px 16px; +} +@media only screen and (min-width: 768px ) { + .tox .tox-dialog__body-nav { + max-width: 11em; + } +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox .tox-dialog__body-nav { + flex-direction: row; + -webkit-overflow-scrolling: touch; + overflow-x: auto; + padding-bottom: 0; + } +} +.tox .tox-dialog__body-nav-item { + border-bottom: 2px solid transparent; + color: rgba(34, 47, 62, 0.7); + display: inline-block; + flex-shrink: 0; + font-size: 14px; + line-height: 1.3; + margin-bottom: 8px; + max-width: 13em; + text-decoration: none; +} +.tox .tox-dialog__body-nav-item:focus { + background-color: rgba(0, 108, 231, 0.1); +} +.tox .tox-dialog__body-nav-item--active { + border-bottom: 2px solid #006ce7; + color: #006ce7; +} +.tox .tox-dialog__body-content { + box-sizing: border-box; + display: flex; + flex: 1; + flex-direction: column; + max-height: min(650px, calc(100vh - 110px)); + overflow: auto; + -webkit-overflow-scrolling: touch; + padding: 16px 16px; +} +.tox .tox-dialog__body-content > * { + margin-bottom: 0; + margin-top: 16px; +} +.tox .tox-dialog__body-content > *:first-child { + margin-top: 0; +} +.tox .tox-dialog__body-content > *:last-child { + margin-bottom: 0; +} +.tox .tox-dialog__body-content > *:only-child { + margin-bottom: 0; + margin-top: 0; +} +.tox .tox-dialog__body-content a { + color: #006ce7; + cursor: pointer; + text-decoration: none; +} +.tox .tox-dialog__body-content a:hover, +.tox .tox-dialog__body-content a:focus { + color: #0054b4; + text-decoration: none; +} +.tox .tox-dialog__body-content a:active { + color: #0054b4; + text-decoration: none; +} +.tox .tox-dialog__body-content svg { + fill: #222f3e; +} +.tox .tox-dialog__body-content strong { + font-weight: bold; +} +.tox .tox-dialog__body-content ul { + list-style-type: disc; +} +.tox .tox-dialog__body-content ul, +.tox .tox-dialog__body-content ol, +.tox .tox-dialog__body-content dd { + padding-inline-start: 2.5rem; +} +.tox .tox-dialog__body-content ul, +.tox .tox-dialog__body-content ol, +.tox .tox-dialog__body-content dl { + margin-bottom: 16px; +} +.tox .tox-dialog__body-content ul, +.tox .tox-dialog__body-content ol, +.tox .tox-dialog__body-content dl, +.tox .tox-dialog__body-content dd, +.tox .tox-dialog__body-content dt { + display: block; + margin-inline-end: 0; + margin-inline-start: 0; +} +.tox .tox-dialog__body-content .tox-form__group h1 { + color: #222f3e; + font-size: 20px; + font-style: normal; + font-weight: bold; + letter-spacing: normal; + margin-bottom: 16px; + margin-top: 2rem; + text-transform: none; +} +.tox .tox-dialog__body-content .tox-form__group h2 { + color: #222f3e; + font-size: 16px; + font-style: normal; + font-weight: bold; + letter-spacing: normal; + margin-bottom: 16px; + margin-top: 2rem; + text-transform: none; +} +.tox .tox-dialog__body-content .tox-form__group p { + margin-bottom: 16px; +} +.tox .tox-dialog__body-content .tox-form__group h1:first-child, +.tox .tox-dialog__body-content .tox-form__group h2:first-child, +.tox .tox-dialog__body-content .tox-form__group p:first-child { + margin-top: 0; +} +.tox .tox-dialog__body-content .tox-form__group h1:last-child, +.tox .tox-dialog__body-content .tox-form__group h2:last-child, +.tox .tox-dialog__body-content .tox-form__group p:last-child { + margin-bottom: 0; +} +.tox .tox-dialog__body-content .tox-form__group h1:only-child, +.tox .tox-dialog__body-content .tox-form__group h2:only-child, +.tox .tox-dialog__body-content .tox-form__group p:only-child { + margin-bottom: 0; + margin-top: 0; +} +.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center { + text-align: center; +} +.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end { + text-align: end; +} +.tox .tox-dialog--width-lg { + height: 650px; + max-width: 1200px; +} +.tox .tox-dialog--fullscreen { + height: 100%; + max-width: 100%; +} +.tox .tox-dialog--fullscreen .tox-dialog__body-content { + max-height: 100%; +} +.tox .tox-dialog--width-md { + max-width: 800px; +} +.tox .tox-dialog--width-md .tox-dialog__body-content { + overflow: auto; +} +.tox .tox-dialog__body-content--centered { + text-align: center; +} +.tox .tox-dialog__footer { + align-items: center; + background-color: #fff; + border-top: none; + display: flex; + justify-content: space-between; + padding: 8px 16px; +} +.tox .tox-dialog__footer-start, +.tox .tox-dialog__footer-end { + display: flex; +} +.tox .tox-dialog__busy-spinner { + align-items: center; + background-color: rgba(255, 255, 255, 0.75); + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 3; +} +.tox .tox-dialog__table { + border-collapse: collapse; + width: 100%; +} +.tox .tox-dialog__table thead th { + font-weight: bold; + padding-bottom: 8px; +} +.tox .tox-dialog__table thead th:first-child { + padding-right: 8px; +} +.tox .tox-dialog__table tbody tr { + border-bottom: 1px solid #626262; +} +.tox .tox-dialog__table tbody tr:last-child { + border-bottom: none; +} +.tox .tox-dialog__table td { + padding-bottom: 8px; + padding-top: 8px; +} +.tox .tox-dialog__table td:first-child { + padding-right: 8px; +} +.tox .tox-dialog__iframe { + min-height: 200px; +} +.tox .tox-dialog__iframe.tox-dialog__iframe--opaque { + background: #fff; +} +.tox .tox-navobj-bordered { + position: relative; +} +.tox .tox-navobj-bordered::before { + border: 1px solid #eeeeee; + border-radius: 6px; + content: ''; + inset: 0; + opacity: 1; + pointer-events: none; + position: absolute; + z-index: 1; +} +.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before { + border-color: #006ce7; + box-shadow: 0 0 0 2px rgba(0, 108, 231, 0.25); + outline: none; +} +.tox .tox-dialog__popups { + position: absolute; + width: 100%; + z-index: 1100; +} +.tox .tox-dialog__body-iframe { + display: flex; + flex: 1; + flex-direction: column; +} +.tox .tox-dialog__body-iframe .tox-navobj { + display: flex; + flex: 1; +} +.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2) { + flex: 1; + height: 100%; +} +.tox .tox-dialog-dock-fadeout { + opacity: 0; + visibility: hidden; +} +.tox .tox-dialog-dock-fadein { + opacity: 1; + visibility: visible; +} +.tox .tox-dialog-dock-transition { + transition: visibility 0s linear 0.3s, opacity 0.3s ease; +} +.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein { + transition-delay: 0s; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav { + margin-right: 0; + } +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child) { + margin-left: 8px; + } +} +.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start > *, +.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end > * { + margin-left: 8px; +} +.tox[dir=rtl] .tox-dialog__body { + text-align: right; +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav { + margin-left: 0; + } +} +@media only screen and (max-width: 767px ) { + body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child) { + margin-right: 8px; + } +} +.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start > *, +.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end > * { + margin-right: 8px; +} +body.tox-dialog__disable-scroll { + overflow: hidden; +} +.tox .tox-dropzone-container { + display: flex; + flex: 1; +} +.tox .tox-dropzone { + align-items: center; + background: #fff; + border: 2px dashed #eeeeee; + box-sizing: border-box; + display: flex; + flex-direction: column; + flex-grow: 1; + justify-content: center; + min-height: 100px; + padding: 10px; +} +.tox .tox-dropzone p { + color: rgba(34, 47, 62, 0.7); + margin: 0 0 16px 0; +} +.tox .tox-edit-area { + display: flex; + flex: 1; + overflow: hidden; + position: relative; +} +.tox .tox-edit-area::before { + border: 2px solid #2D6ADF; + border-radius: 4px; + content: ''; + inset: 0; + opacity: 0; + pointer-events: none; + position: absolute; + transition: opacity 0.15s; + z-index: 1; +} +.tox .tox-edit-area__iframe { + background-color: #fff; + border: 0; + box-sizing: border-box; + flex: 1; + height: 100%; + position: absolute; + width: 100%; +} +.tox.tox-edit-focus .tox-edit-area::before { + opacity: 1; +} +.tox.tox-inline-edit-area { + border: 1px dotted #eeeeee; +} +.tox .tox-editor-container { + display: flex; + flex: 1 1 auto; + flex-direction: column; + overflow: hidden; +} +.tox .tox-editor-header { + display: grid; + grid-template-columns: 1fr min-content; + z-index: 2; +} +.tox:not(.tox-tinymce-inline) .tox-editor-header { + background-color: #fff; + border-bottom: none; + box-shadow: 0 2px 2px -2px rgba(34, 47, 62, 0.1), 0 8px 8px -4px rgba(34, 47, 62, 0.07); + padding: 4px 0; +} +.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition) { + transition: box-shadow 0.5s; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header { + border-top: 1px solid #e3e3e3; + box-shadow: none; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header { + background-color: #fff; + box-shadow: 0 2px 2px -2px rgba(34, 47, 62, 0.2), 0 8px 8px -4px rgba(34, 47, 62, 0.15); + padding: 4px 0; +} +.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header { + box-shadow: 0 2px 2px -2px rgba(34, 47, 62, 0.2), 0 8px 8px -4px rgba(34, 47, 62, 0.15); +} +.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty { + background: none; + border: none; + box-shadow: none; + padding: 0; +} +.tox-editor-dock-fadeout { + opacity: 0; + visibility: hidden; +} +.tox-editor-dock-fadein { + opacity: 1; + visibility: visible; +} +.tox-editor-dock-transition { + transition: visibility 0s linear 0.25s, opacity 0.25s ease; +} +.tox-editor-dock-transition.tox-editor-dock-fadein { + transition-delay: 0s; +} +.tox .tox-control-wrap { + flex: 1; + position: relative; +} +.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid, +.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown, +.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid { + display: none; +} +.tox .tox-control-wrap svg { + display: block; +} +.tox .tox-control-wrap__status-icon-wrap { + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-control-wrap__status-icon-invalid svg { + fill: #c00; +} +.tox .tox-control-wrap__status-icon-unknown svg { + fill: orange; +} +.tox .tox-control-wrap__status-icon-valid svg { + fill: green; +} +.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield, +.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield, +.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield { + padding-right: 32px; +} +.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap { + right: 4px; +} +.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield, +.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield, +.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield { + padding-left: 32px; +} +.tox[dir=rtl] .tox-control-wrap__status-icon-wrap { + left: 4px; +} +.tox .tox-autocompleter { + max-width: 25em; +} +.tox .tox-autocompleter .tox-menu { + box-sizing: border-box; + max-width: 25em; +} +.tox .tox-autocompleter .tox-autocompleter-highlight { + font-weight: bold; +} +.tox .tox-color-input { + display: flex; + position: relative; + z-index: 1; +} +.tox .tox-color-input .tox-textfield { + z-index: -1; +} +.tox .tox-color-input span { + border-color: rgba(34, 47, 62, 0.2); + border-radius: 6px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + height: 24px; + position: absolute; + top: 6px; + width: 24px; +} +.tox .tox-color-input span:hover:not([aria-disabled=true]), +.tox .tox-color-input span:focus:not([aria-disabled=true]) { + border-color: #006ce7; + cursor: pointer; +} +.tox .tox-color-input span::before { + background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(-45deg, rgba(0, 0, 0, 0.25) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%), linear-gradient(-45deg, transparent 75%, rgba(0, 0, 0, 0.25) 75%); + background-position: 0 0, 0 6px, 6px -6px, -6px 0; + background-size: 12px 12px; + border: 1px solid #fff; + border-radius: 6px; + box-sizing: border-box; + content: ''; + height: 24px; + left: -1px; + position: absolute; + top: -1px; + width: 24px; + z-index: -1; +} +.tox .tox-color-input span[aria-disabled=true] { + cursor: not-allowed; +} +.tox:not([dir=rtl]) .tox-color-input { + /* stylelint-disable-next-line no-descending-specificity */ +} +.tox:not([dir=rtl]) .tox-color-input .tox-textfield { + padding-left: 36px; +} +.tox:not([dir=rtl]) .tox-color-input span { + left: 6px; +} +.tox[dir="rtl"] .tox-color-input { + /* stylelint-disable-next-line no-descending-specificity */ +} +.tox[dir="rtl"] .tox-color-input .tox-textfield { + padding-right: 36px; +} +.tox[dir="rtl"] .tox-color-input span { + right: 6px; +} +.tox .tox-label, +.tox .tox-toolbar-label { + color: rgba(34, 47, 62, 0.7); + display: block; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + padding: 0 8px 0 0; + text-transform: none; + white-space: nowrap; +} +.tox .tox-toolbar-label { + padding: 0 8px; +} +.tox[dir=rtl] .tox-label { + padding: 0 0 0 8px; +} +.tox .tox-form { + display: flex; + flex: 1; + flex-direction: column; +} +.tox .tox-form__group { + box-sizing: border-box; + margin-bottom: 4px; +} +.tox .tox-form-group--maximize { + flex: 1; +} +.tox .tox-form__group--error { + color: #c00; +} +.tox .tox-form__group--collection { + display: flex; +} +.tox .tox-form__grid { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; +} +.tox .tox-form__grid--2col > .tox-form__group { + width: calc(50% - (8px / 2)); +} +.tox .tox-form__grid--3col > .tox-form__group { + width: calc(100% / 3 - (8px / 2)); +} +.tox .tox-form__grid--4col > .tox-form__group { + width: calc(25% - (8px / 2)); +} +.tox .tox-form__controls-h-stack { + align-items: center; + display: flex; +} +.tox .tox-form__group--inline { + align-items: center; + display: flex; +} +.tox .tox-form__group--stretched { + display: flex; + flex: 1; + flex-direction: column; +} +.tox .tox-form__group--stretched .tox-textarea { + flex: 1; +} +.tox .tox-form__group--stretched .tox-navobj { + display: flex; + flex: 1; +} +.tox .tox-form__group--stretched .tox-navobj :nth-child(2) { + flex: 1; + height: 100%; +} +.tox:not([dir=rtl]) .tox-form__controls-h-stack > *:not(:first-child) { + margin-left: 4px; +} +.tox[dir=rtl] .tox-form__controls-h-stack > *:not(:first-child) { + margin-right: 4px; +} +.tox .tox-lock.tox-locked .tox-lock-icon__unlock, +.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock { + display: none; +} +.tox .tox-textfield, +.tox .tox-toolbar-textfield, +.tox .tox-listboxfield .tox-listbox--select, +.tox .tox-textarea, +.tox .tox-textarea-wrap .tox-textarea:focus { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: #fff; + border-color: #eeeeee; + border-radius: 6px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + color: #222f3e; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + line-height: 24px; + margin: 0; + min-height: 34px; + outline: none; + padding: 5px 5.5px; + resize: none; + width: 100%; +} +.tox .tox-textfield[disabled], +.tox .tox-textarea[disabled] { + background-color: #f2f2f2; + color: rgba(34, 47, 62, 0.85); + cursor: not-allowed; +} +.tox .tox-textfield:focus, +.tox .tox-listboxfield .tox-listbox--select:focus, +.tox .tox-textarea-wrap:focus-within, +.tox .tox-textarea:focus, +.tox .tox-custom-editor:focus-within { + background-color: #fff; + border-color: #006ce7; + box-shadow: 0 0 0 2px rgba(0, 108, 231, 0.25); + outline: none; +} +.tox .tox-toolbar-textfield { + border-width: 0; + margin-bottom: 3px; + margin-top: 2px; + max-width: 250px; +} +.tox .tox-naked-btn { + background-color: transparent; + border: 0; + border-color: transparent; + box-shadow: unset; + color: #006ce7; + cursor: pointer; + display: block; + margin: 0; + padding: 0; +} +.tox .tox-naked-btn svg { + display: block; + fill: #222f3e; +} +.tox:not([dir=rtl]) .tox-toolbar-textfield + * { + margin-left: 4px; +} +.tox[dir=rtl] .tox-toolbar-textfield + * { + margin-right: 4px; +} +.tox .tox-listboxfield { + cursor: pointer; + position: relative; +} +.tox .tox-listboxfield .tox-listbox--select[disabled] { + background-color: #f2f2f2; + color: rgba(34, 47, 62, 0.85); + cursor: not-allowed; +} +.tox .tox-listbox__select-label { + cursor: default; + flex: 1; + margin: 0 4px; +} +.tox .tox-listbox__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; +} +.tox .tox-listbox__select-chevron svg { + fill: #222f3e; +} +.tox .tox-listboxfield .tox-listbox--select { + align-items: center; + display: flex; +} +.tox:not([dir=rtl]) .tox-listboxfield svg { + right: 8px; +} +.tox[dir=rtl] .tox-listboxfield svg { + left: 8px; +} +.tox .tox-selectfield { + cursor: pointer; + position: relative; +} +.tox .tox-selectfield select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: #fff; + border-color: #eeeeee; + border-radius: 6px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + color: #222f3e; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + line-height: 24px; + margin: 0; + min-height: 34px; + outline: none; + padding: 5px 5.5px; + resize: none; + width: 100%; +} +.tox .tox-selectfield select[disabled] { + background-color: #f2f2f2; + color: rgba(34, 47, 62, 0.85); + cursor: not-allowed; +} +.tox .tox-selectfield select::-ms-expand { + display: none; +} +.tox .tox-selectfield select:focus { + background-color: #fff; + border-color: #006ce7; + box-shadow: 0 0 0 2px rgba(0, 108, 231, 0.25); + outline: none; +} +.tox .tox-selectfield svg { + pointer-events: none; + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox:not([dir=rtl]) .tox-selectfield select[size="0"], +.tox:not([dir=rtl]) .tox-selectfield select[size="1"] { + padding-right: 24px; +} +.tox:not([dir=rtl]) .tox-selectfield svg { + right: 8px; +} +.tox[dir=rtl] .tox-selectfield select[size="0"], +.tox[dir=rtl] .tox-selectfield select[size="1"] { + padding-left: 24px; +} +.tox[dir=rtl] .tox-selectfield svg { + left: 8px; +} +.tox .tox-textarea-wrap { + border-color: #eeeeee; + border-radius: 6px; + border-style: solid; + border-width: 1px; + display: flex; + flex: 1; + overflow: hidden; +} +.tox .tox-textarea { + -webkit-appearance: textarea; + -moz-appearance: textarea; + appearance: textarea; + white-space: pre-wrap; +} +.tox .tox-textarea-wrap .tox-textarea { + border: none; +} +.tox .tox-textarea-wrap .tox-textarea:focus { + border: none; +} +.tox-fullscreen { + border: 0; + height: 100%; + margin: 0; + overflow: hidden; + overscroll-behavior: none; + padding: 0; + touch-action: pinch-zoom; + width: 100%; +} +.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle { + display: none; +} +.tox.tox-tinymce.tox-fullscreen, +.tox-shadowhost.tox-fullscreen { + left: 0; + position: fixed; + top: 0; + z-index: 1200; +} +.tox.tox-tinymce.tox-fullscreen { + background-color: transparent; +} +.tox-fullscreen .tox.tox-tinymce-aux, +.tox-fullscreen ~ .tox.tox-tinymce-aux { + z-index: 1201; +} +.tox .tox-help__more-link { + list-style: none; + margin-top: 1em; +} +.tox .tox-imagepreview { + background-color: #666; + height: 380px; + overflow: hidden; + position: relative; + width: 100%; +} +.tox .tox-imagepreview.tox-imagepreview__loaded { + overflow: auto; +} +.tox .tox-imagepreview__container { + display: flex; + left: 100vw; + position: absolute; + top: 100vw; +} +.tox .tox-imagepreview__image { + background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==); +} +.tox .tox-image-tools .tox-spacer { + flex: 1; +} +.tox .tox-image-tools .tox-bar { + align-items: center; + display: flex; + height: 60px; + justify-content: center; +} +.tox .tox-image-tools .tox-imagepreview, +.tox .tox-image-tools .tox-imagepreview + .tox-bar { + margin-top: 8px; +} +.tox .tox-image-tools .tox-croprect-block { + background: black; + filter: alpha(opacity=50); + opacity: 0.5; + position: absolute; + zoom: 1; +} +.tox .tox-image-tools .tox-croprect-handle { + border: 2px solid white; + height: 20px; + left: 0; + position: absolute; + top: 0; + width: 20px; +} +.tox .tox-image-tools .tox-croprect-handle-move { + border: 0; + cursor: move; + position: absolute; +} +.tox .tox-image-tools .tox-croprect-handle-nw { + border-width: 2px 0 0 2px; + cursor: nw-resize; + left: 100px; + margin: -2px 0 0 -2px; + top: 100px; +} +.tox .tox-image-tools .tox-croprect-handle-ne { + border-width: 2px 2px 0 0; + cursor: ne-resize; + left: 200px; + margin: -2px 0 0 -20px; + top: 100px; +} +.tox .tox-image-tools .tox-croprect-handle-sw { + border-width: 0 0 2px 2px; + cursor: sw-resize; + left: 100px; + margin: -20px 2px 0 -2px; + top: 200px; +} +.tox .tox-image-tools .tox-croprect-handle-se { + border-width: 0 2px 2px 0; + cursor: se-resize; + left: 200px; + margin: -20px 0 0 -20px; + top: 200px; +} +.tox .tox-insert-table-picker { + display: flex; + flex-wrap: wrap; + width: 170px; +} +.tox .tox-insert-table-picker > div { + border-color: #eeeeee; + border-style: solid; + border-width: 0 1px 1px 0; + box-sizing: border-box; + height: 17px; + width: 17px; +} +.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker { + margin: -4px -4px; +} +.tox .tox-insert-table-picker .tox-insert-table-picker__selected { + background-color: rgba(0, 108, 231, 0.5); + border-color: rgba(0, 108, 231, 0.5); +} +.tox .tox-insert-table-picker__label { + color: rgba(34, 47, 62, 0.7); + display: block; + font-size: 14px; + padding: 4px; + text-align: center; + width: 100%; +} +.tox:not([dir=rtl]) { + /* stylelint-disable-next-line no-descending-specificity */ +} +.tox:not([dir=rtl]) .tox-insert-table-picker > div:nth-child(10n) { + border-right: 0; +} +.tox[dir=rtl] { + /* stylelint-disable-next-line no-descending-specificity */ +} +.tox[dir=rtl] .tox-insert-table-picker > div:nth-child(10n+1) { + border-right: 0; +} +.tox { + /* stylelint-disable */ + /* stylelint-enable */ +} +.tox .tox-menu { + background-color: #fff; + border: 1px solid transparent; + border-radius: 6px; + box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15); + display: inline-block; + overflow: hidden; + vertical-align: top; + z-index: 1150; +} +.tox .tox-menu.tox-collection.tox-collection--list { + padding: 0 4px; +} +.tox .tox-menu.tox-collection.tox-collection--toolbar { + padding: 8px; +} +.tox .tox-menu.tox-collection.tox-collection--grid { + padding: 8px; +} +@media only screen and (min-width: 768px ) { + .tox .tox-menu .tox-collection__item-label { + overflow-wrap: break-word; + word-break: normal; + } +} +.tox .tox-menu__label h1, +.tox .tox-menu__label h2, +.tox .tox-menu__label h3, +.tox .tox-menu__label h4, +.tox .tox-menu__label h5, +.tox .tox-menu__label h6, +.tox .tox-menu__label p, +.tox .tox-menu__label blockquote, +.tox .tox-menu__label code { + margin: 0; +} +.tox .tox-menubar { + background: repeating-linear-gradient(transparent 0px 1px, transparent 1px 39px) center top 39px / 100% calc(100% - 39px) no-repeat; + background-color: #fff; + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: wrap; + grid-column: 1 / -1; + grid-row: 1; + padding: 0 11px 0 12px; +} +.tox .tox-promotion + .tox-menubar { + grid-column: 1; +} +.tox .tox-promotion { + background: repeating-linear-gradient(transparent 0px 1px, transparent 1px 39px) center top 39px / 100% calc(100% - 39px) no-repeat; + background-color: #fff; + grid-column: 2; + grid-row: 1; + padding-inline-end: 8px; + padding-inline-start: 4px; + padding-top: 5px; +} +.tox .tox-promotion-link { + align-items: unsafe center; + background-color: #E8F1F8; + border-radius: 5px; + color: #086BE6; + cursor: pointer; + display: flex; + font-size: 14px; + height: 26.6px; + padding: 4px 8px; + white-space: nowrap; +} +.tox .tox-promotion-link:hover { + background-color: #B4D7FF; +} +.tox .tox-promotion-link:focus { + background-color: #D9EDF7; +} +/* Deprecated. Remove in next major release */ +.tox .tox-mbtn { + align-items: center; + background: transparent; + border: 0; + border-radius: 3px; + box-shadow: none; + color: #222f3e; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 28px; + justify-content: center; + margin: 5px 1px 6px 0; + outline: none; + overflow: hidden; + padding: 0 4px; + text-transform: none; + width: auto; +} +.tox .tox-mbtn[disabled] { + background-color: transparent; + border: 0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-mbtn:focus:not(:disabled) { + background: #cce2fa; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-mbtn--active { + background: #a6ccf7; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active) { + background: #cce2fa; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-mbtn__select-label { + cursor: default; + font-weight: normal; + margin: 0 4px; +} +.tox .tox-mbtn[disabled] .tox-mbtn__select-label { + cursor: not-allowed; +} +.tox .tox-mbtn__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; + display: none; +} +.tox .tox-notification { + border-radius: 6px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + display: grid; + font-size: 14px; + font-weight: normal; + grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr); + margin-top: 4px; + opacity: 0; + padding: 4px; + transition: transform 100ms ease-in, opacity 150ms ease-in; +} +.tox .tox-notification p { + font-size: 14px; + font-weight: normal; +} +.tox .tox-notification a { + cursor: pointer; + text-decoration: underline; +} +.tox .tox-notification--in { + opacity: 1; +} +.tox .tox-notification--success { + background-color: #e4eeda; + border-color: #d7e6c8; + color: #222f3e; +} +.tox .tox-notification--success p { + color: #222f3e; +} +.tox .tox-notification--success a { + color: #517342; +} +.tox .tox-notification--success svg { + fill: #222f3e; +} +.tox .tox-notification--error { + background-color: #f5cccc; + border-color: #f0b3b3; + color: #222f3e; +} +.tox .tox-notification--error p { + color: #222f3e; +} +.tox .tox-notification--error a { + color: #77181f; +} +.tox .tox-notification--error svg { + fill: #222f3e; +} +.tox .tox-notification--warn, +.tox .tox-notification--warning { + background-color: #fff5cc; + border-color: #fff0b3; + color: #222f3e; +} +.tox .tox-notification--warn p, +.tox .tox-notification--warning p { + color: #222f3e; +} +.tox .tox-notification--warn a, +.tox .tox-notification--warning a { + color: #7a6e25; +} +.tox .tox-notification--warn svg, +.tox .tox-notification--warning svg { + fill: #222f3e; +} +.tox .tox-notification--info { + background-color: #d6e7fb; + border-color: #c1dbf9; + color: #222f3e; +} +.tox .tox-notification--info p { + color: #222f3e; +} +.tox .tox-notification--info a { + color: #2a64a6; +} +.tox .tox-notification--info svg { + fill: #222f3e; +} +.tox .tox-notification__body { + align-self: center; + color: #222f3e; + font-size: 14px; + grid-column-end: 3; + grid-column-start: 2; + grid-row-end: 2; + grid-row-start: 1; + text-align: center; + white-space: normal; + word-break: break-all; + word-break: break-word; +} +.tox .tox-notification__body > * { + margin: 0; +} +.tox .tox-notification__body > * + * { + margin-top: 1rem; +} +.tox .tox-notification__icon { + align-self: center; + grid-column-end: 2; + grid-column-start: 1; + grid-row-end: 2; + grid-row-start: 1; + justify-self: end; +} +.tox .tox-notification__icon svg { + display: block; +} +.tox .tox-notification__dismiss { + align-self: start; + grid-column-end: 4; + grid-column-start: 3; + grid-row-end: 2; + grid-row-start: 1; + justify-self: end; +} +.tox .tox-notification .tox-progress-bar { + grid-column-end: 4; + grid-column-start: 1; + grid-row-end: 3; + grid-row-start: 2; + justify-self: center; +} +.tox .tox-pop { + display: inline-block; + position: relative; +} +.tox .tox-pop--resizing { + transition: width 0.1s ease; +} +.tox .tox-pop--resizing .tox-toolbar, +.tox .tox-pop--resizing .tox-toolbar__group { + flex-wrap: nowrap; +} +.tox .tox-pop--transition { + transition: 0.15s ease; + transition-property: left, right, top, bottom; +} +.tox .tox-pop--transition::before, +.tox .tox-pop--transition::after { + transition: all 0.15s, visibility 0s, opacity 0.075s ease 0.075s; +} +.tox .tox-pop__dialog { + background-color: #fff; + border: 1px solid #eeeeee; + border-radius: 6px; + box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15); + min-width: 0; + overflow: hidden; +} +.tox .tox-pop__dialog > *:not(.tox-toolbar) { + margin: 4px 4px 4px 8px; +} +.tox .tox-pop__dialog .tox-toolbar { + background-color: transparent; + margin-bottom: -1px; +} +.tox .tox-pop::before, +.tox .tox-pop::after { + border-style: solid; + content: ''; + display: block; + height: 0; + opacity: 1; + position: absolute; + width: 0; +} +.tox .tox-pop.tox-pop--inset::before, +.tox .tox-pop.tox-pop--inset::after { + opacity: 0; + transition: all 0s 0.15s, visibility 0s, opacity 0.075s ease; +} +.tox .tox-pop.tox-pop--bottom::before, +.tox .tox-pop.tox-pop--bottom::after { + left: 50%; + top: 100%; +} +.tox .tox-pop.tox-pop--bottom::after { + border-color: #fff transparent transparent transparent; + border-width: 8px; + margin-left: -8px; + margin-top: -1px; +} +.tox .tox-pop.tox-pop--bottom::before { + border-color: #eeeeee transparent transparent transparent; + border-width: 9px; + margin-left: -9px; +} +.tox .tox-pop.tox-pop--top::before, +.tox .tox-pop.tox-pop--top::after { + left: 50%; + top: 0; + transform: translateY(-100%); +} +.tox .tox-pop.tox-pop--top::after { + border-color: transparent transparent #fff transparent; + border-width: 8px; + margin-left: -8px; + margin-top: 1px; +} +.tox .tox-pop.tox-pop--top::before { + border-color: transparent transparent #eeeeee transparent; + border-width: 9px; + margin-left: -9px; +} +.tox .tox-pop.tox-pop--left::before, +.tox .tox-pop.tox-pop--left::after { + left: 0; + top: calc(50% - 1px); + transform: translateY(-50%); +} +.tox .tox-pop.tox-pop--left::after { + border-color: transparent #fff transparent transparent; + border-width: 8px; + margin-left: -15px; +} +.tox .tox-pop.tox-pop--left::before { + border-color: transparent #eeeeee transparent transparent; + border-width: 10px; + margin-left: -19px; +} +.tox .tox-pop.tox-pop--right::before, +.tox .tox-pop.tox-pop--right::after { + left: 100%; + top: calc(50% + 1px); + transform: translateY(-50%); +} +.tox .tox-pop.tox-pop--right::after { + border-color: transparent transparent transparent #fff; + border-width: 8px; + margin-left: -1px; +} +.tox .tox-pop.tox-pop--right::before { + border-color: transparent transparent transparent #eeeeee; + border-width: 10px; + margin-left: -1px; +} +.tox .tox-pop.tox-pop--align-left::before, +.tox .tox-pop.tox-pop--align-left::after { + left: 20px; +} +.tox .tox-pop.tox-pop--align-right::before, +.tox .tox-pop.tox-pop--align-right::after { + left: calc(100% - 20px); +} +.tox .tox-sidebar-wrap { + display: flex; + flex-direction: row; + flex-grow: 1; + min-height: 0; +} +.tox .tox-sidebar { + background-color: #fff; + display: flex; + flex-direction: row; + justify-content: flex-end; +} +.tox .tox-sidebar__slider { + display: flex; + overflow: hidden; +} +.tox .tox-sidebar__pane-container { + display: flex; +} +.tox .tox-sidebar__pane { + display: flex; +} +.tox .tox-sidebar--sliding-closed { + opacity: 0; +} +.tox .tox-sidebar--sliding-open { + opacity: 1; +} +.tox .tox-sidebar--sliding-growing, +.tox .tox-sidebar--sliding-shrinking { + transition: width 0.5s ease, opacity 0.5s ease; +} +.tox .tox-selector { + background-color: #4099ff; + border-color: #4099ff; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + display: inline-block; + height: 10px; + position: absolute; + width: 10px; +} +.tox.tox-platform-touch .tox-selector { + height: 12px; + width: 12px; +} +.tox .tox-slider { + align-items: center; + display: flex; + flex: 1; + height: 24px; + justify-content: center; + position: relative; +} +.tox .tox-slider__rail { + background-color: transparent; + border: 1px solid #eeeeee; + border-radius: 6px; + height: 10px; + min-width: 120px; + width: 100%; +} +.tox .tox-slider__handle { + background-color: #006ce7; + border: 2px solid #0054b4; + border-radius: 6px; + box-shadow: none; + height: 24px; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%); + width: 14px; +} +.tox .tox-form__controls-h-stack > .tox-slider:not(:first-of-type) { + margin-inline-start: 8px; +} +.tox .tox-form__controls-h-stack > .tox-form__group + .tox-slider { + margin-inline-start: 32px; +} +.tox .tox-form__controls-h-stack > .tox-slider + .tox-form__group { + margin-inline-start: 32px; +} +.tox .tox-source-code { + overflow: auto; +} +.tox .tox-spinner { + display: flex; +} +.tox .tox-spinner > div { + animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both; + background-color: rgba(34, 47, 62, 0.7); + border-radius: 100%; + height: 8px; + width: 8px; +} +.tox .tox-spinner > div:nth-child(1) { + animation-delay: -0.32s; +} +.tox .tox-spinner > div:nth-child(2) { + animation-delay: -0.16s; +} +@keyframes tam-bouncing-dots { + 0%, + 80%, + 100% { + transform: scale(0); + } + 40% { + transform: scale(1); + } +} +.tox:not([dir=rtl]) .tox-spinner > div:not(:first-child) { + margin-left: 4px; +} +.tox[dir=rtl] .tox-spinner > div:not(:first-child) { + margin-right: 4px; +} +.tox .tox-statusbar { + align-items: center; + background-color: #fff; + border-top: 1px solid #e3e3e3; + color: rgba(34, 47, 62, 0.7); + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-weight: normal; + height: 25px; + overflow: hidden; + padding: 0 8px; + position: relative; + text-transform: none; +} +.tox .tox-statusbar__text-container { + display: flex; + flex: 1 1 auto; + justify-content: flex-end; + overflow: hidden; +} +.tox .tox-statusbar__path { + display: flex; + flex: 1 1 auto; + margin-right: auto; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-statusbar__path > * { + display: inline; + white-space: nowrap; +} +.tox .tox-statusbar__wordcount { + flex: 0 0 auto; + margin-left: 1ch; +} +.tox .tox-statusbar a, +.tox .tox-statusbar__path-item, +.tox .tox-statusbar__wordcount { + color: rgba(34, 47, 62, 0.7); + text-decoration: none; +} +.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]), +.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]) { + color: #222f3e; + cursor: pointer; +} +.tox .tox-statusbar__branding svg { + fill: rgba(34, 47, 62, 0.8); + height: 1.14em; + vertical-align: -0.28em; + width: 3.6em; +} +.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg, +.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg { + fill: #222f3e; +} +.tox .tox-statusbar__resize-handle { + align-items: flex-end; + align-self: stretch; + cursor: nwse-resize; + display: flex; + flex: 0 0 auto; + justify-content: flex-end; + margin-left: auto; + margin-right: -8px; + padding-bottom: 3px; + padding-left: 1ch; + padding-right: 3px; +} +.tox .tox-statusbar__resize-handle svg { + display: block; + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-statusbar__resize-handle:focus svg { + background-color: #dee0e2; + border-radius: 1px 1px 5px 1px; + box-shadow: 0 0 0 2px #dee0e2; +} +.tox:not([dir=rtl]) .tox-statusbar__path > * { + margin-right: 4px; +} +.tox:not([dir=rtl]) .tox-statusbar__branding { + margin-left: 2ch; +} +.tox[dir=rtl] .tox-statusbar { + flex-direction: row-reverse; +} +.tox[dir=rtl] .tox-statusbar__path > * { + margin-left: 4px; +} +.tox .tox-throbber { + z-index: 1299; +} +.tox .tox-throbber__busy-spinner { + align-items: center; + background-color: rgba(255, 255, 255, 0.6); + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; +} +.tox .tox-tbtn { + align-items: center; + background: transparent; + border: 0; + border-radius: 3px; + box-shadow: none; + color: #222f3e; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 28px; + justify-content: center; + margin: 6px 1px 5px 0; + outline: none; + overflow: hidden; + padding: 0; + text-transform: none; + width: 34px; +} +.tox .tox-tbtn svg { + display: block; + fill: #222f3e; +} +.tox .tox-tbtn.tox-tbtn-more { + padding-left: 5px; + padding-right: 5px; + width: inherit; +} +.tox .tox-tbtn:focus { + background: #cce2fa; + border: 0; + box-shadow: none; +} +.tox .tox-tbtn:hover { + background: #cce2fa; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tbtn:hover svg { + fill: #222f3e; +} +.tox .tox-tbtn:active { + background: #a6ccf7; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tbtn:active svg { + fill: #222f3e; +} +.tox .tox-tbtn--disabled .tox-tbtn--enabled svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-tbtn--disabled, +.tox .tox-tbtn--disabled:hover, +.tox .tox-tbtn:disabled, +.tox .tox-tbtn:disabled:hover { + background: transparent; + border: 0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-tbtn--disabled svg, +.tox .tox-tbtn--disabled:hover svg, +.tox .tox-tbtn:disabled svg, +.tox .tox-tbtn:disabled:hover svg { + /* stylelint-disable-line no-descending-specificity */ + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-tbtn--enabled, +.tox .tox-tbtn--enabled:hover { + background: #a6ccf7; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tbtn--enabled > *, +.tox .tox-tbtn--enabled:hover > * { + transform: none; +} +.tox .tox-tbtn--enabled svg, +.tox .tox-tbtn--enabled:hover svg { + /* stylelint-disable-line no-descending-specificity */ + fill: #222f3e; +} +.tox .tox-tbtn--enabled.tox-tbtn--disabled svg, +.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) { + color: #222f3e; +} +.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg { + fill: #222f3e; +} +.tox .tox-tbtn:active > * { + transform: none; +} +.tox .tox-tbtn--md { + height: 42px; + width: 51px; +} +.tox .tox-tbtn--lg { + flex-direction: column; + height: 56px; + width: 68px; +} +.tox .tox-tbtn--return { + align-self: stretch; + height: unset; + width: 16px; +} +.tox .tox-tbtn--labeled { + padding: 0 4px; + width: unset; +} +.tox .tox-tbtn__vlabel { + display: block; + font-size: 10px; + font-weight: normal; + letter-spacing: -0.025em; + margin-bottom: 4px; + white-space: nowrap; +} +.tox .tox-number-input { + border-radius: 3px; + display: flex; + margin: 6px 1px 5px 0; + padding: 0 4px; + width: auto; +} +.tox .tox-number-input .tox-input-wrapper { + background: #f7f7f7; + display: flex; + pointer-events: none; + text-align: center; +} +.tox .tox-number-input .tox-input-wrapper:focus { + background: #cce2fa; +} +.tox .tox-number-input input { + border-radius: 3px; + color: #222f3e; + font-size: 14px; + margin: 2px 0; + pointer-events: all; + width: 60px; +} +.tox .tox-number-input input:hover { + background: #cce2fa; + color: #222f3e; +} +.tox .tox-number-input input:focus { + background: #fff; + color: #222f3e; +} +.tox .tox-number-input input:disabled { + background: transparent; + border: 0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-number-input button { + background: #f7f7f7; + color: #222f3e; + height: 28px; + text-align: center; + width: 24px; +} +.tox .tox-number-input button svg { + display: block; + fill: #222f3e; + margin: 0 auto; + transform: scale(0.67); +} +.tox .tox-number-input button:focus { + background: #cce2fa; +} +.tox .tox-number-input button:hover { + background: #cce2fa; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-number-input button:hover svg { + fill: #222f3e; +} +.tox .tox-number-input button:active { + background: #a6ccf7; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-number-input button:active svg { + fill: #222f3e; +} +.tox .tox-number-input button:disabled { + background: transparent; + border: 0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-number-input button:disabled svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-number-input button.minus { + border-radius: 3px 0 0 3px; +} +.tox .tox-number-input button.plus { + border-radius: 0 3px 3px 0; +} +.tox .tox-number-input:focus:not(:active) > button, +.tox .tox-number-input:focus:not(:active) > .tox-input-wrapper { + background: #cce2fa; +} +.tox .tox-tbtn--select { + margin: 6px 1px 5px 0; + padding: 0 4px; + width: auto; +} +.tox .tox-tbtn__select-label { + cursor: default; + font-weight: normal; + height: initial; + margin: 0 4px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-tbtn__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; +} +.tox .tox-tbtn__select-chevron svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-tbtn--bespoke { + background: #f7f7f7; +} +.tox .tox-tbtn--bespoke + .tox-tbtn--bespoke { + margin-inline-start: 4px; +} +.tox .tox-tbtn--bespoke .tox-tbtn__select-label { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 7em; +} +.tox .tox-tbtn--disabled .tox-tbtn__select-label, +.tox .tox-tbtn--select:disabled .tox-tbtn__select-label { + cursor: not-allowed; +} +.tox .tox-split-button { + border: 0; + border-radius: 3px; + box-sizing: border-box; + display: flex; + margin: 6px 1px 5px 0; + overflow: hidden; +} +.tox .tox-split-button:hover { + box-shadow: 0 0 0 1px #cce2fa inset; +} +.tox .tox-split-button:focus { + background: #cce2fa; + box-shadow: none; + color: #222f3e; +} +.tox .tox-split-button > * { + border-radius: 0; +} +.tox .tox-split-button__chevron { + width: 16px; +} +.tox .tox-split-button__chevron svg { + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-split-button .tox-tbtn { + margin: 0; +} +.tox .tox-split-button.tox-tbtn--disabled:hover, +.tox .tox-split-button.tox-tbtn--disabled:focus, +.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover, +.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus { + background: transparent; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); +} +.tox.tox-platform-touch .tox-split-button .tox-tbtn--select { + padding: 0 0px; +} +.tox.tox-platform-touch .tox-split-button .tox-tbtn:not(.tox-tbtn--select):first-child { + width: 30px; +} +.tox.tox-platform-touch .tox-split-button__chevron { + width: 20px; +} +.tox .tox-split-button.tox-tbtn--disabled svg #tox-icon-text-color__color, +.tox .tox-split-button.tox-tbtn--disabled svg #tox-icon-highlight-bg-color__color { + opacity: 0.6; +} +.tox .tox-toolbar-overlord { + background-color: #fff; +} +.tox .tox-toolbar, +.tox .tox-toolbar__primary, +.tox .tox-toolbar__overflow { + background-attachment: local; + background-color: #fff; + background-image: repeating-linear-gradient(#e3e3e3 0px 1px, transparent 1px 39px); + background-position: center top 40px; + background-repeat: no-repeat; + background-size: calc(100% - 11px * 2) calc(100% - 41px); + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: wrap; + padding: 0 0px; + transform: perspective(1px); +} +.tox .tox-toolbar-overlord > .tox-toolbar, +.tox .tox-toolbar-overlord > .tox-toolbar__primary, +.tox .tox-toolbar-overlord > .tox-toolbar__overflow { + background-position: center top 0px; + background-size: calc(100% - 11px * 2) calc(100% - 0px); +} +.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed { + height: 0; + opacity: 0; + padding-bottom: 0; + padding-top: 0; + visibility: hidden; +} +.tox .tox-toolbar__overflow--growing { + transition: height 0.3s ease, opacity 0.2s linear 0.1s; +} +.tox .tox-toolbar__overflow--shrinking { + transition: opacity 0.3s ease, height 0.2s linear 0.1s, visibility 0s linear 0.3s; +} +.tox .tox-toolbar-overlord, +.tox .tox-anchorbar { + grid-column: 1 / -1; +} +.tox .tox-menubar + .tox-toolbar, +.tox .tox-menubar + .tox-toolbar-overlord { + border-top: 1px solid transparent; + margin-top: -1px; + padding-bottom: 1px; + padding-top: 1px; +} +.tox .tox-toolbar--scrolling { + flex-wrap: nowrap; + overflow-x: auto; +} +.tox .tox-pop .tox-toolbar { + border-width: 0; +} +.tox .tox-toolbar--no-divider { + background-image: none; +} +.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child, +.tox .tox-toolbar-overlord .tox-toolbar__primary { + background-position: center top 39px; +} +.tox .tox-editor-header > .tox-toolbar--scrolling, +.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child { + background-image: none; +} +.tox.tox-tinymce-aux .tox-toolbar__overflow { + background-color: #fff; + background-position: center top 43px; + background-size: calc(100% - 8px * 2) calc(100% - 51px); + border: none; + border-radius: 6px; + box-shadow: 0 0 2px 0 rgba(34, 47, 62, 0.2), 0 4px 8px 0 rgba(34, 47, 62, 0.15); + overscroll-behavior: none; + padding: 4px 0; +} +.tox-pop .tox-pop__dialog { + /* stylelint-disable-next-line no-descending-specificity */ +} +.tox-pop .tox-pop__dialog .tox-toolbar { + background-position: center top 43px; + background-size: calc(100% - 11px * 2) calc(100% - 51px); + padding: 4px 0; +} +.tox .tox-toolbar__group { + align-items: center; + display: flex; + flex-wrap: wrap; + margin: 0 0; + padding: 0 11px 0 12px; +} +.tox .tox-toolbar__group--pull-right { + margin-left: auto; +} +.tox .tox-toolbar--scrolling .tox-toolbar__group { + flex-shrink: 0; + flex-wrap: nowrap; +} +.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type) { + border-right: 1px solid transparent; +} +.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type) { + border-left: 1px solid transparent; +} +.tox .tox-tooltip { + display: inline-block; + padding: 8px; + position: relative; +} +.tox .tox-tooltip__body { + background-color: #222f3e; + border-radius: 6px; + box-shadow: 0 2px 4px rgba(34, 47, 62, 0.3); + color: rgba(255, 255, 255, 0.75); + font-size: 14px; + font-style: normal; + font-weight: normal; + padding: 4px 8px; + text-transform: none; +} +.tox .tox-tooltip__arrow { + position: absolute; +} +.tox .tox-tooltip--down .tox-tooltip__arrow { + border-left: 8px solid transparent; + border-right: 8px solid transparent; + border-top: 8px solid #222f3e; + bottom: 0; + left: 50%; + position: absolute; + transform: translateX(-50%); +} +.tox .tox-tooltip--up .tox-tooltip__arrow { + border-bottom: 8px solid #222f3e; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + left: 50%; + position: absolute; + top: 0; + transform: translateX(-50%); +} +.tox .tox-tooltip--right .tox-tooltip__arrow { + border-bottom: 8px solid transparent; + border-left: 8px solid #222f3e; + border-top: 8px solid transparent; + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-tooltip--left .tox-tooltip__arrow { + border-bottom: 8px solid transparent; + border-right: 8px solid #222f3e; + border-top: 8px solid transparent; + left: 0; + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-tree { + display: flex; + flex-direction: column; +} +.tox .tox-tree .tox-trbtn { + align-items: center; + background: transparent; + border: 0; + border-radius: 4px; + box-shadow: none; + color: #222f3e; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 28px; + margin-bottom: 4px; + margin-top: 4px; + outline: none; + overflow: hidden; + padding: 0; + padding-left: 8px; + text-transform: none; +} +.tox .tox-tree .tox-trbtn .tox-tree__label { + cursor: default; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-tree .tox-trbtn svg { + display: block; + fill: #222f3e; +} +.tox .tox-tree .tox-trbtn:focus { + background: #cce2fa; + border: 0; + box-shadow: none; +} +.tox .tox-tree .tox-trbtn:hover { + background: #cce2fa; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tree .tox-trbtn:hover svg { + fill: #222f3e; +} +.tox .tox-tree .tox-trbtn:active { + background: #a6ccf7; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tree .tox-trbtn:active svg { + fill: #222f3e; +} +.tox .tox-tree .tox-trbtn--disabled, +.tox .tox-tree .tox-trbtn--disabled:hover, +.tox .tox-tree .tox-trbtn:disabled, +.tox .tox-tree .tox-trbtn:disabled:hover { + background: transparent; + border: 0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-tree .tox-trbtn--disabled svg, +.tox .tox-tree .tox-trbtn--disabled:hover svg, +.tox .tox-tree .tox-trbtn:disabled svg, +.tox .tox-tree .tox-trbtn:disabled:hover svg { + /* stylelint-disable-line no-descending-specificity */ + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-tree .tox-trbtn--enabled, +.tox .tox-tree .tox-trbtn--enabled:hover { + background: #a6ccf7; + border: 0; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tree .tox-trbtn--enabled > *, +.tox .tox-tree .tox-trbtn--enabled:hover > * { + transform: none; +} +.tox .tox-tree .tox-trbtn--enabled svg, +.tox .tox-tree .tox-trbtn--enabled:hover svg { + /* stylelint-disable-line no-descending-specificity */ + fill: #222f3e; +} +.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) { + color: #222f3e; +} +.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg { + fill: #222f3e; +} +.tox .tox-tree .tox-trbtn:active > * { + transform: none; +} +.tox .tox-tree .tox-trbtn--return { + align-self: stretch; + height: unset; + width: 16px; +} +.tox .tox-tree .tox-trbtn--labeled { + padding: 0 4px; + width: unset; +} +.tox .tox-tree .tox-trbtn__vlabel { + display: block; + font-size: 10px; + font-weight: normal; + letter-spacing: -0.025em; + margin-bottom: 4px; + white-space: nowrap; +} +.tox .tox-tree .tox-tree--directory { + display: flex; + flex-direction: column; + /* stylelint-disable no-descending-specificity */ +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label { + font-weight: bold; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn { + margin-left: auto; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg { + fill: transparent; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg { + fill: #222f3e; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg { + fill: #222f3e; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) { + background-color: transparent; + color: #222f3e; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg { + fill: #222f3e; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron { + margin-right: 6px; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--shrinking) .tox-chevron { + transition: transform 0.5s ease-in-out; +} +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--growing) .tox-chevron, +.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+ .tox-tree--directory__children--open) .tox-chevron { + transform: rotate(90deg); +} +.tox .tox-tree .tox-tree--leaf__label { + font-weight: normal; +} +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn { + margin-left: auto; +} +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg { + fill: transparent; +} +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg, +.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg { + fill: #222f3e; +} +.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg { + fill: #222f3e; +} +.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) { + background-color: transparent; + color: #222f3e; +} +.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg { + fill: #222f3e; +} +.tox .tox-tree .tox-tree--directory__children { + overflow: hidden; + padding-left: 16px; +} +.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing, +.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking { + transition: height 0.5s ease-in-out; +} +.tox .tox-tree .tox-trbtn.tox-tree--leaf__label { + display: flex; + justify-content: space-between; +} +.tox .tox-view-wrap, +.tox .tox-view-wrap__slot-container { + background-color: #fff; + display: flex; + flex: 1; + flex-direction: column; +} +.tox .tox-view { + display: flex; + flex: 1 1 auto; + flex-direction: column; + overflow: hidden; +} +.tox .tox-view__header { + align-items: center; + display: flex; + font-size: 16px; + justify-content: space-between; + padding: 8px 8px 0 8px; + position: relative; +} +.tox .tox-view--mobile.tox-view__header, +.tox .tox-view--mobile.tox-view__toolbar { + padding: 8px; +} +.tox .tox-view--scrolling { + flex-wrap: nowrap; + overflow-x: auto; +} +.tox .tox-view__toolbar { + display: flex; + flex-direction: row; + gap: 8px; + justify-content: space-between; + padding: 8px 8px 0 8px; +} +.tox .tox-view__toolbar__group { + display: flex; + flex-direction: row; + gap: 12px; +} +.tox .tox-view__header-start, +.tox .tox-view__header-end { + display: flex; +} +.tox .tox-view__pane { + height: 100%; + padding: 8px; + width: 100%; +} +.tox .tox-view__pane_panel { + border: 1px solid #eeeeee; + border-radius: 6px; +} +.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start > *, +.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end > * { + margin-left: 8px; +} +.tox[dir=rtl] .tox-view__header .tox-view__header-start > *, +.tox[dir=rtl] .tox-view__header .tox-view__header-end > * { + margin-right: 8px; +} +.tox .tox-well { + border: 1px solid #eeeeee; + border-radius: 6px; + padding: 8px; + width: 100%; +} +.tox .tox-well > *:first-child { + margin-top: 0; +} +.tox .tox-well > *:last-child { + margin-bottom: 0; +} +.tox .tox-well > *:only-child { + margin: 0; +} +.tox .tox-custom-editor { + border: 1px solid #eeeeee; + border-radius: 6px; + display: flex; + flex: 1; + overflow: hidden; + position: relative; +} +/* stylelint-disable */ +.tox { + /* stylelint-enable */ +} +.tox .tox-dialog-loading::before { + background-color: rgba(0, 0, 0, 0.5); + content: ""; + height: 100%; + position: absolute; + width: 100%; + z-index: 1000; +} +.tox .tox-tab { + cursor: pointer; +} +.tox .tox-dialog__content-js { + display: flex; + flex: 1; +} +.tox .tox-dialog__body-content .tox-collection { + display: flex; + flex: 1; +} diff --git a/public/skins/ui/oxide/skin.min.css b/public/skins/ui/oxide/skin.min.css new file mode 100644 index 0000000..0b47fd2 --- /dev/null +++ b/public/skins/ui/oxide/skin.min.css @@ -0,0 +1 @@ +.tox{box-shadow:none;box-sizing:content-box;color:#222f3e;cursor:auto;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;font-style:normal;font-weight:400;line-height:normal;-webkit-tap-highlight-color:transparent;text-decoration:none;text-shadow:none;text-transform:none;vertical-align:initial;white-space:normal}.tox :not(svg):not(rect){box-sizing:inherit;color:inherit;cursor:inherit;direction:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;-webkit-tap-highlight-color:inherit;text-align:inherit;text-decoration:inherit;text-shadow:inherit;text-transform:inherit;vertical-align:inherit;white-space:inherit}.tox :not(svg):not(rect){background:0 0;border:0;box-shadow:none;float:none;height:auto;margin:0;max-width:none;outline:0;padding:0;position:static;width:auto}.tox:not([dir=rtl]){direction:ltr;text-align:left}.tox[dir=rtl]{direction:rtl;text-align:right}.tox-tinymce{border:2px solid #eee;border-radius:10px;box-shadow:none;box-sizing:border-box;display:flex;flex-direction:column;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;overflow:hidden;position:relative;visibility:inherit!important}.tox.tox-tinymce-inline{border:none;box-shadow:none;overflow:initial}.tox.tox-tinymce-inline .tox-editor-container{overflow:initial}.tox.tox-tinymce-inline .tox-editor-header{background-color:#fff;border:2px solid #eee;border-radius:10px;box-shadow:none;overflow:hidden}.tox-tinymce-aux{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;z-index:1300}.tox-tinymce :focus,.tox-tinymce-aux :focus{outline:0}button::-moz-focus-inner{border:0}.tox[dir=rtl] .tox-icon--flip svg{transform:rotateY(180deg)}.tox .accessibility-issue__header{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description{align-items:stretch;border-radius:6px;display:flex;justify-content:space-between}.tox .accessibility-issue__description>div{padding-bottom:4px}.tox .accessibility-issue__description>div>div{align-items:center;display:flex;margin-bottom:4px}.tox .accessibility-issue__description>div>div .tox-icon svg{display:block}.tox .accessibility-issue__repair{margin-top:16px}.tox .tox-dialog__body-content .accessibility-issue--info .accessibility-issue__description{background-color:rgba(0,101,216,.1);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--info .tox-form__group h2{color:#006ce7}.tox .tox-dialog__body-content .accessibility-issue--info .tox-icon svg{fill:#006ce7}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon{background-color:#006ce7;color:#fff}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:hover{background-color:#0060ce}.tox .tox-dialog__body-content .accessibility-issue--info a.tox-button--naked.tox-button--icon:active{background-color:#0054b4}.tox .tox-dialog__body-content .accessibility-issue--warn .accessibility-issue__description{background-color:rgba(255,165,0,.08);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-form__group h2{color:#8f5d00}.tox .tox-dialog__body-content .accessibility-issue--warn .tox-icon svg{fill:#8f5d00}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon{background-color:#ffe89d;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:hover{background-color:#f2d574;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--warn a.tox-button--naked.tox-button--icon:active{background-color:#e8c657;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .accessibility-issue__description{background-color:rgba(204,0,0,.1);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error .tox-form__group h2{color:#c00}.tox .tox-dialog__body-content .accessibility-issue--error .tox-icon svg{fill:#c00}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon{background-color:#f2bfbf;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:focus,.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:hover{background-color:#e9a4a4;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--error a.tox-button--naked.tox-button--icon:active{background-color:#ee9494;color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description{background-color:rgba(120,171,70,.1);color:#222f3e}.tox .tox-dialog__body-content .accessibility-issue--success .accessibility-issue__description>:last-child{display:none}.tox .tox-dialog__body-content .accessibility-issue--success .tox-form__group h2{color:#527530}.tox .tox-dialog__body-content .accessibility-issue--success .tox-icon svg{fill:#527530}.tox .tox-dialog__body-content .accessibility-issue__header .tox-form__group h1,.tox .tox-dialog__body-content .tox-form__group .accessibility-issue__description h2{font-size:14px;margin-top:0}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-left:4px}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-left:auto}.tox:not([dir=rtl]) .tox-dialog__body-content .accessibility-issue__description{padding:4px 4px 4px 8px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header .tox-button{margin-right:4px}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__header>:nth-last-child(2){margin-right:auto}.tox[dir=rtl] .tox-dialog__body-content .accessibility-issue__description{padding:4px 8px 4px 4px}.tox .tox-advtemplate .tox-form__grid{flex:1}.tox .tox-advtemplate .tox-form__grid>div:first-child{display:flex;flex-direction:column;width:30%}.tox .tox-advtemplate .tox-form__grid>div:first-child>div:nth-child(2){flex-basis:0;flex-grow:1;overflow:auto}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-advtemplate .tox-form__grid>div:first-child{width:100%}}.tox .tox-advtemplate iframe{border-color:#eee;border-radius:10px;border-style:solid;border-width:1px;margin:0 10px}.tox .tox-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bottom-anchorbar{display:flex;flex:0 0 auto}.tox .tox-bar{display:flex;flex:0 0 auto}.tox .tox-button{background-color:#006ce7;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#006ce7;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;line-height:24px;margin:0;outline:0;padding:4px 16px;position:relative;text-align:center;text-decoration:none;text-transform:none;white-space:nowrap}.tox .tox-button::before{border-radius:6px;bottom:-1px;box-shadow:inset 0 0 0 2px #fff,0 0 0 1px #006ce7,0 0 0 3px rgba(0,108,231,.25);content:'';left:-1px;opacity:0;pointer-events:none;position:absolute;right:-1px;top:-1px}.tox .tox-button[disabled]{background-color:#006ce7;background-image:none;border-color:#006ce7;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button:focus:not(:disabled){background-color:#0060ce;background-image:none;border-color:#0060ce;box-shadow:none;color:#fff}.tox .tox-button:focus-visible:not(:disabled)::before{opacity:1}.tox .tox-button:hover:not(:disabled){background-color:#0060ce;background-image:none;border-color:#0060ce;box-shadow:none;color:#fff}.tox .tox-button:active:not(:disabled){background-color:#0054b4;background-image:none;border-color:#0054b4;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled{background-color:#0054b4;background-image:none;border-color:#0054b4;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled[disabled]{background-color:#0054b4;background-image:none;border-color:#0054b4;box-shadow:none;color:rgba(255,255,255,.5);cursor:not-allowed}.tox .tox-button.tox-button--enabled:focus:not(:disabled){background-color:#00489b;background-image:none;border-color:#00489b;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled:hover:not(:disabled){background-color:#00489b;background-image:none;border-color:#00489b;box-shadow:none;color:#fff}.tox .tox-button.tox-button--enabled:active:not(:disabled){background-color:#003c81;background-image:none;border-color:#003c81;box-shadow:none;color:#fff}.tox .tox-button--icon-and-text,.tox .tox-button.tox-button--icon-and-text,.tox .tox-button.tox-button--secondary.tox-button--icon-and-text{display:flex;padding:5px 4px}.tox .tox-button--icon-and-text .tox-icon svg,.tox .tox-button.tox-button--icon-and-text .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon-and-text .tox-icon svg{display:block;fill:currentColor}.tox .tox-button--secondary{background-color:#f0f0f0;background-image:none;background-position:0 0;background-repeat:repeat;border-color:#f0f0f0;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;color:#222f3e;font-size:14px;font-style:normal;font-weight:700;letter-spacing:normal;outline:0;padding:4px 16px;text-decoration:none;text-transform:none}.tox .tox-button--secondary[disabled]{background-color:#f0f0f0;background-image:none;border-color:#f0f0f0;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-button--secondary:focus:not(:disabled){background-color:#e3e3e3;background-image:none;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--secondary:hover:not(:disabled){background-color:#e3e3e3;background-image:none;border-color:#e3e3e3;box-shadow:none;color:#222f3e}.tox .tox-button--secondary:active:not(:disabled){background-color:#d6d6d6;background-image:none;border-color:#d6d6d6;box-shadow:none;color:#222f3e}.tox .tox-button--secondary.tox-button--enabled{background-color:#a8c8ed;background-image:none;border-color:#a8c8ed;box-shadow:none;color:#222f3e}.tox .tox-button--secondary.tox-button--enabled[disabled]{background-color:#a8c8ed;background-image:none;border-color:#a8c8ed;box-shadow:none;color:rgba(34,47,62,.5)}.tox .tox-button--secondary.tox-button--enabled:focus:not(:disabled){background-color:#93bbe9;background-image:none;border-color:#93bbe9;box-shadow:none;color:#222f3e}.tox .tox-button--secondary.tox-button--enabled:hover:not(:disabled){background-color:#93bbe9;background-image:none;border-color:#93bbe9;box-shadow:none;color:#222f3e}.tox .tox-button--secondary.tox-button--enabled:active:not(:disabled){background-color:#7daee4;background-image:none;border-color:#7daee4;box-shadow:none;color:#222f3e}.tox .tox-button--icon,.tox .tox-button.tox-button--icon,.tox .tox-button.tox-button--secondary.tox-button--icon{padding:4px}.tox .tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--icon .tox-icon svg,.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg{display:block;fill:currentColor}.tox .tox-button-link{background:0;border:none;box-sizing:border-box;cursor:pointer;display:inline-block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;font-weight:400;line-height:1.3;margin:0;padding:0;white-space:nowrap}.tox .tox-button-link--sm{font-size:14px}.tox .tox-button--naked{background-color:transparent;border-color:transparent;box-shadow:unset;color:#222f3e}.tox .tox-button--naked[disabled]{background-color:rgba(34,47,62,.12);border-color:transparent;box-shadow:unset;color:rgba(34,47,62,.5)}.tox .tox-button--naked:hover:not(:disabled){background-color:rgba(34,47,62,.12);border-color:transparent;box-shadow:unset;color:#222f3e}.tox .tox-button--naked:focus:not(:disabled){background-color:rgba(34,47,62,.12);border-color:transparent;box-shadow:unset;color:#222f3e}.tox .tox-button--naked:active:not(:disabled){background-color:rgba(34,47,62,.18);border-color:transparent;box-shadow:unset;color:#222f3e}.tox .tox-button--naked .tox-icon svg{fill:currentColor}.tox .tox-button--naked.tox-button--icon:hover:not(:disabled){color:#222f3e}.tox .tox-checkbox{align-items:center;border-radius:6px;cursor:pointer;display:flex;height:36px;min-width:36px}.tox .tox-checkbox__input{height:1px;overflow:hidden;position:absolute;top:auto;width:1px}.tox .tox-checkbox__icons{align-items:center;border-radius:6px;box-shadow:0 0 0 2px transparent;box-sizing:content-box;display:flex;height:24px;justify-content:center;padding:calc(4px - 1px);width:24px}.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:block;fill:rgba(34,47,62,.3)}.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:none;fill:#006ce7}.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg{display:none;fill:#006ce7}.tox .tox-checkbox--disabled{color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__checked svg{fill:rgba(34,47,62,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__unchecked svg{fill:rgba(34,47,62,.5)}.tox .tox-checkbox--disabled .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{fill:rgba(34,47,62,.5)}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:checked+.tox-checkbox__icons .tox-checkbox-icon__checked svg{display:block}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__unchecked svg{display:none}.tox input.tox-checkbox__input:indeterminate+.tox-checkbox__icons .tox-checkbox-icon__indeterminate svg{display:block}.tox input.tox-checkbox__input:focus+.tox-checkbox__icons{border-radius:6px;box-shadow:inset 0 0 0 1px #006ce7;padding:calc(4px - 1px)}.tox:not([dir=rtl]) .tox-checkbox__label{margin-left:4px}.tox:not([dir=rtl]) .tox-checkbox__input{left:-10000px}.tox:not([dir=rtl]) .tox-bar .tox-checkbox{margin-left:4px}.tox[dir=rtl] .tox-checkbox__label{margin-right:4px}.tox[dir=rtl] .tox-checkbox__input{right:-10000px}.tox[dir=rtl] .tox-bar .tox-checkbox{margin-right:4px}.tox .tox-collection--toolbar .tox-collection__group{display:flex;padding:0}.tox .tox-collection--grid .tox-collection__group{display:flex;flex-wrap:wrap;max-height:208px;overflow-x:hidden;overflow-y:auto;padding:0}.tox .tox-collection--list .tox-collection__group{border-bottom-width:0;border-color:#e3e3e3;border-left-width:0;border-right-width:0;border-style:solid;border-top-width:1px;padding:4px 0}.tox .tox-collection--list .tox-collection__group:first-child{border-top-width:0}.tox .tox-collection__group-heading{background-color:#fcfcfc;color:rgba(34,47,62,.7);cursor:default;font-size:12px;font-style:normal;font-weight:400;margin-bottom:4px;margin-top:-4px;padding:4px 8px;text-transform:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.tox .tox-collection__item{align-items:center;border-radius:3px;color:#222f3e;display:flex;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.tox .tox-collection--list .tox-collection__item{padding:4px 8px}.tox .tox-collection--toolbar .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--grid .tox-collection__item{border-radius:3px;padding:4px}.tox .tox-collection--list .tox-collection__item--enabled{background-color:#fff;color:#222f3e}.tox .tox-collection--list .tox-collection__item--active{background-color:#cce2fa}.tox .tox-collection--toolbar .tox-collection__item--enabled{background-color:#a6ccf7;color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active{background-color:#cce2fa}.tox .tox-collection--grid .tox-collection__item--enabled{background-color:#a6ccf7;color:#222f3e}.tox .tox-collection--grid .tox-collection__item--active:not(.tox-collection__item--state-disabled){background-color:#cce2fa;color:#222f3e}.tox .tox-collection--list .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e}.tox .tox-collection--toolbar .tox-collection__item--active:not(.tox-collection__item--state-disabled){color:#222f3e}.tox .tox-collection__item-checkmark,.tox .tox-collection__item-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.tox .tox-collection__item-checkmark svg,.tox .tox-collection__item-icon svg{fill:currentColor}.tox .tox-collection--toolbar-lg .tox-collection__item-icon{height:48px;width:48px}.tox .tox-collection__item-label{color:currentColor;display:inline-block;flex:1;font-size:14px;font-style:normal;font-weight:400;line-height:24px;text-transform:none;word-break:break-all}.tox .tox-collection__item-accessory{color:rgba(34,47,62,.7);display:inline-block;font-size:14px;height:24px;line-height:24px;text-transform:none}.tox .tox-collection__item-caret{align-items:center;display:flex;min-height:24px}.tox .tox-collection__item-caret::after{content:'';font-size:0;min-height:inherit}.tox .tox-collection__item-caret svg{fill:#222f3e}.tox .tox-collection__item--state-disabled{background-color:transparent;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-collection__item--state-disabled .tox-collection__item-caret svg{fill:rgba(34,47,62,.5)}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg{display:none}.tox .tox-collection--list .tox-collection__item:not(.tox-collection__item--enabled) .tox-collection__item-accessory+.tox-collection__item-checkmark{display:none}.tox .tox-collection--horizontal{background-color:#fff;border:1px solid #e3e3e3;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:nowrap;margin-bottom:0;overflow-x:auto;padding:0}.tox .tox-collection--horizontal .tox-collection__group{align-items:center;display:flex;flex-wrap:nowrap;margin:0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item{height:28px;margin:6px 1px 5px 0;padding:0 4px}.tox .tox-collection--horizontal .tox-collection__item-label{white-space:nowrap}.tox .tox-collection--horizontal .tox-collection__item-caret{margin-left:4px}.tox .tox-collection__item-container{display:flex}.tox .tox-collection__item-container--row{align-items:center;flex:1 1 auto;flex-direction:row}.tox .tox-collection__item-container--row.tox-collection__item-container--align-left{margin-right:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--align-right{justify-content:flex-end;margin-left:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-top{align-items:flex-start;margin-bottom:auto}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-middle{align-items:center}.tox .tox-collection__item-container--row.tox-collection__item-container--valign-bottom{align-items:flex-end;margin-top:auto}.tox .tox-collection__item-container--column{align-self:center;flex:1 1 auto;flex-direction:column}.tox .tox-collection__item-container--column.tox-collection__item-container--align-left{align-items:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--align-right{align-items:flex-end}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-top{align-self:flex-start}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-middle{align-self:center}.tox .tox-collection__item-container--column.tox-collection__item-container--valign-bottom{align-self:flex-end}.tox:not([dir=rtl]) .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-right:1px solid transparent}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>:not(:first-child){margin-left:8px}.tox:not([dir=rtl]) .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-left:4px}.tox:not([dir=rtl]) .tox-collection__item-accessory{margin-left:16px;text-align:right}.tox:not([dir=rtl]) .tox-collection .tox-collection__item-caret{margin-left:16px}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__group:not(:last-of-type){border-left:1px solid transparent}.tox[dir=rtl] .tox-collection--list .tox-collection__item>:not(:first-child){margin-right:8px}.tox[dir=rtl] .tox-collection--list .tox-collection__item>.tox-collection__item-label:first-child{margin-right:4px}.tox[dir=rtl] .tox-collection__item-accessory{margin-right:16px;text-align:left}.tox[dir=rtl] .tox-collection .tox-collection__item-caret{margin-right:16px;transform:rotateY(180deg)}.tox[dir=rtl] .tox-collection--horizontal .tox-collection__item-caret{margin-right:4px}.tox .tox-color-picker-container{display:flex;flex-direction:row;height:225px;margin:0}.tox .tox-sv-palette{box-sizing:border-box;display:flex;height:100%}.tox .tox-sv-palette-spectrum{height:100%}.tox .tox-sv-palette,.tox .tox-sv-palette-spectrum{width:225px}.tox .tox-sv-palette-thumb{background:0 0;border:1px solid #000;border-radius:50%;box-sizing:content-box;height:12px;position:absolute;width:12px}.tox .tox-sv-palette-inner-thumb{border:1px solid #fff;border-radius:50%;height:10px;position:absolute;width:10px}.tox .tox-hue-slider{box-sizing:border-box;height:100%;width:25px}.tox .tox-hue-slider-spectrum{background:linear-gradient(to bottom,red,#ff0080,#f0f,#8000ff,#00f,#0080ff,#0ff,#00ff80,#0f0,#80ff00,#ff0,#ff8000,red);height:100%;width:100%}.tox .tox-hue-slider,.tox .tox-hue-slider-spectrum{width:20px}.tox .tox-hue-slider-thumb{background:#fff;border:1px solid #000;box-sizing:content-box;height:4px;width:100%}.tox .tox-rgb-form{display:flex;flex-direction:column;justify-content:space-between}.tox .tox-rgb-form div{align-items:center;display:flex;justify-content:space-between;margin-bottom:5px;width:inherit}.tox .tox-rgb-form input{width:6em}.tox .tox-rgb-form input.tox-invalid{border:1px solid red!important}.tox .tox-rgb-form .tox-rgba-preview{border:1px solid #000;flex-grow:2;margin-bottom:0}.tox:not([dir=rtl]) .tox-sv-palette{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider{margin-right:15px}.tox:not([dir=rtl]) .tox-hue-slider-thumb{margin-left:-1px}.tox:not([dir=rtl]) .tox-rgb-form label{margin-right:.5em}.tox[dir=rtl] .tox-sv-palette{margin-left:15px}.tox[dir=rtl] .tox-hue-slider{margin-left:15px}.tox[dir=rtl] .tox-hue-slider-thumb{margin-right:-1px}.tox[dir=rtl] .tox-rgb-form label{margin-left:.5em}.tox .tox-toolbar .tox-swatches,.tox .tox-toolbar__overflow .tox-swatches,.tox .tox-toolbar__primary .tox-swatches{margin:5px 0 6px 11px}.tox .tox-collection--list .tox-collection__group .tox-swatches-menu{border:0;margin:-4px -4px}.tox .tox-swatches__row{display:flex}.tox .tox-swatch{height:30px;transition:transform .15s,box-shadow .15s;width:30px}.tox .tox-swatch:focus,.tox .tox-swatch:hover{box-shadow:0 0 0 1px rgba(127,127,127,.3) inset;transform:scale(.8)}.tox .tox-swatch--remove{align-items:center;display:flex;justify-content:center}.tox .tox-swatch--remove svg path{stroke:#e74c3c}.tox .tox-swatches__picker-btn{align-items:center;background-color:transparent;border:0;cursor:pointer;display:flex;height:30px;justify-content:center;outline:0;padding:0;width:30px}.tox .tox-swatches__picker-btn svg{fill:#222f3e;height:24px;width:24px}.tox .tox-swatches__picker-btn:hover{background:#cce2fa}.tox div.tox-swatch:not(.tox-swatch--remove) svg{display:none;fill:#222f3e;height:24px;margin:calc((30px - 24px)/ 2) calc((30px - 24px)/ 2);width:24px}.tox div.tox-swatch:not(.tox-swatch--remove) svg path{fill:#fff;paint-order:stroke;stroke:#222f3e;stroke-width:2px}.tox div.tox-swatch:not(.tox-swatch--remove).tox-collection__item--enabled svg{display:block}.tox:not([dir=rtl]) .tox-swatches__picker-btn{margin-left:auto}.tox[dir=rtl] .tox-swatches__picker-btn{margin-right:auto}.tox .tox-comment-thread{background:#fff;position:relative}.tox .tox-comment-thread>:not(:first-child){margin-top:8px}.tox .tox-comment{background:#fff;border:1px solid #eee;border-radius:6px;box-shadow:0 4px 8px 0 rgba(34,47,62,.1);padding:8px 8px 16px 8px;position:relative}.tox .tox-comment__header{align-items:center;color:#222f3e;display:flex;justify-content:space-between}.tox .tox-comment__date{color:#222f3e;font-size:12px;line-height:18px}.tox .tox-comment__body{color:#222f3e;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;margin-top:8px;position:relative;text-transform:initial}.tox .tox-comment__body textarea{resize:none;white-space:normal;width:100%}.tox .tox-comment__expander{padding-top:8px}.tox .tox-comment__expander p{color:rgba(34,47,62,.7);font-size:14px;font-style:normal}.tox .tox-comment__body p{margin:0}.tox .tox-comment__buttonspacing{padding-top:16px;text-align:center}.tox .tox-comment-thread__overlay::after{background:#fff;bottom:0;content:"";display:flex;left:0;opacity:.9;position:absolute;right:0;top:0;z-index:5}.tox .tox-comment__reply{display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;margin-top:8px}.tox .tox-comment__reply>:first-child{margin-bottom:8px;width:100%}.tox .tox-comment__edit{display:flex;flex-wrap:wrap;justify-content:flex-end;margin-top:16px}.tox .tox-comment__gradient::after{background:linear-gradient(rgba(255,255,255,0),#fff);bottom:0;content:"";display:block;height:5em;margin-top:-40px;position:absolute;width:100%}.tox .tox-comment__overlay{background:#fff;bottom:0;display:flex;flex-direction:column;flex-grow:1;left:0;opacity:.9;position:absolute;right:0;text-align:center;top:0;z-index:5}.tox .tox-comment__loading-text{align-items:center;color:#222f3e;display:flex;flex-direction:column;position:relative}.tox .tox-comment__loading-text>div{padding-bottom:16px}.tox .tox-comment__overlaytext{bottom:0;flex-direction:column;font-size:14px;left:0;padding:1em;position:absolute;right:0;top:0;z-index:10}.tox .tox-comment__overlaytext p{background-color:#fff;box-shadow:0 0 8px 8px #fff;color:#222f3e;text-align:center}.tox .tox-comment__overlaytext div:nth-of-type(2){font-size:.8em}.tox .tox-comment__busy-spinner{align-items:center;background-color:#fff;bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:20}.tox .tox-comment__scroll{display:flex;flex-direction:column;flex-shrink:1;overflow:auto}.tox .tox-conversations{margin:8px}.tox:not([dir=rtl]) .tox-comment__edit{margin-left:8px}.tox:not([dir=rtl]) .tox-comment__buttonspacing>:last-child,.tox:not([dir=rtl]) .tox-comment__edit>:last-child,.tox:not([dir=rtl]) .tox-comment__reply>:last-child{margin-left:8px}.tox[dir=rtl] .tox-comment__edit{margin-right:8px}.tox[dir=rtl] .tox-comment__buttonspacing>:last-child,.tox[dir=rtl] .tox-comment__edit>:last-child,.tox[dir=rtl] .tox-comment__reply>:last-child{margin-right:8px}.tox .tox-user{align-items:center;display:flex}.tox .tox-user__avatar svg{fill:rgba(34,47,62,.7)}.tox .tox-user__avatar img{border-radius:50%;height:36px;object-fit:cover;vertical-align:middle;width:36px}.tox .tox-user__name{color:#222f3e;font-size:14px;font-style:normal;font-weight:700;line-height:18px;text-transform:none}.tox:not([dir=rtl]) .tox-user__avatar img,.tox:not([dir=rtl]) .tox-user__avatar svg{margin-right:8px}.tox:not([dir=rtl]) .tox-user__avatar+.tox-user__name{margin-left:8px}.tox[dir=rtl] .tox-user__avatar img,.tox[dir=rtl] .tox-user__avatar svg{margin-left:8px}.tox[dir=rtl] .tox-user__avatar+.tox-user__name{margin-right:8px}.tox .tox-dialog-wrap{align-items:center;bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1100}.tox .tox-dialog-wrap__backdrop{background-color:rgba(255,255,255,.75);bottom:0;left:0;position:absolute;right:0;top:0;z-index:1}.tox .tox-dialog-wrap__backdrop--opaque{background-color:#fff}.tox .tox-dialog{background-color:#fff;border-color:#eee;border-radius:10px;border-style:solid;border-width:0;box-shadow:0 16px 16px -10px rgba(34,47,62,.15),0 0 40px 1px rgba(34,47,62,.15);display:flex;flex-direction:column;max-height:100%;max-width:480px;overflow:hidden;position:relative;width:95vw;z-index:2}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog{align-self:flex-start;margin:8px auto;max-height:calc(100vh - 8px * 2);width:calc(100vw - 16px)}}.tox .tox-dialog-inline{z-index:1100}.tox .tox-dialog__header{align-items:center;background-color:#fff;border-bottom:none;color:#222f3e;display:flex;font-size:16px;justify-content:space-between;padding:8px 16px 0 16px;position:relative}.tox .tox-dialog__header .tox-button{z-index:1}.tox .tox-dialog__draghandle{cursor:grab;height:100%;left:0;position:absolute;top:0;width:100%}.tox .tox-dialog__draghandle:active{cursor:grabbing}.tox .tox-dialog__dismiss{margin-left:auto}.tox .tox-dialog__title{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:20px;font-style:normal;font-weight:400;line-height:1.3;margin:0;text-transform:none}.tox .tox-dialog__body{color:#222f3e;display:flex;flex:1;font-size:16px;font-style:normal;font-weight:400;line-height:1.3;min-width:0;text-align:left;text-transform:none}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body{flex-direction:column}}.tox .tox-dialog__body-nav{align-items:flex-start;display:flex;flex-direction:column;flex-shrink:0;padding:16px 16px}@media only screen and (min-width:768px){.tox .tox-dialog__body-nav{max-width:11em}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox .tox-dialog__body-nav{flex-direction:row;-webkit-overflow-scrolling:touch;overflow-x:auto;padding-bottom:0}}.tox .tox-dialog__body-nav-item{border-bottom:2px solid transparent;color:rgba(34,47,62,.7);display:inline-block;flex-shrink:0;font-size:14px;line-height:1.3;margin-bottom:8px;max-width:13em;text-decoration:none}.tox .tox-dialog__body-nav-item:focus{background-color:rgba(0,108,231,.1)}.tox .tox-dialog__body-nav-item--active{border-bottom:2px solid #006ce7;color:#006ce7}.tox .tox-dialog__body-content{box-sizing:border-box;display:flex;flex:1;flex-direction:column;max-height:min(650px,calc(100vh - 110px));overflow:auto;-webkit-overflow-scrolling:touch;padding:16px 16px}.tox .tox-dialog__body-content>*{margin-bottom:0;margin-top:16px}.tox .tox-dialog__body-content>:first-child{margin-top:0}.tox .tox-dialog__body-content>:last-child{margin-bottom:0}.tox .tox-dialog__body-content>:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content a{color:#006ce7;cursor:pointer;text-decoration:none}.tox .tox-dialog__body-content a:focus,.tox .tox-dialog__body-content a:hover{color:#0054b4;text-decoration:none}.tox .tox-dialog__body-content a:active{color:#0054b4;text-decoration:none}.tox .tox-dialog__body-content svg{fill:#222f3e}.tox .tox-dialog__body-content strong{font-weight:700}.tox .tox-dialog__body-content ul{list-style-type:disc}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{padding-inline-start:2.5rem}.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{margin-bottom:16px}.tox .tox-dialog__body-content dd,.tox .tox-dialog__body-content dl,.tox .tox-dialog__body-content dt,.tox .tox-dialog__body-content ol,.tox .tox-dialog__body-content ul{display:block;margin-inline-end:0;margin-inline-start:0}.tox .tox-dialog__body-content .tox-form__group h1{color:#222f3e;font-size:20px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group h2{color:#222f3e;font-size:16px;font-style:normal;font-weight:700;letter-spacing:normal;margin-bottom:16px;margin-top:2rem;text-transform:none}.tox .tox-dialog__body-content .tox-form__group p{margin-bottom:16px}.tox .tox-dialog__body-content .tox-form__group h1:first-child,.tox .tox-dialog__body-content .tox-form__group h2:first-child,.tox .tox-dialog__body-content .tox-form__group p:first-child{margin-top:0}.tox .tox-dialog__body-content .tox-form__group h1:last-child,.tox .tox-dialog__body-content .tox-form__group h2:last-child,.tox .tox-dialog__body-content .tox-form__group p:last-child{margin-bottom:0}.tox .tox-dialog__body-content .tox-form__group h1:only-child,.tox .tox-dialog__body-content .tox-form__group h2:only-child,.tox .tox-dialog__body-content .tox-form__group p:only-child{margin-bottom:0;margin-top:0}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--center{text-align:center}.tox .tox-dialog__body-content .tox-form__group .tox-label.tox-label--end{text-align:end}.tox .tox-dialog--width-lg{height:650px;max-width:1200px}.tox .tox-dialog--fullscreen{height:100%;max-width:100%}.tox .tox-dialog--fullscreen .tox-dialog__body-content{max-height:100%}.tox .tox-dialog--width-md{max-width:800px}.tox .tox-dialog--width-md .tox-dialog__body-content{overflow:auto}.tox .tox-dialog__body-content--centered{text-align:center}.tox .tox-dialog__footer{align-items:center;background-color:#fff;border-top:none;display:flex;justify-content:space-between;padding:8px 16px}.tox .tox-dialog__footer-end,.tox .tox-dialog__footer-start{display:flex}.tox .tox-dialog__busy-spinner{align-items:center;background-color:rgba(255,255,255,.75);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:3}.tox .tox-dialog__table{border-collapse:collapse;width:100%}.tox .tox-dialog__table thead th{font-weight:700;padding-bottom:8px}.tox .tox-dialog__table thead th:first-child{padding-right:8px}.tox .tox-dialog__table tbody tr{border-bottom:1px solid #626262}.tox .tox-dialog__table tbody tr:last-child{border-bottom:none}.tox .tox-dialog__table td{padding-bottom:8px;padding-top:8px}.tox .tox-dialog__table td:first-child{padding-right:8px}.tox .tox-dialog__iframe{min-height:200px}.tox .tox-dialog__iframe.tox-dialog__iframe--opaque{background:#fff}.tox .tox-navobj-bordered{position:relative}.tox .tox-navobj-bordered::before{border:1px solid #eee;border-radius:6px;content:'';inset:0;opacity:1;pointer-events:none;position:absolute;z-index:1}.tox .tox-navobj-bordered-focus.tox-navobj-bordered::before{border-color:#006ce7;box-shadow:0 0 0 2px rgba(0,108,231,.25);outline:0}.tox .tox-dialog__popups{position:absolute;width:100%;z-index:1100}.tox .tox-dialog__body-iframe{display:flex;flex:1;flex-direction:column}.tox .tox-dialog__body-iframe .tox-navobj{display:flex;flex:1}.tox .tox-dialog__body-iframe .tox-navobj :nth-child(2){flex:1;height:100%}.tox .tox-dialog-dock-fadeout{opacity:0;visibility:hidden}.tox .tox-dialog-dock-fadein{opacity:1;visibility:visible}.tox .tox-dialog-dock-transition{transition:visibility 0s linear .3s,opacity .3s ease}.tox .tox-dialog-dock-transition.tox-dialog-dock-fadein{transition-delay:0s}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav{margin-right:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox:not([dir=rtl]) .tox-dialog__body-nav-item:not(:first-child){margin-left:8px}}.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-end>*,.tox:not([dir=rtl]) .tox-dialog__footer .tox-dialog__footer-start>*{margin-left:8px}.tox[dir=rtl] .tox-dialog__body{text-align:right}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav{margin-left:0}}@media only screen and (max-width:767px){body:not(.tox-force-desktop) .tox[dir=rtl] .tox-dialog__body-nav-item:not(:first-child){margin-right:8px}}.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-end>*,.tox[dir=rtl] .tox-dialog__footer .tox-dialog__footer-start>*{margin-right:8px}body.tox-dialog__disable-scroll{overflow:hidden}.tox .tox-dropzone-container{display:flex;flex:1}.tox .tox-dropzone{align-items:center;background:#fff;border:2px dashed #eee;box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;min-height:100px;padding:10px}.tox .tox-dropzone p{color:rgba(34,47,62,.7);margin:0 0 16px 0}.tox .tox-edit-area{display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-edit-area::before{border:2px solid #2d6adf;border-radius:4px;content:'';inset:0;opacity:0;pointer-events:none;position:absolute;transition:opacity .15s;z-index:1}.tox .tox-edit-area__iframe{background-color:#fff;border:0;box-sizing:border-box;flex:1;height:100%;position:absolute;width:100%}.tox.tox-edit-focus .tox-edit-area::before{opacity:1}.tox.tox-inline-edit-area{border:1px dotted #eee}.tox .tox-editor-container{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-editor-header{display:grid;grid-template-columns:1fr min-content;z-index:2}.tox:not(.tox-tinymce-inline) .tox-editor-header{background-color:#fff;border-bottom:none;box-shadow:0 2px 2px -2px rgba(34,47,62,.1),0 8px 8px -4px rgba(34,47,62,.07);padding:4px 0}.tox:not(.tox-tinymce-inline) .tox-editor-header:not(.tox-editor-dock-transition){transition:box-shadow .5s}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-bottom .tox-editor-header{border-top:1px solid #e3e3e3;box-shadow:none}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on .tox-editor-header{background-color:#fff;box-shadow:0 2px 2px -2px rgba(34,47,62,.2),0 8px 8px -4px rgba(34,47,62,.15);padding:4px 0}.tox:not(.tox-tinymce-inline).tox-tinymce--toolbar-sticky-on.tox-tinymce--toolbar-bottom .tox-editor-header{box-shadow:0 2px 2px -2px rgba(34,47,62,.2),0 8px 8px -4px rgba(34,47,62,.15)}.tox.tox:not(.tox-tinymce-inline) .tox-editor-header.tox-editor-header--empty{background:0 0;border:none;box-shadow:none;padding:0}.tox-editor-dock-fadeout{opacity:0;visibility:hidden}.tox-editor-dock-fadein{opacity:1;visibility:visible}.tox-editor-dock-transition{transition:visibility 0s linear .25s,opacity .25s ease}.tox-editor-dock-transition.tox-editor-dock-fadein{transition-delay:0s}.tox .tox-control-wrap{flex:1;position:relative}.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid,.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown,.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid{display:none}.tox .tox-control-wrap svg{display:block}.tox .tox-control-wrap__status-icon-wrap{position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-control-wrap__status-icon-invalid svg{fill:#c00}.tox .tox-control-wrap__status-icon-unknown svg{fill:orange}.tox .tox-control-wrap__status-icon-valid svg{fill:green}.tox:not([dir=rtl]) .tox-control-wrap--status-invalid .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-unknown .tox-textfield,.tox:not([dir=rtl]) .tox-control-wrap--status-valid .tox-textfield{padding-right:32px}.tox:not([dir=rtl]) .tox-control-wrap__status-icon-wrap{right:4px}.tox[dir=rtl] .tox-control-wrap--status-invalid .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-unknown .tox-textfield,.tox[dir=rtl] .tox-control-wrap--status-valid .tox-textfield{padding-left:32px}.tox[dir=rtl] .tox-control-wrap__status-icon-wrap{left:4px}.tox .tox-autocompleter{max-width:25em}.tox .tox-autocompleter .tox-menu{box-sizing:border-box;max-width:25em}.tox .tox-autocompleter .tox-autocompleter-highlight{font-weight:700}.tox .tox-color-input{display:flex;position:relative;z-index:1}.tox .tox-color-input .tox-textfield{z-index:-1}.tox .tox-color-input span{border-color:rgba(34,47,62,.2);border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;height:24px;position:absolute;top:6px;width:24px}.tox .tox-color-input span:focus:not([aria-disabled=true]),.tox .tox-color-input span:hover:not([aria-disabled=true]){border-color:#006ce7;cursor:pointer}.tox .tox-color-input span::before{background-image:linear-gradient(45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(-45deg,rgba(0,0,0,.25) 25%,transparent 25%),linear-gradient(45deg,transparent 75%,rgba(0,0,0,.25) 75%),linear-gradient(-45deg,transparent 75%,rgba(0,0,0,.25) 75%);background-position:0 0,0 6px,6px -6px,-6px 0;background-size:12px 12px;border:1px solid #fff;border-radius:6px;box-sizing:border-box;content:'';height:24px;left:-1px;position:absolute;top:-1px;width:24px;z-index:-1}.tox .tox-color-input span[aria-disabled=true]{cursor:not-allowed}.tox:not([dir=rtl]) .tox-color-input .tox-textfield{padding-left:36px}.tox:not([dir=rtl]) .tox-color-input span{left:6px}.tox[dir=rtl] .tox-color-input .tox-textfield{padding-right:36px}.tox[dir=rtl] .tox-color-input span{right:6px}.tox .tox-label,.tox .tox-toolbar-label{color:rgba(34,47,62,.7);display:block;font-size:14px;font-style:normal;font-weight:400;line-height:1.3;padding:0 8px 0 0;text-transform:none;white-space:nowrap}.tox .tox-toolbar-label{padding:0 8px}.tox[dir=rtl] .tox-label{padding:0 0 0 8px}.tox .tox-form{display:flex;flex:1;flex-direction:column}.tox .tox-form__group{box-sizing:border-box;margin-bottom:4px}.tox .tox-form-group--maximize{flex:1}.tox .tox-form__group--error{color:#c00}.tox .tox-form__group--collection{display:flex}.tox .tox-form__grid{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between}.tox .tox-form__grid--2col>.tox-form__group{width:calc(50% - (8px / 2))}.tox .tox-form__grid--3col>.tox-form__group{width:calc(100% / 3 - (8px / 2))}.tox .tox-form__grid--4col>.tox-form__group{width:calc(25% - (8px / 2))}.tox .tox-form__controls-h-stack{align-items:center;display:flex}.tox .tox-form__group--inline{align-items:center;display:flex}.tox .tox-form__group--stretched{display:flex;flex:1;flex-direction:column}.tox .tox-form__group--stretched .tox-textarea{flex:1}.tox .tox-form__group--stretched .tox-navobj{display:flex;flex:1}.tox .tox-form__group--stretched .tox-navobj :nth-child(2){flex:1;height:100%}.tox:not([dir=rtl]) .tox-form__controls-h-stack>:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-form__controls-h-stack>:not(:first-child){margin-right:4px}.tox .tox-lock.tox-locked .tox-lock-icon__unlock,.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock{display:none}.tox .tox-listboxfield .tox-listbox--select,.tox .tox-textarea,.tox .tox-textarea-wrap .tox-textarea:focus,.tox .tox-textfield,.tox .tox-toolbar-textfield{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#eee;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 5.5px;resize:none;width:100%}.tox .tox-textarea[disabled],.tox .tox-textfield[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-custom-editor:focus-within,.tox .tox-listboxfield .tox-listbox--select:focus,.tox .tox-textarea-wrap:focus-within,.tox .tox-textarea:focus,.tox .tox-textfield:focus{background-color:#fff;border-color:#006ce7;box-shadow:0 0 0 2px rgba(0,108,231,.25);outline:0}.tox .tox-toolbar-textfield{border-width:0;margin-bottom:3px;margin-top:2px;max-width:250px}.tox .tox-naked-btn{background-color:transparent;border:0;border-color:transparent;box-shadow:unset;color:#006ce7;cursor:pointer;display:block;margin:0;padding:0}.tox .tox-naked-btn svg{display:block;fill:#222f3e}.tox:not([dir=rtl]) .tox-toolbar-textfield+*{margin-left:4px}.tox[dir=rtl] .tox-toolbar-textfield+*{margin-right:4px}.tox .tox-listboxfield{cursor:pointer;position:relative}.tox .tox-listboxfield .tox-listbox--select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-listbox__select-label{cursor:default;flex:1;margin:0 4px}.tox .tox-listbox__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-listbox__select-chevron svg{fill:#222f3e}.tox .tox-listboxfield .tox-listbox--select{align-items:center;display:flex}.tox:not([dir=rtl]) .tox-listboxfield svg{right:8px}.tox[dir=rtl] .tox-listboxfield svg{left:8px}.tox .tox-selectfield{cursor:pointer;position:relative}.tox .tox-selectfield select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#eee;border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;color:#222f3e;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-size:16px;line-height:24px;margin:0;min-height:34px;outline:0;padding:5px 5.5px;resize:none;width:100%}.tox .tox-selectfield select[disabled]{background-color:#f2f2f2;color:rgba(34,47,62,.85);cursor:not-allowed}.tox .tox-selectfield select::-ms-expand{display:none}.tox .tox-selectfield select:focus{background-color:#fff;border-color:#006ce7;box-shadow:0 0 0 2px rgba(0,108,231,.25);outline:0}.tox .tox-selectfield svg{pointer-events:none;position:absolute;top:50%;transform:translateY(-50%)}.tox:not([dir=rtl]) .tox-selectfield select[size="0"],.tox:not([dir=rtl]) .tox-selectfield select[size="1"]{padding-right:24px}.tox:not([dir=rtl]) .tox-selectfield svg{right:8px}.tox[dir=rtl] .tox-selectfield select[size="0"],.tox[dir=rtl] .tox-selectfield select[size="1"]{padding-left:24px}.tox[dir=rtl] .tox-selectfield svg{left:8px}.tox .tox-textarea-wrap{border-color:#eee;border-radius:6px;border-style:solid;border-width:1px;display:flex;flex:1;overflow:hidden}.tox .tox-textarea{-webkit-appearance:textarea;-moz-appearance:textarea;appearance:textarea;white-space:pre-wrap}.tox .tox-textarea-wrap .tox-textarea{border:none}.tox .tox-textarea-wrap .tox-textarea:focus{border:none}.tox-fullscreen{border:0;height:100%;margin:0;overflow:hidden;overscroll-behavior:none;padding:0;touch-action:pinch-zoom;width:100%}.tox.tox-tinymce.tox-fullscreen .tox-statusbar__resize-handle{display:none}.tox-shadowhost.tox-fullscreen,.tox.tox-tinymce.tox-fullscreen{left:0;position:fixed;top:0;z-index:1200}.tox.tox-tinymce.tox-fullscreen{background-color:transparent}.tox-fullscreen .tox.tox-tinymce-aux,.tox-fullscreen~.tox.tox-tinymce-aux{z-index:1201}.tox .tox-help__more-link{list-style:none;margin-top:1em}.tox .tox-imagepreview{background-color:#666;height:380px;overflow:hidden;position:relative;width:100%}.tox .tox-imagepreview.tox-imagepreview__loaded{overflow:auto}.tox .tox-imagepreview__container{display:flex;left:100vw;position:absolute;top:100vw}.tox .tox-imagepreview__image{background:url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==)}.tox .tox-image-tools .tox-spacer{flex:1}.tox .tox-image-tools .tox-bar{align-items:center;display:flex;height:60px;justify-content:center}.tox .tox-image-tools .tox-imagepreview,.tox .tox-image-tools .tox-imagepreview+.tox-bar{margin-top:8px}.tox .tox-image-tools .tox-croprect-block{background:#000;opacity:.5;position:absolute;zoom:1}.tox .tox-image-tools .tox-croprect-handle{border:2px solid #fff;height:20px;left:0;position:absolute;top:0;width:20px}.tox .tox-image-tools .tox-croprect-handle-move{border:0;cursor:move;position:absolute}.tox .tox-image-tools .tox-croprect-handle-nw{border-width:2px 0 0 2px;cursor:nw-resize;left:100px;margin:-2px 0 0 -2px;top:100px}.tox .tox-image-tools .tox-croprect-handle-ne{border-width:2px 2px 0 0;cursor:ne-resize;left:200px;margin:-2px 0 0 -20px;top:100px}.tox .tox-image-tools .tox-croprect-handle-sw{border-width:0 0 2px 2px;cursor:sw-resize;left:100px;margin:-20px 2px 0 -2px;top:200px}.tox .tox-image-tools .tox-croprect-handle-se{border-width:0 2px 2px 0;cursor:se-resize;left:200px;margin:-20px 0 0 -20px;top:200px}.tox .tox-insert-table-picker{display:flex;flex-wrap:wrap;width:170px}.tox .tox-insert-table-picker>div{border-color:#eee;border-style:solid;border-width:0 1px 1px 0;box-sizing:border-box;height:17px;width:17px}.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker{margin:-4px -4px}.tox .tox-insert-table-picker .tox-insert-table-picker__selected{background-color:rgba(0,108,231,.5);border-color:rgba(0,108,231,.5)}.tox .tox-insert-table-picker__label{color:rgba(34,47,62,.7);display:block;font-size:14px;padding:4px;text-align:center;width:100%}.tox:not([dir=rtl]) .tox-insert-table-picker>div:nth-child(10n){border-right:0}.tox[dir=rtl] .tox-insert-table-picker>div:nth-child(10n+1){border-right:0}.tox .tox-menu{background-color:#fff;border:1px solid transparent;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);display:inline-block;overflow:hidden;vertical-align:top;z-index:1150}.tox .tox-menu.tox-collection.tox-collection--list{padding:0 4px}.tox .tox-menu.tox-collection.tox-collection--toolbar{padding:8px}.tox .tox-menu.tox-collection.tox-collection--grid{padding:8px}@media only screen and (min-width:768px){.tox .tox-menu .tox-collection__item-label{overflow-wrap:break-word;word-break:normal}}.tox .tox-menu__label blockquote,.tox .tox-menu__label code,.tox .tox-menu__label h1,.tox .tox-menu__label h2,.tox .tox-menu__label h3,.tox .tox-menu__label h4,.tox .tox-menu__label h5,.tox .tox-menu__label h6,.tox .tox-menu__label p{margin:0}.tox .tox-menubar{background:repeating-linear-gradient(transparent 0 1px,transparent 1px 39px) center top 39px/100% calc(100% - 39px) no-repeat;background-color:#fff;display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;grid-column:1/-1;grid-row:1;padding:0 11px 0 12px}.tox .tox-promotion+.tox-menubar{grid-column:1}.tox .tox-promotion{background:repeating-linear-gradient(transparent 0 1px,transparent 1px 39px) center top 39px/100% calc(100% - 39px) no-repeat;background-color:#fff;grid-column:2;grid-row:1;padding-inline-end:8px;padding-inline-start:4px;padding-top:5px}.tox .tox-promotion-link{align-items:unsafe center;background-color:#e8f1f8;border-radius:5px;color:#086be6;cursor:pointer;display:flex;font-size:14px;height:26.6px;padding:4px 8px;white-space:nowrap}.tox .tox-promotion-link:hover{background-color:#b4d7ff}.tox .tox-promotion-link:focus{background-color:#d9edf7}.tox .tox-mbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;justify-content:center;margin:5px 1px 6px 0;outline:0;overflow:hidden;padding:0 4px;text-transform:none;width:auto}.tox .tox-mbtn[disabled]{background-color:transparent;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-mbtn:focus:not(:disabled){background:#cce2fa;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn--active{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn:hover:not(:disabled):not(.tox-mbtn--active){background:#cce2fa;border:0;box-shadow:none;color:#222f3e}.tox .tox-mbtn__select-label{cursor:default;font-weight:400;margin:0 4px}.tox .tox-mbtn[disabled] .tox-mbtn__select-label{cursor:not-allowed}.tox .tox-mbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px;display:none}.tox .tox-notification{border-radius:6px;border-style:solid;border-width:1px;box-shadow:none;box-sizing:border-box;display:grid;font-size:14px;font-weight:400;grid-template-columns:minmax(40px,1fr) auto minmax(40px,1fr);margin-top:4px;opacity:0;padding:4px;transition:transform .1s ease-in,opacity 150ms ease-in}.tox .tox-notification p{font-size:14px;font-weight:400}.tox .tox-notification a{cursor:pointer;text-decoration:underline}.tox .tox-notification--in{opacity:1}.tox .tox-notification--success{background-color:#e4eeda;border-color:#d7e6c8;color:#222f3e}.tox .tox-notification--success p{color:#222f3e}.tox .tox-notification--success a{color:#517342}.tox .tox-notification--success svg{fill:#222f3e}.tox .tox-notification--error{background-color:#f5cccc;border-color:#f0b3b3;color:#222f3e}.tox .tox-notification--error p{color:#222f3e}.tox .tox-notification--error a{color:#77181f}.tox .tox-notification--error svg{fill:#222f3e}.tox .tox-notification--warn,.tox .tox-notification--warning{background-color:#fff5cc;border-color:#fff0b3;color:#222f3e}.tox .tox-notification--warn p,.tox .tox-notification--warning p{color:#222f3e}.tox .tox-notification--warn a,.tox .tox-notification--warning a{color:#7a6e25}.tox .tox-notification--warn svg,.tox .tox-notification--warning svg{fill:#222f3e}.tox .tox-notification--info{background-color:#d6e7fb;border-color:#c1dbf9;color:#222f3e}.tox .tox-notification--info p{color:#222f3e}.tox .tox-notification--info a{color:#2a64a6}.tox .tox-notification--info svg{fill:#222f3e}.tox .tox-notification__body{align-self:center;color:#222f3e;font-size:14px;grid-column-end:3;grid-column-start:2;grid-row-end:2;grid-row-start:1;text-align:center;white-space:normal;word-break:break-all;word-break:break-word}.tox .tox-notification__body>*{margin:0}.tox .tox-notification__body>*+*{margin-top:1rem}.tox .tox-notification__icon{align-self:center;grid-column-end:2;grid-column-start:1;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification__icon svg{display:block}.tox .tox-notification__dismiss{align-self:start;grid-column-end:4;grid-column-start:3;grid-row-end:2;grid-row-start:1;justify-self:end}.tox .tox-notification .tox-progress-bar{grid-column-end:4;grid-column-start:1;grid-row-end:3;grid-row-start:2;justify-self:center}.tox .tox-pop{display:inline-block;position:relative}.tox .tox-pop--resizing{transition:width .1s ease}.tox .tox-pop--resizing .tox-toolbar,.tox .tox-pop--resizing .tox-toolbar__group{flex-wrap:nowrap}.tox .tox-pop--transition{transition:.15s ease;transition-property:left,right,top,bottom}.tox .tox-pop--transition::after,.tox .tox-pop--transition::before{transition:all .15s,visibility 0s,opacity 75ms ease 75ms}.tox .tox-pop__dialog{background-color:#fff;border:1px solid #eee;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);min-width:0;overflow:hidden}.tox .tox-pop__dialog>:not(.tox-toolbar){margin:4px 4px 4px 8px}.tox .tox-pop__dialog .tox-toolbar{background-color:transparent;margin-bottom:-1px}.tox .tox-pop::after,.tox .tox-pop::before{border-style:solid;content:'';display:block;height:0;opacity:1;position:absolute;width:0}.tox .tox-pop.tox-pop--inset::after,.tox .tox-pop.tox-pop--inset::before{opacity:0;transition:all 0s .15s,visibility 0s,opacity 75ms ease}.tox .tox-pop.tox-pop--bottom::after,.tox .tox-pop.tox-pop--bottom::before{left:50%;top:100%}.tox .tox-pop.tox-pop--bottom::after{border-color:#fff transparent transparent transparent;border-width:8px;margin-left:-8px;margin-top:-1px}.tox .tox-pop.tox-pop--bottom::before{border-color:#eee transparent transparent transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--top::after,.tox .tox-pop.tox-pop--top::before{left:50%;top:0;transform:translateY(-100%)}.tox .tox-pop.tox-pop--top::after{border-color:transparent transparent #fff transparent;border-width:8px;margin-left:-8px;margin-top:1px}.tox .tox-pop.tox-pop--top::before{border-color:transparent transparent #eee transparent;border-width:9px;margin-left:-9px}.tox .tox-pop.tox-pop--left::after,.tox .tox-pop.tox-pop--left::before{left:0;top:calc(50% - 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--left::after{border-color:transparent #fff transparent transparent;border-width:8px;margin-left:-15px}.tox .tox-pop.tox-pop--left::before{border-color:transparent #eee transparent transparent;border-width:10px;margin-left:-19px}.tox .tox-pop.tox-pop--right::after,.tox .tox-pop.tox-pop--right::before{left:100%;top:calc(50% + 1px);transform:translateY(-50%)}.tox .tox-pop.tox-pop--right::after{border-color:transparent transparent transparent #fff;border-width:8px;margin-left:-1px}.tox .tox-pop.tox-pop--right::before{border-color:transparent transparent transparent #eee;border-width:10px;margin-left:-1px}.tox .tox-pop.tox-pop--align-left::after,.tox .tox-pop.tox-pop--align-left::before{left:20px}.tox .tox-pop.tox-pop--align-right::after,.tox .tox-pop.tox-pop--align-right::before{left:calc(100% - 20px)}.tox .tox-sidebar-wrap{display:flex;flex-direction:row;flex-grow:1;min-height:0}.tox .tox-sidebar{background-color:#fff;display:flex;flex-direction:row;justify-content:flex-end}.tox .tox-sidebar__slider{display:flex;overflow:hidden}.tox .tox-sidebar__pane-container{display:flex}.tox .tox-sidebar__pane{display:flex}.tox .tox-sidebar--sliding-closed{opacity:0}.tox .tox-sidebar--sliding-open{opacity:1}.tox .tox-sidebar--sliding-growing,.tox .tox-sidebar--sliding-shrinking{transition:width .5s ease,opacity .5s ease}.tox .tox-selector{background-color:#4099ff;border-color:#4099ff;border-style:solid;border-width:1px;box-sizing:border-box;display:inline-block;height:10px;position:absolute;width:10px}.tox.tox-platform-touch .tox-selector{height:12px;width:12px}.tox .tox-slider{align-items:center;display:flex;flex:1;height:24px;justify-content:center;position:relative}.tox .tox-slider__rail{background-color:transparent;border:1px solid #eee;border-radius:6px;height:10px;min-width:120px;width:100%}.tox .tox-slider__handle{background-color:#006ce7;border:2px solid #0054b4;border-radius:6px;box-shadow:none;height:24px;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%);width:14px}.tox .tox-form__controls-h-stack>.tox-slider:not(:first-of-type){margin-inline-start:8px}.tox .tox-form__controls-h-stack>.tox-form__group+.tox-slider{margin-inline-start:32px}.tox .tox-form__controls-h-stack>.tox-slider+.tox-form__group{margin-inline-start:32px}.tox .tox-source-code{overflow:auto}.tox .tox-spinner{display:flex}.tox .tox-spinner>div{animation:tam-bouncing-dots 1.5s ease-in-out 0s infinite both;background-color:rgba(34,47,62,.7);border-radius:100%;height:8px;width:8px}.tox .tox-spinner>div:nth-child(1){animation-delay:-.32s}.tox .tox-spinner>div:nth-child(2){animation-delay:-.16s}@keyframes tam-bouncing-dots{0%,100%,80%{transform:scale(0)}40%{transform:scale(1)}}.tox:not([dir=rtl]) .tox-spinner>div:not(:first-child){margin-left:4px}.tox[dir=rtl] .tox-spinner>div:not(:first-child){margin-right:4px}.tox .tox-statusbar{align-items:center;background-color:#fff;border-top:1px solid #e3e3e3;color:rgba(34,47,62,.7);display:flex;flex:0 0 auto;font-size:14px;font-weight:400;height:25px;overflow:hidden;padding:0 8px;position:relative;text-transform:none}.tox .tox-statusbar__text-container{display:flex;flex:1 1 auto;justify-content:flex-end;overflow:hidden}.tox .tox-statusbar__path{display:flex;flex:1 1 auto;margin-right:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-statusbar__path>*{display:inline;white-space:nowrap}.tox .tox-statusbar__wordcount{flex:0 0 auto;margin-left:1ch}.tox .tox-statusbar a,.tox .tox-statusbar__path-item,.tox .tox-statusbar__wordcount{color:rgba(34,47,62,.7);text-decoration:none}.tox .tox-statusbar a:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar a:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__path-item:hover:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:focus:not(:disabled):not([aria-disabled=true]),.tox .tox-statusbar__wordcount:hover:not(:disabled):not([aria-disabled=true]){color:#222f3e;cursor:pointer}.tox .tox-statusbar__branding svg{fill:rgba(34,47,62,.8);height:1.14em;vertical-align:-.28em;width:3.6em}.tox .tox-statusbar__branding a:focus:not(:disabled):not([aria-disabled=true]) svg,.tox .tox-statusbar__branding a:hover:not(:disabled):not([aria-disabled=true]) svg{fill:#222f3e}.tox .tox-statusbar__resize-handle{align-items:flex-end;align-self:stretch;cursor:nwse-resize;display:flex;flex:0 0 auto;justify-content:flex-end;margin-left:auto;margin-right:-8px;padding-bottom:3px;padding-left:1ch;padding-right:3px}.tox .tox-statusbar__resize-handle svg{display:block;fill:rgba(34,47,62,.5)}.tox .tox-statusbar__resize-handle:focus svg{background-color:#dee0e2;border-radius:1px 1px 5px 1px;box-shadow:0 0 0 2px #dee0e2}.tox:not([dir=rtl]) .tox-statusbar__path>*{margin-right:4px}.tox:not([dir=rtl]) .tox-statusbar__branding{margin-left:2ch}.tox[dir=rtl] .tox-statusbar{flex-direction:row-reverse}.tox[dir=rtl] .tox-statusbar__path>*{margin-left:4px}.tox .tox-throbber{z-index:1299}.tox .tox-throbber__busy-spinner{align-items:center;background-color:rgba(255,255,255,.6);bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0}.tox .tox-tbtn{align-items:center;background:0 0;border:0;border-radius:3px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;justify-content:center;margin:6px 1px 5px 0;outline:0;overflow:hidden;padding:0;text-transform:none;width:34px}.tox .tox-tbtn svg{display:block;fill:#222f3e}.tox .tox-tbtn.tox-tbtn-more{padding-left:5px;padding-right:5px;width:inherit}.tox .tox-tbtn:focus{background:#cce2fa;border:0;box-shadow:none}.tox .tox-tbtn:hover{background:#cce2fa;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:hover svg{fill:#222f3e}.tox .tox-tbtn:active{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn:active svg{fill:#222f3e}.tox .tox-tbtn--disabled .tox-tbtn--enabled svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--disabled,.tox .tox-tbtn--disabled:hover,.tox .tox-tbtn:disabled,.tox .tox-tbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tbtn--disabled svg,.tox .tox-tbtn--disabled:hover svg,.tox .tox-tbtn:disabled svg,.tox .tox-tbtn:disabled:hover svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--enabled,.tox .tox-tbtn--enabled:hover{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-tbtn--enabled:hover>*,.tox .tox-tbtn--enabled>*{transform:none}.tox .tox-tbtn--enabled svg,.tox .tox-tbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tbtn--enabled.tox-tbtn--disabled svg,.tox .tox-tbtn--enabled:hover.tox-tbtn--disabled svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled){color:#222f3e}.tox .tox-tbtn:focus:not(.tox-tbtn--disabled) svg{fill:#222f3e}.tox .tox-tbtn:active>*{transform:none}.tox .tox-tbtn--md{height:42px;width:51px}.tox .tox-tbtn--lg{flex-direction:column;height:56px;width:68px}.tox .tox-tbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tbtn--labeled{padding:0 4px;width:unset}.tox .tox-tbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-number-input{border-radius:3px;display:flex;margin:6px 1px 5px 0;padding:0 4px;width:auto}.tox .tox-number-input .tox-input-wrapper{background:#f7f7f7;display:flex;pointer-events:none;text-align:center}.tox .tox-number-input .tox-input-wrapper:focus{background:#cce2fa}.tox .tox-number-input input{border-radius:3px;color:#222f3e;font-size:14px;margin:2px 0;pointer-events:all;width:60px}.tox .tox-number-input input:hover{background:#cce2fa;color:#222f3e}.tox .tox-number-input input:focus{background:#fff;color:#222f3e}.tox .tox-number-input input:disabled{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-number-input button{background:#f7f7f7;color:#222f3e;height:28px;text-align:center;width:24px}.tox .tox-number-input button svg{display:block;fill:#222f3e;margin:0 auto;transform:scale(.67)}.tox .tox-number-input button:focus{background:#cce2fa}.tox .tox-number-input button:hover{background:#cce2fa;border:0;box-shadow:none;color:#222f3e}.tox .tox-number-input button:hover svg{fill:#222f3e}.tox .tox-number-input button:active{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-number-input button:active svg{fill:#222f3e}.tox .tox-number-input button:disabled{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-number-input button:disabled svg{fill:rgba(34,47,62,.5)}.tox .tox-number-input button.minus{border-radius:3px 0 0 3px}.tox .tox-number-input button.plus{border-radius:0 3px 3px 0}.tox .tox-number-input:focus:not(:active)>.tox-input-wrapper,.tox .tox-number-input:focus:not(:active)>button{background:#cce2fa}.tox .tox-tbtn--select{margin:6px 1px 5px 0;padding:0 4px;width:auto}.tox .tox-tbtn__select-label{cursor:default;font-weight:400;height:initial;margin:0 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tbtn__select-chevron{align-items:center;display:flex;justify-content:center;width:16px}.tox .tox-tbtn__select-chevron svg{fill:rgba(34,47,62,.5)}.tox .tox-tbtn--bespoke{background:#f7f7f7}.tox .tox-tbtn--bespoke+.tox-tbtn--bespoke{margin-inline-start:4px}.tox .tox-tbtn--bespoke .tox-tbtn__select-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:7em}.tox .tox-tbtn--disabled .tox-tbtn__select-label,.tox .tox-tbtn--select:disabled .tox-tbtn__select-label{cursor:not-allowed}.tox .tox-split-button{border:0;border-radius:3px;box-sizing:border-box;display:flex;margin:6px 1px 5px 0;overflow:hidden}.tox .tox-split-button:hover{box-shadow:0 0 0 1px #cce2fa inset}.tox .tox-split-button:focus{background:#cce2fa;box-shadow:none;color:#222f3e}.tox .tox-split-button>*{border-radius:0}.tox .tox-split-button__chevron{width:16px}.tox .tox-split-button__chevron svg{fill:rgba(34,47,62,.5)}.tox .tox-split-button .tox-tbtn{margin:0}.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus,.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover,.tox .tox-split-button.tox-tbtn--disabled:focus,.tox .tox-split-button.tox-tbtn--disabled:hover{background:0 0;box-shadow:none;color:rgba(34,47,62,.5)}.tox.tox-platform-touch .tox-split-button .tox-tbtn--select{padding:0 0}.tox.tox-platform-touch .tox-split-button .tox-tbtn:not(.tox-tbtn--select):first-child{width:30px}.tox.tox-platform-touch .tox-split-button__chevron{width:20px}.tox .tox-split-button.tox-tbtn--disabled svg #tox-icon-highlight-bg-color__color,.tox .tox-split-button.tox-tbtn--disabled svg #tox-icon-text-color__color{opacity:.6}.tox .tox-toolbar-overlord{background-color:#fff}.tox .tox-toolbar,.tox .tox-toolbar__overflow,.tox .tox-toolbar__primary{background-attachment:local;background-color:#fff;background-image:repeating-linear-gradient(#e3e3e3 0 1px,transparent 1px 39px);background-position:center top 40px;background-repeat:no-repeat;background-size:calc(100% - 11px * 2) calc(100% - 41px);display:flex;flex:0 0 auto;flex-shrink:0;flex-wrap:wrap;padding:0 0;transform:perspective(1px)}.tox .tox-toolbar-overlord>.tox-toolbar,.tox .tox-toolbar-overlord>.tox-toolbar__overflow,.tox .tox-toolbar-overlord>.tox-toolbar__primary{background-position:center top 0;background-size:calc(100% - 11px * 2) calc(100% - 0px)}.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed{height:0;opacity:0;padding-bottom:0;padding-top:0;visibility:hidden}.tox .tox-toolbar__overflow--growing{transition:height .3s ease,opacity .2s linear .1s}.tox .tox-toolbar__overflow--shrinking{transition:opacity .3s ease,height .2s linear .1s,visibility 0s linear .3s}.tox .tox-anchorbar,.tox .tox-toolbar-overlord{grid-column:1/-1}.tox .tox-menubar+.tox-toolbar,.tox .tox-menubar+.tox-toolbar-overlord{border-top:1px solid transparent;margin-top:-1px;padding-bottom:1px;padding-top:1px}.tox .tox-toolbar--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-pop .tox-toolbar{border-width:0}.tox .tox-toolbar--no-divider{background-image:none}.tox .tox-toolbar-overlord .tox-toolbar:not(.tox-toolbar--scrolling):first-child,.tox .tox-toolbar-overlord .tox-toolbar__primary{background-position:center top 39px}.tox .tox-editor-header>.tox-toolbar--scrolling,.tox .tox-toolbar-overlord .tox-toolbar--scrolling:first-child{background-image:none}.tox.tox-tinymce-aux .tox-toolbar__overflow{background-color:#fff;background-position:center top 43px;background-size:calc(100% - 8px * 2) calc(100% - 51px);border:none;border-radius:6px;box-shadow:0 0 2px 0 rgba(34,47,62,.2),0 4px 8px 0 rgba(34,47,62,.15);overscroll-behavior:none;padding:4px 0}.tox-pop .tox-pop__dialog .tox-toolbar{background-position:center top 43px;background-size:calc(100% - 11px * 2) calc(100% - 51px);padding:4px 0}.tox .tox-toolbar__group{align-items:center;display:flex;flex-wrap:wrap;margin:0 0;padding:0 11px 0 12px}.tox .tox-toolbar__group--pull-right{margin-left:auto}.tox .tox-toolbar--scrolling .tox-toolbar__group{flex-shrink:0;flex-wrap:nowrap}.tox:not([dir=rtl]) .tox-toolbar__group:not(:last-of-type){border-right:1px solid transparent}.tox[dir=rtl] .tox-toolbar__group:not(:last-of-type){border-left:1px solid transparent}.tox .tox-tooltip{display:inline-block;padding:8px;position:relative}.tox .tox-tooltip__body{background-color:#222f3e;border-radius:6px;box-shadow:0 2px 4px rgba(34,47,62,.3);color:rgba(255,255,255,.75);font-size:14px;font-style:normal;font-weight:400;padding:4px 8px;text-transform:none}.tox .tox-tooltip__arrow{position:absolute}.tox .tox-tooltip--down .tox-tooltip__arrow{border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #222f3e;bottom:0;left:50%;position:absolute;transform:translateX(-50%)}.tox .tox-tooltip--up .tox-tooltip__arrow{border-bottom:8px solid #222f3e;border-left:8px solid transparent;border-right:8px solid transparent;left:50%;position:absolute;top:0;transform:translateX(-50%)}.tox .tox-tooltip--right .tox-tooltip__arrow{border-bottom:8px solid transparent;border-left:8px solid #222f3e;border-top:8px solid transparent;position:absolute;right:0;top:50%;transform:translateY(-50%)}.tox .tox-tooltip--left .tox-tooltip__arrow{border-bottom:8px solid transparent;border-right:8px solid #222f3e;border-top:8px solid transparent;left:0;position:absolute;top:50%;transform:translateY(-50%)}.tox .tox-tree{display:flex;flex-direction:column}.tox .tox-tree .tox-trbtn{align-items:center;background:0 0;border:0;border-radius:4px;box-shadow:none;color:#222f3e;display:flex;flex:0 0 auto;font-size:14px;font-style:normal;font-weight:400;height:28px;margin-bottom:4px;margin-top:4px;outline:0;overflow:hidden;padding:0;padding-left:8px;text-transform:none}.tox .tox-tree .tox-trbtn .tox-tree__label{cursor:default;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tox .tox-tree .tox-trbtn svg{display:block;fill:#222f3e}.tox .tox-tree .tox-trbtn:focus{background:#cce2fa;border:0;box-shadow:none}.tox .tox-tree .tox-trbtn:hover{background:#cce2fa;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn:hover svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:active{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn:active svg{fill:#222f3e}.tox .tox-tree .tox-trbtn--disabled,.tox .tox-tree .tox-trbtn--disabled:hover,.tox .tox-tree .tox-trbtn:disabled,.tox .tox-tree .tox-trbtn:disabled:hover{background:0 0;border:0;box-shadow:none;color:rgba(34,47,62,.5);cursor:not-allowed}.tox .tox-tree .tox-trbtn--disabled svg,.tox .tox-tree .tox-trbtn--disabled:hover svg,.tox .tox-tree .tox-trbtn:disabled svg,.tox .tox-tree .tox-trbtn:disabled:hover svg{fill:rgba(34,47,62,.5)}.tox .tox-tree .tox-trbtn--enabled,.tox .tox-tree .tox-trbtn--enabled:hover{background:#a6ccf7;border:0;box-shadow:none;color:#222f3e}.tox .tox-tree .tox-trbtn--enabled:hover>*,.tox .tox-tree .tox-trbtn--enabled>*{transform:none}.tox .tox-tree .tox-trbtn--enabled svg,.tox .tox-tree .tox-trbtn--enabled:hover svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled){color:#222f3e}.tox .tox-tree .tox-trbtn:focus:not(.tox-trbtn--disabled) svg{fill:#222f3e}.tox .tox-tree .tox-trbtn:active>*{transform:none}.tox .tox-tree .tox-trbtn--return{align-self:stretch;height:unset;width:16px}.tox .tox-tree .tox-trbtn--labeled{padding:0 4px;width:unset}.tox .tox-tree .tox-trbtn__vlabel{display:block;font-size:10px;font-weight:400;letter-spacing:-.025em;margin-bottom:4px;white-space:nowrap}.tox .tox-tree .tox-tree--directory{display:flex;flex-direction:column}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label{font-weight:700}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-mbtn:focus svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:focus .tox-mbtn svg,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover .tox-mbtn svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label .tox-chevron{margin-right:6px}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--shrinking) .tox-chevron{transition:transform .5s ease-in-out}.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--growing) .tox-chevron,.tox .tox-tree .tox-tree--directory .tox-tree--directory__label:has(+.tox-tree--directory__children--open) .tox-chevron{transform:rotate(90deg)}.tox .tox-tree .tox-tree--leaf__label{font-weight:400}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn{margin-left:auto}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn svg{fill:transparent}.tox .tox-tree .tox-tree--leaf__label .tox-mbtn.tox-mbtn--active svg,.tox .tox-tree .tox-tree--leaf__label .tox-mbtn:focus svg{fill:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover .tox-mbtn svg{fill:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover){background-color:transparent;color:#222f3e}.tox .tox-tree .tox-tree--leaf__label:hover:has(.tox-mbtn:hover) .tox-chevron svg{fill:#222f3e}.tox .tox-tree .tox-tree--directory__children{overflow:hidden;padding-left:16px}.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--growing,.tox .tox-tree .tox-tree--directory__children.tox-tree--directory__children--shrinking{transition:height .5s ease-in-out}.tox .tox-tree .tox-trbtn.tox-tree--leaf__label{display:flex;justify-content:space-between}.tox .tox-view-wrap,.tox .tox-view-wrap__slot-container{background-color:#fff;display:flex;flex:1;flex-direction:column}.tox .tox-view{display:flex;flex:1 1 auto;flex-direction:column;overflow:hidden}.tox .tox-view__header{align-items:center;display:flex;font-size:16px;justify-content:space-between;padding:8px 8px 0 8px;position:relative}.tox .tox-view--mobile.tox-view__header,.tox .tox-view--mobile.tox-view__toolbar{padding:8px}.tox .tox-view--scrolling{flex-wrap:nowrap;overflow-x:auto}.tox .tox-view__toolbar{display:flex;flex-direction:row;gap:8px;justify-content:space-between;padding:8px 8px 0 8px}.tox .tox-view__toolbar__group{display:flex;flex-direction:row;gap:12px}.tox .tox-view__header-end,.tox .tox-view__header-start{display:flex}.tox .tox-view__pane{height:100%;padding:8px;width:100%}.tox .tox-view__pane_panel{border:1px solid #eee;border-radius:6px}.tox:not([dir=rtl]) .tox-view__header .tox-view__header-end>*,.tox:not([dir=rtl]) .tox-view__header .tox-view__header-start>*{margin-left:8px}.tox[dir=rtl] .tox-view__header .tox-view__header-end>*,.tox[dir=rtl] .tox-view__header .tox-view__header-start>*{margin-right:8px}.tox .tox-well{border:1px solid #eee;border-radius:6px;padding:8px;width:100%}.tox .tox-well>:first-child{margin-top:0}.tox .tox-well>:last-child{margin-bottom:0}.tox .tox-well>:only-child{margin:0}.tox .tox-custom-editor{border:1px solid #eee;border-radius:6px;display:flex;flex:1;overflow:hidden;position:relative}.tox .tox-dialog-loading::before{background-color:rgba(0,0,0,.5);content:"";height:100%;position:absolute;width:100%;z-index:1000}.tox .tox-tab{cursor:pointer}.tox .tox-dialog__content-js{display:flex;flex:1}.tox .tox-dialog__body-content .tox-collection{display:flex;flex:1} diff --git a/public/upfiles.html b/public/upfiles.html new file mode 100644 index 0000000..7f8f62c --- /dev/null +++ b/public/upfiles.html @@ -0,0 +1,203 @@ + + + + +axupimgs + + + + + + + + + +
+
+ +
+ + + + diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..2aef2db --- /dev/null +++ b/src/App.vue @@ -0,0 +1,13 @@ + + + diff --git a/src/api/article/index.js b/src/api/article/index.js new file mode 100644 index 0000000..20f8471 --- /dev/null +++ b/src/api/article/index.js @@ -0,0 +1,36 @@ +import request from '@/utils/request.js' + + +export const getArticle = (params) => { + return request({ + url: '/workflow/mosr/article/list', + method: "get", + params + }); +}; +export const getArticleDetail = (articleId) => { + return request({ + url: `/workflow/mosr/article/${articleId}`, + method: "get" + }); +}; +export const addArticle= (data) => { + return request({ + url: '/workflow/mosr/article/add', + method: "post", + data + }); +}; +export const editArticle= (data) => { + return request({ + url: '/workflow/mosr/article/update', + method: "post", + data + }); +}; +export const deleteArticle = (articleIds) => { + return request({ + url: `/workflow/mosr/article/${articleIds}`, + method: "delete" + }); +}; diff --git a/src/api/auth/auth.js b/src/api/auth/auth.js new file mode 100644 index 0000000..01afdcb --- /dev/null +++ b/src/api/auth/auth.js @@ -0,0 +1,31 @@ +import request from "@/utils/request.js"; + +export const initPassword=(data)=>{ + return request({ + url:'/admin/mosr/user/init/password', + method:'post', + data + }) +} +export const editPassword=(data)=>{ + return request({ + url:'/admin/mosr/user/update/password', + method:'post', + data + }) +} + +export const getAgentInfo=()=>{ + return request({ + url:'/admin/mosr/user/self/approval/agent', + method:'get' + }) +} + +export const editAgentInfo=(data)=>{ + return request({ + url:'/admin/mosr/user/self/approval/agent', + method:'post', + data + }) +} diff --git a/src/api/cache.js b/src/api/cache.js new file mode 100644 index 0000000..9def912 --- /dev/null +++ b/src/api/cache.js @@ -0,0 +1,15 @@ +import request from '@/utils/request.js' + +export const getCacheOpt = (cacheKey) => { + return request({ + url: '/admin/dict/data/option/'+ cacheKey, + method: 'get', + }) +} + +export const getCacheType = (cacheKey) => { + return request({ + url: '/admin/dict/data/type/'+ cacheKey, + method: 'get', + }) +} \ No newline at end of file diff --git a/src/api/common/index.js b/src/api/common/index.js new file mode 100644 index 0000000..505aa7c --- /dev/null +++ b/src/api/common/index.js @@ -0,0 +1,9 @@ +import request from '@/utils/request.js' + +export const requestList = ( api, params, method = 'get' ) => { + return request({ + url: api, + method, + params + }) +} \ No newline at end of file diff --git a/src/api/dept/dept.js b/src/api/dept/dept.js new file mode 100644 index 0000000..56e9ccd --- /dev/null +++ b/src/api/dept/dept.js @@ -0,0 +1,54 @@ +import request from '@/utils/request.js' + +//获取部门信息 +export const getDeptList = (params) => { + return request({ + url: '/admin/dept', + method: 'get', + params + }) +} +//获取增加时的部门列表 +export const getDeptOption = () => { + return request({ + url: '/admin/dept/option', + method: 'get' + }) +} +//获取修改时的部门列表 +export const getDeptExcludeOption = (deptId) => { + return request({ + url: `/admin/dept/option/exclude/${deptId}`, + method: 'get' + }) +} +//新增部门 +export const addDept = (data) => { + return request({ + url: '/admin/dept', + method: 'post', + data + }) +} +//编辑部门 +export const editDept = (data) => { + return request({ + url: '/admin/dept', + method: 'put', + data + }) +} +//查询部门详情 +export const getDeptDetail = (deptId) => { + return request({ + url: `/admin/dept/${deptId}`, + method: "get" + }); +}; +//删除部门 +export const deleteDept = (deptId) => { + return request({ + url: `/admin/dept/${deptId}`, + method: "delete" + }); +}; diff --git a/src/api/expense-manage/index.js b/src/api/expense-manage/index.js new file mode 100644 index 0000000..523ebdd --- /dev/null +++ b/src/api/expense-manage/index.js @@ -0,0 +1,81 @@ +import request from '@/utils/request.js' +import axios from "axios"; +import {getToken} from "@/utils/auth"; + +export const addAllocation = (data) => { + return request({ + url:'/workflow/mosr/cost/allocation', + method: "post", + data + }); +}; +export const getAllocationDetail = (allocationId) => { + return request({ + url: `/workflow/mosr/cost/allocation/info/${allocationId}`, + method: "get" + }); +}; +export const getAllocationDetails = (allocationId) => { + return request({ + url: `/workflow/mosr/cost/allocation/usr/detail/${allocationId}`, + method: "get" + }); +}; +export const getAllocationSummaryDetails = (params) => { + return request({ + url: '/workflow/mosr/cost/allocation/collect', + method: "get", + params:params + }); +}; +export const getAllocationProcess = () => { + return request({ + url: '/workflow/mosr/cost/allocation/process', + method: "get" + }); +}; +export const getAllocationDetailList = (params) => { + return request({ + url: '/workflow/mosr/cost/allocation/usr', + method: "get", + params:params + }); +}; +export const getResearchUser = () => { + return request({ + url: '/admin/mosr/user/research', + method: "get" + }); +}; +export const getProjectOption = () => { + return request({ + url: '/workflow/mosr/project/implementation/in/implementation/option', + method: "get" + }); +}; + +export const editAllocation = (data) => { + return request({ + url: '/workflow/mosr/cost/allocation/edit', + method: "post", + data + }); +}; +export const deleteAllocation = (id) => { + return request({ + url: `/workflow/mosr/cost/allocation/${id}`, + method: "delete" + }); +}; + +export const shareExportExcel = (allocationId) => { + return axios.get( + `${import.meta.env.VITE_BASE_URL}/workflow/mosr/cost/allocation/collect/${allocationId}`, + { + responseType: 'blob', + headers: { + Authorization: getToken() + } + } + ); +}; diff --git a/src/api/home/index.js b/src/api/home/index.js new file mode 100644 index 0000000..68598fe --- /dev/null +++ b/src/api/home/index.js @@ -0,0 +1,31 @@ +import request from '@/utils/request.js' + +export const getHomeTaskInfo = () => { + return request({ + url: '/workflow/mosr/process/task', + method: "get" + }); +}; +//获取已办数据 +export const getDoneTaskInfo = () => { + return request({ + url: '/workflow/mosr/process/task/about', + method: "get" + }); +}; + +//获取专项资金饼图数据 +export const getSpecialFundChart = () => { + return request({ + url: '/workflow/home/page/statistic', + method: "get" + }); +}; + +//获取首页四个统计数量 +export const getHomeStatistics = () => { + return request({ + url: '/workflow/mosr/process/task/statistics', + method: "get" + }); +}; diff --git a/src/api/ipblacklist/index.js b/src/api/ipblacklist/index.js new file mode 100644 index 0000000..86d848a --- /dev/null +++ b/src/api/ipblacklist/index.js @@ -0,0 +1,44 @@ +import request from '@/utils/request.js' + +// 获取list +export const getIPBlackList = (params) => { + return request({ + url: '/admin/ip/back', + method: 'get', + params + }) +} + +// 新增 +export const addIPBlack = (data) => { + return request({ + url: '/admin/ip/back', + method: 'post', + data + }) +} + +// 修改 +export const editIPBlack = (data) => { + return request({ + url: '/admin/ip/back', + method: 'put', + data + }) +} + +// 删除 +export const delIPBlack = (ids) => { + return request({ + url: '/admin/ip/back/'+ids, + method: 'delete' + }) +} + +// 详情 +export const getIPBlackDetail = (id) => { + return request({ + url: '/admin/ip/back/'+id, + method: 'get' + }) +} \ No newline at end of file diff --git a/src/api/log/login.js b/src/api/log/login.js new file mode 100644 index 0000000..2411f44 --- /dev/null +++ b/src/api/log/login.js @@ -0,0 +1,24 @@ +import request from "@/utils/request.js"; + +//查询登录日志 +export const getLoginLogList = (params) => { + return request({ + url: "/log/login-info/list", + method: "get", + params + }); +}; +//查询登录日志详情 +export const getLoginLogDetail = (infoId) => { + return request({ + url: `/log/login-info/${infoId}`, + method: "get" + }); +}; +//删除登录日志 +export const deleteLoginLog = (infoIds) => { + return request({ + url: `/log/login-info/${infoIds}`, + method: "delete" + }); +}; diff --git a/src/api/log/operation.js b/src/api/log/operation.js new file mode 100644 index 0000000..33c7ec7 --- /dev/null +++ b/src/api/log/operation.js @@ -0,0 +1,24 @@ +import request from "@/utils/request.js"; + +//查询操作日志 +export const getOperateLog = (params) => { + return request({ + url: "/log/log/list", + method: "get", + params + }); +}; +//查询操作日志详情 +export const getOperateLogDetail = (operId) => { + return request({ + url: `/log/log/${operId}`, + method: "get" + }); +}; +//删除操作日志 +export const deleteOperateLog = (operIds) => { + return request({ + url: `/log/log/${operIds}`, + method: "delete" + }); +}; diff --git a/src/api/login.js b/src/api/login.js new file mode 100644 index 0000000..99e83bc --- /dev/null +++ b/src/api/login.js @@ -0,0 +1,36 @@ +import request from '@/utils/request.js' + +export const getCodeImg = () => { + return request({ + url: '/auth/captchaImage', + method: 'get' + }) +} + + +export const login = (data) => { + return request({ + url: '/auth/login', + method: 'post', + data + }) +} +export const switchAccount = (userId) => { + return request({ + url: `/auth/switch/account/${userId}`, + method: 'post', + }) +} + +export const getUserInfo = () => { + return request({ + url: '/auth/info', + method: 'get', + }) +} +export const getAuthInfo = () => { + return request({ + url: '/admin/mosr/user/detail/info', + method: 'get', + }) +} diff --git a/src/api/notice/notice.js b/src/api/notice/notice.js new file mode 100644 index 0000000..a0ee333 --- /dev/null +++ b/src/api/notice/notice.js @@ -0,0 +1,30 @@ +import request from '@/utils/request.js' +export const getNoticeList = (params) => { + return request({ + url: '/notice/notice', + method: 'get', + params + }) +} +export const getNoticeDetail = (noticeId) => { + return request({ + url: '/notice/notice/'+noticeId, + method: "get" + }); +}; + + +export const addNotice = (data) => { + return request({ + url: '/notice/notice', + method: 'post', + data + }) +} + +export const deleteNotice = (noticeId) => { + return request({ + url: `/notice/notice/${noticeId}`, + method: "delete" + }); +}; diff --git a/src/api/notice/notify.js b/src/api/notice/notify.js new file mode 100644 index 0000000..bee5657 --- /dev/null +++ b/src/api/notice/notify.js @@ -0,0 +1,43 @@ +import request from '@/utils/request.js' +export const getNotifyList = (params) => { + return request({ + url: '/notice/notify', + method: 'get', + params + }) +} +export const getNotifyDetail = (noticeId) => { + return request({ + url: '/notice/notify/'+noticeId, + method: "get" + }); +}; +//已读单个消息 +export const readSingleNotify = (noticeId) => { + return request({ + url: '/notice/notify/read/'+noticeId, + method: 'put' + }) +} +//已读全部消息 +export const readAllNotify = () => { + return request({ + url: '/notice/notify/read/all', + method: 'put' + }) +} +//删除单个消息 +export const deleteSingleNotify = (noticeId) => { + return request({ + url: '/notice/notify/'+noticeId, + method: "delete" + }); +}; +//删除多个消息 +export const deleteMoreNotify = (noticeIds) => { + return request({ + url: '/notice/notify/batch/'+noticeIds, + method: "delete" + }); +}; + diff --git a/src/api/online/online.js b/src/api/online/online.js new file mode 100644 index 0000000..7a58a95 --- /dev/null +++ b/src/api/online/online.js @@ -0,0 +1,17 @@ +import request from "@/utils/request.js"; +//查询在线用户 +export const getOnlineList = (params) => { + return request({ + url: "/admin/online/user", + method: "get", + params + }); +}; + +//强制退出用户 +export const deleteOnlineUser= (tokenId) => { + return request({ + url: '/admin/online/user/'+tokenId, + method: "delete" + }); +}; diff --git a/src/api/post/post.js b/src/api/post/post.js new file mode 100644 index 0000000..002e53f --- /dev/null +++ b/src/api/post/post.js @@ -0,0 +1,48 @@ +import request from '@/utils/request.js' + +//获取岗位信息 +export const getPostList = (params) => { + return request({ + url: '/admin/post', + method: 'get', + params + }) +} +//查询岗位详情 +export const getPostDetail = (postId) => { + return request({ + url: `/admin/post/info/${postId}`, + method: "get" + }); +}; + +//新增岗位 +export const addPost = (data) => { + return request({ + url: '/admin/post', + method: 'post', + data + }) +} +//编辑岗位 +export const editPost = (data) => { + return request({ + url: '/admin/post', + method: 'put', + data + }) +} +//获取select下拉框数据 +export const getSelectOption = () => { + return request({ + url: '/admin/post/option', + method: 'get' + }) +} +//删除角色信息 +export const deletePost = (postId) => { + return request({ + url: `/admin/post/${postId}`, + method: "delete" + }); +}; diff --git a/src/api/project-demand/index.js b/src/api/project-demand/index.js new file mode 100644 index 0000000..2c60e53 --- /dev/null +++ b/src/api/project-demand/index.js @@ -0,0 +1,128 @@ +import request from '@/utils/request.js' +import axios from "axios"; +import {getToken} from "@/utils/auth"; + +//需求征集 +export const getDemandInfo = (param) => { + return request({ + url: '/workflow/mosr/requirement', + method: "get", + params: param + }); +}; +export const filterRequirementName = (requirementName) => { + return request({ + url: `/workflow/mosr/requirement/match/${requirementName}`, + method: "get" + }); +}; +export const getWorkflowInfo = () => { + return request({ + url: '/workflow/mosr/requirement/process', + method: "get" + }); +}; +export const getInfo = (requirementId) => { + return request({ + url: `/workflow/mosr/requirement/info/${requirementId}`, + method: "get" + }); +}; +export const getFormInfo = (requirementId) => { + return request({ + url: `/workflow/mosr/requirement/form/${requirementId}`, + method: "get" + }); +}; +export const agreeTask = (data) => { + return request({ + url: `/workflow/mosr/process/task/agree`, + method: "post", + data: data + }); +}; +export const rejectTask = (data) => { + return request({ + url: `/workflow/mosr/process/task/reject`, + method: "post", + data: data + }); +}; + +export const addRequirement = (data) => { + return request({ + url: '/workflow/mosr/requirement', + method: "post", + data: data + }); +}; +export const resubmit = (data) => { + return request({ + url: '/workflow/mosr/requirement/resubmit', + method: "post", + data: data + }); +}; +export const deleteFile = (fileId) => { + return request({ + url: `/workflow/process/file/delete/${fileId}`, + method: "delete" + }); +}; +export const downloadFile = (fileId) => { + return request({ + url: '/workflow/process/file/download', + method: "get", + responseType:'blob', + params:{ + fileId:fileId + } + }); +}; +export const getCompanyOption = () => { + return request({ + url: '/admin/mosr/sub/company/companyOption', + method: "get" + }); +}; +export const deleteDemand = (id) => { + return request({ + url: `/workflow/mosr/requirement/${id}`, + method: "delete" + }); +}; +export const getRequirementStatePerm = () => { + return request({ + url: '/workflow/mosr/requirement/prem/state', + method: "get" + }); +}; +export const downloadTemplate = (type) => { + return request({ + url: '/workflow/mosr/attachment/download/template', + method: "get", + responseType:'blob', + params:{ + type:type + } + }); +}; +export const downloadTemplateZip = (typeList) => { + return axios.get( + `${import.meta.env.VITE_BASE_URL}/workflow/mosr/attachment/download/pack?typeList=${typeList}`, + { + responseType: 'blob', + headers: { + Authorization: getToken() + }, + } + ); + // return request({ + // url: '/workflow/mosr/attachment/download/pack', + // method: "get", + // responseType:'blob', + // params:{ + // typeList:typeList + // } + // }); +}; diff --git a/src/api/project-demand/summary/index.js b/src/api/project-demand/summary/index.js new file mode 100644 index 0000000..5efb23d --- /dev/null +++ b/src/api/project-demand/summary/index.js @@ -0,0 +1,105 @@ +import request from '@/utils/request' + +export const fileUp = (url, data) => { + return request({ + url, + method: 'post', + data, + headers: { + 'Content-Type': 'multipart/form-data' + } + }) +} + +export const requirementReported = (data) => { + return request({ + url: '/workflow/mosr/requirement/reported', + method: "post", + data: data + }); +}; +//需求汇总-征集名称关键词匹配 +export const getRequirementName = (requirementName) => { + return request({ + url: `/workflow/mosr/requirement/collect/project/match/${requirementName}`, + method: "get" + }); +}; +//获取需求上报 流程信息 +export const getProcessInfo = (specialFund) => { + return request({ + url: `/workflow/mosr/requirement/collect/process/${specialFund}`, + method: "get" + }); +}; +export const getDetail = (projectId) => { + return request({ + url: `/workflow/mosr/requirement/collect/info/${projectId}`, + method: "get" + }); +}; + +export const resubmitReported = (data) => { + return request({ + url: '/workflow/mosr/requirement/collect/resubmit', + method: "post", + data: data + }); +}; + +export const getCollectAttachment = (params) => { + return request({ + url: '/workflow/mosr/requirement/collect/attachments', + method: "get", + params:params + }); +}; +export const uploadCollectAttachment= (data) => { + return request({ + url: '/workflow/mosr/requirement/collect/upload', + method: "post", + data: data + }); +}; +// 年度计划 +export const addPlan= (data) => { + return request({ + url: '/workflow/annual/plan', + method: "post", + data: data + }); +}; +export const editPlan= (data) => { + return request({ + url: '/workflow/annual/plan', + method: "put", + data: data + }); +}; +export const getPlan= (annualPlanId) => { + return request({ + url: `/workflow/annual/plan/info/${annualPlanId}`, + method: "get" + }); +}; +export const deletePlan= (annualPlanId) => { + return request({ + url: `/workflow/annual/plan/${annualPlanId}`, + method: "delete" + }); +}; +export const approvePlan= (data) => { + return request({ + url: '/workflow/annual/plan/approve', + method: "post", + data: data + }); +}; + + +export const getProjectOption = () => { + return request({ + url: '/workflow/mosr/requirement/master', + method: "get" + }); +}; diff --git a/src/api/project-manage/attachment.js b/src/api/project-manage/attachment.js new file mode 100644 index 0000000..1b5e44f --- /dev/null +++ b/src/api/project-manage/attachment.js @@ -0,0 +1,38 @@ +import request from '@/utils/request.js' + + +export const searchFileList = (params) => { + return request({ + url: `/workflow/mosr/attachment/list`, + method: "get", + params: params + }); +}; +export const searchAllFileList = (params) => { + return request({ + url: '/workflow/mosr/attachment/all', + method: "get", + params: params + }); +}; +export const uploadFileList = (data) => { + return request({ + url: '/workflow/mosr/attachment/upload', + method: "post", + data: data + }); +}; +export const searchImplementationFileList = (params) => { + return request({ + url: '/workflow/mosr/attachment/implementation/list', + method: "get", + params: params + }); +}; +export const switchAttachmentState = (data) => { + return request({ + url: '/workflow/mosr/project/filing/attachment/switch', + method: "post", + data + }); +}; diff --git a/src/api/project-manage/index.js b/src/api/project-manage/index.js new file mode 100644 index 0000000..8faa1b3 --- /dev/null +++ b/src/api/project-manage/index.js @@ -0,0 +1,199 @@ +import request from '@/utils/request.js' +import axios from "axios"; +import {getToken} from "@/utils/auth"; +//项目立项 +export const getApplyProcess = (projectId) => { + return request({ + url: `/workflow/mosr/project/approval/initiation/process/${projectId}`, + method: "get" + }); +}; +export const filterProjectName = (projectName,targetState) => { + return request({ + url: `/workflow/mosr/project/approval/match/${projectName}/${targetState}`, + method: "get" + }); +}; +export const projectApply = (data) => { + return request({ + url: '/workflow/mosr/project/approval/initiation/apply', + method: "post", + data: data + }); +}; +export const getApplyDetail = (ProjectId) => { + return request({ + url: `/workflow/mosr/project/approval/info/${ProjectId}`, + method: "get" + }); +}; + +export const resubmitApply = (data) => { + return request({ + url: '/workflow/mosr/project/approval/initiation/resubmit', + method: "post", + data: data + }); +}; +export const getInitiationAttachment = (params) => { + return request({ + url: '/workflow/mosr/project/approval/attachments', + method: "get", + params: params + }); +}; +//项目实施 +export const getCheckDetail = (projectId) => { + return request({ + url: `/workflow/mosr/project/implementation/info/${projectId}`, + method: "get" + }); +}; +export const resubmitCheck = (data) => { + return request({ + url: '/workflow/mosr/project/implementation/resubmit', + method: "post", + data: data + }); +}; + +export const projectCheck = (data) => { + return request({ + url: '/workflow/mosr/project/implementation/initiation/check', + method: "post", + data: data + }); +}; +export const getProjectCheckProcess = (projectId) => { + return request({ + url: `/workflow/mosr/project/implementation/process/${projectId}`, + method: "get" + }); +}; + +export const addLedger = (data) => { + return request({ + url: '/workflow/mosr/expense/ledger', + method: "post", + data: data + }); +}; + +export const getTags = (projectId) => { + return request({ + url: `/workflow/mosr/attachment/option/${projectId}`, + method: "get" + }); +}; +export const getPhaseProcess = () => { + return request({ + url: '/workflow/phase/change/process', + method: "get" + }); +}; +export const submitPhaseChange = (data) => { + return request({ + url: '/workflow/phase/change', + method: "post", + data: data + }); +}; +export const getPhaseDetail = (projectId) => { + return request({ + url: `/workflow/phase/change/info/${projectId}`, + method: "get" + }); +}; +export const getPhaseForm = (projectId) => { + return request({ + url: `/workflow/phase/change/from/${projectId}`, + method: "get" + }); +}; +export const resubmitPhaseForm = (data) => { + return request({ + url: '/workflow/phase/change/resubmit', + method: "post", + data: data + }); +}; + +//项目归档 +export const getConclusionDetail = (ProjectId) => { + return request({ + url: `/workflow/mosr/project/filing/info/${ProjectId}`, + method: "get" + }); +}; +export const resubmitConclusion = (data) => { + return request({ + url: '/workflow/mosr/project/filing/resubmit', + method: "post", + data: data + }); +}; + +export const projectConclusion = (data) => { + return request({ + url: '/workflow/mosr/project/filing/project/entry', + method: "post", + data: data + }); +}; +export const getProjectConclusionProcess = () => { + return request({ + url: '/workflow/mosr/project/filing/process', + method: "get" + }); +}; +//获取前置流程 +export const getPreProcess = () => { + return request({ + url: '/workflow/details/pre/process', + method: "get" + }); +}; +export const updateLedger = (data) => { + return request({ + url: '/workflow/mosr/expense/ledger/replenishment', + method: "post", + data: data + }); +}; +export const searchUpdateLedgerData = (projectId) => { + return request({ + url: `/workflow/mosr/expense/ledger/${projectId}`, + method: "get" + }); +}; +// +// export const searchUpdateLedgerData = (projectId) => { +// return request({ +// url: '/workflow/mosr/expense/ledger/import', +// method: "get" +// }); +// }; + +export const exportExcel = (data) => { + return axios.post( + `${import.meta.env.VITE_BASE_URL}/workflow/mosr/project/implementation/export`, + data, { + responseType: 'blob', + headers: { + Authorization: getToken() + } + } + ); +}; +//台账模板下载 +export const ledgerTemplateDownload = () => { + return axios.get( + `${import.meta.env.VITE_BASE_URL}/workflow/mosr/project/implementation/download/template`, + { + responseType: 'blob', + headers: { + Authorization: getToken() + } + } + ); +}; diff --git a/src/api/rapid/code-gen.js b/src/api/rapid/code-gen.js new file mode 100644 index 0000000..266a3c1 --- /dev/null +++ b/src/api/rapid/code-gen.js @@ -0,0 +1,68 @@ +import request from '@/utils/request.js' + +export const getTableList = (params) => { + return request({ + url: '/code-gen/table', + method: 'get', + params + }) +} + +export const getDynamicTable = (params) => { + return request({ + url: '/code-gen/dynamic-table', + method: 'get', + params + }) +} + +export const getTableDetail = (tableId) => { + return request({ + url: `/code-gen/table/${tableId}`, + method: 'get', + }) +} + +export const previewCode = (tableId) => { + return request({ + url: `/code-gen/table/preview/${tableId}`, + method: 'get', + }) +} + + +export const deleteMoreTable = (params) => { + return request({ + url: '/code-gen/table', + method: 'delete', + params + }) +} +export const deleteTable = (tableId) => { + return request({ + url: `/code-gen/table/${tableId}`, + method: 'delete', + }) +} +export const importTable = (data) => { + return request({ + url: "/code-gen/table/import-table", + method: 'post', + data + }) +} + +export const editCodeGen = (data) => { + return request({ + url: '/code-gen/table', + method: 'put', + data + }) +} +export const syncDatabase = (tableId) => { + return request({ + url: '/code-gen/table/sync/'+tableId, + method: 'put' + }) +} + diff --git a/src/api/rapid/data-source.js b/src/api/rapid/data-source.js new file mode 100644 index 0000000..3f9a462 --- /dev/null +++ b/src/api/rapid/data-source.js @@ -0,0 +1,54 @@ +import request from '@/utils/request.js' + + +export const getDataSourceList = (params) => { + return request({ + url: '/code-gen/data-source', + method: 'get', + params + }) +} + +export const getDataSourceOption = () => { + return request({ + url: '/code-gen/data-source/option', + method: 'get' + }) +} + +export const getDataSourceOptionType=()=>{ + return request({ + url:'/code-gen/data-source/option/type', + method:'get' + }) +} + +export const getDataSource = (dsId) => { + return request({ + url: `/code-gen/data-source/${dsId}`, + method: 'get' + }) +} + +export const addDataSource = (data) => { + return request({ + url: '/code-gen/data-source', + method: 'post', + data + }) +} +export const editDataSource = (data) => { + return request({ + url: '/code-gen/data-source', + method: 'put', + data + }) +} + +export const deleteDataSource = (dsId) => { + return request({ + url: `/code-gen/data-source/${dsId}`, + method: 'delete' + }) +} + diff --git a/src/api/rapid/regular.js b/src/api/rapid/regular.js new file mode 100644 index 0000000..a94d4f1 --- /dev/null +++ b/src/api/rapid/regular.js @@ -0,0 +1,52 @@ +import request from '@/utils/request.js' + +// 请求校验规则表list +export const getRegularList = (params) => { + return request({ + url: '/code-gen/rapid/regular', + method: 'get', + params + }) +} + +// 获取校验规则表详情 +export const getRegularDetails = (regularId) => { + return request({ + url: '/code-gen/rapid/regular/' + regularId, + method: 'get' + }) +} + +// 获取校验规则选项列表 +export const getRegularOpt = (regularId) => { + return request({ + url: '/code-gen/rapid/regular/option', + method: 'get' + }) +} + +// 新增校验规则表 +export const addRegular = (data) => { + return request({ + url: '/code-gen/rapid/regular', + method: 'post', + data + }) +} + +// 修改校验规则表 +export const editRegular = (data) => { + return request({ + url: '/code-gen/rapid/regular', + method: 'put', + data + }) +} + +// 删除校验规则表 +export const delRegular =(regularId) => { + return request({ + url: '/code-gen/rapid/regular/' + regularId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/src/api/research-fund/index.js b/src/api/research-fund/index.js new file mode 100644 index 0000000..2a2c01e --- /dev/null +++ b/src/api/research-fund/index.js @@ -0,0 +1,36 @@ +import request from '@/utils/request.js' + + +export const getResearchFundChart = (year) => { + return request({ + url: '/workflow/mosr/rd/home', + method: 'get', + params: {year:year} + }) +} +export const getResearchFundDetail = (rdFundId) => { + return request({ + url: `/workflow/mosr/rd/${rdFundId}`, + method: "get" + }); +}; +export const addResearchFund= (data) => { + return request({ + url: '/workflow/mosr/rd/add', + method: "post", + data + }); +}; +export const editResearchFund= (data) => { + return request({ + url: '/workflow/mosr/rd/update', + method: "post", + data + }); +}; +export const deleteResearchFund = (rdFundIds) => { + return request({ + url: `/workflow/mosr/rd/${rdFundIds}`, + method: "delete" + }); +}; diff --git a/src/api/role/role.js b/src/api/role/role.js new file mode 100644 index 0000000..28a4f7b --- /dev/null +++ b/src/api/role/role.js @@ -0,0 +1,110 @@ +import request from '@/utils/request.js' + +export const getRoleList = (params) => { + return request({ + url: '/admin/role', + method: 'get', + params + }) +} +//查询角色option +export const getRoleOption = () => { + return request({ + url: '/admin/role/option', + method: "get" + }); +}; + +export const getTemRoleOption = () => { + return request({ + url: '/admin/role/option/template', + method: "get" + }); +}; + +//查询角色信息 +export const getRoleDetail = (roleId) => { + return request({ + url: `/admin/role/${roleId}`, + method: "get" + }); +}; +//根据菜单id获取分配的角色信息 +export const getRoleInfoByMenuId = (params) => { + return request({ + url: '/admin/role/menu', + method: 'get', + params + }) +} +//获取排除在外的角色 +export const getRoleExcludeMenuId = (params) => { + return request({ + url: '/admin/role/menu/list', + method: "get", + params + }); +}; + +// 新增修改 +export const operate = (data) => { + if(data.roleId) return editRole(data) + return addRole(data) +} + +// 新增角色 +export const addRole = (data) => { + return request({ + url: '/admin/role', + method: 'post', + data + }) +} + +// 修改角色 +export const editRole = (data) => { + return request({ + url: '/admin/role', + method: 'put', + data + }) +} +//解除当前角色对应的所有菜单的绑定关系 +export const unbindAllRole = (menuId) => { + return request({ + url: '/admin/role/all/unbind/menu', + method: 'put', + data: { + id: menuId + } + }) +} +// 解除角色与菜单之间的绑定状态 +export const cancelAuthorization = (menuId, roleIds) => { + return request({ + url: '/admin/role/unbind/menu', + method: 'put', + data: { + id: menuId, + ids: roleIds + } + }) +} +//建立角色用户绑定关系 +export const bindRoleAndMenu = (menuId, roleIds) => { + return request({ + url: '/admin/role/bind/menu', + method: 'put', + data: { + id: menuId, + ids: roleIds + } + }) +} +//删除角色信息 +export const deleteRole = (roleId) => { + return request({ + url: `/admin/role/${roleId}`, + method: "delete" + }); +}; diff --git a/src/api/special-fund/index.js b/src/api/special-fund/index.js new file mode 100644 index 0000000..2f662e1 --- /dev/null +++ b/src/api/special-fund/index.js @@ -0,0 +1,46 @@ +import request from '@/utils/request.js' + +export const getFundDetail = (specialFundId) => { + return request({ + url: `/workflow/mosr/special/fund/from/${specialFundId}`, + method: "get" + }); +}; +export const getFundDetailProcess = (specialFundId) => { + return request({ + url: `/workflow/mosr/special/fund/info/${specialFundId}`, + method: "get" + }); +}; +export const getFundOption = () => { + return request({ + url: '/workflow/mosr/special/fund/option', + method: "get" + }); +}; +export const getFundProcess = (specialFundId) => { + return request({ + url: '/workflow/mosr/special/fund/process', + method: "get" + }); +}; +export const addFund= (data) => { + return request({ + url: '/workflow/mosr/special/fund', + method: "post", + data + }); +}; +export const resubmitFund= (data) => { + return request({ + url: '/workflow/mosr/special/fund/resubmit', + method: "post", + data + }); +}; +export const deleteFund = (id) => { + return request({ + url: `/workflow/mosr/special/fund/${id}`, + method: "delete" + }); +}; diff --git a/src/api/subsidiary/index.js b/src/api/subsidiary/index.js new file mode 100644 index 0000000..ae5ee06 --- /dev/null +++ b/src/api/subsidiary/index.js @@ -0,0 +1,30 @@ +import request from "@/utils/request.js"; + +export const getSubCompanyList=(params)=>{ + return request({ + url:'/admin/mosr/sub/company', + method:'get', + params + }) +} +export const getDepartmentList=(params)=>{ + return request({ + url:'/admin/mosr/department', + method:'get', + params + }) +} +export const getCompanyDetail=(companyId)=>{ + return request({ + url:`/admin/mosr/sub/company/info/${companyId}`, + method:'get' + }) +} + +export const setCompanyLeader=(data)=>{ + return request({ + url:'/admin/mosr/sub/company/leader', + method:'post', + data:data + }) +} diff --git a/src/api/system/config.js b/src/api/system/config.js new file mode 100644 index 0000000..53e826b --- /dev/null +++ b/src/api/system/config.js @@ -0,0 +1,54 @@ +import request from '@/utils/request.js' + +// 请求参数配置表list +export const getConfigList = (params) => { + return request({ + url: '/admin/config', + method: 'get', + params + }) +} + +//获取到option列表 + +// 获取参数配置表详情 +export const getConfigDetails = (configId) => { + return request({ + url: '/admin/config/' + configId, + method: 'get' + }) +} +// 获取参数配置表详情 +export const getConfigByKey = (configKey) => { + return request({ + url: '/admin/config/key/' + configKey, + method: 'get' + }) +} + +// 新增参数配置表 +export const addConfig = (data) => { + return request({ + url: '/admin/config', + method: 'post', + data + }) +} + +// 修改参数配置表 +export const editConfig = (data) => { + return request({ + url: '/admin/config', + method: 'put', + data + }) +} + +// 删除参数配置表 +export const delConfig =(configId) => { + return request({ + url: '/admin/config/' + configId, + method: 'delete' + }) +} + diff --git a/src/api/system/dict-data.js b/src/api/system/dict-data.js new file mode 100644 index 0000000..997e38e --- /dev/null +++ b/src/api/system/dict-data.js @@ -0,0 +1,44 @@ +import request from '@/utils/request.js' + +// 请求字典类型表list +export const getDictDataList = (params) => { + return request({ + url: '/admin/dict/data', + method: 'get', + params + }) +} + +// 获取字典数据表详情 +export const getDictDataDetails = (dictCode) => { + return request({ + url: '/admin/dict/data/' + dictCode, + method: 'get' + }) +} + +// 新增字典数据表 +export const addDictData = (data) => { + return request({ + url: '/admin/dict/data', + method: 'post', + data + }) +} + +// 修改字典类型表 +export const editDictData = (data) => { + return request({ + url: '/admin/dict/data', + method: 'put', + data + }) +} + +// 删除字典类型表 +export const delDictData = (dictCode) => { + return request({ + url: `/admin/dict/data/${dictCode}`, + method: 'delete' + }) +} diff --git a/src/api/system/dict-type.js b/src/api/system/dict-type.js new file mode 100644 index 0000000..1d59c7a --- /dev/null +++ b/src/api/system/dict-type.js @@ -0,0 +1,58 @@ +import request from '@/utils/request.js' + +export const getDictOption = () => { + return request({ + url: '/admin/dict/type/option', + method: 'get' + }) +} + +// 请求字典类型表list +export const getDictTypeList = (params) => { + return request({ + url: '/admin/dict/type', + method: 'get', + params + }) +} + +// 获取字典类型表详情 +export const getDictTypeDetails = (dictTypeId) => { + return request({ + url: '/admin/dict/type/' + dictTypeId, + method: 'get' + }) +} + +// 新增字典类型表 +export const addDictType = (data) => { + return request({ + url: '/admin/dict/type', + method: 'post', + data + }) +} + +// 修改字典类型表 +export const editDictType = (data) => { + return request({ + url: '/admin/dict/type', + method: 'put', + data + }) +} + +// 删除字典类型表 +export const delDictType =(dictTypeId) => { + return request({ + url: '/admin/dict/type/' + dictTypeId, + method: 'delete' + }) +} +//字典刷新缓存 +export const refreshDict =() => { + return request({ + url: 'admin/dict/type/refresh', + method: 'post' + }) +} diff --git a/src/api/system/mapping-switch.js b/src/api/system/mapping-switch.js new file mode 100644 index 0000000..a1c858d --- /dev/null +++ b/src/api/system/mapping-switch.js @@ -0,0 +1,16 @@ +import request from '@/utils/request.js' + +export const getMappingList = (params) => { + return request({ + url: '/admin/mapping/switch', + method: 'get', + params + }) +} +export const editMappingSwitch = (data) => { + return request({ + url: '/admin/mapping/switch', + method: 'put', + data + }) +} diff --git a/src/api/system/menu.js b/src/api/system/menu.js new file mode 100644 index 0000000..ba99504 --- /dev/null +++ b/src/api/system/menu.js @@ -0,0 +1,8 @@ +import request from '@/utils/request' + +export const getRouters = () => { + return request({ + url: '/auth/router', + method: 'get' + }) +} \ No newline at end of file diff --git a/src/api/system/menuman.js b/src/api/system/menuman.js new file mode 100644 index 0000000..c4db6d5 --- /dev/null +++ b/src/api/system/menuman.js @@ -0,0 +1,53 @@ +import request from '@/utils/request.js' + +export const getMenuList = (params) => { + return request({ + url: '/admin/menu', + method: 'get', + params + }) +} + +export const editMenu = (data) => { + return request({ + url: '/admin/menu', + method: 'put', + data + }) +} + +export const addMenu = (data) => { + return request({ + url: '/admin/menu', + method: 'post', + data + }) +} + +export const delMenu = (menuId) => { + return request({ + url: '/admin/menu/'+menuId, + method: 'delete' + }) +} + +export const getMenuInfo = (menuId) => { + return request({ + url: '/admin/menu/info/'+menuId, + method: 'get' + }) +} + +export const getMenuOpt = (excludeId=0) => { + return request({ + url: '/admin/menu/option/'+excludeId, + method: 'get' + }) +} + +export const getMenuOptRole = (roleId) => { + return request({ + url: '/admin/menu/option/role/'+roleId, + method: 'get' + }) +} diff --git a/src/api/user/user.js b/src/api/user/user.js new file mode 100644 index 0000000..c7fd25f --- /dev/null +++ b/src/api/user/user.js @@ -0,0 +1,235 @@ +import request from '@/utils/request.js' + +// 根据角色或者部门id获取对应数据 +export const getDeptOpt = (params = {}) => { + return request({ + url: `/admin/mosr/department/option`, + method: 'get', + params + }) +} + +export const getSubCompOpt = () => { + return request({ + url: `/admin/mosr/sub/company/option`, + method: 'get' + }) +} +export const getUserAccount = () => { + return request({ + url: `/admin/mosr/user/account/list`, + method: 'get' + }) +} +export const judgeIsSameRole = (userId) => { + return request({ + url: `/admin/mosr/user/company/same/${userId}`, + method: 'get' + }) +} + +// 查询角色信息 +export const getRolesOpt = () => { + return request({ + url: '/admin/role/option', + method: 'get', + }) +} + +// 获取岗位下拉 +export const getJobOpt = () => { + return request({ + url: '/admin/job/option', + method: 'get', + }) +} + +export const getMosrUserList = (params) => { + return request({ + url: '/admin/mosr/user', + method: 'get', + params + }) +} +export const getUserList = (params) => { + return request({ + url: '/admin/user', + method: 'get', + params + }) +} +//获取用户详情 +export const getUserDetail = (userId) => { + return request({ + url: `/admin/mosr/user/info/${userId}`, + method: "get" + }); +}; + +// 操作 +export const operate = (data, type) => { + // console.log(type ,'type'); + if (data.userId && type !== '0') return editUser(data) + else if (type == '0') return editUserOA(data) + return addUser(data) +} + +// 新增用户 +export const addUser = (data) => { + return request({ + url: '/admin/mosr/user', + method: 'post', + data + }) +} +// 修改用户 +export const editUser = (data) => { + return request({ + url: '/admin/mosr/user', + method: 'put', + data + }) +} + +// 修改OA用户 +export const editUserOA = (data) => { + return request({ + url: '/admin/mosr/user/oa', + method: 'put', + data + }) +} + +//删除用户信息 +export const deleteUser = (userId) => { + return request({ + url: `/admin/user/${userId}`, + method: "delete" + }); +}; +//根据roleId获取用户信息 +export const getUserByRoleId = (roleId, params) => { + return request({ + url: `/admin/user/role/${roleId}`, + method: "get", + params + }); +}; +//排除角色id获取用户信息 +export const getUserExcludeRoleId = (roleId, params) => { + return request({ + url: `/admin/user/role/exclude/${roleId}`, + method: "get", + params + }); +}; +//建立角色用户绑定关系 +export const roleBindUser = (data) => { + return request({ + url: '/admin/user/bind/role', + method: 'put', + data + }) +} +// 解除角色与用户之间的绑定状态 +export const cancelAuthorization = (data) => { + return request({ + url: '/admin/user/unbind/role', + method: 'put', + data + }) +} +//解除当前角色对应的所有用户的绑定关系 +export const unbindAllUser = (roleId) => { + return request({ + url: '/admin/user/all/unbind/role', + method: 'put', + data: { + id: roleId + } + }) +} + +//根据岗位id获取分配的用户信息 +export const getUserInfoByPostId = (postId, params) => { + return request({ + url: `/admin/user/post/${postId}`, + method: 'get', + params + }) +} +//排除岗位id获取用户信息 +export const getUserExcludePostId = (postId, params) => { + return request({ + url: `/admin/user/post/exclude/${postId}`, + method: "get", + params + }); +}; +//建立岗位与用户绑定关系 +export const postBindUser = (userIds, postId) => { + return request({ + url: '/admin/user/bind/post', + method: 'put', + data: { + ids: userIds, + id: postId + } + }) +} +// 解除岗位与用户之间的绑定状态 +export const cancelPostAndUserAuthorization = (userIds, postId) => { + return request({ + url: '/admin/user/unbind/post', + method: 'put', + data: { + ids: userIds, + id: postId + } + }) +} +//解除当前岗位对应的所有用户的绑定关系 +export const unbindAllUserByPost = (postId) => { + return request({ + url: '/admin/user/all/unbind/post', + method: 'put', + data: { + id: postId + } + }) +} + +export const bindAccount = (data) => { + return request({ + url: '/admin/mosr/user/bind/account', + method: 'post', + data + }) +} +export const getBindAccount = (userId) => { + return request({ + url: `/admin/mosr/user/bind/account/info/${userId}`, + method: 'get' + }) +} + +export const checkMatrix = (userId) => { + return request({ + url: `/admin/mosr/user/matrix?userId=` + userId, + method: 'get' + }) +} +export const getAgentInfo=(userId)=>{ + return request({ + url: `/admin/mosr/user/approval/agent/${userId}`, + method:'get' + }) +} + +export const editAgentInfo=(data)=>{ + return request({ + url:'/admin/mosr/user/approval/agent', + method:'post', + data + }) +} diff --git a/src/api/workflow/process-definition.js b/src/api/workflow/process-definition.js new file mode 100644 index 0000000..eb802fe --- /dev/null +++ b/src/api/workflow/process-definition.js @@ -0,0 +1,78 @@ +import request from '@/utils/request.js' + +export function getProcessDefinitionList(param) { + return request({ + url: "/workflow/process/definition", + method: "get", + params: param + }) +} + +export function getProcessDefinitionInfo(deploymentId) { + return request({ + url: "/workflow/process/definition/" + deploymentId, + method: "get", + }) +} + +export function getInitiateInfo(processDefinitionKey) { + return request({ + url: "/workflow/process/definition/key/" + processDefinitionKey, + method: "get", + }) +} + + +export function getHistoryVersion(processDefinitionKey) { + return request({ + url: "/workflow/process/definition/history/" + processDefinitionKey, + method: "get", + }) +} + +export function deleteHistoryVersion(deploymentId) { + return request({ + url: "/workflow/process/definition/" + deploymentId, + method: "delete", + }) +} + +export function suspendProcessDefinition(processDefinitionId) { + return request({ + url: "/workflow/process/definition/suspend", + method: "put", + data: processDefinitionId + }) +} + +export function activateProcessDefinition(processDefinitionId) { + return request({ + url: "/workflow/process/definition/activate", + method: "put", + data: processDefinitionId + }) +} + +export function addProcessDefinition(param) { + return request({ + url: "/workflow/process/definition", + method: "post", + data: param + }) +} + +export function getTypeOption() { + return request({ + url: "/workflow/process/definition/type/option", + method: "get", + }) +} + +export function getFromPerm(processKey) { + return request({ + url: "/workflow/process/definition/from/perm/"+processKey, + method: "get", + }) +} + + diff --git a/src/api/workflow/process-file.js b/src/api/workflow/process-file.js new file mode 100644 index 0000000..55df86d --- /dev/null +++ b/src/api/workflow/process-file.js @@ -0,0 +1,9 @@ +import request from '@/utils/request.js' + +export function deleteFile(fileId) { + // 删除文件 + return request({ + url: '/workflow/process/file/' + fileId, + method: 'delete', + }) +} diff --git a/src/api/workflow/process-instance.js b/src/api/workflow/process-instance.js new file mode 100644 index 0000000..6b9ea8f --- /dev/null +++ b/src/api/workflow/process-instance.js @@ -0,0 +1,53 @@ +import request from '@/utils/request.js' + + +/** + * 开始实例流程 + * @param param + * @returns {*} + */ +export function startProcessInstance(param) { + return request({ + url: "/workflow/process/instance/start", + method: "post", + data: param + }) +} +export function restartProcessInstance(param) { + return request({ + url: "/workflow/process/instance/restart", + method: "post", + data: param + }) +} + +export function getAboutInstanceList(param) { + return request({ + url: "/workflow/process/instance/about", + method: "get", + params: param + }) +} + +export function getInitiatedInstanceList(param) { + return request({ + url: "/workflow/process/instance/self", + method: "get", + params: param + }) +} + +export function getInitiatedInstanceInfo(processInstanceId) { + return request({ + url: "/workflow/process/instance/info/"+processInstanceId, + method: "get", + }) +} + + +export function getInitiatedInstanceReInfo(instanceId) { + return request({ + url: "/workflow/process/instance/re/info/"+instanceId, + method: "get", + }) +} diff --git a/src/api/workflow/process-listen.js b/src/api/workflow/process-listen.js new file mode 100644 index 0000000..35bfc50 --- /dev/null +++ b/src/api/workflow/process-listen.js @@ -0,0 +1,46 @@ +import request from '@/utils/request.js' + +// 请求系统内置监听器list +export const getProcessListenerList = (params) => { + return request({ + url: '/workflow/process/listener', + method: 'get', + params + }) +} + +//获取到option列表 + +// 获取系统内置监听器详情 +export const getProcessListenerDetails = (processListenerId) => { + return request({ + url: '/workflow/process/listener/' + processListenerId, + method: 'get' + }) +} + +// 新增系统内置监听器 +export const addProcessListener = (data) => { + return request({ + url: '/workflow/process/listener', + method: 'post', + data + }) +} + +// 修改系统内置监听器 +export const editProcessListener = (data) => { + return request({ + url: '/workflow/process/listener', + method: 'put', + data + }) +} + +// 删除系统内置监听器 +export const delProcessListener =(processListenerId) => { + return request({ + url: '/workflow/process/listener/' + processListenerId, + method: 'delete' + }) +} diff --git a/src/api/workflow/process-task.js b/src/api/workflow/process-task.js new file mode 100644 index 0000000..fafcf44 --- /dev/null +++ b/src/api/workflow/process-task.js @@ -0,0 +1,45 @@ +import request from '@/utils/request.js' + +export function getTaskList() { + return request({ + url: "/workflow/process/task", + method: "get", + }) +} + +export function getTaskInfo(taskId) { + return request({ + url: "/workflow/process/task/"+taskId, + method: "get", + }) +} +export function completeTask(params) { + return request({ + url: "/workflow/process/task/complete", + method: "put", + data: params + }) +} +export function refuseTask(params) { + return request({ + url: "/workflow/process/task/refuse", + method: "put", + data: params + }) +} + +export function rollBackTask(params) { + return request({ + url: "/workflow/process/task/rollback", + method: "put", + data: params + }) +} + +export function addComment(params) { + return request({ + url: "/workflow/process/task/comment", + method: "post", + data: params + }) +} diff --git a/src/api/workflow/process-user.js b/src/api/workflow/process-user.js new file mode 100644 index 0000000..46b1f0a --- /dev/null +++ b/src/api/workflow/process-user.js @@ -0,0 +1,47 @@ +import request from '@/utils/request.js' + +//根据角色或者部门获取到对应的数据 +export function getUserTree(type,chooseId){ + return request({ + url:`/admin/user/choose/${type}/${chooseId}`, + method:'get' + + }) +} + +// 查询系统角色 +export function getRole() { + return request({ + url: 'admin/role/option', + method: 'get' + }) +} +//获取采取树形控件的部门option +export function getDepartmentTree() { + return request({ + url: 'admin/dept/option', + method: 'get' + }) +} +export function getMosrUser(params) { + return request({ + url: '/admin/mosr/user/choose', + method: 'get', + params:params + }) +} + +export function getOrganizationStructure(params) { + return request({ + url: '/admin/organizational/structure/choose', + method: 'get', + params:params + }) +} +export function getOrganizationStructureTree(params) { + return request({ + url: '/admin/organizational/structure/tree', + method: 'get', + params: params + }) +} diff --git a/src/assets/axupimgs/plugin.js b/src/assets/axupimgs/plugin.js new file mode 100644 index 0000000..5eab499 --- /dev/null +++ b/src/assets/axupimgs/plugin.js @@ -0,0 +1,76 @@ +tinymce.PluginManager.add('axupimgs', function(editor, url) { + var pluginName='多图片上传'; + window.axupimgs={}; //扔外部公共变量,也可以扔一个自定义的位置 + const baseURL = import.meta.env.VITE_BASE_URL + + // var baseURL=tinymce.baseURL; + var iframe1 = '/upfiles.html'; + axupimgs.images_upload_handler = editor.getParam('images_upload_handler', undefined, 'function'); + axupimgs.images_upload_base_path = editor.getParam('images_upload_base_path', '','string'); + axupimgs.axupimgs_filetype = editor.getParam('axupimgs_filetype', '.png,.gif,.jpg,.jpeg', 'string'); + axupimgs.res=[]; + var openDialog = function() { + return editor.windowManager.openUrl({ + title: pluginName, + size: 'large', + url:iframe1, + buttons: [ + { + type: 'cancel', + text: 'Close' + }, + { + type: 'custom', + text: 'Save', + name: 'save', + primary: true + }, + ], + onAction: function (api, details) { + switch (details.name) { + case 'save': + var html = ''; + var imgs = axupimgs.res; + var len = imgs.length; + for(let i=0;i'; + } + } + editor.insertContent(html); + axupimgs.res=[]; + api.close(); + break; + default: + break; + } + + } + }); + }; + + editor.ui.registry.getAll().icons.axupimgs || editor.ui.registry.addIcon('axupimgs',''); + + editor.ui.registry.addButton('axupimgs', { + icon: 'axupimgs', + tooltip: pluginName, + onAction: function() { + openDialog(); + } + }); + editor.ui.registry.addMenuItem('axupimgs', { + icon: 'axupimgs', + text: '图片批量上传...', + onAction: function() { + openDialog(); + } + }); + return { + getMetadata: function() { + return { + name: pluginName, + url: "http://tinymce.ax-z.cn/more-plugins/axupimgs.php", + }; + } + }; +}); diff --git a/src/assets/axupimgs/plugin.min.js b/src/assets/axupimgs/plugin.min.js new file mode 100644 index 0000000..db7a3cc --- /dev/null +++ b/src/assets/axupimgs/plugin.min.js @@ -0,0 +1,75 @@ +tinymce.PluginManager.add('axupimgs', function(editor, url) { + var pluginName='Ax多图片上传'; + window.axupimgs={}; //扔外部公共变量,也可以扔一个自定义的位置 + + var baseURL=tinymce.baseURL; + var iframe1 = baseURL+'/plugins/axupimgs/upfiles.html'; + axupimgs.images_upload_handler = editor.getParam('images_upload_handler', undefined, 'function'); + axupimgs.images_upload_base_path = editor.getParam('images_upload_base_path', '', 'string'); + axupimgs.axupimgs_filetype = editor.getParam('axupimgs_filetype', '.png,.gif,.jpg,.jpeg', 'string'); + axupimgs.res=[]; + var openDialog = function() { + return editor.windowManager.openUrl({ + title: pluginName, + size: 'large', + url:iframe1, + buttons: [ + { + type: 'cancel', + text: 'Close' + }, + { + type: 'custom', + text: 'Save', + name: 'save', + primary: true + }, + ], + onAction: function (api, details) { + switch (details.name) { + case 'save': + var html = ''; + var imgs = axupimgs.res; + var len = imgs.length; + for(let i=0;i'; + } + } + editor.insertContent(html); + axupimgs.res=[]; + api.close(); + break; + default: + break; + } + + } + }); + }; + + editor.ui.registry.getAll().icons.axupimgs || editor.ui.registry.addIcon('axupimgs',''); + + editor.ui.registry.addButton('axupimgs', { + icon: 'axupimgs', + tooltip: pluginName, + onAction: function() { + openDialog(); + } + }); + editor.ui.registry.addMenuItem('axupimgs', { + icon: 'axupimgs', + text: '图片批量上传...', + onAction: function() { + openDialog(); + } + }); + return { + getMetadata: function() { + return { + name: pluginName, + url: "http://tinymce.ax-z.cn/more-plugins/axupimgs.php", + }; + } + }; +}); diff --git a/src/assets/default_avatar.png b/src/assets/default_avatar.png new file mode 100644 index 0000000..11161cf Binary files /dev/null and b/src/assets/default_avatar.png differ diff --git a/src/assets/home/coffee.png b/src/assets/home/coffee.png new file mode 100644 index 0000000..91fe68f Binary files /dev/null and b/src/assets/home/coffee.png differ diff --git a/src/assets/home/home.png b/src/assets/home/home.png new file mode 100644 index 0000000..3efece2 Binary files /dev/null and b/src/assets/home/home.png differ diff --git a/src/assets/home/home1.png b/src/assets/home/home1.png new file mode 100644 index 0000000..057c601 Binary files /dev/null and b/src/assets/home/home1.png differ diff --git a/src/assets/home/home2.png b/src/assets/home/home2.png new file mode 100644 index 0000000..9e7783d Binary files /dev/null and b/src/assets/home/home2.png differ diff --git a/src/assets/home/home3.png b/src/assets/home/home3.png new file mode 100644 index 0000000..bf119af Binary files /dev/null and b/src/assets/home/home3.png differ diff --git a/src/assets/home/home4.png b/src/assets/home/home4.png new file mode 100644 index 0000000..932d99e Binary files /dev/null and b/src/assets/home/home4.png differ diff --git a/src/assets/kylogo.png b/src/assets/kylogo.png new file mode 100644 index 0000000..e318340 Binary files /dev/null and b/src/assets/kylogo.png differ diff --git a/src/assets/logo.svg b/src/assets/logo.svg new file mode 100644 index 0000000..7565660 --- /dev/null +++ b/src/assets/logo.svg @@ -0,0 +1 @@ + diff --git a/src/assets/styles/echartsEditor.scss b/src/assets/styles/echartsEditor.scss new file mode 100644 index 0000000..f5c3696 --- /dev/null +++ b/src/assets/styles/echartsEditor.scss @@ -0,0 +1,144 @@ +* { + margin: 0; + padding: 0; + list-style: none; + box-sizing: border-box; +} + + +/* ==============X轴/Y轴区域样式=============*/ +.box-card-h { + height: 390px !important; +} +.box-card::-webkit-scrollbar { + width: 6px; +} + +// 滚动条轨道 +.box-card::-webkit-scrollbar-track { + background: rgb(239, 239, 239); + border-radius: 2px; +} + +// 小滑块 +.box-card::-webkit-scrollbar-thumb { + background: rgba(80, 81, 82, 0.29); + border-radius: 10px; +} +.box-card { + font-size: 15px; + height: 350px; + overflow-y: auto; + + .el-card__body { + padding: 15px; + } + + .x-y-axis { + margin-bottom: 10px; + } + + .list-group { + height: 100%; + } + + .cards { + margin-bottom: 10px; + + span:last-child { + color: #2a99ff; + } + + .update-color { + display: flex; + align-items: center; + justify-content: space-around; + > span{ + white-space: pre + } + + } + } + + .card-active { + outline: none; /* 隐藏默认的蓝色外边框 */ + box-shadow: 0 0 5px blue; /* 添加阴影效果,颜色为蓝色 */ + } + + .x-y-cards { + .el-card__body { + display: flex; + justify-content: space-around; + align-items: center; + height: 50px; + } + + .cards-right { + display: flex; + align-items: center; + justify-content: flex-end; + + > span:first-child { + color: #2a99ff; + } + } + } +} +//扩大拖拽区域 +.drag-block { + height: 329px; +} +.red-bgc { + background-color: red; +} + +.yellow-bgc { + background-color: yellow; +} + +/* ==============基础设置样式=============*/ +.basic-setup { + font-weight: bold; + font-size: 18px; + margin-bottom: 10px; +} +.setting { + display: flex; + flex-direction: column; + margin-bottom: 10px; + + .setting-title { + font-weight: bold; + font-size: 16px; + margin-bottom: 5px; + } + + .setting-item { + margin-bottom: 10px; + } +} +/* ==============高级设置样式=============*/ +.advanced-setting{ + .el-form-item { + display: block; + + .el-form-item__label { + font-weight: bold; + font-size: 18px; + } + + .el-form-item__content { + display: flex; + flex-direction: column; + align-items: flex-start; + font-size: 15px; + } + } +} +/* ==============echarts样式=============*/ +#container { + box-sizing: border-box; + height: 450px; + width: 80%; + margin: 0 auto; +} diff --git a/src/assets/styles/index.scss b/src/assets/styles/index.scss new file mode 100644 index 0000000..9fa5a86 --- /dev/null +++ b/src/assets/styles/index.scss @@ -0,0 +1,594 @@ +* { + margin: 0; + padding: 0; + list-style: none; + box-sizing: border-box; +} + +a { + text-decoration: none; + color: #333; +} + +html, body, #app, .el-container, .el-aside, .el-main { + height: 100%; +} + +.el-breadcrumb__item { + line-height: 65px; +} + +.el-main { + background: #EFEFEF; + padding: 0 0 0 18px; + position: fixed; + left: 200px; + transition: left ease 0.15s; + margin-left: 0; + transition: margin-left .15s; + width: calc(100vw - 200px); + + &::-webkit-scrollbar { + width: 6px; + } + + // 滚动条轨道 + &::-webkit-scrollbar-track { + background: rgb(239, 239, 239); + border-radius: 2px; + } + + // 小滑块 + &::-webkit-scrollbar-thumb { + background: rgba(80, 81, 82, 0.29); + border-radius: 10px; + } +} + +.main-collapse { + left: 64px; + width: calc(100vw - 64px); +} + +.el-aside { + //box-shadow: 4px 0 2px 1px rgb(171, 167, 167); + overflow: hidden; + width: 200px; + -webkit-transition: width .15s; + transition: width 0.15s; + position: fixed; + top: 0; + bottom: 0; + left: 0; + //z-index: 1001; +} + +.el-dialog { + border-radius: 12px !important; + border: none; + + .el-dialog__header { + border-top-left-radius: 12px; + border-top-right-radius: 12px; + // background-color: #262626; + margin: 0; + // .el-dialog__title{ + // color: white; + // } + } +} + +.table-header-btn { + display: flex; + justify-content: flex-start; + align-items: center; + margin-bottom: 10px; +} + +.el-dialog__body { + padding: 10px 20px; +} + +.stateIcon { + margin-top: 9px; + margin-right: 7px; + display: block; + width: 8px; + height: 8px; + border-radius: 4px; + opacity: 1; +} + +.query-form { + //margin-left: 14px; + margin-top: 15px; + + .el-tag__content { + font-size: 14px; + } + + .el-form-item { + //display: flex; + //align-items: center; + margin-right: 18px; + } + + .el-form-item__label { + font-weight: 700; + } + + .el-button { + font-size: 13px; + } + + .el-input { + width: 280px; + opacity: 1; + } +} + + +.query-btn { + margin-bottom: 10px; + + .el-button { + font-size: 13px; + } +} + + +.table { + //margin-top: 15px; + //margin-bottom: 20px; + .el-tag { + .el-tag__content { + font-size: 13px; + } + } + + .el-table { + border: none; + } + + thead .el-table-column--selection .cell { + display: none; + } + + .el-table__header-wrapper { + border-bottom: 1px solid #D1D4D6; + + .el-table__header { + .cell { + font-size: 16px; + font-family: DengXian-Bold, DengXian; + color: #333333; + } + } + } + + +} + +.dialog-form { + .el-form-item { + flex-direction: column; + margin-bottom: 10px; + + .el-form-item__content { + .el-select { + flex-grow: 1; + } + } + + .el-form-item__label { + justify-content: flex-start; + } + } +} + +.custom-dialog { + :deep .el-dialog__header { + padding: 10px 20px; + + .el-dialog__title { + font-size: 17px; + } + + .el-dialog__headerbtn { + top: 15px; + + .i { + font-size: large; + } + } + } + + :deep .el-dialog__footer { + padding: 10px 20px; + } +} + +//============node节点样式============ +.node-error-state { + .node-body { + box-shadow: 0px 0px 5px 0px #F56C6C !important; + } +} + +.node-error { + position: absolute; + right: -40px; + top: 20px; + font-size: 25px; + color: #F56C6C; +} + +.node-footer { + position: relative; + + .branch-merge { + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + font-size: 12px; + width: 30px; + height: 30px; + border-radius: 50%; + left: 0; + right: 0; + margin: -20px auto 0; + background: #fff; + box-shadow: 0 0 5px 0 #d8d8d8; + z-index: 0; + position: relative; + } + + .btn { + width: 100%; + display: flex; + padding: 20px 0 32px; + justify-content: center; + z-index: 0; + position: relative; + + .el-icon { + width: 1.4em; + height: 1.4em; + } + } + + .el-button { + //height: 32px; + } + + &::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + //z-index: -1; + margin: auto; + width: 2px; + height: 100%; + background-color: #000000; + } +} + +//el-dialog的样式类名 +.border { + .el-dialog__header { + border-bottom: 1px solid #e8e8e8; + } + + .el-dialog__footer { + border-top: 1px solid #e8e8e8; + } +} + +.layout { + display: flex; + justify-content: space-around; + + .scrollbar-user { + height: calc(100vh - 250px) !important; + overflow: auto !important; + } + + .scrollbar-dict { + border: 1px solid #ebeef5; + //min-height: 30vh; + //height: 60vh; + height: calc(100vh - 300px); + overflow-y: auto; + overflow-x: hidden; + + &::-webkit-scrollbar { + width: 6px; + height: 6px; + } + + // 滚动条轨道 + &::-webkit-scrollbar-track { + background: rgb(239, 239, 239); + border-radius: 2px; + } + + // 小滑块 + &::-webkit-scrollbar-thumb { + background: rgba(80, 81, 82, 0.29); + border-radius: 10px; + } + + .el-tree--highlight-current + .el-tree-node.is-current + > .el-tree-node__content { + // 设置颜色 + background-color: rgba(135, 206, 235, 0.2); // 透明度为0.2的skyblue,作者比较喜欢的颜色 + color: #409eff; // 节点的字体颜色 + font-weight: bold; // 字体加粗 + } + } + + .layout-left { + width: 30%; + //border: 1px solid #ebeef5; + padding: 10px; + margin-top: 5px; + + .dict-tree { + width: 100%; + display: flex; + justify-content: space-between; + //:deep .el-button{ + // //border: 1px solid; + // background-color: #fff; + //} + .left-type { + margin-right: 20px; + font-size: 12px; + color: #999; + } + } + } + + .layout-right { + //width: 70%; + //border: 1px solid #ebeef5; + margin-left: 10px; + padding: 0 10px; + width: 80%; + border: none; + } +} + +.top-dialog { + .el-overlay-dialog { + left: 0 !important; + } +} + +.el-overlay-dialog { + left: 200px; +} + +//.el-overlay-dialog { +// left: 200px !important; +//} +//放大缩小按钮上外边距 +.scale { + margin-top: 10px; + //z-index: 666; + //position: static; + //top: -20px; +} + + +.el-overlay-dialog::-webkit-scrollbar, .scrollbar-dict::-webkit-scrollbar { + width: 6px; + height: 6px; +} + +// 滚动条轨道 +.el-overlay-dialog::-webkit-scrollbar-track, .scrollbar-dict::-webkit-scrollbar-track { + background: rgb(239, 239, 239); + border-radius: 2px; +} + +// 小滑块 +.el-overlay-dialog::-webkit-scrollbar-thumb, .scrollbar-dict::-webkit-scrollbar-thumb { + background: rgba(80, 81, 82, 0.29); + border-radius: 10px; +} + +.nowrap { + white-space: pre +} +.el-empty__description { + margin-top: 0!important; +} +//SvgIcon组件的样式 +.home-icon { + width: 4em; + height: 4em; + vertical-align: -0.15em; + fill: currentColor; + overflow: hidden; + margin-right: 5px; +} +.oran-icon{ + width: 1em; + height: 1em; + margin-right: 4px; + vertical-align: -0.21em; + +} +.svg-icon { + width: 1.2em; + height: 1.2em; + vertical-align: -0.15em; + fill: currentColor; + overflow: hidden; + margin-right: 5px; +} + +.er-icon { + cursor: pointer; + width: 1.2em; + height: 1.2em; + vertical-align: -0.15em; + fill: currentColor; + overflow: hidden; + margin-right: 5px; + + &:hover { + border: 1px solid darkgray; + } +} + +.disabled-icon { + width: 1.2em; + height: 1.2em; + vertical-align: -0.15em; + fill: currentColor; + overflow: hidden; + margin-right: 5px; +} + +.disabled-icon:hover { + cursor: not-allowed; +} + +.black-icon { + width: 1.2em; + height: 1.2em; + vertical-align: -0.15em; + fill: #383737; + overflow: hidden; + margin-right: 5px; +} + +.fen-icon { + width: 1.8em; + height: 1.7em; +} +.home-time{ + width: 1.4em; + height: 1.4em; + margin-right: 5px; +} +.middle-icon { + width: 1.4em; + height: 1.4em; + margin-right: 5px; +} + +.close-icon { + width: 1.1em; + height: 1.1em; + margin-left: 5px; + vertical-align: -0.21em; +} + +.tag:hover { + color: #418DFF; + + .close-icon { + fill: #418DFF; + } +} + +.active { + .close-icon { + fill: #BEA266; + } +} + +.svg-icon:hover { + cursor: pointer; + //border: 1px solid #E9E9E9; +} + +//IconSelect组件的样式 +.icon-select { + width: 100%; + + .icon-name { + width: 110px; + overflow: hidden; //超出的文本隐藏 + text-overflow: ellipsis; //溢出用省略号显示 + white-space: nowrap; //溢出不换行 + } + + .el-popper { + .el-select-dropdown { + max-width: 592px !important; + + .el-select-dropdown__list { + display: flex !important; + flex-wrap: wrap; + + .el-select-dropdown__item { + display: flex; + align-items: center; + justify-content: flex-start; + width: 148px; + padding: 0 0 0 5px; + } + } + } + } +} + +.query-form { + .el-form-item__content { + .el-select__wrapper { + width: 200px; + } + } + +} + +.el-pagination { + margin-top: 10px; +} + +// 操作页面底部按钮 +.oper-page-btn { + position: fixed; + top: 135px; + right: 15px; + z-index: 5; +} + +.approval-record { + //padding-top: 10px; + padding-bottom: 30px; + position: relative; + .approval-title { + display: flex; + align-items: center; + //justify-content: space-between; + + .diagram { + display: flex; + align-items: center; + float: right; + + .base-title { + margin-left: 10px; + margin-right: 10px; + } + + //.el-switch { + // margin-left: 15px; + //} + } + } + + .process { + position: relative; + } +} diff --git a/src/assets/styles/sidebar.scss b/src/assets/styles/sidebar.scss new file mode 100644 index 0000000..8627f0a --- /dev/null +++ b/src/assets/styles/sidebar.scss @@ -0,0 +1,53 @@ +.el-side { + border-radius: 10px; +} +.logo { + height: 65px; + background-color: #BEA266; + color: #ffffff; + font-weight: bold; + font-size: 26px; + display: flex; + justify-content: center; + align-items: center; + box-sizing: border-box; + padding: 10px; + & > img { + object-fit: scale-down; + width: 100%; + height: 40px; + } +} +.port-link{ + display: block; + width: 200px; + height: 50px; + margin-left: -40px; + padding-left: 40px; +} +.el-menu { + border: none !important; + .el-sub-menu { + .el-sub-menu__title { + display: block; + font-size: 14px; + &:hover{ + //background-color: #1F315F; + } + } + + .el-menu-item { + font-size: 14px; + justify-content: flex-start; + align-items: center; + &:hover { + //background-color: #373350 !important; + //color: #EDC49A; + } + } + .el-menu-item.is-active { + background: rgba(190,162,102,0.5); + //background-color: #373350 !important; + } + } +} diff --git a/src/assets/svg/account.svg b/src/assets/svg/account.svg new file mode 100644 index 0000000..1d55bd9 --- /dev/null +++ b/src/assets/svg/account.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/actual_size.svg b/src/assets/svg/actual_size.svg new file mode 100644 index 0000000..e94b45e --- /dev/null +++ b/src/assets/svg/actual_size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/bar_chart.svg b/src/assets/svg/bar_chart.svg new file mode 100644 index 0000000..f57d149 --- /dev/null +++ b/src/assets/svg/bar_chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/biaodan.svg b/src/assets/svg/biaodan.svg new file mode 100644 index 0000000..c172b4c --- /dev/null +++ b/src/assets/svg/biaodan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/bumenguanli.svg b/src/assets/svg/bumenguanli.svg new file mode 100644 index 0000000..ff2b8db --- /dev/null +++ b/src/assets/svg/bumenguanli.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/canshu.svg b/src/assets/svg/canshu.svg new file mode 100644 index 0000000..8611563 --- /dev/null +++ b/src/assets/svg/canshu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/caozuorizhi.svg b/src/assets/svg/caozuorizhi.svg new file mode 100644 index 0000000..ffddd9f --- /dev/null +++ b/src/assets/svg/caozuorizhi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/chart.svg b/src/assets/svg/chart.svg new file mode 100644 index 0000000..d6dc451 --- /dev/null +++ b/src/assets/svg/chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/chaxun.svg b/src/assets/svg/chaxun.svg new file mode 100644 index 0000000..c6a4218 --- /dev/null +++ b/src/assets/svg/chaxun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/clear.svg b/src/assets/svg/clear.svg new file mode 100644 index 0000000..58d2ba1 --- /dev/null +++ b/src/assets/svg/clear.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/close.svg b/src/assets/svg/close.svg new file mode 100644 index 0000000..5933fdb --- /dev/null +++ b/src/assets/svg/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/copy.svg b/src/assets/svg/copy.svg new file mode 100644 index 0000000..f70976f --- /dev/null +++ b/src/assets/svg/copy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/daimashengcheng.svg b/src/assets/svg/daimashengcheng.svg new file mode 100644 index 0000000..5732d0b --- /dev/null +++ b/src/assets/svg/daimashengcheng.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/data.svg b/src/assets/svg/data.svg new file mode 100644 index 0000000..68ade62 --- /dev/null +++ b/src/assets/svg/data.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/data_board.svg b/src/assets/svg/data_board.svg new file mode 100644 index 0000000..e429712 --- /dev/null +++ b/src/assets/svg/data_board.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/data_mining.svg b/src/assets/svg/data_mining.svg new file mode 100644 index 0000000..2f18ebf --- /dev/null +++ b/src/assets/svg/data_mining.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/datayuan.svg b/src/assets/svg/datayuan.svg new file mode 100644 index 0000000..168c634 --- /dev/null +++ b/src/assets/svg/datayuan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/device_develop.svg b/src/assets/svg/device_develop.svg new file mode 100644 index 0000000..b8b41ef --- /dev/null +++ b/src/assets/svg/device_develop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/dingshirenwu.svg b/src/assets/svg/dingshirenwu.svg new file mode 100644 index 0000000..f61dc55 --- /dev/null +++ b/src/assets/svg/dingshirenwu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/fabu.svg b/src/assets/svg/fabu.svg new file mode 100644 index 0000000..eed0254 --- /dev/null +++ b/src/assets/svg/fabu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/fee.svg b/src/assets/svg/fee.svg new file mode 100644 index 0000000..b7150ff --- /dev/null +++ b/src/assets/svg/fee.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/fee_share.svg b/src/assets/svg/fee_share.svg new file mode 100644 index 0000000..e8d6c11 --- /dev/null +++ b/src/assets/svg/fee_share.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/fenzhi.svg b/src/assets/svg/fenzhi.svg new file mode 100644 index 0000000..0759fb8 --- /dev/null +++ b/src/assets/svg/fenzhi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/filing.svg b/src/assets/svg/filing.svg new file mode 100644 index 0000000..054af3b --- /dev/null +++ b/src/assets/svg/filing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/fit.svg b/src/assets/svg/fit.svg new file mode 100644 index 0000000..2ebc313 --- /dev/null +++ b/src/assets/svg/fit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/group_manage.svg b/src/assets/svg/group_manage.svg new file mode 100644 index 0000000..901e220 --- /dev/null +++ b/src/assets/svg/group_manage.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/guanlidenglurizhi.svg b/src/assets/svg/guanlidenglurizhi.svg new file mode 100644 index 0000000..8cf6f68 --- /dev/null +++ b/src/assets/svg/guanlidenglurizhi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/home-time.svg b/src/assets/svg/home-time.svg new file mode 100644 index 0000000..c4268da --- /dev/null +++ b/src/assets/svg/home-time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/home.svg b/src/assets/svg/home.svg new file mode 100644 index 0000000..611af35 --- /dev/null +++ b/src/assets/svg/home.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/implementation.svg b/src/assets/svg/implementation.svg new file mode 100644 index 0000000..16d645a --- /dev/null +++ b/src/assets/svg/implementation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/initiate.svg b/src/assets/svg/initiate.svg new file mode 100644 index 0000000..acc0953 --- /dev/null +++ b/src/assets/svg/initiate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/initiation.svg b/src/assets/svg/initiation.svg new file mode 100644 index 0000000..3dc5a33 --- /dev/null +++ b/src/assets/svg/initiation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/jiaoyanguize.svg b/src/assets/svg/jiaoyanguize.svg new file mode 100644 index 0000000..ef1bbd0 --- /dev/null +++ b/src/assets/svg/jiaoyanguize.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/jiekou.svg b/src/assets/svg/jiekou.svg new file mode 100644 index 0000000..0af3177 --- /dev/null +++ b/src/assets/svg/jiekou.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/me.svg b/src/assets/svg/me.svg new file mode 100644 index 0000000..444b036 --- /dev/null +++ b/src/assets/svg/me.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/mokuaiguanli.svg b/src/assets/svg/mokuaiguanli.svg new file mode 100644 index 0000000..b1b393b --- /dev/null +++ b/src/assets/svg/mokuaiguanli.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/more.svg b/src/assets/svg/more.svg new file mode 100644 index 0000000..ebe8c8f --- /dev/null +++ b/src/assets/svg/more.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/my_initiated.svg b/src/assets/svg/my_initiated.svg new file mode 100644 index 0000000..db32577 --- /dev/null +++ b/src/assets/svg/my_initiated.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/oran.svg b/src/assets/svg/oran.svg new file mode 100644 index 0000000..fd06b29 --- /dev/null +++ b/src/assets/svg/oran.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/paste.svg b/src/assets/svg/paste.svg new file mode 100644 index 0000000..93357ea --- /dev/null +++ b/src/assets/svg/paste.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/project.svg b/src/assets/svg/project.svg new file mode 100644 index 0000000..666f388 --- /dev/null +++ b/src/assets/svg/project.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/project_requirement.svg b/src/assets/svg/project_requirement.svg new file mode 100644 index 0000000..0b597a6 --- /dev/null +++ b/src/assets/svg/project_requirement.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/quanxianzu.svg b/src/assets/svg/quanxianzu.svg new file mode 100644 index 0000000..06d00bb --- /dev/null +++ b/src/assets/svg/quanxianzu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/query.svg b/src/assets/svg/query.svg new file mode 100644 index 0000000..a694722 --- /dev/null +++ b/src/assets/svg/query.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/redo.svg b/src/assets/svg/redo.svg new file mode 100644 index 0000000..ce40cf7 --- /dev/null +++ b/src/assets/svg/redo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/requirement.svg b/src/assets/svg/requirement.svg new file mode 100644 index 0000000..e1d1a11 --- /dev/null +++ b/src/assets/svg/requirement.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/research_fund.svg b/src/assets/svg/research_fund.svg new file mode 100644 index 0000000..1c7ac18 --- /dev/null +++ b/src/assets/svg/research_fund.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/selector.svg b/src/assets/svg/selector.svg new file mode 100644 index 0000000..aaae9cb --- /dev/null +++ b/src/assets/svg/selector.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/setting.svg b/src/assets/svg/setting.svg new file mode 100644 index 0000000..2faed2a --- /dev/null +++ b/src/assets/svg/setting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/show.svg b/src/assets/svg/show.svg new file mode 100644 index 0000000..47d79f3 --- /dev/null +++ b/src/assets/svg/show.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/shujujiankong.svg b/src/assets/svg/shujujiankong.svg new file mode 100644 index 0000000..092d746 --- /dev/null +++ b/src/assets/svg/shujujiankong.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/shujuwajue.svg b/src/assets/svg/shujuwajue.svg new file mode 100644 index 0000000..f410ccf --- /dev/null +++ b/src/assets/svg/shujuwajue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/shujuyuan.svg b/src/assets/svg/shujuyuan.svg new file mode 100644 index 0000000..77c9e60 --- /dev/null +++ b/src/assets/svg/shujuyuan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/special_fund.svg b/src/assets/svg/special_fund.svg new file mode 100644 index 0000000..c9c74b9 --- /dev/null +++ b/src/assets/svg/special_fund.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/sql.svg b/src/assets/svg/sql.svg new file mode 100644 index 0000000..0b78318 --- /dev/null +++ b/src/assets/svg/sql.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/sso.svg b/src/assets/svg/sso.svg new file mode 100644 index 0000000..df0fdcc --- /dev/null +++ b/src/assets/svg/sso.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/summary.svg b/src/assets/svg/summary.svg new file mode 100644 index 0000000..cc0ef0a --- /dev/null +++ b/src/assets/svg/summary.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/table.svg b/src/assets/svg/table.svg new file mode 100644 index 0000000..b927113 --- /dev/null +++ b/src/assets/svg/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/todolist.svg b/src/assets/svg/todolist.svg new file mode 100644 index 0000000..e545e13 --- /dev/null +++ b/src/assets/svg/todolist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/tool.svg b/src/assets/svg/tool.svg new file mode 100644 index 0000000..dbefbcf --- /dev/null +++ b/src/assets/svg/tool.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/tuoputu.svg b/src/assets/svg/tuoputu.svg new file mode 100644 index 0000000..42196b8 --- /dev/null +++ b/src/assets/svg/tuoputu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/undo.svg b/src/assets/svg/undo.svg new file mode 100644 index 0000000..7eece09 --- /dev/null +++ b/src/assets/svg/undo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/xiaoyanjieguo.svg b/src/assets/svg/xiaoyanjieguo.svg new file mode 100644 index 0000000..9282464 --- /dev/null +++ b/src/assets/svg/xiaoyanjieguo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/xitongjiankong.svg b/src/assets/svg/xitongjiankong.svg new file mode 100644 index 0000000..7a0f406 --- /dev/null +++ b/src/assets/svg/xitongjiankong.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/xitongjiekou.svg b/src/assets/svg/xitongjiekou.svg new file mode 100644 index 0000000..6a7366c --- /dev/null +++ b/src/assets/svg/xitongjiekou.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/yanshi.svg b/src/assets/svg/yanshi.svg new file mode 100644 index 0000000..89fff05 --- /dev/null +++ b/src/assets/svg/yanshi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/zaixianyonghu.svg b/src/assets/svg/zaixianyonghu.svg new file mode 100644 index 0000000..ef6d992 --- /dev/null +++ b/src/assets/svg/zaixianyonghu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/zidianpeizhi.svg b/src/assets/svg/zidianpeizhi.svg new file mode 100644 index 0000000..09613c1 --- /dev/null +++ b/src/assets/svg/zidianpeizhi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/zoom-in.svg b/src/assets/svg/zoom-in.svg new file mode 100644 index 0000000..56f5b3e --- /dev/null +++ b/src/assets/svg/zoom-in.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/zoom-out.svg b/src/assets/svg/zoom-out.svg new file mode 100644 index 0000000..d31d616 --- /dev/null +++ b/src/assets/svg/zoom-out.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/zu1773.svg b/src/assets/svg/zu1773.svg new file mode 100644 index 0000000..9a071fc --- /dev/null +++ b/src/assets/svg/zu1773.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/AttachmentUpload.vue b/src/components/AttachmentUpload.vue new file mode 100644 index 0000000..282185a --- /dev/null +++ b/src/components/AttachmentUpload.vue @@ -0,0 +1,554 @@ + + + + + + diff --git a/src/components/DetailComponent/AllocationSummaryDetail.vue b/src/components/DetailComponent/AllocationSummaryDetail.vue new file mode 100644 index 0000000..87a6522 --- /dev/null +++ b/src/components/DetailComponent/AllocationSummaryDetail.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/components/DetailComponent/ApprovalDetail.vue b/src/components/DetailComponent/ApprovalDetail.vue new file mode 100644 index 0000000..528b72c --- /dev/null +++ b/src/components/DetailComponent/ApprovalDetail.vue @@ -0,0 +1,481 @@ + + + + + diff --git a/src/components/DetailComponent/CollectionDetail.vue b/src/components/DetailComponent/CollectionDetail.vue new file mode 100644 index 0000000..7a3275c --- /dev/null +++ b/src/components/DetailComponent/CollectionDetail.vue @@ -0,0 +1,208 @@ + + + + + diff --git a/src/components/DetailComponent/CompanyPicker.vue b/src/components/DetailComponent/CompanyPicker.vue new file mode 100644 index 0000000..002e771 --- /dev/null +++ b/src/components/DetailComponent/CompanyPicker.vue @@ -0,0 +1,424 @@ + + + + + diff --git a/src/components/DetailComponent/ExpenseDetail.vue b/src/components/DetailComponent/ExpenseDetail.vue new file mode 100644 index 0000000..1518f1b --- /dev/null +++ b/src/components/DetailComponent/ExpenseDetail.vue @@ -0,0 +1,255 @@ + + + + diff --git a/src/components/DetailComponent/FileComponent.vue b/src/components/DetailComponent/FileComponent.vue new file mode 100644 index 0000000..68dc0ff --- /dev/null +++ b/src/components/DetailComponent/FileComponent.vue @@ -0,0 +1,210 @@ + + + + + diff --git a/src/components/DetailComponent/Opinion.vue b/src/components/DetailComponent/Opinion.vue new file mode 100644 index 0000000..2a86413 --- /dev/null +++ b/src/components/DetailComponent/Opinion.vue @@ -0,0 +1,234 @@ + + + + + diff --git a/src/components/DetailComponent/ProjectApply.vue b/src/components/DetailComponent/ProjectApply.vue new file mode 100644 index 0000000..1796d7b --- /dev/null +++ b/src/components/DetailComponent/ProjectApply.vue @@ -0,0 +1,708 @@ + + + + + diff --git a/src/components/DetailComponent/ProjectAttachment.vue b/src/components/DetailComponent/ProjectAttachment.vue new file mode 100644 index 0000000..364a267 --- /dev/null +++ b/src/components/DetailComponent/ProjectAttachment.vue @@ -0,0 +1,224 @@ + + + + + diff --git a/src/components/DetailComponent/SpecialFundDetail.vue b/src/components/DetailComponent/SpecialFundDetail.vue new file mode 100644 index 0000000..b807804 --- /dev/null +++ b/src/components/DetailComponent/SpecialFundDetail.vue @@ -0,0 +1,275 @@ + + + + + diff --git a/src/components/DetailComponent/SummaryDetail.vue b/src/components/DetailComponent/SummaryDetail.vue new file mode 100644 index 0000000..bb6b043 --- /dev/null +++ b/src/components/DetailComponent/SummaryDetail.vue @@ -0,0 +1,342 @@ + + + + + diff --git a/src/components/DetailComponent/singleFileComponent.vue b/src/components/DetailComponent/singleFileComponent.vue new file mode 100644 index 0000000..3f0372d --- /dev/null +++ b/src/components/DetailComponent/singleFileComponent.vue @@ -0,0 +1,209 @@ + + + + + diff --git a/src/components/FileUpload.vue b/src/components/FileUpload.vue new file mode 100644 index 0000000..52df26b --- /dev/null +++ b/src/components/FileUpload.vue @@ -0,0 +1,117 @@ + + + + + diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue new file mode 100644 index 0000000..0a0988b --- /dev/null +++ b/src/components/HelloWorld.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/src/components/ImportExcel.vue b/src/components/ImportExcel.vue new file mode 100644 index 0000000..f5f2bbe --- /dev/null +++ b/src/components/ImportExcel.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/src/components/NameCircle.vue b/src/components/NameCircle.vue new file mode 100644 index 0000000..13efafc --- /dev/null +++ b/src/components/NameCircle.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/src/components/ParentView.vue b/src/components/ParentView.vue new file mode 100644 index 0000000..ba32c22 --- /dev/null +++ b/src/components/ParentView.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/src/components/PointTag.vue b/src/components/PointTag.vue new file mode 100644 index 0000000..f4858b2 --- /dev/null +++ b/src/components/PointTag.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/src/components/PopoverDelete.vue b/src/components/PopoverDelete.vue new file mode 100644 index 0000000..ccd97e7 --- /dev/null +++ b/src/components/PopoverDelete.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/src/components/SearchFilesByTag.vue b/src/components/SearchFilesByTag.vue new file mode 100644 index 0000000..44200da --- /dev/null +++ b/src/components/SearchFilesByTag.vue @@ -0,0 +1,215 @@ + + + + + diff --git a/src/components/SelectPreProcess.vue b/src/components/SelectPreProcess.vue new file mode 100644 index 0000000..2059582 --- /dev/null +++ b/src/components/SelectPreProcess.vue @@ -0,0 +1,191 @@ + + + + + diff --git a/src/components/Tag.vue b/src/components/Tag.vue new file mode 100644 index 0000000..7990357 --- /dev/null +++ b/src/components/Tag.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/src/components/TagAndFileUpload.vue b/src/components/TagAndFileUpload.vue new file mode 100644 index 0000000..fde2db7 --- /dev/null +++ b/src/components/TagAndFileUpload.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/src/components/TheWelcome.vue b/src/components/TheWelcome.vue new file mode 100644 index 0000000..5e64625 --- /dev/null +++ b/src/components/TheWelcome.vue @@ -0,0 +1,86 @@ + + + diff --git a/src/components/Tinymce.vue b/src/components/Tinymce.vue new file mode 100644 index 0000000..f2b612a --- /dev/null +++ b/src/components/Tinymce.vue @@ -0,0 +1,258 @@ + + + + + diff --git a/src/components/Tooltip.vue b/src/components/Tooltip.vue new file mode 100644 index 0000000..9882337 --- /dev/null +++ b/src/components/Tooltip.vue @@ -0,0 +1,63 @@ + + + diff --git a/src/components/WelcomeItem.vue b/src/components/WelcomeItem.vue new file mode 100644 index 0000000..a5eca70 --- /dev/null +++ b/src/components/WelcomeItem.vue @@ -0,0 +1,85 @@ + + + diff --git a/src/components/baseTitle/index.vue b/src/components/baseTitle/index.vue new file mode 100644 index 0000000..4dad714 --- /dev/null +++ b/src/components/baseTitle/index.vue @@ -0,0 +1,33 @@ + + + + + \ No newline at end of file diff --git a/src/components/codeEdit/JavaCodeEdit.vue b/src/components/codeEdit/JavaCodeEdit.vue new file mode 100644 index 0000000..b4038b8 --- /dev/null +++ b/src/components/codeEdit/JavaCodeEdit.vue @@ -0,0 +1,69 @@ + + + diff --git a/src/components/codeEdit/JsCodeEdit.vue b/src/components/codeEdit/JsCodeEdit.vue new file mode 100644 index 0000000..e5963aa --- /dev/null +++ b/src/components/codeEdit/JsCodeEdit.vue @@ -0,0 +1,48 @@ + + + diff --git a/src/components/codeEdit/SqlCodeEdit.vue b/src/components/codeEdit/SqlCodeEdit.vue new file mode 100644 index 0000000..1e85b48 --- /dev/null +++ b/src/components/codeEdit/SqlCodeEdit.vue @@ -0,0 +1,83 @@ + + + + diff --git a/src/components/filePreview/DocxPreview.vue b/src/components/filePreview/DocxPreview.vue new file mode 100644 index 0000000..91d7686 --- /dev/null +++ b/src/components/filePreview/DocxPreview.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/src/components/filePreview/ImagePreview.vue b/src/components/filePreview/ImagePreview.vue new file mode 100644 index 0000000..663f7a6 --- /dev/null +++ b/src/components/filePreview/ImagePreview.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/src/components/filePreview/PdfPreview.vue b/src/components/filePreview/PdfPreview.vue new file mode 100644 index 0000000..a51acfd --- /dev/null +++ b/src/components/filePreview/PdfPreview.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/src/components/filePreview/PptPreview.vue b/src/components/filePreview/PptPreview.vue new file mode 100644 index 0000000..3f4cea8 --- /dev/null +++ b/src/components/filePreview/PptPreview.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/src/components/filePreview/index.vue b/src/components/filePreview/index.vue new file mode 100644 index 0000000..95065e8 --- /dev/null +++ b/src/components/filePreview/index.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/src/components/iconSelect/index.vue b/src/components/iconSelect/index.vue new file mode 100644 index 0000000..8bcf034 --- /dev/null +++ b/src/components/iconSelect/index.vue @@ -0,0 +1,33 @@ + + + diff --git a/src/components/iconSelect/requireIcons.js b/src/components/iconSelect/requireIcons.js new file mode 100644 index 0000000..9d5261f --- /dev/null +++ b/src/components/iconSelect/requireIcons.js @@ -0,0 +1,12 @@ +const iconArray=[] +const files = import.meta.glob("@/assets/svg/*.svg",{eager:true}) +for (const key of Object.entries(files)) { + let item =key[0] + const lastIndex=item.lastIndexOf("\/") + //svg图标名(带后缀svg) + item=item.substring(lastIndex+1,item.length) + //svg图标名字,剔除后缀.svg + item=item.substring(0,item.lastIndexOf("\.")) + iconArray.push(item) +} +export default iconArray diff --git a/src/components/icons/IconCommunity.vue b/src/components/icons/IconCommunity.vue new file mode 100644 index 0000000..2dc8b05 --- /dev/null +++ b/src/components/icons/IconCommunity.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconDocumentation.vue b/src/components/icons/IconDocumentation.vue new file mode 100644 index 0000000..6d4791c --- /dev/null +++ b/src/components/icons/IconDocumentation.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconEcosystem.vue b/src/components/icons/IconEcosystem.vue new file mode 100644 index 0000000..c3a4f07 --- /dev/null +++ b/src/components/icons/IconEcosystem.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconSupport.vue b/src/components/icons/IconSupport.vue new file mode 100644 index 0000000..7452834 --- /dev/null +++ b/src/components/icons/IconSupport.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconTooling.vue b/src/components/icons/IconTooling.vue new file mode 100644 index 0000000..660598d --- /dev/null +++ b/src/components/icons/IconTooling.vue @@ -0,0 +1,19 @@ + + diff --git a/src/components/organizationalStructure/CompanyDetail.vue b/src/components/organizationalStructure/CompanyDetail.vue new file mode 100644 index 0000000..05133ad --- /dev/null +++ b/src/components/organizationalStructure/CompanyDetail.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/src/components/organizationalStructure/Department.vue b/src/components/organizationalStructure/Department.vue new file mode 100644 index 0000000..bc3074b --- /dev/null +++ b/src/components/organizationalStructure/Department.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/src/components/pagination/index.vue b/src/components/pagination/index.vue new file mode 100644 index 0000000..187aebe --- /dev/null +++ b/src/components/pagination/index.vue @@ -0,0 +1,82 @@ + + + diff --git a/src/components/steps/api/index.js b/src/components/steps/api/index.js new file mode 100644 index 0000000..a6d331c --- /dev/null +++ b/src/components/steps/api/index.js @@ -0,0 +1,15 @@ +import request from '@/utils/request' + +export const getBaseInfoApi = (projectId) => { + return request({ + url: '/workflow/details/info/'+projectId, + method: 'get', + }) +} + +export const getMapProjectStateInfo = (projectId, state) => { + return request({ + url: `/workflow/details/${projectId}/${state}`, + method: 'get' + }) +} \ No newline at end of file diff --git a/src/components/steps/index.vue b/src/components/steps/index.vue new file mode 100644 index 0000000..2d305ca --- /dev/null +++ b/src/components/steps/index.vue @@ -0,0 +1,657 @@ + + + + + diff --git a/src/components/svgIcon/index.vue b/src/components/svgIcon/index.vue new file mode 100644 index 0000000..99f10ef --- /dev/null +++ b/src/components/svgIcon/index.vue @@ -0,0 +1,75 @@ + + + diff --git a/src/directives/fixedtableheight.js b/src/directives/fixedtableheight.js new file mode 100644 index 0000000..fb9fe27 --- /dev/null +++ b/src/directives/fixedtableheight.js @@ -0,0 +1,20 @@ +import { useDebounce } from "../utils/publicvoid" + +let dom +export const fixedHeight = (el, binding, vnode) => { + dom = el + // 获取相对距离 + const relativeObj = el.getBoundingClientRect() + // 获取网页高度 + const clientHeight = document.body.clientHeight + // 70为分页器高度 + el.style.height = (clientHeight - relativeObj.top - 70) + 'px' + el.style.overflow = 'auto' +} + +window.addEventListener('resize', () => { + if (dom) { + const resizeHeight = useDebounce(fixedHeight(dom), 2000, false) + resizeHeight() + } +}) \ No newline at end of file diff --git a/src/directives/permission.js b/src/directives/permission.js new file mode 100644 index 0000000..6a657ee --- /dev/null +++ b/src/directives/permission.js @@ -0,0 +1,19 @@ +import { useAuthStore } from '@/stores/userstore.js' + +export const hasPerm = (el, binding, vnode) => { + const authStore = useAuthStore() + const allPermission = "*:*:*"; //所有权限 + const { value } = binding + const permisstions = authStore.permisstions + if (value && value instanceof Array && value.length > 0) { + const permissiosFlag = value + const hasPermission = permisstions.some(permission => { + return permission === allPermission || permissiosFlag.includes(permission) || permissiosFlag.includes(allPermission) + }) + if (!hasPermission) { + el.parentNode && el.parentNode.removeChild(el) + } + } else { + throw new Error('操作权限标识应为string[]') + } +} \ No newline at end of file diff --git a/src/fvcomponents/fvCheckbox/index.vue b/src/fvcomponents/fvCheckbox/index.vue new file mode 100644 index 0000000..014fb69 --- /dev/null +++ b/src/fvcomponents/fvCheckbox/index.vue @@ -0,0 +1,41 @@ + + + + + \ No newline at end of file diff --git a/src/fvcomponents/fvForm/index.vue b/src/fvcomponents/fvForm/index.vue new file mode 100644 index 0000000..fa39e52 --- /dev/null +++ b/src/fvcomponents/fvForm/index.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/src/fvcomponents/fvPagination/index.vue b/src/fvcomponents/fvPagination/index.vue new file mode 100644 index 0000000..187aebe --- /dev/null +++ b/src/fvcomponents/fvPagination/index.vue @@ -0,0 +1,82 @@ + + + diff --git a/src/fvcomponents/fvRadio/index.vue b/src/fvcomponents/fvRadio/index.vue new file mode 100644 index 0000000..9575f2a --- /dev/null +++ b/src/fvcomponents/fvRadio/index.vue @@ -0,0 +1,48 @@ + + + + + \ No newline at end of file diff --git a/src/fvcomponents/fvSearchForm/index.vue b/src/fvcomponents/fvSearchForm/index.vue new file mode 100644 index 0000000..ef812be --- /dev/null +++ b/src/fvcomponents/fvSearchForm/index.vue @@ -0,0 +1,164 @@ + + + + + + diff --git a/src/fvcomponents/fvSelect/index.vue b/src/fvcomponents/fvSelect/index.vue new file mode 100644 index 0000000..8d668ca --- /dev/null +++ b/src/fvcomponents/fvSelect/index.vue @@ -0,0 +1,59 @@ + + + + + \ No newline at end of file diff --git a/src/fvcomponents/fvTable/index.vue b/src/fvcomponents/fvTable/index.vue new file mode 100644 index 0000000..41baf4e --- /dev/null +++ b/src/fvcomponents/fvTable/index.vue @@ -0,0 +1,345 @@ + + + + + diff --git a/src/fvcomponents/fvTableColumn/index.vue b/src/fvcomponents/fvTableColumn/index.vue new file mode 100644 index 0000000..c57c4cf --- /dev/null +++ b/src/fvcomponents/fvTableColumn/index.vue @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file diff --git a/src/layout/appmain/AppMain.vue b/src/layout/appmain/AppMain.vue new file mode 100644 index 0000000..8a56f80 --- /dev/null +++ b/src/layout/appmain/AppMain.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/src/layout/index.vue b/src/layout/index.vue new file mode 100644 index 0000000..0192176 --- /dev/null +++ b/src/layout/index.vue @@ -0,0 +1,50 @@ + + + + + \ No newline at end of file diff --git a/src/layout/navbar/BellSocket.vue b/src/layout/navbar/BellSocket.vue new file mode 100644 index 0000000..b0877d1 --- /dev/null +++ b/src/layout/navbar/BellSocket.vue @@ -0,0 +1,273 @@ + + + + + diff --git a/src/layout/navbar/Breadcrumb.vue b/src/layout/navbar/Breadcrumb.vue new file mode 100644 index 0000000..1faaff6 --- /dev/null +++ b/src/layout/navbar/Breadcrumb.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/layout/navbar/Hamburger.vue b/src/layout/navbar/Hamburger.vue new file mode 100644 index 0000000..9daaeba --- /dev/null +++ b/src/layout/navbar/Hamburger.vue @@ -0,0 +1,37 @@ + + + + + \ No newline at end of file diff --git a/src/layout/navbar/index.vue b/src/layout/navbar/index.vue new file mode 100644 index 0000000..643b8c8 --- /dev/null +++ b/src/layout/navbar/index.vue @@ -0,0 +1,289 @@ + + + + + diff --git a/src/layout/siderbar/MenuItem.vue b/src/layout/siderbar/MenuItem.vue new file mode 100644 index 0000000..f47654d --- /dev/null +++ b/src/layout/siderbar/MenuItem.vue @@ -0,0 +1,71 @@ + + + + + \ No newline at end of file diff --git a/src/layout/siderbar/index.vue b/src/layout/siderbar/index.vue new file mode 100644 index 0000000..0d5e453 --- /dev/null +++ b/src/layout/siderbar/index.vue @@ -0,0 +1,54 @@ + + + diff --git a/src/layout/tagsview/index.vue b/src/layout/tagsview/index.vue new file mode 100644 index 0000000..d192170 --- /dev/null +++ b/src/layout/tagsview/index.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..67b4862 --- /dev/null +++ b/src/main.js @@ -0,0 +1,36 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' + +import App from './App.vue' +import router from './router' + +import ElementPlus from 'element-plus' +import zhCn from 'element-plus/es/locale/lang/zh-cn' + +import {hasPerm } from '@/directives/permission.js' +import { fixedHeight } from './directives/fixedtableheight'; + +//导入图标组件 +import * as ElementPlusIconsVue from '@element-plus/icons-vue' +import 'element-plus/dist/index.css' +// 引入svg图标注册脚本 +import 'vite-plugin-svg-icons/register' + +import '@/assets/styles/index.scss' +import '@/assets/styles/sidebar.scss' +import '@/assets/styles/echartsEditor.scss' +//引入 +import print from 'vue3-print-nb' +//挂载 + +const app = createApp(App) +for (const [key, component] of Object.entries(ElementPlusIconsVue)) { + app.component(key, component) +} +app.use(ElementPlus,{locale: zhCn}) +app.use(createPinia()) +app.use(router) +app.directive('perm',hasPerm) +app.directive('tabh',fixedHeight) +app.use(print) +app.mount('#app') diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..19e5a5f --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,263 @@ +import {createRouter, createWebHistory} from 'vue-router' +import NProgress from 'nprogress' +import 'nprogress/nprogress.css' +import Layout from '@/layout/index.vue' +import {getToken} from '../utils/auth' +import {usePermisstionStroe} from '@/stores/permisstion.js' +import {useAuthStore} from '@/stores/userstore.js' + +NProgress.configure({showSpinner: false}) + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/login', + name: 'login', + component: () => import('@/views/login/index.vue'), + meta: { + hidden: true, + title: '登录' + } + }, + { + path: '/cas/login', + name: 'casLogin', + component: () => import('@/views/cas-login/index.vue'), + }, + { + path: '/projectdetail/mobile', + name: 'projectDetailMobile', + component: () => import('@/views/project-management/mobledetail/index.vue') + }, + { + path: '/fund/mobile', + name: 'specialFundDetailMobile', + component: () => import('@/views/project-management/mobledetail/SpecialFundDetailMobile.vue') + }, + { + path: '/projectDemand/requirement/moblie', + name: 'projectDemandRequirementMoblie', + component: () => import('@/views/project-demand/requirement/moblieDetail/index.vue') + }, + { + path: '/expenseManagement/share/moblie', + name: 'expenseManagementMoblie', + component: () => import('@/views/expense-management/share/moblieDetail/index.vue') + }, + { + path: '/phase/detail/moblie', + name: 'phaseDetailMoblie', + component: () => import('@/views/project-management/phaseDetailMoblie/index.vue') + }, + { + path: '/', + name: 'layout', + component: Layout, + redirect: '/home', + meta: { + hidden: false + }, + children: [ + { + path: '/home', + name: 'home', + component: () => import('@/views/home/index.vue'), + meta: { + title: '首页', + breadcrumb: true + } + }, + { + path: '/auth', + name: 'auth', + component: () => import('@/views/auth/index.vue'), + meta: { + title: '个人中心', + breadcrumb: true + } + }, + { + path: '/workflow/process/edit/:deploymentId', + name: 'processEdit', + component: () => import('@/views/workflow/process/ProcessEdit.vue'), + meta: { + title: '编辑流程', + breadcrumb: true + } + }, + { + path: '/workflow/process', + name: 'process', + component: () => import('@/views/workflow/process/index.vue'), + meta: { + title: '流程管理', + breadcrumb: true + } + }, + { + path: '/workflow/process/add', + name: 'processAdd', + component: () => import('@/views/workflow/process/ProcessEdit.vue'), + meta: { + title: '新增流程', + breadcrumb: true + } + }, + { + path: '/role-auth/user/:roleId(\\d+)/:roleName', + name: 'distribute', + component: () => import('@/views/system/role/DistributeUser.vue'), + meta: { + title: '角色分配用户', + breadcrumb: true + } + }, + { + path: '/post-auth/user/:postId(\\d+)/:postName', + name: 'assignUser', + component: () => import('@/views/system/post/DistributeUser.vue'), + meta: { + title: '岗位分配用户', + breadcrumb: true + } + }, + { + path: '/menu-auth/role/:menuId(\\d+)/:menuName', + name: 'assignRole', + component: () => import('@/views/system/menu/DistributeRole.vue'), + meta: { + title: '菜单分配角色', + breadcrumb: true + } + }, + { + path: '/system/notice/inform/index/:queryId', + name: 'notify', + component: () => import('@/views/system/notice/inform/index.vue'), + meta: { + title: '通知公告', + breadcrumb: false + } + }, + // 项目详情 + { + path: '/project/management/implementation/implementation/detail', + name: 'Implementation/detail', + component: () => import('@/views/project-management/implementation/detail.vue'), + meta: { + title: '项目详情', + breadcrumb: false + } + }, + // 需求征集详情 + { + path: '/project/demand/requirement/requirement/detail', + name: 'Requirement/detail', + component: () => import('@/views/project-demand/requirement/detail.vue'), + meta: { + title: '需求征集-详情', + breadcrumb: false + } + }, + // 需求汇总详情 + { + path: '/project/demand/summary/summary/detail', + name: 'Summary/detail', + component: () => import('@/views/project-demand/summary/detail.vue'), + meta: { + title: '需求汇总-详情', + breadcrumb: false + } + }, + // 专项资金详情 + { + path: '/special/fund/fund/detail', + name: 'Fund/detail', + component: () => import('@/views/special-fund/detail.vue'), + meta: { + title: '专项资金-详情', + breadcrumb: false + } + }, + // 费用分摊详情 + { + path: '/expense/management/expense/share/share/detail', + name: 'Share/detail', + component: () => import('@/views/expense-management/share/detail.vue'), + meta: { + title: '费用分摊-详情', + breadcrumb: false + } + }, + { + path: '/todolist', + name: 'Todolist', + component: () => import('@/views/todoList/index.vue'), + meta: { + title: '待办', + breadcrumb: false + } + }, + { + path: '/donelist', + name: 'Donelist', + component: () => import('@/views/doneList/index.vue'), + meta: { + title: '已办', + breadcrumb: false + } + }, + ] + }, + { + path: '/forbidden', + name: 'forbidden', + component: () => import('@/views/forbidden/index.vue'), + } + ] +}) + +router.beforeEach(async (to, form, next) => { + const permisstionStore = usePermisstionStroe() + const authStore = useAuthStore() + NProgress.start() + if (!getToken()) { + if (to.path === '/login' || to.path === '/cas/login' || to.path === '/forbidden') { + next() + NProgress.done() + } else { + let path = window.location.pathname; + let query = window.location.search + sessionStorage.setItem('toView', JSON.stringify({ + path: path, + query: query + })) + window.location.href = `${window.location.origin}/api/auth/cas/login` + // next({path: '/api/auth/cas/login'}) + } + } else { + if (to.path === '/login' || to.path === '/cas/login') { + next('/') + NProgress.done() + } else { + permisstionStore.setIsLoadRoutes(true) + if (permisstionStore.isLoadRoutes && !permisstionStore.isSussessReq) { + await permisstionStore.setAsyncRouters() + await authStore.setUserInfo() + next({...to, replace: true}) + } else { + next() + } + } + + } + + +}) + +router.afterEach(() => { + NProgress.done() +}) + +export default router diff --git a/src/stores/cache.js b/src/stores/cache.js new file mode 100644 index 0000000..8d81eca --- /dev/null +++ b/src/stores/cache.js @@ -0,0 +1,47 @@ +import {defineStore} from "pinia"; +import {ref} from "vue"; +import {getCacheOpt, getCacheType} from "../api/cache"; + +export const useCacheStore = defineStore('cache',()=>{ + const cacheKeyOpt = ref(new Map()) + const cacheKeyType = ref(new Map()) + + const setCacheKey = async (key) => { + try { + const { code, data } = await getCacheType(key) + if(code === 1000) { + cacheKeyType.value.set(key, data[key]) + } + } catch(err) { + new Error(err) + } + } + + const getDict = (key) => { + let dict + if (!cacheKeyType.value.has(key)) { + setCacheKey(key) + } else { + dict = cacheKeyType.value.get(key) + } + return dict + } + + + const checkKey = (keys) => { + let result = [] + for (let key of keys) { + if (!cacheKeyType.value.has(key) ) { + result.push(key) + } + } + return result; + } + + return { + cacheKeyOpt, + cacheKeyType, + setCacheKey, + getDict, + } +}) diff --git a/src/stores/permisstion.js b/src/stores/permisstion.js new file mode 100644 index 0000000..40da964 --- /dev/null +++ b/src/stores/permisstion.js @@ -0,0 +1,161 @@ +import { defineStore } from "pinia"; +import { defineAsyncComponent, ref, toRaw } from "vue"; +import { getRouters } from "@/api/system/menu"; +import Layout from '@/layout/index.vue' +import ParentView from '@/components/ParentView.vue' +import router from "../router"; +const VueComUrl = import.meta.glob('../views/**/*.vue') + +export const usePermisstionStroe = defineStore('permisstion', () => { + const asyncRouters = ref([]) + //定义是否加载路由变量 + const isLoadRoutes = ref(false) + const isSussessReq = ref(false) + const menuList = ref([ + { + name: 'home', + path: '/home', + icon: 'home', + title: '首页', + meta: { + breadcrumb: true + } + } + ]) + // 二级页面路由list + const slRouters = ref([]) + + const setIsLoadRoutes = (status) => { + return isLoadRoutes.value = status + } + + const setIsSuccessReq = () => { + return isSussessReq.value = false + } + const setAsyncRouters = async () => { + await getRouters().then(res => { + if (res.code === 1000) { + const sRouter = JSON.parse(JSON.stringify(res.data)) + const mData = JSON.parse(JSON.stringify(res.data)) + // console.log(JSON.parse(JSON.stringify(sRouter)), 'sRouter'); + const firstFormat = setRouterLevel(JSON.parse(JSON.stringify(sRouter))) + asyncRouters.value = formatAsyncRouters(JSON.parse(JSON.stringify(firstFormat))) + menuList.value = [...menuList.value, ...generateMenu(mData)] + addAsyncRouters(asyncRouters.value) + isLoadRoutes.value = false + isSussessReq.value = true + } else { + isLoadRoutes.value = true + setTimeout(() => setAsyncRouters(), 3000) + } + }) + } + + const setRouterLevel = (routers) => { + return routers.filter(item=>{ + if(item.component === 'Layout') { + if(item.children) { + item.children.forEach(v=>{ + if(v.children) { + slRouters.value = [...toRaw(slRouters.value), ...v.children] + delete v.children + } + }) + item.children = [...item.children, ...toRaw(slRouters.value)] + } + } + return true + }) + } + + const formatAsyncRouters = (routers) => { + return routers.filter(route => { + if (route.component) { + if (route.component === 'Layout') { + route.component = Layout + } else if (route.component === 'ParentView') { + route.component = ParentView + } else { + route.component = loadView(route.component) + } + } + if (route.children !== null && route.children && route.children.length !== 0) { + route.children = formatAsyncRouters(route.children) + } + return true + }) + } + + const addAsyncRouters = (routers) => { + routers.forEach(route => { + router.addRoute(route) + }) + } + + const generateMenu = (routes) => { + return routes.filter(item => { + if (item.children && item.children.length !== 0) { + generateMenu(item.children) + } + if (item.pathParams != null) { + item.path = formatPath(item.path, JSON.parse(item.pathParams)) + } + item.title = item.meta.title + item.icon = item.meta.icon + return true + }) + } + + // 拼接地址 + const formatPath = (path, query) => { + const queryArr = [] + let newPath = path + for (const key in query) { + queryArr.push({label: key, value: query[key]}) + } + queryArr.forEach((item, index)=>{ + if(!index) { + newPath += `?${item.label}=${item.value}` + } else { + newPath += `&${item.label}=${item.value}` + } + }) + return newPath + } + + + const loadView = (view) => { + if (import.meta.env.MODE === 'development') { + return () => import(/* @vite-ignore */`/src/views/${view}.vue`) + } else { + return VueComUrl['../views/' + view + '.vue'] + } + } + + const removeMenu = () => { + menuList.value = [ + { + name: 'home', + path: '/home', + icon: 'home', + title: '首页', + meta: { + breadcrumb: true + } + } + ] + asyncRouters.value.length = 0 + } + + + return { + asyncRouters, + menuList, + isLoadRoutes, + isSussessReq, + setAsyncRouters, + setIsLoadRoutes, + removeMenu, + setIsSuccessReq + } +}) diff --git a/src/stores/processStore.js b/src/stores/processStore.js new file mode 100644 index 0000000..83d7486 --- /dev/null +++ b/src/stores/processStore.js @@ -0,0 +1,111 @@ +import {defineStore} from "pinia"; +import {ref} from "vue"; + + +export const useProcessStore = defineStore('process', () => { + const nodeMap = ref(new Map()) + const parentMap = ref(new Map()) + const selectUserMap = ref(new Map()) + const isEdit = ref(null) + const selectFormItem = ref(null) + const selectedNode = ref([]) + const runningList = ref([]) + const endList = ref([]) + const noTakeList = ref([]) + const refuseList = ref([]) + const passList = ref([]) + const processData = ref({}) + const userTaskOption = ref({}) + + const getSelectedNode = () => { + return selectedNode.value + } + const setSelectedNode = (val) => { + selectedNode.value = val + } + const getSelectedFormItem = () => { + return selectFormItem.value + } + const setSelectedFormItem = (val) => { + selectFormItem.value = val + } + + const getProcess = () => { + return processData.value.process; + } + + const addProcess = (val) => { + processData.value.process.push(val) + } + const delProcess = (delNode) => { + processData.value.process.splice(processData.value.process.indexOf(delNode), 1) + // console.log("删除数据") + // console.log(processData.value.process) + } + + const getDesign = () => { + return processData.value + } + const getAssignedUser = () => { + return selectedNode.value.props.assignedUser || [] + } + + + const addAssignedUser = (val) => { + selectedNode.value.props.assignedUser.push(val) + } + + + const getFormMap = () => { + //表单映射对象 + const map = new Map(); + processData.value.formItems?.forEach(item => itemToMap(map, item)) + return map + } + + const itemToMap = (map, item) => { + //对象转map + map.set(item.id, item) + if (item.name === 'SpanLayout') { + item.props.items.forEach(sub => itemToMap(map, sub)) + } + } + + const setDesign = (val) => { + processData.value = val + } + + const init = () => { + nodeMap.value.clear() + parentMap.value.clear() + } + + return { + nodeMap, + parentMap, + selectUserMap, + isEdit, + selectFormItem, + runningList, + endList, + noTakeList, + refuseList, + passList, + design: processData, + selectedNode, + userTaskOption, + init, + getSelectedNode, + setSelectedNode, + getSelectedFormItem, + setSelectedFormItem, + getDesign, + setDesign, + getProcess, + addProcess, + delProcess, + getFormMap, + getAssignedUser, + addAssignedUser + } +}) diff --git a/src/stores/siderbar.js b/src/stores/siderbar.js new file mode 100644 index 0000000..a6ac7f3 --- /dev/null +++ b/src/stores/siderbar.js @@ -0,0 +1,20 @@ +import { defineStore } from "pinia"; +import { reactive, ref } from "vue"; +export const useSiderBar = defineStore('siderbar',()=>{ + //定义控制侧边栏是否展开变量默认展开 + const isCollapse = ref(false) + //获取侧边栏状态 + const getSiderBarStatus = () => { + return isCollapse.value + } + //设置侧边栏状态 + const setSiderBarStatus = () => { + isCollapse.value = !isCollapse.value + } + + return { + isCollapse, + getSiderBarStatus, + setSiderBarStatus, + } +}) \ No newline at end of file diff --git a/src/stores/tagsview.js b/src/stores/tagsview.js new file mode 100644 index 0000000..1dc858b --- /dev/null +++ b/src/stores/tagsview.js @@ -0,0 +1,71 @@ +import { defineStore } from "pinia"; +import { ref } from "vue"; +import { useRouter, useRoute } from "vue-router"; + +export const useTagsView = defineStore('tagsView',()=>{ + const router = useRouter() + const route = useRoute() + //已显示的标签页list + const visitedViews = ref([]) + + //添加标签页面 + const addVisitedViews = ({path,meta,query}) => { + if(visitedViews.value.length == 0) { + visitedViews.value.push({path,meta,query}) + }else { + const paths = visitedViews.value.map(item => item.path) + if(paths.includes(path) == false) { + visitedViews.value.push({path,meta,query}) + } + } + } + + //删除标签页 + const delVisitedViews = (path) => { + if(visitedViews.value.length - 1 == 0) { + return + } + visitedViews.value.forEach((item,index)=>{ + if(item.path == path) { + visitedViews.value.splice(index,1) + } + }) + toLastTagView(visitedViews) + } + + //删除当前标签页并跳转到指定路由 + const delViewAndGoView = (path) => { + visitedViews.value.forEach((item,index)=>{ + if(item.path == route.path) { + visitedViews.value.splice(index,1) + } + }) + router.push(path) + } + + //删除其他标签页 + const delOtherVisitedViews = ({path,meta,query}) => { + visitedViews.value = [] + visitedViews.value.push({path,meta,query}) + toLastTagView(visitedViews) + } + + //路由到末尾标签页 + const toLastTagView = (view) => { + const lastTagView = view.value.slice(-1)[0] + router.push({path: lastTagView.path, query: lastTagView.query}) + } + + const removeAllTagView = () => { + visitedViews.value.length = 0 + } + + return { + visitedViews, + addVisitedViews, + delVisitedViews, + delOtherVisitedViews, + delViewAndGoView, + removeAllTagView + } +}) diff --git a/src/stores/userstore.js b/src/stores/userstore.js new file mode 100644 index 0000000..097a254 --- /dev/null +++ b/src/stores/userstore.js @@ -0,0 +1,55 @@ +import {defineStore} from "pinia"; +import {ref} from "vue"; +import {getUserInfo, login} from "../api/login"; +import {ElMessage} from "element-plus"; +import {getToken, removeToken, setToken} from "../utils/auth"; + +export const useAuthStore = defineStore('auth', () => { + const userinfo = ref({}) + const permisstions = ref([]) + const roles = ref([]) + const casToken = (token) => { + // console.log('getToken()!==token',getToken()!==token) + let flag='' + if(getToken()!==token){//切换token + setToken(token) + flag=true + }else { + flag=false + } + return flag; + } + const userLogin = async (data) => { + let flag + await login(data).then(res => { + if (res?.code === 1000) { + setToken(res.data) + flag = true + } else { + ElMessage.error(res.msg) + flag = false + } + }) + return flag + } + const userLogout = () => { + removeToken() + } + const setUserInfo = async () => { + await getUserInfo().then(res => { + userinfo.value = res.data.user + permisstions.value = res.data.permissions + roles.value = res.data.roles + }) + } + + return { + userinfo, + permisstions, + roles, + casToken, + userLogin, + userLogout, + setUserInfo + } +}) diff --git a/src/utils/auth.js b/src/utils/auth.js new file mode 100644 index 0000000..55243e8 --- /dev/null +++ b/src/utils/auth.js @@ -0,0 +1,25 @@ +import Cookies from "js-cookie"; + +export const getToken = () => { + return Cookies.get('Authorization') +} + +export const setToken = (token) => { + return Cookies.set('Authorization', token) +} + +export const removeToken = () => { + return Cookies.remove('Authorization') +} + +export const getAuthInfo = () => { + return Cookies.get('authinfo') +} + +export const setAuthInfo = (info) => { + return Cookies.set('authinfo', info) +} + +export const removeAuthInfo = () => { + return Cookies.remove('authinfo') +} \ No newline at end of file diff --git a/src/utils/axiosCanceler.js b/src/utils/axiosCanceler.js new file mode 100644 index 0000000..d35676f --- /dev/null +++ b/src/utils/axiosCanceler.js @@ -0,0 +1,51 @@ +// 存储每个请求的标识和取消函数 +const pendingRequest = new Map() + +const getPendUrl = (config) => { + return `${config.method}&${config.url}` +} + +export class AxiosCanceler { + /** + * 添加请求 + * @param {*} config 请求配置 + */ + addPendingRequest(config) { + const url = getPendUrl(config) + const controller = new AbortController() // 请求中止控制器 + config.signal = controller.signal + if(!pendingRequest.has(url)) { + pendingRequest.set(url, controller) + } + } + + /** + * 移除请求 + * @param {*} config 请求配置 + */ + removePendingRequest(config) { + const url = getPendUrl(config) + if(pendingRequest.has(url)) { + const abortController = pendingRequest.get(url) + if(abortController) { + abortController.abort(url) + } + pendingRequest.delete(url) + } + } + + /** + * 移除所有请求 + */ + removeAllPendingRequest() { + for (const abortController of pendingRequest) { + if(abortController) + abortController.abort() + } + this.reset() + } + + reset() { + pendingRequest.clear() + } +} diff --git a/src/utils/changePrice.js b/src/utils/changePrice.js new file mode 100644 index 0000000..14e518b --- /dev/null +++ b/src/utils/changePrice.js @@ -0,0 +1,9 @@ +export const toThousands = (num) => { + let newNum=Number(num) + if (newNum == undefined || newNum == null) return '--'; + const options = { + style: 'currency', + currency: 'CNY', + }; + return (newNum).toLocaleString('zh-CN', options) +} diff --git a/src/utils/date.js b/src/utils/date.js new file mode 100644 index 0000000..c02c200 --- /dev/null +++ b/src/utils/date.js @@ -0,0 +1,42 @@ +export const dateFormat = (time = new Date().getTime(),flag) => { //YYYY年MM月DD日 星期d + const _time = time.toString().length > 10 ? time : time * 1000 + const weekList = ["日","一", "二", "三", "四", "五", "六" ]; + const date = new Date(_time); + const Y = date.getFullYear(); + const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1); + const Mm = (date.getMonth() + 1 < 10 ? (date.getMonth() + 1) : date.getMonth() + 1); + const D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()); + const h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()); + const m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()); + const s = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()); + let weekDay = new Date().getDay(); + const week= weekList[weekDay] + // const strDate = `${Y}/${M}/${D} ${h}:${m}:${s}` + if(flag){ + return `${Mm}月`; + }else { + return `${Y}年${M}月${D}日 星期${week}`; + } +} +export const getNowFormatDate = (flag) => { + let date = new Date(), + year = date.getFullYear(), //获取完整的年份(4位) + month = date.getMonth() + 1, //获取当前月份(0-11,0代表1月) + strDate = date.getDate() // 获取当前日(1-31) + if (month < 10) month = `0${month}` // 如果月份是个位数,在前面补0 + if (strDate < 10) strDate = `0${strDate}` // 如果日是个位数,在前面补0 + if(flag){ + return `${year}-${month}-${strDate}` + }else { + return `${year}-${month}` + } +} +export default { + dateFormat, + getNowFormatDate +} + + + + + diff --git a/src/utils/downloadZip.js b/src/utils/downloadZip.js new file mode 100644 index 0000000..331a1e4 --- /dev/null +++ b/src/utils/downloadZip.js @@ -0,0 +1,64 @@ +import axios from 'axios' +import {getToken} from "./auth"; +import {ElMessage} from "element-plus"; + +const baseURL = import.meta.env.VITE_BASE_URL + +const mimeMap = { + xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + zip: 'application/zip' +} + + +export function downLoadZip(url) { + axios({ + method: 'get', + url: baseURL + url, + responseType: 'blob', + headers: {'Authorization': getToken()} + }).then(res => { + try { + resolveBlob(res, mimeMap.zip) + }catch (e) { + ElMessage.error("下载失败,请检查相关配置") + } + }) +} + +export function downLoadExcel(url,params) { + axios({ + method: 'get', + url: baseURL + url, + params, + responseType: 'blob', + headers: {'Authorization': getToken()} + }).then(res => { + try { + resolveBlob(res, mimeMap.xlsx) + }catch (e) { + ElMessage.error(res.data.msg) + } + }) +} + + +/** + * 解析blob响应内容并下载 + * @param {*} res blob响应内容 + * @param {String} mimeType MIME类型 + */ +export function resolveBlob(res, mimeType) { + const aLink = document.createElement('a') + let blob = new Blob([res.data], {type: mimeType}) + let reg = /fileName=([^&]+)/; + let contentDisposition = decodeURI(res.headers['content-disposition']) + let result = reg.exec(contentDisposition) + // console.log(result) + let fileName = result[1] + fileName = fileName.replace(/\"/g, '') + aLink.href = URL.createObjectURL(blob) + aLink.setAttribute('download', fileName) // 设置下载文件名称 + document.body.appendChild(aLink) + aLink.click() + document.body.appendChild(aLink) +} diff --git a/src/utils/export-excel.js b/src/utils/export-excel.js new file mode 100644 index 0000000..df44fff --- /dev/null +++ b/src/utils/export-excel.js @@ -0,0 +1,131 @@ +import {utils} from "xlsx"; +import FileSaver from 'file-saver' +import XLSX from "xlsx-style-vite"; + +/** + * 导出excel + * @param $table 表格html dom元素 + * @param columnLength 列长度 + * @param excelName 导出文件名称 + * @param bigWidthIndex 更宽列的索引 + * @param bigWidthArray 更宽列数组索引 + */ +export function exportExcel($table, columnLength, excelName, bigWidthIndex,bigWidthArray) { + //从el-table表生成工作簿对象 + //使用原始的格式,保留表格中的格式如%、小数末尾的0等 + let workbook = utils.table_to_book($table, { + raw: true + }); + //列宽,需要导出的表格有多少列这里的i就小于多少 + // if(bigWidthArray&&bigWidthArray.length>0){ + // for (let i = 1; i < columnLength; i++) { + // for (let j = 0; j < bigWidthArray.length; j++) { + // console.log('bigWidthArray[j]',bigWidthArray[j]) + // if (i === bigWidthArray[j]) { + // workbook.Sheets.Sheet1["!cols"].push({wpx: 300}); + // } + // } + // workbook.Sheets.Sheet1["!cols"].push({wpx: 100}); + // } + // }else { + for (let i = 1; i < columnLength; i++) { + if (i === bigWidthIndex) { + workbook.Sheets.Sheet1["!cols"].push({wpx: 300}); + } + workbook.Sheets.Sheet1["!cols"].push({wpx: 100}); + } + // } + + //设置单元格样式 + for (const key in workbook.Sheets.Sheet1) { + if ( + key !== "!cols" && + key !== "!fullref" && + key !== "!merges" && + key !== "!ref" && + key !== "!rows" + ) { + //这里的s就是具体的样式,如果想设置不一样的样式可以看xlsx-style文档 + workbook.Sheets.Sheet1[key].s = { + //边框 + border: { + top: {style: "thin"}, + bottom: {style: "thin"}, + left: {style: "thin",}, + right: {style: "thin",} + }, + //对齐 + alignment: { + horizontal: "center", + vertical: "center", + wrapText: true + } + }; + } + } + //修改合并单元格样式 + let arr = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", + "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; + //由于导出时合并单元格只识别左上角的单元格,合并单元格中其他单元格 + //并不会存在,所以需要识别合并单元格中除左上角单元格外的单元格并添加 + //带样式的单元格到其中,不理解可以看四中的第2点。 + try { + + for (let item of workbook.Sheets.Sheet1["!merges"]) { + let style = { + border: { + top: {style: "thin"}, + bottom: {style: "thin"}, + left: {style: "thin",}, + right: {style: "thin",} + }, + alignment: { + horizontal: "center", + vertical: "center", + wrapText: true + } + }; + let merge_s = {t: "s", v: "", s: style}; + if (item.s.c === item.e.c) { + //纵向合并,其中c为字母r为数字 + let star = item.s.r; + let end = item.e.r; + for (let i = star + 1; i <= end; i++) { + workbook.Sheets.Sheet1[arr[item.s.c] + (i + 1)] = merge_s; + } + } else { + //横向合并 + let star = item.s.c; + let end = item.e.c; + for (let i = star; i < end; i++) { + workbook.Sheets.Sheet1[arr[i + 1] + Number(item.s.r + 1)] = merge_s; + } + } + } + } catch (e) { + + } + + //将表格数据中的字符串转ArrayBuffer + function s2ab(s) { + let buf = new ArrayBuffer(s.length); + let view = new Uint8Array(buf); + for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff; + return buf; + } + + //这里的属性可以参考xlsx-style文档 + let wbout = XLSX.write(workbook, { + bookType: "xlsx", + bookSST: false, + type: "binary" + }); + try { + FileSaver.saveAs( + new Blob([s2ab(wbout)], {type: "application/octet-stream"}), + `${excelName}.xlsx` + ); + } catch (e) { + if (typeof console !== "undefined") console.log(e, wbout); + } +} diff --git a/src/utils/matterTree.js b/src/utils/matterTree.js new file mode 100644 index 0000000..e3fb4ac --- /dev/null +++ b/src/utils/matterTree.js @@ -0,0 +1,13 @@ +export const matterTree = (array,data, id) => { + if (id) { + data.forEach(item => { + if (item.value == id) { + array.push(item.label); + } + if (item.children && item.children.length > 0) { + matterTree(array,item.children,id) + } + }) + return array; + } +} diff --git a/src/utils/publicvoid.js b/src/utils/publicvoid.js new file mode 100644 index 0000000..8b11ca0 --- /dev/null +++ b/src/utils/publicvoid.js @@ -0,0 +1,54 @@ +// import md5 from 'js-md5' +// import { useI18n } from 'vue-i18n' + +/** + * @author 温华 + * @description 这是一个加密函数 + * @param {string | number} data 需要加密的数据 + * @returns {result} 返回已加密的数据 + */ +// export const useEncryption = data => { +// const result = md5(data) +// return result +// } + +/** + * @author 温华 + * @param {function} func 需要添加防抖的函数 + * @param {number} wait 等待执行的时间 + * @param {boolean} immediate 是否立即执行 + * @returns + */ +export const useDebounce = function (func, wait = 1000, isImmediate = true) { + var timerId = null + var flag = true + return function () { + let context = this + let args = arguments + clearTimeout(timerId) + if (isImmediate) { + if (flag) { + func.apply(context, args) + flag = false + } + timerId = setTimeout(function () { + flag = true + }, wait) + } else { + timerId = setTimeout(function () { + func.apply(context, args) + }, wait) + } + } +} + +export const tableHead = { + backgroundColor: '#F6F9FF', + color: '#3D3F46', + textAlign: 'center', + // lineHeight: '30px' +} + +export const tabCell = { + textAlign: 'center', +} \ No newline at end of file diff --git a/src/utils/request.js b/src/utils/request.js new file mode 100644 index 0000000..5bbcd41 --- /dev/null +++ b/src/utils/request.js @@ -0,0 +1,110 @@ +import axios from "axios"; +import {AxiosCanceler} from "./axiosCanceler"; +import {ElMessageBox, ElNotification} from "element-plus"; +import {getToken, removeToken} from "./auth"; + +axios.defaults.headers['Content-Type'] = 'application/json' + +const serveice = axios.create({ + baseURL: import.meta.env.VITE_BASE_URL, + timeout: 6000 +}) +const axiosCanceler = new AxiosCanceler() +serveice.interceptors.request.use(config => { + const ACCESS_TOKEN = getToken() || '' + if (ACCESS_TOKEN !== undefined && ACCESS_TOKEN !== '') { + config.headers['Authorization'] = ACCESS_TOKEN + } + // 检查是否有重复请求, 有则取消掉 + axiosCanceler.removePendingRequest(config) + // 将请求加入pendingMap + axiosCanceler.addPendingRequest(config) + return config +}, error => { + Promise.reject(error) +}) +serveice.interceptors.response.use(response => { + axiosCanceler.removePendingRequest(response.config) + // console.log(response,"response") + //二进制数据直接返回 + if (response.request.responseType === 'blob' || response.request.responseType === 'arraybuffer') { + return response.data + } + // console.log("1") + return response.data +}, error => { + // console.log(error) + let response = error.response + if (!response) { + return Promise.reject() + } + const status = response.status; + if (!status) { + return Promise.reject() + } + switch (status) { + case 401: + // ElMessageBox.confirm('登录状态已过期,请重新登录', '系统提示', { + // confirmButtonText: '重新登录', + // cancelButtonText: '取消', + // type: 'warning', + // closeOnClickModal: false + // }).then(() => { + removeToken() + let path = window.location.pathname; + let query = window.location.search + sessionStorage.setItem('toView', JSON.stringify({ + path: path, + query: query + })) + window.location.href = `${window.location.origin}/api/auth/cas/login` + // }) + return Promise.reject('会话已过期,请重新登录') + case 402: + break; + case 403: + ElNotification({ + title: '系统提示', + message: response.data.msg, + type: 'warning' + }) + break; + case 404: + ElNotification({ + title: '系统提示', + message: '不存在的地址', + type: 'error' + }) + break; + case 405: + ElNotification({ + title: '系统提示', + message: '传输格式错误,请检查', + type: 'error' + }) + break; + case 511: + ElNotification({ + title: '系统提示', + message: '禁止访问', + type: 'error' + }) + removeToken() + window.location = '/forbidden' + break; + case 500: + if (response.data) { + return response.data + } else { + ElNotification({ + title: '系统提示', + message: '系统未知错误', + type: 'error' + }) + break; + } + } + return Promise.reject(error) +}) + +export default serveice diff --git a/src/utils/socket.js b/src/utils/socket.js new file mode 100644 index 0000000..22638ce --- /dev/null +++ b/src/utils/socket.js @@ -0,0 +1,46 @@ +class Socket { + constructor(url) { + this.wx = new WebSocket(url) + this.state = false + } + + open() { + this.wx.onopen = (e) => { + console.log('连接服务器成功'); + this.state = true + } + } + + close() { + this.wx.onclose = (e) => { + console.log('服务器关闭'); + this.state = false + } + } + + _error() { + this.wx.onerror = (e) => { + console.log('连接出错'); + this.state = false + this.close() + this.open() + } + } + + message() { + this.wx.onmessage = (e) => { + // 接收服务器发送的消息 + return e.data + } + } + + send(data) { + let sendMsg + if(data && data instanceof Object || data instanceof Array) { + sendMsg = JSON.stringify(data) + } else { + sendMsg = data.toString() + } + this.wx.send(sendMsg) + } +} \ No newline at end of file diff --git a/src/views/article-management/add.vue b/src/views/article-management/add.vue new file mode 100644 index 0000000..e74a49f --- /dev/null +++ b/src/views/article-management/add.vue @@ -0,0 +1,202 @@ + + + + + diff --git a/src/views/article-management/detail.vue b/src/views/article-management/detail.vue new file mode 100644 index 0000000..36d11a5 --- /dev/null +++ b/src/views/article-management/detail.vue @@ -0,0 +1,132 @@ + + + + + + diff --git a/src/views/article-management/index.vue b/src/views/article-management/index.vue new file mode 100644 index 0000000..1fac2d2 --- /dev/null +++ b/src/views/article-management/index.vue @@ -0,0 +1,232 @@ + + + + + diff --git a/src/views/auth/index.vue b/src/views/auth/index.vue new file mode 100644 index 0000000..0f37c36 --- /dev/null +++ b/src/views/auth/index.vue @@ -0,0 +1,413 @@ + + + diff --git a/src/views/cas-login/index.vue b/src/views/cas-login/index.vue new file mode 100644 index 0000000..536aadc --- /dev/null +++ b/src/views/cas-login/index.vue @@ -0,0 +1,28 @@ + + diff --git a/src/views/doneList/index.vue b/src/views/doneList/index.vue new file mode 100644 index 0000000..7b66beb --- /dev/null +++ b/src/views/doneList/index.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/src/views/expense-management/ledger/index.vue b/src/views/expense-management/ledger/index.vue new file mode 100644 index 0000000..84a6138 --- /dev/null +++ b/src/views/expense-management/ledger/index.vue @@ -0,0 +1,227 @@ + + + + diff --git a/src/views/expense-management/project-ledger/index.vue b/src/views/expense-management/project-ledger/index.vue new file mode 100644 index 0000000..2256280 --- /dev/null +++ b/src/views/expense-management/project-ledger/index.vue @@ -0,0 +1,333 @@ + + + + diff --git a/src/views/expense-management/share/add.vue b/src/views/expense-management/share/add.vue new file mode 100644 index 0000000..08c723f --- /dev/null +++ b/src/views/expense-management/share/add.vue @@ -0,0 +1,608 @@ + + + + diff --git a/src/views/expense-management/share/detail.vue b/src/views/expense-management/share/detail.vue new file mode 100644 index 0000000..db07fe8 --- /dev/null +++ b/src/views/expense-management/share/detail.vue @@ -0,0 +1,137 @@ + + + + diff --git a/src/views/expense-management/share/index.vue b/src/views/expense-management/share/index.vue new file mode 100644 index 0000000..cddf417 --- /dev/null +++ b/src/views/expense-management/share/index.vue @@ -0,0 +1,265 @@ + + + + + diff --git a/src/views/expense-management/share/moblieDetail/AllocationSummaryDetailMoblie.vue b/src/views/expense-management/share/moblieDetail/AllocationSummaryDetailMoblie.vue new file mode 100644 index 0000000..b8aaf3e --- /dev/null +++ b/src/views/expense-management/share/moblieDetail/AllocationSummaryDetailMoblie.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/src/views/expense-management/share/moblieDetail/ExpenseDetailMoblie.vue b/src/views/expense-management/share/moblieDetail/ExpenseDetailMoblie.vue new file mode 100644 index 0000000..cfbeeb6 --- /dev/null +++ b/src/views/expense-management/share/moblieDetail/ExpenseDetailMoblie.vue @@ -0,0 +1,257 @@ + + + + diff --git a/src/views/expense-management/share/moblieDetail/index.vue b/src/views/expense-management/share/moblieDetail/index.vue new file mode 100644 index 0000000..7fbb8d7 --- /dev/null +++ b/src/views/expense-management/share/moblieDetail/index.vue @@ -0,0 +1,140 @@ + + + + diff --git a/src/views/forbidden/index.vue b/src/views/forbidden/index.vue new file mode 100644 index 0000000..051426e --- /dev/null +++ b/src/views/forbidden/index.vue @@ -0,0 +1,15 @@ + + + + + diff --git a/src/views/home/index.vue b/src/views/home/index.vue new file mode 100644 index 0000000..23b8aba --- /dev/null +++ b/src/views/home/index.vue @@ -0,0 +1,1582 @@ + + + + + diff --git a/src/views/login/index.vue b/src/views/login/index.vue new file mode 100644 index 0000000..a951fb8 --- /dev/null +++ b/src/views/login/index.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/src/views/monitor/druid/index.vue b/src/views/monitor/druid/index.vue new file mode 100644 index 0000000..a5514c7 --- /dev/null +++ b/src/views/monitor/druid/index.vue @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/src/views/monitor/job/index.vue b/src/views/monitor/job/index.vue new file mode 100644 index 0000000..adf9509 --- /dev/null +++ b/src/views/monitor/job/index.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/src/views/monitor/logininfor/index.vue b/src/views/monitor/logininfor/index.vue new file mode 100644 index 0000000..414ea2b --- /dev/null +++ b/src/views/monitor/logininfor/index.vue @@ -0,0 +1,205 @@ + + + diff --git a/src/views/monitor/online/index.vue b/src/views/monitor/online/index.vue new file mode 100644 index 0000000..8facdbf --- /dev/null +++ b/src/views/monitor/online/index.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/src/views/monitor/operlog/index.vue b/src/views/monitor/operlog/index.vue new file mode 100644 index 0000000..a117696 --- /dev/null +++ b/src/views/monitor/operlog/index.vue @@ -0,0 +1,327 @@ + + + + diff --git a/src/views/monitor/server/index.vue b/src/views/monitor/server/index.vue new file mode 100644 index 0000000..2e0013a --- /dev/null +++ b/src/views/monitor/server/index.vue @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/src/views/plan/detail.vue b/src/views/plan/detail.vue new file mode 100644 index 0000000..3796522 --- /dev/null +++ b/src/views/plan/detail.vue @@ -0,0 +1,258 @@ + + + + + diff --git a/src/views/plan/index.vue b/src/views/plan/index.vue new file mode 100644 index 0000000..7d0d8f4 --- /dev/null +++ b/src/views/plan/index.vue @@ -0,0 +1,146 @@ + + + + + + diff --git a/src/views/project-demand/requirement/add.vue b/src/views/project-demand/requirement/add.vue new file mode 100644 index 0000000..c8a121f --- /dev/null +++ b/src/views/project-demand/requirement/add.vue @@ -0,0 +1,660 @@ + + + + + diff --git a/src/views/project-demand/requirement/detail.vue b/src/views/project-demand/requirement/detail.vue new file mode 100644 index 0000000..5cb9cd7 --- /dev/null +++ b/src/views/project-demand/requirement/detail.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/src/views/project-demand/requirement/index.vue b/src/views/project-demand/requirement/index.vue new file mode 100644 index 0000000..a954e92 --- /dev/null +++ b/src/views/project-demand/requirement/index.vue @@ -0,0 +1,335 @@ + + + + + diff --git a/src/views/project-demand/requirement/moblieDetail/index.vue b/src/views/project-demand/requirement/moblieDetail/index.vue new file mode 100644 index 0000000..c7e1fac --- /dev/null +++ b/src/views/project-demand/requirement/moblieDetail/index.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/src/views/project-demand/summary/add.vue b/src/views/project-demand/summary/add.vue new file mode 100644 index 0000000..486ef8c --- /dev/null +++ b/src/views/project-demand/summary/add.vue @@ -0,0 +1,764 @@ + + + + diff --git a/src/views/project-demand/summary/detail.vue b/src/views/project-demand/summary/detail.vue new file mode 100644 index 0000000..a59960c --- /dev/null +++ b/src/views/project-demand/summary/detail.vue @@ -0,0 +1,100 @@ + + + diff --git a/src/views/project-demand/summary/index.vue b/src/views/project-demand/summary/index.vue new file mode 100644 index 0000000..73f14fa --- /dev/null +++ b/src/views/project-demand/summary/index.vue @@ -0,0 +1,430 @@ + + + + + diff --git a/src/views/project-management/filing/attachment.vue b/src/views/project-management/filing/attachment.vue new file mode 100644 index 0000000..4110a5e --- /dev/null +++ b/src/views/project-management/filing/attachment.vue @@ -0,0 +1,429 @@ + + + + + diff --git a/src/views/project-management/filing/index.vue b/src/views/project-management/filing/index.vue new file mode 100644 index 0000000..e1019c6 --- /dev/null +++ b/src/views/project-management/filing/index.vue @@ -0,0 +1,425 @@ + + + + diff --git a/src/views/project-management/filing/upload.vue b/src/views/project-management/filing/upload.vue new file mode 100644 index 0000000..1f2da2a --- /dev/null +++ b/src/views/project-management/filing/upload.vue @@ -0,0 +1,482 @@ + + + + + diff --git a/src/views/project-management/implementation/account.vue b/src/views/project-management/implementation/account.vue new file mode 100644 index 0000000..003e941 --- /dev/null +++ b/src/views/project-management/implementation/account.vue @@ -0,0 +1,607 @@ + + + + + diff --git a/src/views/project-management/implementation/attachment.vue b/src/views/project-management/implementation/attachment.vue new file mode 100644 index 0000000..466f3d7 --- /dev/null +++ b/src/views/project-management/implementation/attachment.vue @@ -0,0 +1,463 @@ + + + + + diff --git a/src/views/project-management/implementation/components/ToolToShowUserPicker.vue b/src/views/project-management/implementation/components/ToolToShowUserPicker.vue new file mode 100644 index 0000000..ba962ed --- /dev/null +++ b/src/views/project-management/implementation/components/ToolToShowUserPicker.vue @@ -0,0 +1,19 @@ + + + diff --git a/src/views/project-management/implementation/detail.vue b/src/views/project-management/implementation/detail.vue new file mode 100644 index 0000000..c3e1860 --- /dev/null +++ b/src/views/project-management/implementation/detail.vue @@ -0,0 +1,207 @@ + + + + + diff --git a/src/views/project-management/implementation/index.vue b/src/views/project-management/implementation/index.vue new file mode 100644 index 0000000..20c2e76 --- /dev/null +++ b/src/views/project-management/implementation/index.vue @@ -0,0 +1,491 @@ + + + + diff --git a/src/views/project-management/implementation/phase.vue b/src/views/project-management/implementation/phase.vue new file mode 100644 index 0000000..601114e --- /dev/null +++ b/src/views/project-management/implementation/phase.vue @@ -0,0 +1,590 @@ + + + + + diff --git a/src/views/project-management/implementation/phaseDetail.vue b/src/views/project-management/implementation/phaseDetail.vue new file mode 100644 index 0000000..716ee6f --- /dev/null +++ b/src/views/project-management/implementation/phaseDetail.vue @@ -0,0 +1,347 @@ + + + + + diff --git a/src/views/project-management/implementation/share.vue b/src/views/project-management/implementation/share.vue new file mode 100644 index 0000000..5b5856d --- /dev/null +++ b/src/views/project-management/implementation/share.vue @@ -0,0 +1,408 @@ + + + + + diff --git a/src/views/project-management/implementation/updateTable.vue b/src/views/project-management/implementation/updateTable.vue new file mode 100644 index 0000000..8f3836a --- /dev/null +++ b/src/views/project-management/implementation/updateTable.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/src/views/project-management/implementation/upload.vue b/src/views/project-management/implementation/upload.vue new file mode 100644 index 0000000..446c0af --- /dev/null +++ b/src/views/project-management/implementation/upload.vue @@ -0,0 +1,553 @@ + + + + + diff --git a/src/views/project-management/implementation/uploadFee.vue b/src/views/project-management/implementation/uploadFee.vue new file mode 100644 index 0000000..8ef07cc --- /dev/null +++ b/src/views/project-management/implementation/uploadFee.vue @@ -0,0 +1,502 @@ + + + + + diff --git a/src/views/project-management/initiation/index.vue b/src/views/project-management/initiation/index.vue new file mode 100644 index 0000000..93cdb94 --- /dev/null +++ b/src/views/project-management/initiation/index.vue @@ -0,0 +1,404 @@ + + + + diff --git a/src/views/project-management/mobledetail/AllocationSummaryDetailMobile.vue b/src/views/project-management/mobledetail/AllocationSummaryDetailMobile.vue new file mode 100644 index 0000000..bdfd210 --- /dev/null +++ b/src/views/project-management/mobledetail/AllocationSummaryDetailMobile.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/src/views/project-management/mobledetail/ApprovalDetailMoblie.vue b/src/views/project-management/mobledetail/ApprovalDetailMoblie.vue new file mode 100644 index 0000000..3c60524 --- /dev/null +++ b/src/views/project-management/mobledetail/ApprovalDetailMoblie.vue @@ -0,0 +1,439 @@ + + + + + diff --git a/src/views/project-management/mobledetail/CollectionDetailMoblie.vue b/src/views/project-management/mobledetail/CollectionDetailMoblie.vue new file mode 100644 index 0000000..af65c34 --- /dev/null +++ b/src/views/project-management/mobledetail/CollectionDetailMoblie.vue @@ -0,0 +1,216 @@ + + + + + diff --git a/src/views/project-management/mobledetail/ExpenseDetailMobile.vue b/src/views/project-management/mobledetail/ExpenseDetailMobile.vue new file mode 100644 index 0000000..1ba2212 --- /dev/null +++ b/src/views/project-management/mobledetail/ExpenseDetailMobile.vue @@ -0,0 +1,247 @@ + + + + diff --git a/src/views/project-management/mobledetail/OpinionMoblie.vue b/src/views/project-management/mobledetail/OpinionMoblie.vue new file mode 100644 index 0000000..51fed79 --- /dev/null +++ b/src/views/project-management/mobledetail/OpinionMoblie.vue @@ -0,0 +1,228 @@ + + + + + diff --git a/src/views/project-management/mobledetail/ProjectApplyMoblie.vue b/src/views/project-management/mobledetail/ProjectApplyMoblie.vue new file mode 100644 index 0000000..b0f60e6 --- /dev/null +++ b/src/views/project-management/mobledetail/ProjectApplyMoblie.vue @@ -0,0 +1,448 @@ + + + + + diff --git a/src/views/project-management/mobledetail/SpecialFundDetailMobile.vue b/src/views/project-management/mobledetail/SpecialFundDetailMobile.vue new file mode 100644 index 0000000..8332a3b --- /dev/null +++ b/src/views/project-management/mobledetail/SpecialFundDetailMobile.vue @@ -0,0 +1,268 @@ + + + + diff --git a/src/views/project-management/mobledetail/StepsMoblie.vue b/src/views/project-management/mobledetail/StepsMoblie.vue new file mode 100644 index 0000000..28290cc --- /dev/null +++ b/src/views/project-management/mobledetail/StepsMoblie.vue @@ -0,0 +1,606 @@ + + + + + diff --git a/src/views/project-management/mobledetail/SummaryDetailMoblie.vue b/src/views/project-management/mobledetail/SummaryDetailMoblie.vue new file mode 100644 index 0000000..f8241f2 --- /dev/null +++ b/src/views/project-management/mobledetail/SummaryDetailMoblie.vue @@ -0,0 +1,346 @@ + + + + + diff --git a/src/views/project-management/mobledetail/api/index.js b/src/views/project-management/mobledetail/api/index.js new file mode 100644 index 0000000..a6d331c --- /dev/null +++ b/src/views/project-management/mobledetail/api/index.js @@ -0,0 +1,15 @@ +import request from '@/utils/request' + +export const getBaseInfoApi = (projectId) => { + return request({ + url: '/workflow/details/info/'+projectId, + method: 'get', + }) +} + +export const getMapProjectStateInfo = (projectId, state) => { + return request({ + url: `/workflow/details/${projectId}/${state}`, + method: 'get' + }) +} \ No newline at end of file diff --git a/src/views/project-management/mobledetail/index.vue b/src/views/project-management/mobledetail/index.vue new file mode 100644 index 0000000..093f574 --- /dev/null +++ b/src/views/project-management/mobledetail/index.vue @@ -0,0 +1,201 @@ + + + + + + diff --git a/src/views/project-management/phaseDetailMoblie/index.vue b/src/views/project-management/phaseDetailMoblie/index.vue new file mode 100644 index 0000000..b0c0a88 --- /dev/null +++ b/src/views/project-management/phaseDetailMoblie/index.vue @@ -0,0 +1,327 @@ + + + + + diff --git a/src/views/research-fund/add.vue b/src/views/research-fund/add.vue new file mode 100644 index 0000000..94d647c --- /dev/null +++ b/src/views/research-fund/add.vue @@ -0,0 +1,301 @@ + + + + + diff --git a/src/views/research-fund/detail.vue b/src/views/research-fund/detail.vue new file mode 100644 index 0000000..d526321 --- /dev/null +++ b/src/views/research-fund/detail.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/src/views/research-fund/index.vue b/src/views/research-fund/index.vue new file mode 100644 index 0000000..284b63f --- /dev/null +++ b/src/views/research-fund/index.vue @@ -0,0 +1,203 @@ + + + + + diff --git a/src/views/special-fund/add.vue b/src/views/special-fund/add.vue new file mode 100644 index 0000000..1992698 --- /dev/null +++ b/src/views/special-fund/add.vue @@ -0,0 +1,387 @@ + + + + + diff --git a/src/views/special-fund/detail.vue b/src/views/special-fund/detail.vue new file mode 100644 index 0000000..1d08334 --- /dev/null +++ b/src/views/special-fund/detail.vue @@ -0,0 +1,49 @@ + + + + diff --git a/src/views/special-fund/index.vue b/src/views/special-fund/index.vue new file mode 100644 index 0000000..5813e3c --- /dev/null +++ b/src/views/special-fund/index.vue @@ -0,0 +1,257 @@ + + + + + diff --git a/src/views/system/config/index.vue b/src/views/system/config/index.vue new file mode 100644 index 0000000..47a822e --- /dev/null +++ b/src/views/system/config/index.vue @@ -0,0 +1,314 @@ + + + diff --git a/src/views/system/department/api/index.js b/src/views/system/department/api/index.js new file mode 100644 index 0000000..94b66b3 --- /dev/null +++ b/src/views/system/department/api/index.js @@ -0,0 +1,16 @@ +import request from '@/utils/request' + +export const getInfoById = (id) => { + return request({ + url: `/admin/mosr/department/info/${id}`, + method: 'get', + }) +} + +export const setDeptInfo = (data) => { + return request({ + url: '/admin/mosr/department/leader', + method: 'post', + data + }) +} \ No newline at end of file diff --git a/src/views/system/department/components/ToolToShowUserPicker.vue b/src/views/system/department/components/ToolToShowUserPicker.vue new file mode 100644 index 0000000..bd909ad --- /dev/null +++ b/src/views/system/department/components/ToolToShowUserPicker.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/src/views/system/department/edit.vue b/src/views/system/department/edit.vue new file mode 100644 index 0000000..c87bf80 --- /dev/null +++ b/src/views/system/department/edit.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/src/views/system/department/index.vue b/src/views/system/department/index.vue new file mode 100644 index 0000000..1767e6a --- /dev/null +++ b/src/views/system/department/index.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue new file mode 100644 index 0000000..f52a95b --- /dev/null +++ b/src/views/system/dept/index.vue @@ -0,0 +1,330 @@ + + + + + diff --git a/src/views/system/menu/DistributeRole.vue b/src/views/system/menu/DistributeRole.vue new file mode 100644 index 0000000..9972b54 --- /dev/null +++ b/src/views/system/menu/DistributeRole.vue @@ -0,0 +1,353 @@ + + + diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue new file mode 100644 index 0000000..8860734 --- /dev/null +++ b/src/views/system/menu/index.vue @@ -0,0 +1,468 @@ + + + + + diff --git a/src/views/system/notice/inform/index.vue b/src/views/system/notice/inform/index.vue new file mode 100644 index 0000000..d403663 --- /dev/null +++ b/src/views/system/notice/inform/index.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/src/views/system/notice/publish/index.vue b/src/views/system/notice/publish/index.vue new file mode 100644 index 0000000..7f3a637 --- /dev/null +++ b/src/views/system/notice/publish/index.vue @@ -0,0 +1,430 @@ + + + + + diff --git a/src/views/system/organizationalStructure/index.vue b/src/views/system/organizationalStructure/index.vue new file mode 100644 index 0000000..744d3d1 --- /dev/null +++ b/src/views/system/organizationalStructure/index.vue @@ -0,0 +1,268 @@ + + + + diff --git a/src/views/system/post/DistributeUser.vue b/src/views/system/post/DistributeUser.vue new file mode 100644 index 0000000..88cd549 --- /dev/null +++ b/src/views/system/post/DistributeUser.vue @@ -0,0 +1,347 @@ + + + diff --git a/src/views/system/post/index.vue b/src/views/system/post/index.vue new file mode 100644 index 0000000..096a330 --- /dev/null +++ b/src/views/system/post/index.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/src/views/system/role/DistributeUser.vue b/src/views/system/role/DistributeUser.vue new file mode 100644 index 0000000..7f51d07 --- /dev/null +++ b/src/views/system/role/DistributeUser.vue @@ -0,0 +1,345 @@ + + + diff --git a/src/views/system/role/add.vue b/src/views/system/role/add.vue new file mode 100644 index 0000000..f89dc1a --- /dev/null +++ b/src/views/system/role/add.vue @@ -0,0 +1,268 @@ + + + + + diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue new file mode 100644 index 0000000..c074d07 --- /dev/null +++ b/src/views/system/role/index.vue @@ -0,0 +1,307 @@ + + + + + diff --git a/src/views/system/subsidiary/index.vue b/src/views/system/subsidiary/index.vue new file mode 100644 index 0000000..8371dcc --- /dev/null +++ b/src/views/system/subsidiary/index.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/views/system/user/add.vue b/src/views/system/user/add.vue new file mode 100644 index 0000000..0c72554 --- /dev/null +++ b/src/views/system/user/add.vue @@ -0,0 +1,308 @@ + + + + + diff --git a/src/views/system/user/agentSetting.vue b/src/views/system/user/agentSetting.vue new file mode 100644 index 0000000..8de3ed6 --- /dev/null +++ b/src/views/system/user/agentSetting.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue new file mode 100644 index 0000000..bc558de --- /dev/null +++ b/src/views/system/user/index.vue @@ -0,0 +1,420 @@ + + + + diff --git a/src/views/todoList/index.vue b/src/views/todoList/index.vue new file mode 100644 index 0000000..261d4c5 --- /dev/null +++ b/src/views/todoList/index.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/src/views/tool/dict/index.vue b/src/views/tool/dict/index.vue new file mode 100644 index 0000000..66d6e7f --- /dev/null +++ b/src/views/tool/dict/index.vue @@ -0,0 +1,592 @@ + + + + + diff --git a/src/views/tool/interface-switch/index.vue b/src/views/tool/interface-switch/index.vue new file mode 100644 index 0000000..a7de731 --- /dev/null +++ b/src/views/tool/interface-switch/index.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/src/views/tool/ipblacklist/index.vue b/src/views/tool/ipblacklist/index.vue new file mode 100644 index 0000000..f506ef1 --- /dev/null +++ b/src/views/tool/ipblacklist/index.vue @@ -0,0 +1,194 @@ + + + + + diff --git a/src/views/workflow/about/index.vue b/src/views/workflow/about/index.vue new file mode 100644 index 0000000..4c05f2e --- /dev/null +++ b/src/views/workflow/about/index.vue @@ -0,0 +1,155 @@ + + + + diff --git a/src/views/workflow/approve/InitiateProcess.vue b/src/views/workflow/approve/InitiateProcess.vue new file mode 100644 index 0000000..f6ca40c --- /dev/null +++ b/src/views/workflow/approve/InitiateProcess.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/src/views/workflow/approve/index.vue b/src/views/workflow/approve/index.vue new file mode 100644 index 0000000..87679de --- /dev/null +++ b/src/views/workflow/approve/index.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/src/views/workflow/common/Comment.vue b/src/views/workflow/common/Comment.vue new file mode 100644 index 0000000..08f3ed6 --- /dev/null +++ b/src/views/workflow/common/Comment.vue @@ -0,0 +1,380 @@ + + + + + diff --git a/src/views/workflow/common/InstanceDetails.vue b/src/views/workflow/common/InstanceDetails.vue new file mode 100644 index 0000000..0e0cadd --- /dev/null +++ b/src/views/workflow/common/InstanceDetails.vue @@ -0,0 +1,98 @@ + + + diff --git a/src/views/workflow/common/OperationRender.vue b/src/views/workflow/common/OperationRender.vue new file mode 100644 index 0000000..d7217b3 --- /dev/null +++ b/src/views/workflow/common/OperationRender.vue @@ -0,0 +1,370 @@ + + + + + diff --git a/src/views/workflow/common/ProcessDiagramViewer.vue b/src/views/workflow/common/ProcessDiagramViewer.vue new file mode 100644 index 0000000..fc3e589 --- /dev/null +++ b/src/views/workflow/common/ProcessDiagramViewer.vue @@ -0,0 +1,37 @@ + + + diff --git a/src/views/workflow/common/TaskDetails.vue b/src/views/workflow/common/TaskDetails.vue new file mode 100644 index 0000000..92aa856 --- /dev/null +++ b/src/views/workflow/common/TaskDetails.vue @@ -0,0 +1,256 @@ + + + diff --git a/src/views/workflow/form/ComponentsConfigExport.js b/src/views/workflow/form/ComponentsConfigExport.js new file mode 100644 index 0000000..fcab7bc --- /dev/null +++ b/src/views/workflow/form/ComponentsConfigExport.js @@ -0,0 +1,256 @@ +import {ScaleToOriginal,EditPen,More,Edit,Tickets,Warning,CircleCheck,Money,FolderChecked,Calendar,Picture,User,SetUp,Star,FolderOpened } from '@element-plus/icons-vue' + + +export const ValueType = { + string: 'String', + object: 'Object', + array: 'Array', + number: 'Number', + date: 'Date', + user: 'User', + dept: 'Dept', + company: 'Company', + star: 'star', + dateRange: 'DateRange' +} + +export const baseComponents = [ + { + name: '布局', + components: [ + { + title: '分栏布局', + name: 'SpanLayout', + icon: 'ScaleToOriginal', + value: [], + valueType: ValueType.array, + props: { + items: [] + } + } + ] + }, { + name: '基础组件', + components: [ + { + title: '单行文本输入', + name: 'TextInput', + icon: 'EditPen', + value: '', + valueType: ValueType.string, + props: { + required: false, + enablePrint: true + } + }, + { + title: '多行文本输入', + name: 'TextareaInput', + icon: 'More', + value: '', + valueType: ValueType.string, + props: { + required: false, + enablePrint: true + } + }, + { + title: '数字输入框', + name: 'NumberInput', + icon: 'Edit', + value: '', + valueType: ValueType.number, + props: { + required: false, + enablePrint: true, + } + }, + { + title: '金额输入框', + name: 'AmountInput', + icon: 'Money', + value: '', + valueType: ValueType.number, + props: { + required: false, + enablePrint: true, + showChinese: true + } + }, + { + title: '单选框', + name: 'SelectInput', + icon: 'CircleCheck', + value: '', + valueType: ValueType.string, + props: { + required: false, + enablePrint: true, + expanding: false, + options: ['选项1', '选项2'] + } + }, + { + title: '多选框', + name: 'MultipleSelect', + icon: 'FolderChecked', + value: [], + valueType: ValueType.array, + props: { + required: false, + enablePrint: true, + expanding: false, + options: ['选项1', '选项2'] + } + }, + { + title: '日期时间点', + name: 'DateTime', + icon: 'Calendar', + value: '', + valueType: ValueType.date, + props: { + required: false, + enablePrint: true, + format: 'YYYY-MM-DD HH:mm', + } + }, + { + title: '日期时间区间', + name: 'DateTimeRange', + icon: 'Calendar', + valueType: ValueType.dateRange, + props: { + required: false, + enablePrint: true, + placeholder: ['开始时间', '结束时间'], + format: 'YYYY-MM-DD HH:mm', + showLength: false, + length: 0 + } + }, + { + title: '上传图片', + name: 'ImageUpload', + icon: 'Picture', + value: [], + valueType: ValueType.array, + props: { + required: false, + enablePrint: true, + maxSize: 5, //图片最大大小MB + maxNumber: 10, //最大上传数量 + enableZip: true, //图片压缩后再上传 + placeholder: '请选择图片', + } + }, + { + title: '上传附件', + name: 'FileUpload', + icon: 'FolderOpened', + value: [], + valueType: ValueType.array, + props: { + required: false, + enablePrint: true, + onlyRead: false, //是否只读,false只能在线预览,true可以下载 + maxSize: 100, //文件最大大小MB + maxNumber: 10, //最大上传数量 + fileTypes: [], //限制文件上传类型, + placeholder: '请选择附件', + } + }, + { + title: '人员选择', + name: 'UserPicker', + icon: 'User' , + value: [], + valueType: ValueType.user, + props: { + required: false, + enablePrint: true, + multiple: false + } + }, + { + title: '部门选择', + name: 'DeptPicker', + icon: 'SetUp', + value: [], + valueType: ValueType.dept, + props: { + required: false, + enablePrint: true, + multiple: false + } + }, + { + title: '评分', + name: 'RatePicker', + icon: 'Star', + value: '', + valueType: ValueType.star, + props: { + color: '#f0a732', + max: 5, + required: false, + enablePrint: true, + showScore: true, + enableHalf: true, + placeholder: undefined, + } + }, + { + title: '说明文字', + name: 'Description', + icon: 'Warning', + value: '', + valueType: ValueType.string, + props: { + required: false, + enablePrint: true + } + }, + ] + }, { + name: '扩展组件', + components: [ + { + title: '明细表', + name: 'TableList', + icon: 'Tickets', + value: [], + valueType: ValueType.array, + props: { + required: false, + enablePrint: true, + showBorder: true, + rowLayout: true, + showSummary: false, + summaryColumns: [], + maxSize: 0, //最大条数,为0则不限制 + columns: [] //列设置 + } + }, + { + title: '签名', + name: 'SignPanel', + icon: 'EditPen', + value: [], + valueType: ValueType.string, + props: { + required: false, + enablePrint: true, + isCrop: true, + lineColor: '#ff0000', + } + }, + ] + } +] + + +export default { + baseComponents +} + diff --git a/src/views/workflow/form/FormComponentConfig.vue b/src/views/workflow/form/FormComponentConfig.vue new file mode 100644 index 0000000..bccdfd5 --- /dev/null +++ b/src/views/workflow/form/FormComponentConfig.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/src/views/workflow/form/FormDesign.vue b/src/views/workflow/form/FormDesign.vue new file mode 100644 index 0000000..6468dba --- /dev/null +++ b/src/views/workflow/form/FormDesign.vue @@ -0,0 +1,596 @@ + + + + + diff --git a/src/views/workflow/form/FormDesignRender.vue b/src/views/workflow/form/FormDesignRender.vue new file mode 100644 index 0000000..49d2b28 --- /dev/null +++ b/src/views/workflow/form/FormDesignRender.vue @@ -0,0 +1,135 @@ + + + + + diff --git a/src/views/workflow/form/FormRender.vue b/src/views/workflow/form/FormRender.vue new file mode 100644 index 0000000..b2ab6b5 --- /dev/null +++ b/src/views/workflow/form/FormRender.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/src/views/workflow/form/components/AmountInput.vue b/src/views/workflow/form/components/AmountInput.vue new file mode 100644 index 0000000..f51fe60 --- /dev/null +++ b/src/views/workflow/form/components/AmountInput.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/src/views/workflow/form/components/AmountInputback.vue b/src/views/workflow/form/components/AmountInputback.vue new file mode 100644 index 0000000..60b1e66 --- /dev/null +++ b/src/views/workflow/form/components/AmountInputback.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/src/views/workflow/form/components/DateTime.vue b/src/views/workflow/form/components/DateTime.vue new file mode 100644 index 0000000..52d9bf7 --- /dev/null +++ b/src/views/workflow/form/components/DateTime.vue @@ -0,0 +1,69 @@ + + + + + + diff --git a/src/views/workflow/form/components/DateTimeRange.vue b/src/views/workflow/form/components/DateTimeRange.vue new file mode 100644 index 0000000..cfd9099 --- /dev/null +++ b/src/views/workflow/form/components/DateTimeRange.vue @@ -0,0 +1,136 @@ + + + + + + + + diff --git a/src/views/workflow/form/components/DeptPicker.vue b/src/views/workflow/form/components/DeptPicker.vue new file mode 100644 index 0000000..053fe20 --- /dev/null +++ b/src/views/workflow/form/components/DeptPicker.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/src/views/workflow/form/components/Description.vue b/src/views/workflow/form/components/Description.vue new file mode 100644 index 0000000..3214a08 --- /dev/null +++ b/src/views/workflow/form/components/Description.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/views/workflow/form/components/FileUpload.vue b/src/views/workflow/form/components/FileUpload.vue new file mode 100644 index 0000000..dec60ce --- /dev/null +++ b/src/views/workflow/form/components/FileUpload.vue @@ -0,0 +1,104 @@ + + + + diff --git a/src/views/workflow/form/components/ImageUpload.vue b/src/views/workflow/form/components/ImageUpload.vue new file mode 100644 index 0000000..b0ba9cf --- /dev/null +++ b/src/views/workflow/form/components/ImageUpload.vue @@ -0,0 +1,207 @@ + + + + + diff --git a/src/views/workflow/form/components/MultipleSelect.vue b/src/views/workflow/form/components/MultipleSelect.vue new file mode 100644 index 0000000..1d01f91 --- /dev/null +++ b/src/views/workflow/form/components/MultipleSelect.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/src/views/workflow/form/components/NumberInput.vue b/src/views/workflow/form/components/NumberInput.vue new file mode 100644 index 0000000..39a89aa --- /dev/null +++ b/src/views/workflow/form/components/NumberInput.vue @@ -0,0 +1,61 @@ + + + + diff --git a/src/views/workflow/form/components/RatePicker.vue b/src/views/workflow/form/components/RatePicker.vue new file mode 100644 index 0000000..16cbf22 --- /dev/null +++ b/src/views/workflow/form/components/RatePicker.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/src/views/workflow/form/components/SelectInput.vue b/src/views/workflow/form/components/SelectInput.vue new file mode 100644 index 0000000..fb2c9e7 --- /dev/null +++ b/src/views/workflow/form/components/SelectInput.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/src/views/workflow/form/components/SignPanel.vue b/src/views/workflow/form/components/SignPanel.vue new file mode 100644 index 0000000..dab0251 --- /dev/null +++ b/src/views/workflow/form/components/SignPanel.vue @@ -0,0 +1,118 @@ + + + + + diff --git a/src/views/workflow/form/components/SpanLayout.vue b/src/views/workflow/form/components/SpanLayout.vue new file mode 100644 index 0000000..1d7c3c6 --- /dev/null +++ b/src/views/workflow/form/components/SpanLayout.vue @@ -0,0 +1,238 @@ + + + + + diff --git a/src/views/workflow/form/components/TableList.vue b/src/views/workflow/form/components/TableList.vue new file mode 100644 index 0000000..2e648c2 --- /dev/null +++ b/src/views/workflow/form/components/TableList.vue @@ -0,0 +1,373 @@ + + + + + diff --git a/src/views/workflow/form/components/TextInput.vue b/src/views/workflow/form/components/TextInput.vue new file mode 100644 index 0000000..82f38d0 --- /dev/null +++ b/src/views/workflow/form/components/TextInput.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/views/workflow/form/components/TextareaInput.vue b/src/views/workflow/form/components/TextareaInput.vue new file mode 100644 index 0000000..6e32c38 --- /dev/null +++ b/src/views/workflow/form/components/TextareaInput.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/views/workflow/form/components/UserPicker.vue b/src/views/workflow/form/components/UserPicker.vue new file mode 100644 index 0000000..d66da63 --- /dev/null +++ b/src/views/workflow/form/components/UserPicker.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/src/views/workflow/form/config/AmountInputConfig.vue b/src/views/workflow/form/config/AmountInputConfig.vue new file mode 100644 index 0000000..66b837b --- /dev/null +++ b/src/views/workflow/form/config/AmountInputConfig.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/views/workflow/form/config/DateTimeConfig.vue b/src/views/workflow/form/config/DateTimeConfig.vue new file mode 100644 index 0000000..37f3a57 --- /dev/null +++ b/src/views/workflow/form/config/DateTimeConfig.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/src/views/workflow/form/config/DateTimeRangeConfig.vue b/src/views/workflow/form/config/DateTimeRangeConfig.vue new file mode 100644 index 0000000..98deecd --- /dev/null +++ b/src/views/workflow/form/config/DateTimeRangeConfig.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/views/workflow/form/config/DescriptionConfig.vue b/src/views/workflow/form/config/DescriptionConfig.vue new file mode 100644 index 0000000..5d237a4 --- /dev/null +++ b/src/views/workflow/form/config/DescriptionConfig.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/src/views/workflow/form/config/FileUploadConfig.vue b/src/views/workflow/form/config/FileUploadConfig.vue new file mode 100644 index 0000000..af6d96c --- /dev/null +++ b/src/views/workflow/form/config/FileUploadConfig.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/src/views/workflow/form/config/ImageUploadConfig.vue b/src/views/workflow/form/config/ImageUploadConfig.vue new file mode 100644 index 0000000..cf2a300 --- /dev/null +++ b/src/views/workflow/form/config/ImageUploadConfig.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/src/views/workflow/form/config/LocationConfig.vue b/src/views/workflow/form/config/LocationConfig.vue new file mode 100644 index 0000000..ba8533f --- /dev/null +++ b/src/views/workflow/form/config/LocationConfig.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/views/workflow/form/config/MoneyInputConfig.vue b/src/views/workflow/form/config/MoneyInputConfig.vue new file mode 100644 index 0000000..e08ce27 --- /dev/null +++ b/src/views/workflow/form/config/MoneyInputConfig.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/views/workflow/form/config/NumberInputConfig.vue b/src/views/workflow/form/config/NumberInputConfig.vue new file mode 100644 index 0000000..69441c3 --- /dev/null +++ b/src/views/workflow/form/config/NumberInputConfig.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/src/views/workflow/form/config/OrgPickerConfig.vue b/src/views/workflow/form/config/OrgPickerConfig.vue new file mode 100644 index 0000000..519aa82 --- /dev/null +++ b/src/views/workflow/form/config/OrgPickerConfig.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/src/views/workflow/form/config/RatePickerConfig.vue b/src/views/workflow/form/config/RatePickerConfig.vue new file mode 100644 index 0000000..38cf9d9 --- /dev/null +++ b/src/views/workflow/form/config/RatePickerConfig.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/workflow/form/config/SelectInputConfig.vue b/src/views/workflow/form/config/SelectInputConfig.vue new file mode 100644 index 0000000..df2de19 --- /dev/null +++ b/src/views/workflow/form/config/SelectInputConfig.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/views/workflow/form/config/SignPanelConfig.vue b/src/views/workflow/form/config/SignPanelConfig.vue new file mode 100644 index 0000000..3c01029 --- /dev/null +++ b/src/views/workflow/form/config/SignPanelConfig.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/src/views/workflow/form/config/TableListConfig.vue b/src/views/workflow/form/config/TableListConfig.vue new file mode 100644 index 0000000..0b72036 --- /dev/null +++ b/src/views/workflow/form/config/TableListConfig.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/src/views/workflow/form/config/TextInputConfig.vue b/src/views/workflow/form/config/TextInputConfig.vue new file mode 100644 index 0000000..f8cebab --- /dev/null +++ b/src/views/workflow/form/config/TextInputConfig.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/src/views/workflow/form/config/TextareaInputConfig.vue b/src/views/workflow/form/config/TextareaInputConfig.vue new file mode 100644 index 0000000..30df210 --- /dev/null +++ b/src/views/workflow/form/config/TextareaInputConfig.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/src/views/workflow/form/utils/CustomUtil.js b/src/views/workflow/form/utils/CustomUtil.js new file mode 100644 index 0000000..ee42c93 --- /dev/null +++ b/src/views/workflow/form/utils/CustomUtil.js @@ -0,0 +1,27 @@ +Array.prototype.remove = function (value) { + let index = this.indexOf(value) + if (index > -1) { + this.splice(index, 1) + } + return index +} + +//移除对象数组,匹配唯一key +Array.prototype.removeByKey = function (key, val) { + let index = this.findIndex(value => value[key] === val) + if (index > -1) { + this.splice(index, 1) + } + return index +} + +//对象数组转map +Array.prototype.toMap = function (key) { + let map = new Map() + this.forEach(v => map.set(v[key], v)) + return map +} + + + + diff --git a/src/views/workflow/form/utils/date.js b/src/views/workflow/form/utils/date.js new file mode 100644 index 0000000..f75e3cd --- /dev/null +++ b/src/views/workflow/form/utils/date.js @@ -0,0 +1,118 @@ +//时间转换为String类型 +const moment = require("moment"); + +function simpleDateFormat(pattern) { + var fmt = new Object(); + fmt.pattern = pattern; + + fmt.parse = function (source) { + try { + return new Date(source); + } catch (e) { + console.log("字符串 " + source + " 转时间格式失败!"); + return null; + } + }; + + fmt.format = function (date) { + if (typeof (date) == "undefined" || date == null || date == "") { + return ""; + } + + try { + date = new Date(date); + } catch (e) { + console.log("时间 " + date + " 格式化失败!"); + return ""; + } + + var strTime = this.pattern;//时间表达式的正则 + + var o = { + "M+": date.getMonth() + 1, //月份 + "d+": date.getDate(), //日 + "H+": date.getHours(), //小时 + "m+": date.getMinutes(), //分 + "s+": date.getSeconds(), //秒 + "q+": Math.floor((date.getMonth() + 3) / 3), //季度 + "S": date.getMilliseconds() //毫秒 + }; + + if (/(y+)/.test(strTime)) { + strTime = strTime + .replace(RegExp.$1, (date.getFullYear() + "") + .substr(4 - RegExp.$1.length)); + } + for (var k in o) { + if (new RegExp("(" + k + ")").test(strTime)) { + strTime = strTime.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); + } + } + + return strTime; + }; + return fmt; +} + +//时间格式化为yyyy-MM-dd +function simpleDateFormatByMoreLine(date) { + var fmt = simpleDateFormat("yyyy-MM-dd"); + date = fmt.parse(date) + return fmt.format(date) +} + +/** + * @param dateBegin 开始时间 + * @param dateEnd 结束时间 + * @returns {string} 时间差 天 小时 分钟 秒 + */ +function consumingTime(dateBegin, dateEnd) { + // //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了 + let submitTime = new Date(dateBegin) + let endTime = new Date(dateEnd) + var dateDiff = endTime - submitTime;//时间差的毫秒数 + var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//计算出相差天数 + var leave1 = dateDiff % (24 * 3600 * 1000) //计算天数后剩余的毫秒数 + var hours = Math.floor(leave1 / (3600 * 1000))//计算出小时数 + //计算相差分钟数 + var leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数 + var minutes = Math.floor(leave2 / (60 * 1000))//计算相差分钟数 + //计算相差秒数 + var leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数 + var seconds = Math.round(leave3 / 1000) + return dayDiff + "天 " + hours + "小时 " + minutes + " 分钟" + seconds + " 秒"; +} + +export function timeLength(start, dateEnd) { + // //如果时间格式是正确的,那下面这一步转化时间格式就可以不用了 + let mstart = moment(start); + let mend = moment(dateEnd); + let years = mend.diff(start, "years"); + let months = mend.diff(start, "months"); + let days = mend.diff(start, "days"); + let hours = mend.diff(start, "hours"); + let minutes = mend.diff(start, "minutes"); + minutes = minutes % 60; + hours = hours % 24; + months = months % 12; + //因为每月天不固定,所以天要特殊动态处理 + if (mstart.date() < mend.date()) { + days = mend.date() - mstart.date(); + if (minutes > 0 || hours > 0) { + days--; + } + } + //处理超过俩月且天超过31 + if (days > 31 && mend.month() - mstart.month() >= 2) { + //将日期推至上月求差 + days = mend.diff(mstart.add(mend.month() - mstart.month() - 1, "month"), "days"); + } + return `${years > 0 ? years + "年 " : " "}` + `${months > 0 ? months + "个月 " : " "}` + `${days > 0 ? days + "天 " : " "}` + + `${hours > 0 ? hours + "小时 " : " "}` + `${minutes > 0 ? minutes + "分钟 " : " "}`; +} + +module.exports = { + formatToYYYYMMDD: simpleDateFormatByMoreLine, + consumingTime: consumingTime, + timeLength: timeLength +} diff --git a/src/views/workflow/initiated/index.vue b/src/views/workflow/initiated/index.vue new file mode 100644 index 0000000..7214352 --- /dev/null +++ b/src/views/workflow/initiated/index.vue @@ -0,0 +1,157 @@ + + + + diff --git a/src/views/workflow/listen/index.vue b/src/views/workflow/listen/index.vue new file mode 100644 index 0000000..1a5e526 --- /dev/null +++ b/src/views/workflow/listen/index.vue @@ -0,0 +1,341 @@ + + + diff --git a/src/views/workflow/process/DefaultNodeProps.js b/src/views/workflow/process/DefaultNodeProps.js new file mode 100644 index 0000000..b280a9f --- /dev/null +++ b/src/views/workflow/process/DefaultNodeProps.js @@ -0,0 +1,126 @@ +//审批节点默认属性 +export const APPROVAL_PROPS = { + assignedType: "ASSIGN_USER", //审批类型 + mode: "AND", //会签模式 + sign: false, //是否签字 + headerBgc: '#ff943e', //节点背景颜色 + nobody: { //没有审批的的时候需要的操作 + handler: "TO_PASS", //操作 + assignedUser: [] //审批人列表 + }, + matrixApproval: true, + dstiMatrix: false, + generalManager: true, + president: true, + duplicateApproval: false, + optionalChargeLeadership: false, + skipSelf: true, + timeLimit: { //边界事件 + timeout: { //超时提醒时间 + unit: "H", + value: 0 + }, + handler: { //超时提醒触发时候的操作 + type: "REFUSE", //操作 + notify: { + once: true, //是否循环 + hour: 1 + } + } + }, + assignedUser: [], // 审批人列表 + formPerms: [], //表单权限 + selfSelect: { //用户自选 + multiple: false //用户自选时是否是多选 + }, + leaderTop: { //领导 + endCondition: "TOP", + endLevel: 1, + }, + leader: { //第几级领导 + level: 1 + }, + listener: { + state: false, + list: [] + }, + roleList: [], //角色列表 + refuse: { //拒绝的操作 + type: 'TO_END', //驳回规则 TO_END TO_NODE TO_BEFORE + target: '' //驳回到指定ID的节点 + }, + formUser: '' //表单用户 +} + +//根节点默认属性 +export const ROOT_PROPS = { + assignedUser: [], //审批人 + formPerms: [] //表单权限 +} + +//条件节点默认属性 +export const CONDITION_PROPS = { + groupsType: "OR", //条件组逻辑关系 OR、AND + groups: [ + { + groupType: "AND", //条件组内条件关系 OR、AND + cids: [], //条件ID集合 + conditions: [] //组内子条件 + } + ], + expression: "" //自定义表达式,灵活构建逻辑关系 +} + +//抄送节点默认属性 +export const CC_PROPS = { + assignedType: "ASSIGN_USER", //审批类型 + shouldAdd: false, + assignedUser: [], + formPerms: [] +} + +//触发器节点默认属性 +export const TRIGGER_PROPS = { + type: 'WEBHOOK', + http: { + method: 'GET', //请求方法 支持GET/POST + url: '', //URL地址,可以直接带参数 + headers: [ //http header + { + name: '', + isField: true, + value: '' //支持表达式 ${xxx} xxx为表单字段id + } + ], + contentType: 'FORM', //请求参数类型 + params: [ //请求参数 + { + name: '', + isField: true, //是表单字段还是自定义 + value: '' //支持表达式 ${xxx} xxx为表单字段id + } + ], + retry: 1, + handlerByScript: false, + success: 'function handlerSuccess(res) {\n return {\n state: true, \n msg: "请求成功!" \n };\n}', + fail: 'function handlerFail(res) {\n return {\n state: true, \n msg: "请求失败!" \n };\n}' + }, + email: { + subject: '', + to: [], + cc: [], + content: '' + } +} + +//延时节点默认属性 +export const DELAY_PROPS = { + type: "FIXED", //延时类型 FIXED:到达当前节点后延时固定时长 、AUTO:延时到 dateTime设置的时间 + time: 0, //延时时间 + unit: "M", //时间单位 D天 H小时 M分钟 + dateTime: "" //如果当天没有超过设置的此时间点,就延时到这个指定的时间,到了就直接跳过不延时 +} + +export default { + APPROVAL_PROPS, CC_PROPS, DELAY_PROPS, CONDITION_PROPS, ROOT_PROPS, TRIGGER_PROPS +} diff --git a/src/views/workflow/process/ProcessDesign.vue b/src/views/workflow/process/ProcessDesign.vue new file mode 100644 index 0000000..b2ac0b8 --- /dev/null +++ b/src/views/workflow/process/ProcessDesign.vue @@ -0,0 +1,72 @@ + + + diff --git a/src/views/workflow/process/ProcessEdit.vue b/src/views/workflow/process/ProcessEdit.vue new file mode 100644 index 0000000..ee52dd1 --- /dev/null +++ b/src/views/workflow/process/ProcessEdit.vue @@ -0,0 +1,383 @@ + + + + + diff --git a/src/views/workflow/process/ProcessSetting.vue b/src/views/workflow/process/ProcessSetting.vue new file mode 100644 index 0000000..d2508b3 --- /dev/null +++ b/src/views/workflow/process/ProcessSetting.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/src/views/workflow/process/ProcessTree.vue b/src/views/workflow/process/ProcessTree.vue new file mode 100644 index 0000000..b705963 --- /dev/null +++ b/src/views/workflow/process/ProcessTree.vue @@ -0,0 +1,769 @@ + + + + diff --git a/src/views/workflow/process/common/AvatarEllipsis.vue b/src/views/workflow/process/common/AvatarEllipsis.vue new file mode 100644 index 0000000..b05ad8c --- /dev/null +++ b/src/views/workflow/process/common/AvatarEllipsis.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/src/views/workflow/process/common/DeptPicker.vue b/src/views/workflow/process/common/DeptPicker.vue new file mode 100644 index 0000000..089869f --- /dev/null +++ b/src/views/workflow/process/common/DeptPicker.vue @@ -0,0 +1,329 @@ + + + + + diff --git a/src/views/workflow/process/common/Ellipsis.vue b/src/views/workflow/process/common/Ellipsis.vue new file mode 100644 index 0000000..f26c270 --- /dev/null +++ b/src/views/workflow/process/common/Ellipsis.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/views/workflow/process/common/InsertButton.vue b/src/views/workflow/process/common/InsertButton.vue new file mode 100644 index 0000000..b06dcc4 --- /dev/null +++ b/src/views/workflow/process/common/InsertButton.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/src/views/workflow/process/common/RoleItems.vue b/src/views/workflow/process/common/RoleItems.vue new file mode 100644 index 0000000..02e4fe0 --- /dev/null +++ b/src/views/workflow/process/common/RoleItems.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/src/views/workflow/process/common/RolePicker.vue b/src/views/workflow/process/common/RolePicker.vue new file mode 100644 index 0000000..6fe8864 --- /dev/null +++ b/src/views/workflow/process/common/RolePicker.vue @@ -0,0 +1,276 @@ + + + + + diff --git a/src/views/workflow/process/common/UserPicker.vue b/src/views/workflow/process/common/UserPicker.vue new file mode 100644 index 0000000..aa75014 --- /dev/null +++ b/src/views/workflow/process/common/UserPicker.vue @@ -0,0 +1,430 @@ + + + + + diff --git a/src/views/workflow/process/config/ApprovalNodeConfig.vue b/src/views/workflow/process/config/ApprovalNodeConfig.vue new file mode 100644 index 0000000..9be3431 --- /dev/null +++ b/src/views/workflow/process/config/ApprovalNodeConfig.vue @@ -0,0 +1,447 @@ + + + + diff --git a/src/views/workflow/process/config/CcNodeConfig.vue b/src/views/workflow/process/config/CcNodeConfig.vue new file mode 100644 index 0000000..0669c21 --- /dev/null +++ b/src/views/workflow/process/config/CcNodeConfig.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/src/views/workflow/process/config/ConditionGroupItemConfig.vue b/src/views/workflow/process/config/ConditionGroupItemConfig.vue new file mode 100644 index 0000000..1f375d0 --- /dev/null +++ b/src/views/workflow/process/config/ConditionGroupItemConfig.vue @@ -0,0 +1,339 @@ + + + + + diff --git a/src/views/workflow/process/config/ConditionNodeConfig.vue b/src/views/workflow/process/config/ConditionNodeConfig.vue new file mode 100644 index 0000000..fa86de1 --- /dev/null +++ b/src/views/workflow/process/config/ConditionNodeConfig.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/src/views/workflow/process/config/DelayNodeConfig.vue b/src/views/workflow/process/config/DelayNodeConfig.vue new file mode 100644 index 0000000..2042a2c --- /dev/null +++ b/src/views/workflow/process/config/DelayNodeConfig.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/views/workflow/process/config/FormAuthorityConfig.vue b/src/views/workflow/process/config/FormAuthorityConfig.vue new file mode 100644 index 0000000..9115596 --- /dev/null +++ b/src/views/workflow/process/config/FormAuthorityConfig.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/src/views/workflow/process/config/NodeConfig.vue b/src/views/workflow/process/config/NodeConfig.vue new file mode 100644 index 0000000..2279d6e --- /dev/null +++ b/src/views/workflow/process/config/NodeConfig.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/views/workflow/process/config/RootConfig.vue b/src/views/workflow/process/config/RootConfig.vue new file mode 100644 index 0000000..5d7275e --- /dev/null +++ b/src/views/workflow/process/config/RootConfig.vue @@ -0,0 +1,45 @@ + + + + + + \ No newline at end of file diff --git a/src/views/workflow/process/config/TriggerNodeConfig.vue b/src/views/workflow/process/config/TriggerNodeConfig.vue new file mode 100644 index 0000000..88a20d4 --- /dev/null +++ b/src/views/workflow/process/config/TriggerNodeConfig.vue @@ -0,0 +1,342 @@ + + + + + diff --git a/src/views/workflow/process/index.vue b/src/views/workflow/process/index.vue new file mode 100644 index 0000000..39b18cc --- /dev/null +++ b/src/views/workflow/process/index.vue @@ -0,0 +1,274 @@ + + + diff --git a/src/views/workflow/process/nodes/AddBranchNode.vue b/src/views/workflow/process/nodes/AddBranchNode.vue new file mode 100644 index 0000000..71566f9 --- /dev/null +++ b/src/views/workflow/process/nodes/AddBranchNode.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/src/views/workflow/process/nodes/ApprovalNode.vue b/src/views/workflow/process/nodes/ApprovalNode.vue new file mode 100644 index 0000000..7e22c28 --- /dev/null +++ b/src/views/workflow/process/nodes/ApprovalNode.vue @@ -0,0 +1,213 @@ + + + + + diff --git a/src/views/workflow/process/nodes/CcNode.vue b/src/views/workflow/process/nodes/CcNode.vue new file mode 100644 index 0000000..ef712f9 --- /dev/null +++ b/src/views/workflow/process/nodes/CcNode.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/src/views/workflow/process/nodes/ConcurrentNode.vue b/src/views/workflow/process/nodes/ConcurrentNode.vue new file mode 100644 index 0000000..a769572 --- /dev/null +++ b/src/views/workflow/process/nodes/ConcurrentNode.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/src/views/workflow/process/nodes/ConditionNode.vue b/src/views/workflow/process/nodes/ConditionNode.vue new file mode 100644 index 0000000..5470809 --- /dev/null +++ b/src/views/workflow/process/nodes/ConditionNode.vue @@ -0,0 +1,308 @@ + + + + + diff --git a/src/views/workflow/process/nodes/DelayNode.vue b/src/views/workflow/process/nodes/DelayNode.vue new file mode 100644 index 0000000..8666f6a --- /dev/null +++ b/src/views/workflow/process/nodes/DelayNode.vue @@ -0,0 +1,86 @@ + + + diff --git a/src/views/workflow/process/nodes/EmptyNode.vue b/src/views/workflow/process/nodes/EmptyNode.vue new file mode 100644 index 0000000..15d0c40 --- /dev/null +++ b/src/views/workflow/process/nodes/EmptyNode.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/src/views/workflow/process/nodes/MergeNode.vue b/src/views/workflow/process/nodes/MergeNode.vue new file mode 100644 index 0000000..598ddf5 --- /dev/null +++ b/src/views/workflow/process/nodes/MergeNode.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/src/views/workflow/process/nodes/Node.vue b/src/views/workflow/process/nodes/Node.vue new file mode 100644 index 0000000..2b4188c --- /dev/null +++ b/src/views/workflow/process/nodes/Node.vue @@ -0,0 +1,291 @@ + + + + + diff --git a/src/views/workflow/process/nodes/ProcessEndNode.vue b/src/views/workflow/process/nodes/ProcessEndNode.vue new file mode 100644 index 0000000..1b2c655 --- /dev/null +++ b/src/views/workflow/process/nodes/ProcessEndNode.vue @@ -0,0 +1,3 @@ + diff --git a/src/views/workflow/process/nodes/RootNode.vue b/src/views/workflow/process/nodes/RootNode.vue new file mode 100644 index 0000000..9abdc2b --- /dev/null +++ b/src/views/workflow/process/nodes/RootNode.vue @@ -0,0 +1,55 @@ + + + diff --git a/src/views/workflow/process/nodes/TriggerNode.vue b/src/views/workflow/process/nodes/TriggerNode.vue new file mode 100644 index 0000000..71500dc --- /dev/null +++ b/src/views/workflow/process/nodes/TriggerNode.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/src/views/workflow/task/index.vue b/src/views/workflow/task/index.vue new file mode 100644 index 0000000..c5ecd11 --- /dev/null +++ b/src/views/workflow/task/index.vue @@ -0,0 +1,140 @@ + + + + diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..905f3c9 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,101 @@ +import {fileURLToPath, URL} from 'node:url' +import {defineConfig} from 'vite' +import AutoImport from 'unplugin-auto-import/vite' +import Components from 'unplugin-vue-components/vite' +import {ElementPlusResolver} from 'unplugin-vue-components/resolvers' +import Icons from 'unplugin-icons/vite' +import IconsResolver from 'unplugin-icons/resolver' +import vue from '@vitejs/plugin-vue' +import vueJsx from '@vitejs/plugin-vue-jsx' +import Inspect from 'vite-plugin-inspect' +import viteSvgIcons from 'vite-plugin-svg-icons' +import path from 'path' +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + vueJsx(), + AutoImport({ + //自动导入vue相关函数 + imports: ['vue', 'vue-router'], + resolvers: [ + ElementPlusResolver(), + //自动导入图标组件 + IconsResolver({ + prefix: 'Icon', + }), + ], + }), + Components({ + dirs: ['src/components', 'src/fvcomponents'], + resolvers: [ + // 自动注册图标组件 + IconsResolver({ + enabledRequirements: ['ep'], + }), + //自动导入组件 + ElementPlusResolver() + ], + }), + Icons({ + autoInstall: true, + }), + viteSvgIcons({ + // 指定需要缓存的图标文件夹 + iconDirs: [path.resolve(__dirname, 'src/assets/svg')], + // 指定symbolId格式 + symbolId: 'icon-[dir]-[name]', + }), + Inspect(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + }, + build: { + minify: 'esbuild', + terserOptions: { + compress: { + drop_console: false, // 生产环境移除log + drop_debugger: true // 生产环境禁用debugger + } + } + }, + server: { + host: '0.0.0.0', + port: 8888, + strictPort: false, + open: true, + proxy: { + // '/api/workflow': { + // target: 'http://frp.feashow.cn:31800/', + // // target: 'http://clay.frp.feashow.cn/', + // // target: 'http://192.168.31.175:8000', + // changeOrigin: true, + // rewrite: (path) => path.replace(/^\/api/, '') + // }, + // '/api/admin': { + // // target: 'http://frp.feashow.cn:31800/', + // target: 'http://clay.frp.feashow.cn/', + // // target: 'http://192.168.31.175:8000', + // changeOrigin: true, + // rewrite: (path) => path.replace(/^\/api/, '') + // }, + '/api': { + // target: 'http://kyglweb.scgzjy.com:8080/', + target: 'http://mosr.feashow.cn', + changeOrigin: true, + // target: 'http://clay.frp.feashow.cn', + // // target: 'http://frp.feashow.cn:31800/', + // changeOrigin: true, + // rewrite: (path) => path.replace(/^\/api/, '') + }, + // '/api/notice-ws': { + // target: 'ws://mosr.feashow.cn/summary/notice-ws', + // ws: true, + // changeOrigin: true, + // } + } + } +})