This commit is contained in:
gtz 2022-10-26 16:06:12 +08:00
commit 0925d01fb8
331 muutettua tiedostoa jossa 19737 lisäystä ja 0 poistoa

7
.dockerignore Normal file
Näytä tiedosto

@ -0,0 +1,7 @@
.vscode/
.idea/
node_modules/
dist/
**/*.log
LICENSE
README.md

52
.drone.yml Normal file
Näytä tiedosto

@ -0,0 +1,52 @@
---
kind: pipeline
type: docker
name: default
steps:
- name: build
image: docker:dind
volumes:
- name: dockersock
path: /var/run/docker.sock
- name: dockerconfig
path: /root/.docker
commands:
- docker build -t harbor.picaiba.com/mes/mes-ui:hfxny-1.0.0 ./ && docker push harbor.picaiba.com/mes/mes-ui:hfxny-1.0.0
- name: deploy
image: harbor.picaiba.com/tools/kubectl:1.19.8
commands:
- echo "172.27.0.20 lb.kubesphere.local" >> /etc/hosts
#- echo "52.74.223.119 github.com" >> /etc/hosts
- sleep 1
- kubectl scale --replicas=0 deployment/mes-ui -n mes-hfxny
- sleep 3
- kubectl scale --replicas=1 deployment/mes-ui -n mes-hfxny
depends_on:
- build
- name: notification
image: lddsb/drone-dingtalk-message
settings:
token: 37a6483274f6de648a26d6710e4d8160eb7d471752abb2d70f8b7958af58fe11
type: markdown
secret: SEC83b10f5fefd6127e4073360d4447bb7276a90386aeee1275b2797dd377a903e7
tpl: http://res.picaiba.com/msg/msg.md
tips_title: 你有新消息
success_color: 008800
failure_color: FF0000
volumes:
- name: dockersock
host:
path: /var/run/docker.sock
- name: dockerconfig
host:
path: /root/.docker
trigger:
branch:
- projects/hfxny
event:
- push

14
.editorconfig Normal file
Näytä tiedosto

@ -0,0 +1,14 @@
# https://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

7
.env.production Normal file
Näytä tiedosto

@ -0,0 +1,7 @@
# just a flag
ENV = 'production'
# base api
VUE_APP_BASE_API = '/api'
VUE_APP_REPORT_DESIGN_URL = '/ureport/designer'
VUE_APP_REPORT_VIEW_URL = '/ureport/preview'

8
.env.staging Normal file
Näytä tiedosto

@ -0,0 +1,8 @@
NODE_ENV = production
# just a flag
ENV = 'staging'
# base api
VUE_APP_BASE_API = '/stage-api'

4
.eslintignore Normal file
Näytä tiedosto

@ -0,0 +1,4 @@
build/*.js
src/assets
public
dist

201
.eslintrc.js Normal file
Näytä tiedosto

@ -0,0 +1,201 @@
module.exports = {
root: true,
parserOptions: {
parser: 'babel-eslint',
sourceType: 'module'
},
env: {
browser: true,
node: true,
es6: true,
},
extends: ['plugin:vue/recommended', 'eslint:recommended'],
// add your custom rules here
//it is base on https://github.com/vuejs/eslint-config-vue
rules: {
"vue/max-attributes-per-line": [2, {
"singleline": 10,
"multiline": {
"max": 1,
"allowFirstLine": false
}
}],
"vue/no-use-v-if-with-v-for": ["error", {
"allowUsingIterationVar": true
}],
"vue/singleline-html-element-content-newline": "off",
"vue/multiline-html-element-content-newline":"off",
"vue/name-property-casing": ["error", "PascalCase"],
"vue/no-v-html": "off",
'accessor-pairs': 2,
'arrow-spacing': [2, {
'before': true,
'after': true
}],
'block-spacing': [2, 'always'],
'brace-style': [2, '1tbs', {
'allowSingleLine': true
}],
'camelcase': [0, {
'properties': 'always'
}],
'comma-dangle': [2, 'never'],
'comma-spacing': [2, {
'before': false,
'after': true
}],
'comma-style': [2, 'last'],
'constructor-super': 2,
'curly': [2, 'multi-line'],
'dot-location': [2, 'property'],
'eol-last': 2,
'eqeqeq': ["error", "always", {"null": "ignore"}],
'generator-star-spacing': [2, {
'before': true,
'after': true
}],
'handle-callback-err': [2, '^(err|error)$'],
'indent': [2, 2, {
'SwitchCase': 1
}],
'jsx-quotes': [2, 'prefer-single'],
'key-spacing': [2, {
'beforeColon': false,
'afterColon': true
}],
'keyword-spacing': [2, {
'before': true,
'after': true
}],
'new-cap': [2, {
'newIsCap': true,
'capIsNew': false
}],
'new-parens': 2,
'no-array-constructor': 2,
'no-caller': 2,
'no-console': 'off',
'no-class-assign': 2,
'no-cond-assign': 2,
'no-const-assign': 2,
'no-control-regex': 0,
'no-delete-var': 2,
'no-dupe-args': 2,
'no-dupe-class-members': 2,
'no-dupe-keys': 2,
'no-duplicate-case': 2,
'no-empty-character-class': 2,
'no-empty-pattern': 2,
'no-eval': 2,
'no-ex-assign': 2,
'no-extend-native': 2,
'no-extra-bind': 2,
'no-extra-boolean-cast': 2,
'no-extra-parens': [2, 'functions'],
'no-fallthrough': 2,
'no-floating-decimal': 2,
'no-func-assign': 2,
'no-implied-eval': 2,
'no-inner-declarations': [2, 'functions'],
'no-invalid-regexp': 2,
'no-irregular-whitespace': 2,
'no-iterator': 2,
'no-label-var': 2,
'no-labels': [2, {
'allowLoop': false,
'allowSwitch': false
}],
'no-lone-blocks': 2,
'no-mixed-spaces-and-tabs': 2,
'no-multi-spaces': 2,
'no-multi-str': 2,
'no-multiple-empty-lines': [2, {
'max': 1
}],
'no-native-reassign': 2,
'no-negated-in-lhs': 2,
'no-new-object': 2,
'no-new-require': 2,
'no-new-symbol': 2,
'no-new-wrappers': 2,
'no-obj-calls': 2,
'no-octal': 2,
'no-octal-escape': 2,
'no-path-concat': 2,
'no-proto': 2,
'no-redeclare': 2,
'no-regex-spaces': 2,
'no-return-assign': [2, 'except-parens'],
'no-self-assign': 2,
'no-self-compare': 2,
'no-sequences': 2,
'no-shadow-restricted-names': 2,
'no-spaced-func': 2,
'no-sparse-arrays': 2,
'no-this-before-super': 2,
'no-throw-literal': 2,
'no-trailing-spaces': 2,
'no-undef': 2,
'no-undef-init': 2,
'no-unexpected-multiline': 2,
'no-unmodified-loop-condition': 2,
'no-unneeded-ternary': [2, {
'defaultAssignment': false
}],
'no-unreachable': 2,
'no-unsafe-finally': 2,
'no-unused-vars': [2, {
'vars': 'all',
'args': 'none'
}],
'no-useless-call': 2,
'no-useless-computed-key': 2,
'no-useless-constructor': 2,
'no-useless-escape': 0,
'no-whitespace-before-property': 2,
'no-with': 2,
'one-var': [2, {
'initialized': 'never'
}],
'operator-linebreak': [2, 'after', {
'overrides': {
'?': 'before',
':': 'before'
}
}],
'padded-blocks': [2, 'never'],
'quotes': [2, 'single', {
'avoidEscape': true,
'allowTemplateLiterals': true
}],
'semi': [2, 'never'],
'semi-spacing': [2, {
'before': false,
'after': true
}],
'space-before-blocks': [2, 'always'],
'space-before-function-paren': [2, 'never'],
'space-in-parens': [2, 'never'],
'space-infix-ops': 2,
'space-unary-ops': [2, {
'words': true,
'nonwords': false
}],
'spaced-comment': [2, 'always', {
'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
}],
'template-curly-spacing': [2, 'never'],
'use-isnan': 2,
'valid-typeof': 2,
'wrap-iife': [2, 'any'],
'yield-star-spacing': [2, 'both'],
'yoda': [2, 'never'],
'prefer-const': 2,
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
'object-curly-spacing': [2, 'always', {
objectsInObjects: false
}],
'array-bracket-spacing': [2, 'never']
}
}

25
.gitignore vendored Normal file
Näytä tiedosto

@ -0,0 +1,25 @@
.DS_Store
node_modules/
dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
**/*.log
tests/**/coverage/
tests/e2e/reports
selenium-debug.log
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.local
package-lock.json
yarn.lock
/.env.development
/vue.config.js

12
.prettierrc Normal file
Näytä tiedosto

@ -0,0 +1,12 @@
{
"semi": false,
"singleQuote": true,
"trailingComma": "none",
"useTabs": false,
"tabWidth": 2,
"htmlWhitespaceSensitivity": "ignore",
"vueIndentScriptAndStyle": false,
"embeddedLanguageFormatting": "off",
"bracketSameLine":false,
"printWidth": 120
}

5
.travis.yml Normal file
Näytä tiedosto

@ -0,0 +1,5 @@
language: node_js
node_js: 10
script: npm run test
notifications:
email: false

10
Dockerfile Normal file
Näytä tiedosto

@ -0,0 +1,10 @@
FROM node:12 AS builder
WORKDIR /app
ADD package.json /app/
RUN npm config set registry https://registry.npmmirror.com && npm install
ADD . /app
RUN npm run build:prod
FROM busybox
LABEL maintainer thomas.hairong@gmail.com
COPY --from=builder /app/dist /html

21
LICENSE Normal file
Näytä tiedosto

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017-present PanJiaChen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

BIN
QR.png Normal file

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 717 B

49
README.md Normal file
Näytä tiedosto

@ -0,0 +1,49 @@
<!--
* @Author: gtz
* @Date: 2021-01-27 10:07:42
* @LastEditors: gtz
* @LastEditTime: 2021-04-22 09:58:18
* @Description: file content
-->
# Readme
页面原型地址: http://rp.picaiba.com/mes/2020-12-29
element 表单生成工具: https://mrhj.gitee.io/form-generator/#/
***
* 顶栏右上角设置的配置在 @/layout/components/Navbar.vue 中
* 富文本编辑器中 右上角上传图片的目标地址需要修改,在@/components/Tinymce/components/EditorImage.vue 中
##### echarts封装
* 考虑使用mixin加入部分功能
* option配置分离再复用
* 定义统一输入的数据格式通过props
##### 国际化注意事项
* 所有methodbtn的tableBtn配置中的btnName写成下种形式具体配置项在@/lang/i18n.js 中,若无想要的自行添加
```
btnName: 'btn.edit'
```
* 所有hidden不为true的路由的mate中的title写成下种形式位置同上
```
meta: { title: routerTitle.dashboard.dashboard?.[language] || routerTitle.dashboard.dashboard.en, icon: 'dashboard', affix: true }
```
* 所有table页引入国际化组件表格配置项中label写成下种形式具体配置需自行到@/lang/en.js 和@/lang/zh.js 中添加
```
import i18n from '@/lang'
const tableProps = [{
...
label: i18n.t('userManage.userId'),
...
}]
```
##### 切换主题色
* 主题样式文件应使用本地文件不应使用element云上的目前尝试使用本地可能因为缓存策略导致切换主题色仅第一次生效目前仍保留使用element云上的样式文件
##### 备注
* 废品报废添加时间隐藏,质量检测计划检测速率、检测内容隐藏

26
babel.config.js Normal file
Näytä tiedosto

@ -0,0 +1,26 @@
/*
* @Date: 2020-12-14 09:07:03
* @LastEditors: guo
* @LastEditTime: 2020-12-29 21:34:11
* @FilePath: \basic-admin\babel.config.js
* @Description: 修改babel配置
* preset-env用于适配浏览器最新4个版本
* transform-runtime 用于识别一些比较新的js语法
*/
module.exports = {
presets: [
['@babel/preset-env', {
'useBuiltIns': 'usage',
'debug': true,
'targets': [
'last 4 versions'
]
}],
'@vue/app'
],
plugins: [
['@babel/plugin-transform-runtime', {
'corejs': 3
}]
]
}

35
build/index.js Normal file
Näytä tiedosto

@ -0,0 +1,35 @@
const { run } = require('runjs')
const chalk = require('chalk')
const config = require('../vue.config.js')
const rawArgv = process.argv.slice(2)
const args = rawArgv.join(' ')
if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
const report = rawArgv.includes('--report')
run(`vue-cli-service build ${args}`)
const port = 9526
const publicPath = config.publicPath
var connect = require('connect')
var serveStatic = require('serve-static')
const app = connect()
app.use(
publicPath,
serveStatic('./dist', {
index: ['index.html', '/']
})
)
app.listen(port, function () {
console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`))
if (report) {
console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`))
}
})
} else {
run(`vue-cli-service build ${args}`)
}

50
default.conf Normal file
Näytä tiedosto

@ -0,0 +1,50 @@
server {
listen 80 default_server;
listen [::]:80 default_server;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
try_files $uri $uri/ @rewrites;
}
location /spc/ {
proxy_pass http://58.210.206.230:8000/;
}
location /api {
access_log off;
add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Methods GET,OPTIONS,POST,GET,PUT,DELETE always;
add_header Access-Control-Allow-Headers $http_access_control_request_headers;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Max-Age 1800;
if ($request_method = OPTIONS){
add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Methods GET,OPTIONS,POST,GET,PUT,DELETE always;
add_header Access-Control-Allow-Headers $http_access_control_request_headers;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Max-Age 1800;
return 204;
}
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffering off;
proxy_pass http://mes:9090/api;
proxy_http_version 1.1;
}
location @rewrites {
rewrite ^(.+)$ /index.html last;
}
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires max;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
}

24
jest.config.js Normal file
Näytä tiedosto

@ -0,0 +1,24 @@
module.exports = {
moduleFileExtensions: ['js', 'jsx', 'json', 'vue'],
transform: {
'^.+\\.vue$': 'vue-jest',
'.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$':
'jest-transform-stub',
'^.+\\.jsx?$': 'babel-jest'
},
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1'
},
snapshotSerializers: ['jest-serializer-vue'],
testMatch: [
'**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
],
collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'],
coverageDirectory: '<rootDir>/tests/unit/coverage',
// 'collectCoverage': true,
'coverageReporters': [
'lcov',
'text-summary'
],
testURL: 'http://localhost/'
}

9
jsconfig.json Normal file
Näytä tiedosto

@ -0,0 +1,9 @@
{
"compilerOptions": {
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
}
},
"exclude": ["node_modules", "dist"]
}

129
package.json Normal file
Näytä tiedosto

@ -0,0 +1,129 @@
{
"name": "vue-element-admin",
"version": "4.2.1",
"description": "A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features",
"author": "Pan <panfree23@gmail.com>",
"license": "MIT",
"scripts": {
"dev": "vue-cli-service serve",
"build:prod": "vue-cli-service build",
"build:stage": "vue-cli-service build --mode staging",
"preview": "node build/index.js --preview",
"lint": "eslint --ext .js,.vue src",
"test:unit": "jest --clearCache && vue-cli-service test:unit",
"test:ci": "npm run lint && npm run test:unit",
"svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
"new": "plop"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"src/**/*.{js,vue}": [
"eslint --fix",
"git add"
]
},
"keywords": [
"vue",
"admin",
"dashboard",
"element-ui",
"boilerplate",
"admin-template",
"management-system"
],
"repository": {
"type": "git",
"url": "git+https://github.com/PanJiaChen/vue-element-admin.git"
},
"bugs": {
"url": "https://github.com/PanJiaChen/vue-element-admin/issues"
},
"dependencies": {
"axios": "0.18.1",
"clipboard": "2.0.4",
"codemirror": "5.45.0",
"desandro-matches-selector": "^2.0.2",
"driver.js": "0.9.5",
"dropzone": "5.5.1",
"echarts": "4.2.1",
"element-ui": "2.13.0",
"ev-emitter": "^2.1.0",
"file-saver": "2.0.1",
"fizzy-ui-utils": "^3.0.0",
"fuse.js": "3.4.4",
"get-size": "^2.0.3",
"js-cookie": "2.2.0",
"jsonlint": "1.6.3",
"jszip": "3.2.1",
"lodash": "^4.17.15",
"masonry-layout": "^4.2.2",
"moment": "^2.27.0",
"normalize.css": "7.0.0",
"nprogress": "0.2.0",
"outlayer": "^2.1.1",
"path-to-regexp": "2.4.0",
"raphael": "git+https://gitee.com/shihairong/raphael",
"screenfull": "4.2.0",
"script-loader": "0.7.2",
"showdown": "1.9.0",
"sortablejs": "1.8.4",
"viewerjs": "^1.6.1",
"vue": "2.6.10",
"vue-bus": "^1.2.1",
"vue-count-to": "1.0.13",
"vue-i18n": "^8.22.2",
"vue-perfect-scrollbar": "^0.2.1",
"vue-router": "3.0.2",
"vue-splitpane": "1.0.4",
"vuedraggable": "2.20.0",
"vuex": "3.1.0",
"write-excel-file": "^1.4.6",
"xlsx": "0.14.1"
},
"devDependencies": {
"@babel/core": "7.0.0",
"@babel/plugin-transform-runtime": "^7.12.10",
"@babel/preset-env": "^7.12.11",
"@babel/register": "7.0.0",
"@babel/runtime-corejs3": "^7.12.5",
"@vue/cli-plugin-babel": "3.5.3",
"@vue/cli-plugin-eslint": "^3.9.1",
"@vue/cli-plugin-unit-jest": "3.5.3",
"@vue/cli-service": "3.5.3",
"@vue/test-utils": "1.0.0-beta.29",
"autoprefixer": "^9.5.1",
"babel-core": "7.0.0-bridge.0",
"babel-eslint": "8.2.2",
"babel-jest": "23.6.0",
"chalk": "2.4.2",
"chokidar": "2.1.5",
"connect": "3.6.6",
"eslint": "5.15.3",
"eslint-plugin-vue": "5.2.2",
"html-webpack-plugin": "3.2.0",
"husky": "1.3.1",
"lint-staged": "8.1.5",
"mockjs": "1.0.1-beta3",
"plop": "2.3.0",
"runjs": "^4.3.2",
"sass": "^1.26.10",
"sass-loader": "^7.1.0",
"script-ext-html-webpack-plugin": "2.1.3",
"serve-static": "^1.13.2",
"svg-sprite-loader": "4.1.3",
"svgo": "1.2.0",
"vue-template-compiler": "2.6.10"
},
"engines": {
"node": ">=8.9",
"npm": ">= 3.0.0"
},
"browserslist": [
"> 1%",
"last 2 versions"
]
}

Näytä tiedosto

@ -0,0 +1,26 @@
{{#if template}}
<template>
<div />
</template>
{{/if}}
{{#if script}}
<script>
export default {
name: '{{ properCase name }}',
props: {},
data() {
return {}
},
created() {},
mounted() {},
methods: {}
}
</script>
{{/if}}
{{#if style}}
<style lang="scss" scoped>
</style>
{{/if}}

Näytä tiedosto

@ -0,0 +1,55 @@
const { notEmpty } = require('../utils.js')
module.exports = {
description: 'generate vue component',
prompts: [{
type: 'input',
name: 'name',
message: 'component name please',
validate: notEmpty('name')
},
{
type: 'checkbox',
name: 'blocks',
message: 'Blocks:',
choices: [{
name: '<template>',
value: 'template',
checked: true
},
{
name: '<script>',
value: 'script',
checked: true
},
{
name: 'style',
value: 'style',
checked: true
}
],
validate(value) {
if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
return 'Components require at least a <script> or <template> tag.'
}
return true
}
}
],
actions: data => {
const name = '{{properCase name}}'
const actions = [{
type: 'add',
path: `src/components/${name}/index.vue`,
templateFile: 'plop-templates/component/index.hbs',
data: {
name: name,
template: data.blocks.includes('template'),
script: data.blocks.includes('script'),
style: data.blocks.includes('style')
}
}]
return actions
}
}

Näytä tiedosto

@ -0,0 +1,16 @@
{{#if state}}
const state = {}
{{/if}}
{{#if mutations}}
const mutations = {}
{{/if}}
{{#if actions}}
const actions = {}
{{/if}}
export default {
namespaced: true,
{{options}}
}

Näytä tiedosto

@ -0,0 +1,62 @@
const { notEmpty } = require('../utils.js')
module.exports = {
description: 'generate store',
prompts: [{
type: 'input',
name: 'name',
message: 'store name please',
validate: notEmpty('name')
},
{
type: 'checkbox',
name: 'blocks',
message: 'Blocks:',
choices: [{
name: 'state',
value: 'state',
checked: true
},
{
name: 'mutations',
value: 'mutations',
checked: true
},
{
name: 'actions',
value: 'actions',
checked: true
}
],
validate(value) {
if (!value.includes('state') || !value.includes('mutations')) {
return 'store require at least state and mutations'
}
return true
}
}
],
actions(data) {
const name = '{{name}}'
const { blocks } = data
const options = ['state', 'mutations']
const joinFlag = `,
`
if (blocks.length === 3) {
options.push('actions')
}
const actions = [{
type: 'add',
path: `src/store/modules/${name}.js`,
templateFile: 'plop-templates/store/index.hbs',
data: {
options: options.join(joinFlag),
state: blocks.includes('state'),
mutations: blocks.includes('mutations'),
actions: blocks.includes('actions')
}
}]
return actions
}
}

Näytä tiedosto

@ -0,0 +1,89 @@
{{#if template}}
<template>
<div class="{{ name }}-container">
<base-table :table-config="tableProps" :table-data="list" :is-loading="listLoading">
<method-btn slot="handleBtn" :method-list="tableBtn" @clickBtn="handleClick" />
</base-table>
<pagination v-show="total > listQuery.size" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
</div>
</template>
{{/if}}
{{#if script}}
<script>
// edit here
const tableBtn = [{
type: 'edit',
btnName: 'btn.edit'
}, {
type: 'delete',
btnName: 'btn.delete'
}]
const tableProps = [{
prop: '',
label: '',
width: '',
filter: null,
subcomponent: null,
align: ''
}]
import BaseTable from '@/components/BaseTable'
// edit here
import { fetchList } from '@/api/article'
import Pagination from '@/components/Pagination'
import MethodBtn from '@/components/BaseTable/subcomponents/MethodBtn'
export default {
name: '{{ properCase name }}',
props: {},
components: { Pagination, BaseTable, MethodBtn },
data() {
return {
tableBtn,
tableProps,
list: [],
total: 0,
listLoading: true,
listQuery: {
current: 1,
size: 10
}
}
},
created() {
this.getList()
},
mounted() {},
methods: {
handleClick(raw) {
},
getList() {
this.listLoading = true
// edit here
fetchList(this.listQuery).then(response => {
this.list = response.data.records
this.total = response.data.total
this.listLoading = false
})
}
}
}
</script>
{{/if}}
{{#if style}}
<style lang="scss" scoped>
.{{ name }}-container {
}
.edit-input {
padding-right: 100px;
}
.cancel-btn {
position: absolute;
right: 15px;
top: 10px;
}
</style>
{{/if}}

Näytä tiedosto

@ -0,0 +1,55 @@
const { notEmpty } = require('../utils.js')
module.exports = {
description: 'generate a table-view',
prompts: [{
type: 'input',
name: 'name',
message: 'input table name please',
validate: notEmpty('name')
},
{
type: 'checkbox',
name: 'blocks',
message: 'Blocks:',
choices: [{
name: '<template>',
value: 'template',
checked: true
},
{
name: '<script>',
value: 'script',
checked: true
},
{
name: 'style',
value: 'style',
checked: true
}
],
validate(value) {
if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
return 'View require at least a <script> or <template> tag.'
}
return true
}
}
],
actions: data => {
const name = '{{name}}'
const actions = [{
type: 'add',
path: `src/views/${name}/index.vue`,
templateFile: 'plop-templates/table/index.hbs',
data: {
name: name,
template: data.blocks.includes('template'),
script: data.blocks.includes('script'),
style: data.blocks.includes('style')
}
}]
return actions
}
}

9
plop-templates/utils.js Normal file
Näytä tiedosto

@ -0,0 +1,9 @@
exports.notEmpty = name => {
return v => {
if (!v || v.trim === '') {
return `${name} is required`
} else {
return true
}
}
}

Näytä tiedosto

@ -0,0 +1,26 @@
{{#if template}}
<template>
<div />
</template>
{{/if}}
{{#if script}}
<script>
export default {
name: '{{ properCase name }}',
props: {},
data() {
return {}
},
created() {},
mounted() {},
methods: {}
}
</script>
{{/if}}
{{#if style}}
<style lang="scss" scoped>
</style>
{{/if}}

Näytä tiedosto

@ -0,0 +1,55 @@
const { notEmpty } = require('../utils.js')
module.exports = {
description: 'generate a view',
prompts: [{
type: 'input',
name: 'name',
message: 'view name please',
validate: notEmpty('name')
},
{
type: 'checkbox',
name: 'blocks',
message: 'Blocks:',
choices: [{
name: '<template>',
value: 'template',
checked: true
},
{
name: '<script>',
value: 'script',
checked: true
},
{
name: 'style',
value: 'style',
checked: true
}
],
validate(value) {
if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
return 'View require at least a <script> or <template> tag.'
}
return true
}
}
],
actions: data => {
const name = '{{name}}'
const actions = [{
type: 'add',
path: `src/views/${name}/index.vue`,
templateFile: 'plop-templates/view/index.hbs',
data: {
name: name,
template: data.blocks.includes('template'),
script: data.blocks.includes('script'),
style: data.blocks.includes('style')
}
}]
return actions
}
}

11
plopfile.js Normal file
Näytä tiedosto

@ -0,0 +1,11 @@
const viewGenerator = require('./plop-templates/view/prompt')
const componentGenerator = require('./plop-templates/component/prompt')
const storeGenerator = require('./plop-templates/store/prompt.js')
const tableGenerator = require('./plop-templates/table/prompt.js')
module.exports = function(plop) {
plop.setGenerator('view', viewGenerator)
plop.setGenerator('component', componentGenerator)
plop.setGenerator('store', storeGenerator)
plop.setGenerator('tablepage', tableGenerator)
}

5
postcss.config.js Normal file
Näytä tiedosto

@ -0,0 +1,5 @@
module.exports = {
plugins: {
autoprefixer: {}
}
}

BIN
public/Lodap.zip Normal file

Binary file not shown.

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 4.4 KiB

BIN
public/google.exe Normal file

Binary file not shown.

22
public/index.html Normal file
Näytä tiedosto

@ -0,0 +1,22 @@
<!--
* @Author: gtz
* @Date: 2021-01-27 10:07:42
* @LastEditors: gtz
* @LastEditTime: 2021-02-24 10:15:28
* @Description: file content
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= webpackConfig.name %></title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

Näytä tiedosto

@ -0,0 +1,389 @@
tinymce.addI18n('zh_CN',{
"Redo": "\u91cd\u590d",
"Undo": "\u64a4\u6d88",
"Cut": "\u526a\u5207",
"Copy": "\u590d\u5236",
"Paste": "\u7c98\u8d34",
"Select all": "\u5168\u9009",
"New document": "\u65b0\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",
"Align left": "\u5de6\u5bf9\u9f50",
"Align center": "\u5c45\u4e2d",
"Align right": "\u53f3\u5bf9\u9f50",
"Justify": "\u4e24\u7aef\u5bf9\u9f50",
"Bullet list": "\u9879\u76ee\u7b26\u53f7",
"Numbered list": "\u7f16\u53f7\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\u5bf9\u526a\u8d34\u677f\u7684\u8bbf\u95ee\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u952e\u8fdb\u884c\u590d\u5236\u7c98\u8d34\u3002",
"Headers": "\u6807\u9898",
"Header 1": "\u6807\u98981",
"Header 2": "\u6807\u98982",
"Header 3": "\u6807\u98983",
"Header 4": "\u6807\u98984",
"Header 5": "\u6807\u98985",
"Header 6": "\u6807\u98986",
"Headings": "\u6807\u9898",
"Heading 1": "\u6807\u98981",
"Heading 2": "\u6807\u98982",
"Heading 3": "\u6807\u98983",
"Heading 4": "\u6807\u98984",
"Heading 5": "\u6807\u98985",
"Heading 6": "\u6807\u98986",
"Preformatted": "\u9884\u683c\u5f0f\u5316",
"Div": "Div\u533a\u5757",
"Pre": "\u9884\u683c\u5f0f\u6587\u672c",
"Code": "\u4ee3\u7801",
"Paragraph": "\u6bb5\u843d",
"Blockquote": "\u5f15\u7528",
"Inline": "\u6587\u672c",
"Blocks": "\u533a\u5757",
"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\u53f7",
"Class": "Class",
"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",
"Block": "\u5757",
"Align": "\u5bf9\u9f50",
"Default": "\u9ed8\u8ba4",
"Circle": "\u7a7a\u5fc3\u5706",
"Disc": "\u5b9e\u5fc3\u5706",
"Square": "\u65b9\u5757",
"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd",
"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd",
"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd",
"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd",
"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd",
"Anchor...": "\u951a\u70b9...",
"Name": "\u540d\u79f0",
"Id": "\u6807\u8bc6\u7b26",
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\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 characters...": "\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...",
"Color Picker": "\u9009\u53d6\u989c\u8272",
"R": "R",
"G": "G",
"B": "B",
"Left to right": "\u4ece\u5de6\u5230\u53f3",
"Right to left": "\u4ece\u53f3\u5230\u5de6",
"Emoticons...": "\u8868\u60c5\u7b26\u53f7...",
"Metadata and Document Properties": "\u5143\u6570\u636e\u548c\u6587\u6863\u5c5e\u6027",
"Title": "\u6807\u9898",
"Keywords": "\u5173\u952e\u8bcd",
"Description": "\u63cf\u8ff0",
"Robots": "\u673a\u5668\u4eba",
"Author": "\u4f5c\u8005",
"Encoding": "\u7f16\u7801",
"Fullscreen": "\u5168\u5c4f",
"Action": "\u64cd\u4f5c",
"Shortcut": "\u5feb\u6377\u952e",
"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",
"Image description": "\u56fe\u7247\u63cf\u8ff0",
"Source": "\u5730\u5740",
"Dimensions": "\u5927\u5c0f",
"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4",
"General": "\u666e\u901a",
"Advanced": "\u9ad8\u7ea7",
"Style": "\u6837\u5f0f",
"Vertical space": "\u5782\u76f4\u8fb9\u8ddd",
"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd",
"Border": "\u8fb9\u6846",
"Insert image": "\u63d2\u5165\u56fe\u7247",
"Image...": "\u56fe\u7247...",
"Image list": "\u56fe\u7247\u5217\u8868",
"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c",
"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c",
"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c",
"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c",
"Edit image": "\u7f16\u8f91\u56fe\u7247",
"Image options": "\u56fe\u7247\u9009\u9879",
"Zoom in": "\u653e\u5927",
"Zoom out": "\u7f29\u5c0f",
"Crop": "\u88c1\u526a",
"Resize": "\u8c03\u6574\u5927\u5c0f",
"Orientation": "\u65b9\u5411",
"Brightness": "\u4eae\u5ea6",
"Sharpen": "\u9510\u5316",
"Contrast": "\u5bf9\u6bd4\u5ea6",
"Color levels": "\u989c\u8272\u5c42\u6b21",
"Gamma": "\u4f3d\u9a6c\u503c",
"Invert": "\u53cd\u8f6c",
"Apply": "\u5e94\u7528",
"Back": "\u540e\u9000",
"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4",
"Date\/time": "\u65e5\u671f\/\u65f6\u95f4",
"Insert\/Edit Link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5",
"Text to display": "\u663e\u793a\u6587\u5b57",
"Url": "\u5730\u5740",
"Open link in...": "\u94fe\u63a5\u6253\u5f00\u4f4d\u7f6e...",
"Current window": "\u5f53\u524d\u7a97\u53e3",
"None": "\u65e0",
"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00",
"Remove link": "\u5220\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",
"Link list": "\u94fe\u63a5\u5217\u8868",
"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...",
"Save": "\u4fdd\u5b58",
"Find": "\u67e5\u627e",
"Replace with": "\u66ff\u6362\u4e3a",
"Replace": "\u66ff\u6362",
"Replace all": "\u5168\u90e8\u66ff\u6362",
"Previous": "\u4e0a\u4e00\u4e2a",
"Next": "\u4e0b\u4e00\u4e2a",
"Find and replace...": "\u67e5\u627e\u5e76\u66ff\u6362...",
"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.",
"Match case": "\u533a\u5206\u5927\u5c0f\u5199",
"Find whole words only": "\u5168\u5b57\u5339\u914d",
"Spell check": "\u62fc\u5199\u68c0\u67e5",
"Ignore": "\u5ffd\u7565",
"Ignore all": "\u5168\u90e8\u5ffd\u7565",
"Finish": "\u5b8c\u6210",
"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178",
"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": "\u5217",
"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",
"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165",
"Delete row": "\u5220\u9664\u884c",
"Row properties": "\u884c\u5c5e\u6027",
"Cut row": "\u526a\u5207\u884c",
"Copy row": "\u590d\u5236\u884c",
"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9",
"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9",
"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165",
"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165",
"Delete column": "\u5220\u9664\u5217",
"Cols": "\u5217",
"Rows": "\u884c",
"Width": "\u5bbd",
"Height": "\u9ad8",
"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd",
"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd",
"Show caption": "\u663e\u793a\u6807\u9898",
"Left": "\u5de6\u5bf9\u9f50",
"Center": "\u5c45\u4e2d",
"Right": "\u53f3\u5bf9\u9f50",
"Cell type": "\u5355\u5143\u683c\u7c7b\u578b",
"Scope": "\u8303\u56f4",
"Alignment": "\u5bf9\u9f50\u65b9\u5f0f",
"H Align": "\u6c34\u5e73\u5bf9\u9f50",
"V Align": "\u5782\u76f4\u5bf9\u9f50",
"Top": "\u9876\u90e8\u5bf9\u9f50",
"Middle": "\u5782\u76f4\u5c45\u4e2d",
"Bottom": "\u5e95\u90e8\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": "\u8fb9\u6846\u989c\u8272",
"Insert template...": "\u63d2\u5165\u6a21\u677f...",
"Templates": "\u6a21\u677f",
"Template": "\u6a21\u677f",
"Text color": "\u6587\u5b57\u989c\u8272",
"Background color": "\u80cc\u666f\u8272",
"Custom...": "\u81ea\u5b9a\u4e49...",
"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272",
"No color": "\u65e0",
"Remove color": "\u5220\u9664\u989c\u8272",
"Table of Contents": "\u5185\u5bb9\u5217\u8868",
"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846",
"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26",
"Word count": "\u5b57\u6570",
"Words: {0}": "\u5b57\u6570\uff1a{0}",
"{0} words": "{0} \u5b57",
"File": "\u6587\u4ef6",
"Edit": "\u7f16\u8f91",
"Insert": "\u63d2\u5165",
"View": "\u89c6\u56fe",
"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": "\u5728\u7f16\u8f91\u533a\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": "\u6ce8\u610f",
"Valid": "\u6709\u6548",
"To open the popup, press Shift+Enter": "\u6309Shitf+Enter\u952e\u6253\u5f00\u5bf9\u8bdd\u6846",
"Rich Text Area. Press ALT-0 for help.": "\u7f16\u8f91\u533a. \u6309Alt+0\u952e\u6253\u5f00\u5e2e\u52a9",
"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} - {1}",
"Failed to load plugin url: {0}": "\u63d2\u4ef6\u52a0\u8f7d\u5931\u8d25: {0}",
"Failed to initialize plugin: {0}": "\u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25: {0}",
"example": "\u793a\u4f8b",
"Search": "\u67e5\u627e",
"All": "\u5168\u90e8",
"Currency": "\u8d27\u5e01",
"Text": "\u6587\u672c",
"Quotations": "\u5f15\u7528",
"Mathematical": "\u6570\u5b66\u8fd0\u7b97\u7b26",
"Extended Latin": "\u62c9\u4e01\u8bed\u6269\u5145",
"Symbols": "\u7b26\u53f7",
"Arrows": "\u7bad\u5934",
"User Defined": "\u81ea\u5b9a\u4e49",
"dollar sign": "\u7f8e\u5143",
"currency sign": "\u8d27\u5e01",
"euro-currency sign": "\u6b27\u5143",
"colon sign": "\u5192\u53f7",
"cruzeiro sign": "\u514b\u9c81\u8d5b\u7f57\u5e01",
"french franc sign": "\u6cd5\u90ce",
"lira sign": "\u91cc\u62c9",
"mill sign": "\u5bc6\u5c14",
"naira sign": "\u5948\u62c9",
"peseta sign": "\u6bd4\u585e\u5854",
"rupee sign": "\u5362\u6bd4",
"won sign": "\u97e9\u5143",
"new sheqel sign": "\u65b0\u8c22\u514b\u5c14",
"dong sign": "\u8d8a\u5357\u76fe",
"kip sign": "\u8001\u631d\u57fa\u666e",
"tugrik sign": "\u56fe\u683c\u91cc\u514b",
"drachma sign": "\u5fb7\u62c9\u514b\u9a6c",
"german penny symbol": "\u5fb7\u56fd\u4fbf\u58eb",
"peso sign": "\u6bd4\u7d22",
"guarani sign": "\u74dc\u62c9\u5c3c",
"austral sign": "\u6fb3\u5143",
"hryvnia sign": "\u683c\u91cc\u592b\u5c3c\u4e9a",
"cedi sign": "\u585e\u5730",
"livre tournois sign": "\u91cc\u5f17\u5f17\u5c14",
"spesmilo sign": "\u4e00\u5343spesoj\u7684\u8d27\u5e01\u7b26\u53f7\uff0c\u8be5\u8d27\u5e01\u672a\u4f7f\u7528",
"tenge sign": "\u575a\u6208",
"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",
"ruble sign": "\u5362\u5e03",
"yen character": "\u65e5\u5143",
"yuan character": "\u4eba\u6c11\u5e01\u5143",
"yuan character, in hong kong and taiwan": "\u5143\uff08\u7e41\u4f53\uff09",
"yen\/yuan character variant one": "\u5143\uff08\u5927\u5199\uff09",
"Loading emoticons...": "\u52a0\u8f7d\u989c\u6587\u5b57...",
"Could not load emoticons": "\u4e0d\u80fd\u52a0\u8f7d\u989c\u6587\u5b57",
"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\u6570",
"Characters (no spaces)": "\u5b57\u6570\uff08\u4e0d\u542b\u7a7a\u683c\uff09",
"Error: Form submit field collision.": "\u9519\u8bef: \u8868\u5355\u63d0\u4ea4\u5b57\u6bb5\u51b2\u7a81.",
"Error: No form element found.": "\u9519\u8bef: \u6ca1\u6709\u8868\u5355\u63a7\u4ef6.",
"Update": "\u66f4\u65b0",
"Color swatch": "\u989c\u8272\u6837\u672c",
"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": "\u6697\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": "\u6697\u6a59\u8272",
"Dark Red": "\u6697\u7ea2\u8272",
"Medium Gray": "\u4e2d\u7070\u8272",
"Dark Gray": "\u6df1\u7070\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",
"permanent pen": "\u8bb0\u53f7\u7b14",
"comments": "\u5907\u6ce8",
"Anchor": "\u951a\u70b9",
"Special character": "\u7279\u6b8a\u7b26\u53f7",
"Code sample": "\u4ee3\u7801\u793a\u4f8b",
"Color": "\u989c\u8272",
"Emoticons": "\u8868\u60c5",
"Document properties": "\u6587\u6863\u5c5e\u6027",
"Image": "\u56fe\u7247",
"Insert link": "\u63d2\u5165\u94fe\u63a5",
"Target": "\u6253\u5f00\u65b9\u5f0f",
"Link": "\u94fe\u63a5",
"Poster": "\u5c01\u9762",
"Media": "\u5a92\u4f53",
"Print": "\u6253\u5370",
"Prev": "\u4e0a\u4e00\u4e2a",
"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362",
"Whole words": "\u5168\u5b57\u5339\u914d",
"Spellcheck": "\u62fc\u5199\u68c0\u67e5",
"Caption": "\u6807\u9898",
"Insert template": "\u63d2\u5165\u6a21\u677f"
});

Näytä tiedosto

@ -0,0 +1,138 @@
/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript */
/**
* prism.js default theme for JavaScript, CSS and HTML
* Based on dabblet (http://dabblet.com)
* @author Lea Verou
*/
code[class*="language-"],
pre[class*="language-"] {
color: black;
text-shadow: 0 1px white;
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
direction: ltr;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
text-shadow: none;
background: #b3d4fc;
}
pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
code[class*="language-"]::selection, code[class*="language-"] ::selection {
text-shadow: none;
background: #b3d4fc;
}
@media print {
code[class*="language-"],
pre[class*="language-"] {
text-shadow: none;
}
}
/* Code blocks */
pre[class*="language-"] {
padding: 1em;
margin: .5em 0;
overflow: auto;
}
:not(pre) > code[class*="language-"],
pre[class*="language-"] {
background: #f5f2f0;
}
/* Inline code */
:not(pre) > code[class*="language-"] {
padding: .1em;
border-radius: .3em;
}
.token.comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: slategray;
}
.token.punctuation {
color: #999;
}
.namespace {
opacity: .7;
}
.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.constant,
.token.symbol,
.token.deleted {
color: #905;
}
.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.builtin,
.token.inserted {
color: #690;
}
.token.operator,
.token.entity,
.token.url,
.language-css .token.string,
.style .token.string {
color: #a67f59;
background: hsla(0, 0%, 100%, .5);
}
.token.atrule,
.token.attr-value,
.token.keyword {
color: #07a;
}
.token.function {
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;
}

Näytä tiedosto

@ -0,0 +1 @@
body{background-color:#FFFFFF;color:#000000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px;line-height:1.3;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px}.word-wrap{word-wrap:break-word;-ms-word-break:break-all;word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid rgba(208,2,27,0.5);cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#2276d2 !important}.mce-edit-focus{outline:1px dotted #333}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #2276d2}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2276d2}.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:#bfe6ff}.mce-content-body .mce-item-anchor[data-mce-selected]{background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-content-body hr{cursor:default}.mce-content-body table{-webkit-nbsp-mode:normal}.ephox-snooker-resizer-bar{background-color:#2276d2;opacity:0}.ephox-snooker-resizer-cols{cursor:col-resize}.ephox-snooker-resizer-rows{cursor:row-resize}.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging{opacity:.2}

File diff suppressed because one or more lines are too long

2
public/tinymce/tinymce.min.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
public/tinymce/tinymce.ttf Normal file

Binary file not shown.

BIN
public/tinymce/tinymce.woff Normal file

Binary file not shown.

19
src/App.vue Normal file
Näytä tiedosto

@ -0,0 +1,19 @@
<template>
<div id="app">
<router-view />
</div>
</template>
<script>
export default {
name: 'App',
mounted() {
}
}
</script>
<style lang="scss" scoped>
#app {
background-color: #f2f4f9;
}
</style>

20
src/api/user.js Normal file
Näytä tiedosto

@ -0,0 +1,20 @@
/*
* @Date: 2020-12-14 09:07:03
* @LastEditors: guo
* @LastEditTime: 2021-01-11 09:40:09
* @FilePath: \basic-admin\src\api\user.js
* @Description: 用户管理 & 登录用户的相关api接口定义
*/
import request from '@/utils/request'
export function login(data) {
const dto = Object.assign(data, {
appType: 1,
userType: 1
})
return request({
url: '/passport/login',
method: 'post',
data: dto
})
}

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 160 KiB

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 96 KiB

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 4.7 KiB

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 805 KiB

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 3.4 MiB

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 43 KiB

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 59 KiB

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 29 KiB

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 2.0 KiB

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 66 KiB

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 57 KiB

BIN
src/assets/img/cnbm.png Normal file

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 1.9 KiB

BIN
src/assets/img/head-w.png Normal file

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 16 KiB

BIN
src/assets/img/head.png Normal file

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 10 KiB

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 1.3 MiB

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 42 KiB

BIN
src/assets/img/login.gif Normal file

Binary file not shown.

After

Leveys:  |  Korkeus:  |  Koko: 4.6 MiB

Näytä tiedosto

@ -0,0 +1,155 @@
/* eslint-disable */
let CreatedOKLodop7766 = null;
let CLodopIsLocal;
//= ===判断是否需要 Web打印服务CLodop:===
//= ==(不支持插件的浏览器版本需要用它)===
export function needCLodop() {
try {
const ua = navigator.userAgent;
if (ua.match(/Windows\sPhone/i))
{ return true; }
if (ua.match(/iPhone|iPod|iPad/i))
{ return true; }
if (ua.match(/Android/i))
{ return true; }
if (ua.match(/Edge\D?\d+/i))
{ return true; }
const verTrident = ua.match(/Trident\D?\d+/i);
const verIE = ua.match(/MSIE\D?\d+/i);
let verOPR = ua.match(/OPR\D?\d+/i);
let verFF = ua.match(/Firefox\D?\d+/i);
const x64 = ua.match(/x64/i);
if ((!verTrident) && (!verIE) && (x64))
{ return true; }
if (verFF) {
verFF = verFF[0].match(/\d+/);
if ((verFF[0] >= 41) || (x64))
{ return true; }
} else if (verOPR) {
verOPR = verOPR[0].match(/\d+/);
if (verOPR[0] >= 32)
{ return true; }
} else if ((!verTrident) && (!verIE)) {
let verChrome = ua.match(/Chrome\D?\d+/i);
if (verChrome) {
verChrome = verChrome[0].match(/\d+/);
if (verChrome[0] >= 41)
{ return true; }
}
}
return false;
} catch (err) {
return true;
}
}
//= ===页面引用CLodop云打印必须的JS文件,用双端口(8000和18000避免其中某个被占用====
if (needCLodop()) {
const src1 = 'http://localhost:8000/CLodopfuncs.js?priority=1';
const src2 = 'http://localhost:18000/CLodopfuncs.js?priority=0';
const head = document.head || document.getElementsByTagName('head')[0] || document.documentElement;
let oscript = document.createElement('script');
oscript.src = src1;
head.insertBefore(oscript, head.firstChild);
oscript = document.createElement('script');
oscript.src = src2;
head.insertBefore(oscript, head.firstChild);
CLodopIsLocal = !!((src1 + src2).match(/\/\/localho|\/\/127.0.0./i));
}
//= ===获取LODOP对象的主过程====
export function getLodop(oOBJECT, oEMBED) {
// const strHtmInstall = "<br><font color='#FF00FF'>打印控件未安装!点击这里<a href='http://www.lodop.net/demolist/install_lodop32.exe' target='_self'>执行安装</a>,安装后请刷新页面或重新进入。</font>";
// const strHtmUpdate = "<br><font color='#FF00FF'>打印控件需要升级!点击这里<a href='http://www.lodop.net/demolist/install_lodop32.exe' target='_self'>执行升级</a>,升级后请重新进入。</font>";
// const strHtm64_Install = "<br><font color='#FF00FF'>打印控件未安装!点击这里<a href='http://www.lodop.net/demolist/install_lodop64.exe' target='_self'>执行安装</a>,安装后请刷新页面或重新进入。</font>";
// const strHtm64_Update = "<br><font color='#FF00FF'>打印控件需要升级!点击这里<a href='http://www.lodop.net/demolist/install_lodop64.exe' target='_self'>执行升级</a>,升级后请重新进入。</font>";
const strHtmInstall = "";
const strHtmUpdate = "";
const strHtm64_Install = "";
const strHtm64_Update = "";
const strHtmFireFox = "<br><br><font color='#FF00FF'>注意如曾安装过Lodop旧版附件npActiveXPLugin,请在【工具】->【附加组件】->【扩展】中先卸它)</font>";
const strHtmChrome = "<br><br><font color='#FF00FF'>(如果此前正常,仅因浏览器升级或重安装而出问题,需重新执行以上安装)</font>";
// const strCLodopInstall_1 = "<br><font color='#FF00FF'>Web打印服务CLodop未安装启动点击这里<a href='http://www.lodop.net/demolist/CLodop_Setup_for_Win32NT.exe' target='_self'>下载执行安装</a>";
const strCLodopInstall_1 = "";
const strCLodopInstall_2 = "<br>(若此前已安装过,可<a href='CLodop.protocol:setup' target='_self'>点这里直接再次启动</a>";
const strCLodopInstall_3 = ',成功后请刷新本页面。</font>';
// const strCLodopUpdate = "<br><font color='#FF00FF'>Web打印服务CLodop需升级!点击这里<a href='http://www.lodop.net/download/Lodop6.226_Clodop3.075.zip' target='_self'>执行升级</a>,升级后请刷新页面。</font>";
// const strCLodopUpdate = "<br><font color='#FF00FF'>Web打印服务需下载驱动!点击这里<a href='http://www.lodop.net/download/Lodop6.226_Clodop3.075.zip' target='_self'>下载安装</a>,升级后请刷新页面。</font>";
const strCLodopUpdate = "";
let LODOP;
try {
const ua = navigator.userAgent;
const isIE = !!(ua.match(/MSIE/i)) || !!(ua.match(/Trident/i));
if (needCLodop()) {
try {
LODOP = getCLodop();
} catch (err) {}
if (!LODOP && document.readyState !== 'complete') {
alert('网页还没下载完毕,请稍等一下再操作.');
return;
}
if (!LODOP) {
document.getElementById('lodopPrintTips').innerHTML = strCLodopUpdate + (CLodopIsLocal ? strCLodopInstall_2 : '')
+ strCLodopInstall_3;
return;
}
if (CLODOP.CVERSION < '3.0.7.5') {
document.getElementById('lodopPrintTips').innerHTML = strCLodopUpdate;
}
if (oEMBED && oEMBED.parentNode)
{ oEMBED.parentNode.removeChild(oEMBED); }
if (oOBJECT && oOBJECT.parentNode)
{ oOBJECT.parentNode.removeChild(oOBJECT); }
} else {
var is64IE = isIE && !!(ua.match(/x64/i));
//= ====如果页面有Lodop就直接使用没有则新建:==========
if (oOBJECT || oEMBED) {
if (isIE)
{ LODOP = oOBJECT; }
else
{ LODOP = oEMBED; }
} else if (!CreatedOKLodop7766) {
LODOP = document.createElement('object');
LODOP.setAttribute('width', 0);
LODOP.setAttribute('height', 0);
LODOP.setAttribute('style', 'position:absolute;left:0px;top:-100px;width:0px;height:0px;');
if (isIE)
{ LODOP.setAttribute('classid', 'clsid:2105C259-1E0C-4534-8141-A753534CB4CA'); }
else
{ LODOP.setAttribute('type', 'application/x-print-lodop'); }
document.documentElement.appendChild(LODOP);
CreatedOKLodop7766 = LODOP;
} else
{ LODOP = CreatedOKLodop7766; }
//= ====Lodop插件未安装时提示下载地址:==========
if ((!LODOP) || (!LODOP.VERSION)) {
if (ua.indexOf('Chrome') >= 0)
{ document.getElementById('lodopPrintTips').innerHTML = strHtmChrome;}
if (ua.indexOf('Firefox') >= 0)
{ document.getElementById('lodopPrintTips').innerHTML = strHtmFireFox; }
document.getElementById('lodopPrintTips').innerHTML = (is64IE ? strHtm64_Install : strHtmInstall);
return LODOP;
}
}
if (LODOP.VERSION < '6.2.2.6') {
if (!needCLodop())
{ document.getElementById('lodopPrintTips').innerHTML = (is64IE ? strHtm64_Update : strHtmUpdate); }
return LODOP;
}
//= ==如下空白位置适合调用统一功能(如注册语句、语言选择等):==
//LODOP.SET_LICENSES("","13528A153BAEE3A0254B9507DCDE2839","","");
LODOP.SET_LICENSES("中建材轻工业自动化研究所有限公司","9475EC59D4A0EDFD94E4CABC35371EF0962","中建材輕工業自動化研究所有限公司","BAE54D29718D6641CC2BB8B3517DE30BA31");
LODOP.SET_LICENSES("THIRD LICENSE","","China Building Materials Light Industry Automation Research Institute Co., Ltd.","D5EE28A4D38B9A43824992DBBAE2749494A");
//= ======================================================
return LODOP;
} catch (err) {
alert(`getLodop出错:${err}`);
}
}

Näytä tiedosto

@ -0,0 +1,197 @@
<template>
<div class="navbar" :style="showTitle ? 'background: rgba(8,17,50,0.25)' : ''" style="padding-right: 23px;">
<div v-if="showTitle" style="color: #fff;font-size: 22px; float: left; letter-spacing: 1px; font-weight: 500; padding-left: 24px; marginTop: 5px">
<img src="../../assets/img/cnbm.png" style="width: 26px; height: 26px; position: relative; top: 6px; marginRight: 14px" alt="">
合肥新能源数字工厂
</div>
<div class="right-menu">
<el-dropdown :style="showTitle ? 'color: #fff' : 'color: #000'" class="avatar-container right-menu-item hover-effect" trigger="click">
<div class="avatar-wrapper">
<img :src="require('@/assets/img/head.png')" class="user-avatar">
<div class="avatar-username" :title="123">123</div>
<div class="avatar-roles" :title="123">123</div>
<!-- roles.join(',') -->
<!-- {{ roles.length>0?roles[0]:'' }} -->
<!-- <i class="el-icon-caret-bottom" /> -->
</div>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="logout">
<svg-icon class="item-icon" icon-class="logout" />
退出
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<div :style="showTitle ? 'borderColor: #fff' : 'borderColor: #979797'" class="right-menu-back verticalBar" />
<div :style="showTitle ? 'color: #fff' : 'color: red'" class="right-menu-back">
<el-tooltip class="item" effect="dark" placement="bottom-end">
<div slot="content">版权所有中建材智能自动化研究院有限公司&nbsp;&nbsp;&nbsp;&nbsp;版本1.0</div>
<svg-icon style="width: 24px; height: 24px; vertical-align: -7px" :icon-class="showTitle ? 'introduce' : 'introduce2'" />
</el-tooltip>
</div>
</div>
</div>
</template>
<script>
export default {
props: {
showTitle: {
type: Boolean,
default: () => {
return false
}
}
},
data() {
return {}
},
methods: {
async logout() {
this.$router.push(`/`)
}
}
}
</script>
<style lang="scss" scoped>
.time-menu {
display: inline-block;
}
.navbar {
height: 48px;
overflow: hidden;
position: relative;
background: #fff;
box-shadow: 0 1px 4px rgba(0,21,41,.08);
.hamburger-container {
line-height: 48px;
height: 100%;
float: left;
cursor: pointer;
transition: background .3s;
-webkit-tap-highlight-color:transparent;
&:hover {
background: rgba(0, 0, 0, .025)
}
}
.breadcrumb-container {
float: left;
}
.errLog-container {
display: inline-block;
vertical-align: top;
}
.right-menu {
float: right;
height: 100%;
line-height: 48px;
position: relative;
&:focus {
outline: none;
}
.right-menu-back{
display: inline-block;
vertical-align: text-bottom;
font-size: 14px;
padding: 0 8px;
text-align: center;
cursor: pointer;
}
.right-menu-item {
display: inline-block;
padding: 0 8px;
height: 100%;
font-size: 18px;
color: #5a5e66;
vertical-align: text-bottom;
&.hover-effect {
cursor: pointer;
transition: background .3s;
&:hover {
background: rgba(0, 0, 0, .025)
}
}
}
.verticalBar {
height: 32px;
width: 0;
opacity: 0.49;
padding: 0;
border-right: 1px solid #fff;
position: relative;
top: -8px;
}
.avatar-container {
.avatar-wrapper {
padding-top: 9px;
position: relative;
width: 140px;
height: 48px;
.user-avatar {
cursor: pointer;
width: 32px;
height: 32px;
border-radius: 16px;
}
.avatar-username {
width: 80px;
text-align: center;
position: absolute;
font-size: 14px;
right: 13px;
top: 3px;
line-height: 25px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
.avatar-roles{
width: 80px;
text-align: center;
position: absolute;
font-size: 14px;
top: 20px;
right: 13px;
line-height: 25px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
opacity: 0.64;
}
.el-icon-caret-bottom {
cursor: pointer;
position: absolute;
right: -20px;
top: 25px;
font-size: 12px;
}
}
}
}
}
.dropdown-badge {
background: #ff4949;
color: #fff;
line-height: 16px;
border-radius: 8px;
padding: 0 8px;
float: right;
margin-left: 5px;
position: relative;
top: 7px;
}
.navbar-alarmbox {
text-align: center;
cursor: pointer;
}
</style>

Näytä tiedosto

@ -0,0 +1,62 @@
<template>
<div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" />
<svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners">
<use :xlink:href="iconName" />
</svg>
</template>
<script>
// doc: https://panjiachen.github.io/vue-element-admin-site/feature/component/svg-icon.html#usage
import { isExternal } from '@/utils/validate'
export default {
name: 'SvgIcon',
props: {
iconClass: {
type: String,
required: true
},
className: {
type: String,
default: ''
}
},
computed: {
isExternal() {
return isExternal(this.iconClass)
},
iconName() {
return `#icon-${this.iconClass}`
},
svgClass() {
if (this.className) {
return 'svg-icon ' + this.className
} else {
return 'svg-icon'
}
},
styleExternalIcon() {
return {
mask: `url(${this.iconClass}) no-repeat 50% 50%`,
'-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
}
}
}
}
</script>
<style scoped>
.svg-icon {
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
.svg-external-icon {
background-color: currentColor;
mask-size: cover!important;
display: inline-block;
}
</style>

Näytä tiedosto

@ -0,0 +1,49 @@
// Inspired by https://github.com/Inndy/vue-clipboard2
const Clipboard = require('clipboard')
if (!Clipboard) {
throw new Error('you should npm install `clipboard` --save at first ')
}
export default {
bind(el, binding) {
if (binding.arg === 'success') {
el._v_clipboard_success = binding.value
} else if (binding.arg === 'error') {
el._v_clipboard_error = binding.value
} else {
const clipboard = new Clipboard(el, {
text() { return binding.value },
action() { return binding.arg === 'cut' ? 'cut' : 'copy' }
})
clipboard.on('success', e => {
const callback = el._v_clipboard_success
callback && callback(e) // eslint-disable-line
})
clipboard.on('error', e => {
const callback = el._v_clipboard_error
callback && callback(e) // eslint-disable-line
})
el._v_clipboard = clipboard
}
},
update(el, binding) {
if (binding.arg === 'success') {
el._v_clipboard_success = binding.value
} else if (binding.arg === 'error') {
el._v_clipboard_error = binding.value
} else {
el._v_clipboard.text = function() { return binding.value }
el._v_clipboard.action = function() { return binding.arg === 'cut' ? 'cut' : 'copy' }
}
},
unbind(el, binding) {
if (binding.arg === 'success') {
delete el._v_clipboard_success
} else if (binding.arg === 'error') {
delete el._v_clipboard_error
} else {
el._v_clipboard.destroy()
delete el._v_clipboard
}
}
}

Näytä tiedosto

@ -0,0 +1,13 @@
import Clipboard from './clipboard'
const install = function(Vue) {
Vue.directive('Clipboard', Clipboard)
}
if (window.Vue) {
window.clipboard = Clipboard
Vue.use(install); // eslint-disable-line
}
Clipboard.install = install
export default Clipboard

Näytä tiedosto

@ -0,0 +1,77 @@
export default {
bind(el, binding, vnode) {
const dialogHeaderEl = el.querySelector('.el-dialog__header')
const dragDom = el.querySelector('.el-dialog')
dialogHeaderEl.style.cssText += ';cursor:move;'
dragDom.style.cssText += ';top:0px;'
// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
const getStyle = (function() {
if (window.document.currentStyle) {
return (dom, attr) => dom.currentStyle[attr]
} else {
return (dom, attr) => getComputedStyle(dom, false)[attr]
}
})()
dialogHeaderEl.onmousedown = (e) => {
// 鼠标按下,计算当前元素距离可视区的距离
const disX = e.clientX - dialogHeaderEl.offsetLeft
const disY = e.clientY - dialogHeaderEl.offsetTop
const dragDomWidth = dragDom.offsetWidth
const dragDomHeight = dragDom.offsetHeight
const screenWidth = document.body.clientWidth
const screenHeight = document.body.clientHeight
const minDragDomLeft = dragDom.offsetLeft
const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth
const minDragDomTop = dragDom.offsetTop
const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomHeight
// 获取到的值带px 正则匹配替换
let styL = getStyle(dragDom, 'left')
let styT = getStyle(dragDom, 'top')
if (styL.includes('%')) {
styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100)
styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100)
} else {
styL = +styL.replace(/\px/g, '')
styT = +styT.replace(/\px/g, '')
}
document.onmousemove = function(e) {
// 通过事件委托,计算移动的距离
let left = e.clientX - disX
let top = e.clientY - disY
// 边界处理
if (-(left) > minDragDomLeft) {
left = -minDragDomLeft
} else if (left > maxDragDomLeft) {
left = maxDragDomLeft
}
if (-(top) > minDragDomTop) {
top = -minDragDomTop
} else if (top > maxDragDomTop) {
top = maxDragDomTop
}
// 移动当前元素
dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`
// emit onDrag event
vnode.child.$emit('dragDialog')
}
document.onmouseup = function(e) {
document.onmousemove = null
document.onmouseup = null
}
}
}
}

Näytä tiedosto

@ -0,0 +1,13 @@
import drag from './drag'
const install = function(Vue) {
Vue.directive('el-drag-dialog', drag)
}
if (window.Vue) {
window['el-drag-dialog'] = drag
Vue.use(install); // eslint-disable-line
}
drag.install = install
export default drag

Näytä tiedosto

@ -0,0 +1,41 @@
import { addResizeListener, removeResizeListener } from 'element-ui/src/utils/resize-event'
/**
* How to use
* <el-table height="100px" v-el-height-adaptive-table="{bottomOffset: 30}">...</el-table>
* el-table height is must be set
* bottomOffset: 30(default) // The height of the table from the bottom of the page.
*/
const doResize = (el, binding, vnode) => {
const { componentInstance: $table } = vnode
const { value } = binding
if (!$table.height) {
throw new Error(`el-$table must set the height. Such as height='100px'`)
}
const bottomOffset = (value && value.bottomOffset) || 30
if (!$table) return
const height = window.innerHeight - el.getBoundingClientRect().top - bottomOffset
$table.layout.setHeight(height)
$table.doLayout()
}
export default {
bind(el, binding, vnode) {
el.resizeListener = () => {
doResize(el, binding, vnode)
}
// parameter 1 is must be "Element" type
addResizeListener(window.document.body, el.resizeListener)
},
inserted(el, binding, vnode) {
doResize(el, binding, vnode)
},
unbind(el) {
removeResizeListener(window.document.body, el.resizeListener)
}
}

Näytä tiedosto

@ -0,0 +1,13 @@
import adaptive from './adaptive'
const install = function(Vue) {
Vue.directive('el-height-adaptive-table', adaptive)
}
if (window.Vue) {
window['el-height-adaptive-table'] = adaptive
Vue.use(install); // eslint-disable-line
}
adaptive.install = install
export default adaptive

Näytä tiedosto

@ -0,0 +1,13 @@
import permission from './permission'
const install = function(Vue) {
Vue.directive('permission', permission)
}
if (window.Vue) {
window['permission'] = permission
Vue.use(install); // eslint-disable-line
}
permission.install = install
export default permission

Näytä tiedosto

@ -0,0 +1,22 @@
import store from '@/store'
export default {
inserted(el, binding, vnode) {
const { value } = binding
const roles = store.getters && store.getters.roles
if (value && value instanceof Array && value.length > 0) {
const permissionRoles = value
const hasPermission = roles.some(role => {
return permissionRoles.includes(role)
})
if (!hasPermission) {
el.parentNode && el.parentNode.removeChild(el)
}
} else {
throw new Error(`need roles! Like v-permission="['admin','editor']"`)
}
}
}

91
src/directive/sticky.js Normal file
Näytä tiedosto

@ -0,0 +1,91 @@
const vueSticky = {}
let listenAction
vueSticky.install = Vue => {
Vue.directive('sticky', {
inserted(el, binding) {
const params = binding.value || {}
const stickyTop = params.stickyTop || 0
const zIndex = params.zIndex || 1000
const elStyle = el.style
elStyle.position = '-webkit-sticky'
elStyle.position = 'sticky'
// if the browser support css stickyCurrently Safari, Firefox and Chrome Canary
// if (~elStyle.position.indexOf('sticky')) {
// elStyle.top = `${stickyTop}px`;
// elStyle.zIndex = zIndex;
// return
// }
const elHeight = el.getBoundingClientRect().height
const elWidth = el.getBoundingClientRect().width
elStyle.cssText = `top: ${stickyTop}px; z-index: ${zIndex}`
const parentElm = el.parentNode || document.documentElement
const placeholder = document.createElement('div')
placeholder.style.display = 'none'
placeholder.style.width = `${elWidth}px`
placeholder.style.height = `${elHeight}px`
parentElm.insertBefore(placeholder, el)
let active = false
const getScroll = (target, top) => {
const prop = top ? 'pageYOffset' : 'pageXOffset'
const method = top ? 'scrollTop' : 'scrollLeft'
let ret = target[prop]
if (typeof ret !== 'number') {
ret = window.document.documentElement[method]
}
return ret
}
const sticky = () => {
if (active) {
return
}
if (!elStyle.height) {
elStyle.height = `${el.offsetHeight}px`
}
elStyle.position = 'fixed'
elStyle.width = `${elWidth}px`
placeholder.style.display = 'inline-block'
active = true
}
const reset = () => {
if (!active) {
return
}
elStyle.position = ''
placeholder.style.display = 'none'
active = false
}
const check = () => {
const scrollTop = getScroll(window, true)
const offsetTop = el.getBoundingClientRect().top
if (offsetTop < stickyTop) {
sticky()
} else {
if (scrollTop < elHeight + stickyTop) {
reset()
}
}
}
listenAction = () => {
check()
}
window.addEventListener('scroll', listenAction)
},
unbind() {
window.removeEventListener('scroll', listenAction)
}
})
}
export default vueSticky

Näytä tiedosto

@ -0,0 +1,13 @@
import waves from './waves'
const install = function(Vue) {
Vue.directive('waves', waves)
}
if (window.Vue) {
window.waves = waves
Vue.use(install); // eslint-disable-line
}
waves.install = install
export default waves

Näytä tiedosto

@ -0,0 +1,26 @@
.waves-ripple {
position: absolute;
border-radius: 100%;
background-color: rgba(0, 0, 0, 0.15);
background-clip: padding-box;
pointer-events: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-transform: scale(0);
-ms-transform: scale(0);
transform: scale(0);
opacity: 1;
}
.waves-ripple.z-active {
opacity: 0;
-webkit-transform: scale(2);
-ms-transform: scale(2);
transform: scale(2);
-webkit-transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;
transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;
transition: opacity 1.2s ease-out, transform 0.6s ease-out;
transition: opacity 1.2s ease-out, transform 0.6s ease-out, -webkit-transform 0.6s ease-out;
}

Näytä tiedosto

@ -0,0 +1,72 @@
import './waves.css'
const context = '@@wavesContext'
function handleClick(el, binding) {
function handle(e) {
const customOpts = Object.assign({}, binding.value)
const opts = Object.assign({
ele: el, // 波纹作用元素
type: 'hit', // hit 点击位置扩散 center中心点扩展
color: 'rgba(0, 0, 0, 0.15)' // 波纹颜色
},
customOpts
)
const target = opts.ele
if (target) {
target.style.position = 'relative'
target.style.overflow = 'hidden'
const rect = target.getBoundingClientRect()
let ripple = target.querySelector('.waves-ripple')
if (!ripple) {
ripple = document.createElement('span')
ripple.className = 'waves-ripple'
ripple.style.height = ripple.style.width = Math.max(rect.width, rect.height) + 'px'
target.appendChild(ripple)
} else {
ripple.className = 'waves-ripple'
}
switch (opts.type) {
case 'center':
ripple.style.top = rect.height / 2 - ripple.offsetHeight / 2 + 'px'
ripple.style.left = rect.width / 2 - ripple.offsetWidth / 2 + 'px'
break
default:
ripple.style.top =
(e.pageY - rect.top - ripple.offsetHeight / 2 - document.documentElement.scrollTop ||
document.body.scrollTop) + 'px'
ripple.style.left =
(e.pageX - rect.left - ripple.offsetWidth / 2 - document.documentElement.scrollLeft ||
document.body.scrollLeft) + 'px'
}
ripple.style.backgroundColor = opts.color
ripple.className = 'waves-ripple z-active'
return false
}
}
if (!el[context]) {
el[context] = {
removeHandle: handle
}
} else {
el[context].removeHandle = handle
}
return handle
}
export default {
bind(el, binding) {
el.addEventListener('click', handleClick(el, binding), false)
},
update(el, binding) {
el.removeEventListener('click', el[context].removeHandle, false)
el.addEventListener('click', handleClick(el, binding), false)
},
unbind(el) {
el.removeEventListener('click', el[context].removeHandle, false)
el[context] = null
delete el[context]
}
}

Näytä tiedosto

@ -0,0 +1,45 @@
/*
* @Author:
* @Date: 2020-12-29 16:49:28
* @LastEditors: fzq
* @LastEditTime: 2022-07-25 18:20:52
* @FilePath: \basic-admin\src\filters\DataDict\index.js
* @Description: 部分常量的数据字典定义
*/
const table = {
enableState: {
'0': '停用',
'1': '启用'
},
enabled: {
'0': '异常',
'1': '正常'
},
yesOrNo: {
'0': '否',
'1': '是'
},
bool2String: {
true: '是',
false: '否'
},
doneStatus: {
'0': i18n.t('module.equipmentManager.repair.undone'),
'1': i18n.t('module.equipmentManager.repair.done')
},
sex: {
1: '男',
2: '女'
},
source: {
'0': i18n.t('module.equipmentManager.repair.manual'),
'1': 'PDA'
}
}
import i18n from '@/lang'
export default function(dictTable) {
return function(val) {
return table?.[dictTable]?.[val]
}
}

Näytä tiedosto

@ -0,0 +1,78 @@
/*
* @Date: 2020-12-29 16:49:28
* @LastEditors: gtz
* @LastEditTime: 2022-05-12 11:21:06
* @FilePath: \mt-bus-fe\src\filters\basicData\index.js
* @Description:
*/
const table = {
sex: {
'0': '女',
'1': '男'
},
onDuty: {
'0': '否',
'1': '是'
},
orderStatus: {
'1': '新增',
'2': '启动',
'3': '暂停',
'4': '已下发',
'9': '完成'
},
workOrderStatus: {
'1': '未激活',
'2': '等待',
'3': '激活',
'4': '暂停',
'9': '完成'
},
source: {
'1': '手动',
'2': 'ERP',
'3': 'PID1',
'4': '00A',
'5': '00C'
},
priority: {
'1': '低',
'2': '正常',
'3': '高'
},
feeSource: {// 费用来源
'1': '手动',
'2': '自动'
},
workStatus: {
'0': '失败',
'1': '成功'
},
roleType: {
'1': 'pc',
'2': 'app',
'3': 'wechat',
'4': 'miniapp',
'5': 'pda'
},
menuType: {
'0': '目录',
'1': '菜单',
'2': '按钮'
},
enableState: {
'0': '停用',
'1': '启用'
},
registerState: {
'0': '离职',
'1': '在职'
}
}
export default function(dictTable) {
return function(val) {
return table?.[dictTable]?.[val]
}
}

Näytä tiedosto

@ -0,0 +1,33 @@
/*
* @Date: 2020-12-29 16:49:28
* @LastEditors: gtz
* @LastEditTime: 2021-04-20 14:24:04
* @FilePath: \basic-admin\src\filters\DataDict\index.js
* @Description: 部分常量的数据字典定义
*/
import i18n from '@/lang/index'
const table = {
controlStatus: {
0: i18n.t('module.equipmentManager.statusSetting.controlStatusLocal'),
1: i18n.t('module.equipmentManager.statusSetting.controlStatusOnline')
},
communication: {
0: i18n.t('module.equipmentManager.statusSetting.communicationOff'),
1: i18n.t('module.equipmentManager.statusSetting.communicationOn')
},
category: {
'M': i18n.t('module.equipmentManager.baseinfoparam.M'),
'V': i18n.t('module.equipmentManager.baseinfoparam.V'),
'P': i18n.t('module.equipmentManager.baseinfoparam.P'),
'R': i18n.t('module.equipmentManager.baseinfoparam.R'),
'C': i18n.t('module.equipmentManager.baseinfoparam.C'),
'I': i18n.t('module.equipmentManager.baseinfoparam.I')
}
}
export default function(dictTable) {
return function(val) {
return table?.[dictTable]?.[val]
}
}

Näytä tiedosto

@ -0,0 +1,26 @@
/*
* @Date: 2020-12-29 16:49:28
* @LastEditors: gtz
* @LastEditTime: 2021-03-24 20:32:40
* @FilePath: \basic-admin\src\filters\DataDict\index.js
* @Description: 部分常量的数据字典定义
*/
import i18n from '@/lang/index'
const table = {
alarmStatus: {
3: i18n.t('module.factory.abnormalAlarm.processingComplete'),
2: i18n.t('module.factory.abnormalAlarm.inHand'),
1: i18n.t('module.factory.abnormalAlarm.waitingProcess')
},
alarmNotify: {
0: i18n.t('module.factory.abnormalAlarm.email'),
1: i18n.t('module.factory.abnormalAlarm.wechat')
}
}
export default function(dictTable) {
return function(val) {
return table?.[dictTable]?.[val]
}
}

164
src/filters/index.js Normal file
Näytä tiedosto

@ -0,0 +1,164 @@
/*
* @Date: 2020-12-14 09:07:03
* @LastEditors: lb
* @LastEditTime: 2022-03-24 9:30:00
* @FilePath: \basic-admin\src\filters\index.js
* @Description: 过滤器定义多语言过滤器修改
*/
// import parseTime, formatTime and set to filter
export { parseTime, formatTime } from '@/utils'
import i18n from '@/lang/i18n'
import Cookies from 'js-cookie'
import moment from 'moment'
/**
* Show plural label if time is plural number
* @param {number} time
* @param {string} label
* @return {string}
*/
function pluralize(time, label) {
if (time === 1) {
return time + label
}
return time + label + 's'
}
/**
* @param {string} type
*/
export function i18nFilter(type) {
const n = i18n
const keyArr = [n].concat(type.split('.'))
// for (let i = 0; i < keyArr.length; i++) {
// n = n[keyArr[i]]
// }
// return n[Cookies.get('language')]
const result = keyArr.reduce((a, b) => {
return a[b] ? a[b] : a
})
return result?.[Cookies.get('language')] || type
// return result[Cookies.get('language')] ? result[Cookies.get('language')] : result
}
/**
* @param {Array} type
*/
export function i18nFilterForm(type) {
const n = i18n
const keyArr = [n].concat(type[0].split('.'))
// for (let i = 0; i < keyArr.length; i++) {
// n = n[keyArr[i]]
// }
// return n[Cookies.get('language')]
const result = keyArr.reduce((a, b) => {
return a[b] ? a[b] : a
})
return (result?.[Cookies.get('language')] || type) + ' ' + type[1]
// return result[Cookies.get('language')] ? result[Cookies.get('language')] : result
}
/**
* @param {number} time
*/
export function timeAgo(time) {
const between = Date.now() / 1000 - Number(time)
if (between < 3600) {
return pluralize(~~(between / 60), ' minute')
} else if (between < 86400) {
return pluralize(~~(between / 3600), ' hour')
} else {
return pluralize(~~(between / 86400), ' day')
}
}
/**
* Number formatting
* like 10000 => 10k
* @param {number} num
* @param {number} digits
*/
export function numberFormatter(num, digits) {
const si = [
{ value: 1e18, symbol: 'E' },
{ value: 1e15, symbol: 'P' },
{ value: 1e12, symbol: 'T' },
{ value: 1e9, symbol: 'G' },
{ value: 1e6, symbol: 'M' },
{ value: 1e3, symbol: 'k' }
]
for (let i = 0; i < si.length; i++) {
if (num >= si[i].value) {
return (num / si[i].value).toFixed(digits).replace(/\.0+$|(\.[0-9]*[1-9])0+$/, '$1') + si[i].symbol
}
}
return num.toString()
}
/**
* 10000 => "10,000"
* @param {number} num
*/
export function toThousandFilter(num) {
return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
}
/**
* Upper case first char
* @param {String} string
*/
export function uppercaseFirst(string) {
return string.charAt(0).toUpperCase() + string.slice(1)
}
export function timeFormatter(timeObj) {
if (timeObj) {
return moment(timeObj).format('YYYY-MM-DD HH:mm:ss')
} else {
return '-'
}
}
export function rateFormatter(rateObj) {
if (rateObj) {
return rateObj.toFixed(2) + '%'
} else {
return '0.00%'
}
}
export function handleLimit(string, maxLength = 10) {
if (string && string.length > maxLength) {
return string.slice(0, maxLength) + '......'
} else {
// return ''
return string
}
}
export function getSimpleText(html) {
var re1 = new RegExp('<.+?>', 'g')
var msg = html.replace(re1, '')
return msg.slice(0, 10) + '......'
}
/**
* 根据服务器返回的 operateType 值决定表格显示'出库'还是'入库'
* @param {number} operateType
* @returns
*/
export function operateTypeFilter(operateType) {
return operateType === 1 ? '出库' : operateType === 2 ? '入库' : 0
}
/**
* 根据服务器返回的 source 值决定表格显示'手动','AGV','PDA'还是'其他'
* @param {number} source
* @returns
*/
export function sourceFilter(source) {
return source === 0 ? '手动' : source === 1 ? 'AGV' : source === 2 ? 'PDA' : '其他'
}
export function nonEmptyFilter(value) {
return value || '-'
}

Näytä tiedosto

@ -0,0 +1,18 @@
/*
* @Description:1
* @Author: juzi
* @Date: 2022-05-16
* @LastEditTime: 2022-05-16
* @LastEditors: Please set LastEditors
*/
const dictObj = JSON.parse(localStorage.getItem('dictObj'))
export default function(dictTable) {
return function(val) {
const arr = {}
const dicList = dictObj?.[dictTable]
dicList.map(item => {
arr[item.dataCode] = item.dataName
})
return arr?.[val]
}
}

23
src/icons/index.js Normal file
Näytä tiedosto

@ -0,0 +1,23 @@
/*
* @Author: zwq
* @Date: 2021-03-05 16:34:46
* @LastEditors: zwq
* @LastEditTime: 2021-04-23 14:31:40
* @Description:
*/
import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon'// svg component
// register globally
Vue.component('svg-icon', SvgIcon)
const req = require.context('./svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)
export default {
// 获取图标icon-(*).svg名称列表, 例如[shouye, xitong, zhedie, ...]
getNameList() {
return requireAll(req).map(item => item.default.id.replace('icon-', ''))
}
}

48
src/icons/lineNumber.svg Normal file
Näytä tiedosto

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>编组 16</title>
<defs>
<linearGradient x1="100%" y1="53.125%" x2="20.318998%" y2="46.875%" id="linearGradient-1">
<stop stop-color="#4BFFC8" offset="0%"></stop>
<stop stop-color="#45F2EC" offset="100%"></stop>
</linearGradient>
<linearGradient x1="50.1953125%" y1="100%" x2="49.8840586%" y2="7.84095011e-14%" id="linearGradient-2">
<stop stop-color="#4BFFC8" offset="0%"></stop>
<stop stop-color="#45F2EC" offset="100%"></stop>
</linearGradient>
<linearGradient x1="100%" y1="100%" x2="20.318998%" y2="7.84095011e-14%" id="linearGradient-3">
<stop stop-color="#4BFFC8" offset="0%"></stop>
<stop stop-color="#45F2EC" offset="100%"></stop>
</linearGradient>
<linearGradient x1="93.9453125%" y1="100%" x2="23.9131818%" y2="7.84095011e-14%" id="linearGradient-4">
<stop stop-color="#4BFFC8" offset="0%"></stop>
<stop stop-color="#45F2EC" offset="100%"></stop>
</linearGradient>
<linearGradient x1="64.8760331%" y1="100%" x2="41.1692887%" y2="7.84095011e-14%" id="linearGradient-5">
<stop stop-color="#4BFFC8" offset="0%"></stop>
<stop stop-color="#45F2EC" offset="100%"></stop>
</linearGradient>
<linearGradient x1="100%" y1="50.255102%" x2="20.318998%" y2="49.744898%" id="linearGradient-6">
<stop stop-color="#4BFFC8" offset="0%"></stop>
<stop stop-color="#45F2EC" offset="100%"></stop>
</linearGradient>
</defs>
<g id="驾驶舱" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="工厂运行情况" transform="translate(-1376.000000, -136.000000)" fill-rule="nonzero">
<g id="编组-16" transform="translate(1376.000000, 136.000000)">
<g id="开课情况" fill="#000000" opacity="0">
<rect id="矩形" x="0" y="0" width="24" height="24"></rect>
</g>
<g id="表格" transform="translate(4.000000, 4.000000)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="16" height="16"></rect>
<polygon id="路径" fill="url(#linearGradient-1)" points="0 0 16 0 16 4 0 4"></polygon>
<polygon id="路径" fill="url(#linearGradient-2)" points="0 0 1 0 1 16 0 16"></polygon>
<path d="M0,15 L16,15 L16,16 L0,16 L0,15 Z M0,0 L16,0 L16,1 L0,1 L0,0 Z" id="形状" fill="url(#linearGradient-3)"></path>
<path d="M15,0 L16,0 L16,16 L15,16 L15,0 Z M1,7 L15,7 L15,8 L1,8 L1,7 Z" id="形状" fill="url(#linearGradient-4)"></path>
<path d="M5,4 L6,4 L6,15 L5,15 L5,4 Z M10,4 L11,4 L11,15 L10,15 L10,4 Z" id="形状" fill="url(#linearGradient-5)"></path>
<polygon id="路径" fill="url(#linearGradient-6)" points="1 11 15 11 15 12 1 12"></polygon>
</g>
</g>
</g>
</g>
</svg>

After

Leveys:  |  Korkeus:  |  Koko: 3.1 KiB

23
src/icons/svg/1_1.svg Normal file
Näytä tiedosto

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>编组 6</title>
<defs>
<linearGradient x1="100%" y1="100%" x2="20.318998%" y2="7.84095011e-14%" id="linearGradient-1">
<stop stop-color="#4BFFC8" offset="0%"></stop>
<stop stop-color="#45F2EC" offset="100%"></stop>
</linearGradient>
</defs>
<g id="驾驶舱" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="运营总览_生产监控驾驶舱" transform="translate(-48.000000, -136.000000)">
<g id="编组-16" transform="translate(24.000000, 112.000000)">
<g id="编组-6" transform="translate(24.000000, 24.000000)">
<rect id="矩形" x="0" y="0" width="24" height="24"></rect>
<g id="异常" transform="translate(3.000000, 3.000000)" fill-rule="nonzero">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="17" height="17"></rect>
<path d="M9.00003613,1.00009438 C7.45266489,0.991339384 5.96400493,1.59197413 4.85604619,2.6721807 C3.77420104,3.74179852 3.16375561,5.19879645 3.16005953,6.72012488 L3.16005953,14.5280306 L14.7760126,14.5280306 L14.7760126,6.72010926 C14.7746725,5.19671341 14.1605756,3.73789487 13.0720104,2.67216507 C11.9832986,1.60721536 10.5229694,1.00760431 9.0000205,1.00009438 L9.00003613,1.00009438 Z M8.52003548,12.6560576 L8.35203526,8.87208057 L5.48804703,8.87208057 L9.24800521,4.12815624 L9.56800564,7.18412206 L12.2880093,7.28012148 L8.48800418,12.6560576 L8.52003548,12.6560576 Z M1.00003551,16.1280053 C0.997937773,15.8953576 1.08886376,15.671504 1.25262424,15.5062394 C1.41638472,15.3409748 1.63939864,15.2480106 1.87205781,15.2480106 L16.1280144,15.2480106 C16.3586463,15.2508825 16.5792874,15.3425823 16.7440153,15.5040247 C16.9059435,15.6716664 16.9975415,15.894943 17,16.1280053 C17,16.6095886 16.6096013,17 16.1280144,17 L1.87205781,17 C1.39047096,17 1.00003551,16.6095886 1.00003551,16.1280053 L1.00003551,16.1280053 Z" id="形状" fill="url(#linearGradient-1)"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Leveys:  |  Korkeus:  |  Koko: 2.3 KiB

18
src/icons/svg/1_2.svg Normal file
Näytä tiedosto

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>订单完成</title>
<defs>
<linearGradient x1="91.384997%" y1="100%" x2="25.4330364%" y2="7.84095011e-14%" id="linearGradient-1">
<stop stop-color="#4BFFC8" offset="0%"></stop>
<stop stop-color="#45F2EC" offset="100%"></stop>
</linearGradient>
</defs>
<g id="驾驶舱" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="运营总览_生产监控驾驶舱" transform="translate(-47.000000, -482.000000)" fill-rule="nonzero">
<g id="订单完成" transform="translate(47.000000, 482.000000)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="24" height="24"></rect>
<path d="M18.6252104,5.41416492 C18.9806677,5.41416492 19.2768822,5.72025321 19.2670084,6.06583676 L19.2670084,6.06583676 L19.2670084,19.3263713 C19.2670084,19.9089264 18.9312987,19.9879169 18.644958,19.9879169 L18.644958,19.9879169 L5.38442351,19.9879169 C5.01909233,19.9879169 4.73275167,19.6917024 4.73275167,19.3362451 L4.73275167,19.3362451 L4.73275167,6.07571057 C4.73275167,5.71037939 5.02896614,5.42403873 5.38442351,5.42403873 L5.38442351,5.42403873 L7.79363454,5.42403873 L7.79363454,6.75700386 C7.79363454,7.06309214 8.05035375,7.31981135 8.35644204,7.31981135 L8.35644204,7.31981135 L15.6531919,7.31981135 C15.9592801,7.31981135 16.2159993,7.07296596 16.2159993,6.75700386 L16.2159993,6.75700386 L16.2159993,5.41416492 Z M16.018523,10.2918299 C15.7716776,10.0449845 15.3865988,10.0449845 15.1397534,10.2918299 L15.1397534,10.2918299 L10.9038865,14.5276968 L8.83038519,12.4739432 C8.5835398,12.2270978 8.19846099,12.2270978 7.95161559,12.4739432 C7.7047702,12.7207885 7.7047702,13.1058674 7.95161559,13.3527128 L7.95161559,13.3527128 L10.4595648,15.8606619 C10.7064102,16.1075073 11.091489,16.1075073 11.3383344,15.8606619 L11.3383344,15.8606619 L16.0283968,11.1804733 C16.1567565,11.0521137 16.2159993,10.9040065 16.2159993,10.7361516 C16.2159993,10.5682967 16.1468826,10.4201895 16.018523,10.2918299 Z M14.9225295,4.01208309 C15.1397534,4.01208309 15.3273559,4.19968559 15.3273559,4.41690953 L15.3273559,6.07571057 C15.3273559,6.29293452 15.1397534,6.48053702 14.9225295,6.48053702 L9.0871044,6.48053702 L9.0871044,6.50028465 C8.86988045,6.50028465 8.68227796,6.31268215 8.68227796,6.0954582 L8.68227796,4.41690953 C8.68227796,4.19968559 8.86988045,4.01208309 9.0871044,4.01208309 L14.9225295,4.01208309 Z" id="形状结合" fill="url(#linearGradient-1)"></path>
</g>
</g>
</g>
</svg>

After

Leveys:  |  Korkeus:  |  Koko: 2.7 KiB

34
src/icons/svg/1_3.svg Normal file
Näytä tiedosto

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>编组 6</title>
<defs>
<linearGradient x1="100%" y1="89.6187762%" x2="20.318998%" y2="10.3812238%" id="linearGradient-1">
<stop stop-color="#4BFFC8" offset="0%"></stop>
<stop stop-color="#45F2EC" offset="100%"></stop>
</linearGradient>
<linearGradient x1="100%" y1="54.7269958%" x2="20.318998%" y2="45.2730042%" id="linearGradient-2">
<stop stop-color="#4BFFC8" offset="0%"></stop>
<stop stop-color="#45F2EC" offset="100%"></stop>
</linearGradient>
</defs>
<g id="驾驶舱" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="运营总览_生产监控驾驶舱" transform="translate(-1520.000000, -136.000000)">
<g id="编组-16备份" transform="translate(1496.000000, 112.000000)">
<g id="编组-6" transform="translate(24.000000, 24.000000)">
<rect id="矩形" x="0" y="0" width="24" height="24"></rect>
<g id="异常" transform="translate(2.822956, 3.000000)" fill-rule="nonzero">
<rect id="矩形" fill="#000000" opacity="0" x="0.177043603" y="0" width="17" height="17"></rect>
<g transform="translate(0.000000, 1.000000)">
<rect id="矩形" fill="#000000" opacity="0" x="2.2942609" y="3.82376817" width="13.0008118" height="13.0008118"></rect>
<g id="数量_面性">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="16.3388569" height="16.3388569"></rect>
<path d="M9.17805228,9.10739984 C9.09065277,9.10739984 9.00428874,9.08848299 8.92490085,9.05192841 L0.352043871,5.10337133 C0.13746634,5.00456794 2.1544497e-07,4.78993206 2.1544497e-07,4.55369992 C2.1544497e-07,4.31746777 0.13746634,4.10283189 0.352043871,4.0040285 L8.92490085,0.0554714242 C9.08498864,-0.0179046966 9.26909878,-0.0179046966 9.42918657,0.0554714242 L18.0020436,4.0040285 C18.2166211,4.10283189 18.3540872,4.31746777 18.3540872,4.55369992 C18.3540872,4.78993206 18.2166211,5.00456794 18.0020436,5.10337133 L9.42918657,9.05192841 C9.35041678,9.0881996 9.26477135,9.10711726 9.17805228,9.10739984 L9.17805228,9.10739984 Z M17.4483378,11.2576741 L9.17805228,15.0670483 L0.907766719,11.2576741 L0.907766719,12.5899969 L8.92490085,16.2833854 C9.08498864,16.3567616 9.26909878,16.3567616 9.42918657,16.2833854 L17.4483378,12.5899969 L17.4483378,11.2576741 Z" id="形状" fill="url(#linearGradient-1)"></path>
<path d="M17.4483378,7.63791129 L9.17805228,11.4482941 L0.907766719,7.63791129 L0.907766719,8.97628555 L8.92490085,12.6686655 C9.08498864,12.7420416 9.26909878,12.7420416 9.42918657,12.6686655 L17.4483378,8.97628555 L17.4483378,7.63791129 Z" id="路径" fill="url(#linearGradient-2)"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Leveys:  |  Korkeus:  |  Koko: 3.1 KiB

20
src/icons/svg/1_4.svg Normal file
Näytä tiedosto

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>人员</title>
<defs>
<linearGradient x1="100%" y1="77.661922%" x2="20.318998%" y2="22.338078%" id="linearGradient-1">
<stop stop-color="#4BFFC8" offset="0%"></stop>
<stop stop-color="#45F2EC" offset="100%"></stop>
</linearGradient>
</defs>
<g id="驾驶舱" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="运营总览_生产监控驾驶舱" transform="translate(-1520.000000, -478.000000)" fill-rule="nonzero">
<g id="编组-5备份-3" transform="translate(1496.000000, 454.000000)">
<g id="人员" transform="translate(24.000000, 24.000000)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="24" height="24"></rect>
<path d="M3.85418182,7.75745454 C3.85418182,5.51672726 5.70763636,3.70036364 7.99418182,3.70036364 C10.2818182,3.70036364 12.1352727,5.51672728 12.1352727,7.75745454 C12.1352727,9.9981818 10.2807273,11.8145455 7.99418182,11.8145455 C5.70763638,11.8145455 3.85418182,9.99818182 3.85418182,7.75745454 Z M9.54545454,18.9458182 L9.54545454,18.6654545 C9.54545454,16.5970909 10.6232727,14.7796364 12.2487273,13.7083636 C11.514443,13.3528168 10.7092895,13.1678441 9.89345454,13.1672727 L6.44181818,13.1672727 C3.48763636,13.1672727 1.0930909,15.5127273 1.0930909,18.4069091 L1.0930909,18.7450909 C1.0930909,19.9287273 3.48763636,19.9287273 6.44181818,19.9287273 L9.74181818,19.9287273 C9.60753405,19.6186818 9.54060401,19.2836597 9.54545454,18.9458182 L9.54545454,18.9458182 Z M16.896,6.4570909 C14.9989091,6.4570909 13.4596364,7.96472726 13.4596364,9.82472728 C13.4596364,11.6847273 14.9989091,13.1923636 16.896,13.1923636 C18.7941818,13.1923636 20.3323636,11.6847273 20.3323636,9.82472728 C20.3323636,7.96472728 18.7952727,6.4570909 16.896,6.4570909 Z M16.896,6.4570909 C14.9989091,6.4570909 13.4596364,7.96472726 13.4596364,9.82472728 C13.4596364,11.6847273 14.9989091,13.1923636 16.896,13.1923636 C18.7941818,13.1923636 20.3323636,11.6847273 20.3323636,9.82472728 C20.3323636,7.96472728 18.7952727,6.4570909 16.896,6.4570909 Z M15.6087273,14.316 C13.1563636,14.316 11.1687273,16.2632727 11.1687273,18.6654545 L11.1687273,18.9458182 C11.1687273,19.9276364 13.1563636,19.9276364 15.6087273,19.9276364 L18.4734545,19.9276364 C20.9247273,19.9276364 22.9112727,19.8916364 22.9112727,18.9458182 L22.9112727,18.6654545 C22.9112727,16.2632727 20.9247273,14.316 18.4734545,14.316 L15.6087273,14.316 Z" id="形状" fill="url(#linearGradient-1)"></path>
</g>
</g>
</g>
</g>
</svg>

After

Leveys:  |  Korkeus:  |  Koko: 2.7 KiB

32
src/icons/svg/1_5.svg Normal file
Näytä tiedosto

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>编组 6</title>
<defs>
<linearGradient x1="100%" y1="89.6187762%" x2="20.318998%" y2="10.3812238%" id="linearGradient-1">
<stop stop-color="#4BFFC8" offset="0%"></stop>
<stop stop-color="#45F2EC" offset="100%"></stop>
</linearGradient>
<linearGradient x1="100%" y1="54.7269958%" x2="20.318998%" y2="45.2730042%" id="linearGradient-2">
<stop stop-color="#4BFFC8" offset="0%"></stop>
<stop stop-color="#45F2EC" offset="100%"></stop>
</linearGradient>
</defs>
<g id="驾驶舱" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="运营总览_生产监控驾驶舱" transform="translate(-464.000000, -824.000000)">
<g id="编组-6" transform="translate(464.000000, 824.000000)">
<rect id="矩形" x="0" y="0" width="24" height="24"></rect>
<g id="异常" transform="translate(2.822956, 3.000000)" fill-rule="nonzero">
<rect id="矩形" fill="#000000" opacity="0" x="0.177043603" y="0" width="17" height="17"></rect>
<g transform="translate(0.000000, 1.000000)">
<rect id="矩形" fill="#000000" opacity="0" x="2.2942609" y="3.82376817" width="13.0008118" height="13.0008118"></rect>
<g id="数量_面性">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="16.3388569" height="16.3388569"></rect>
<path d="M9.17805228,9.10739984 C9.09065277,9.10739984 9.00428874,9.08848299 8.92490085,9.05192841 L0.352043871,5.10337133 C0.13746634,5.00456794 2.1544497e-07,4.78993206 2.1544497e-07,4.55369992 C2.1544497e-07,4.31746777 0.13746634,4.10283189 0.352043871,4.0040285 L8.92490085,0.0554714242 C9.08498864,-0.0179046966 9.26909878,-0.0179046966 9.42918657,0.0554714242 L18.0020436,4.0040285 C18.2166211,4.10283189 18.3540872,4.31746777 18.3540872,4.55369992 C18.3540872,4.78993206 18.2166211,5.00456794 18.0020436,5.10337133 L9.42918657,9.05192841 C9.35041678,9.0881996 9.26477135,9.10711726 9.17805228,9.10739984 L9.17805228,9.10739984 Z M17.4483378,11.2576741 L9.17805228,15.0670483 L0.907766719,11.2576741 L0.907766719,12.5899969 L8.92490085,16.2833854 C9.08498864,16.3567616 9.26909878,16.3567616 9.42918657,16.2833854 L17.4483378,12.5899969 L17.4483378,11.2576741 Z" id="形状" fill="url(#linearGradient-1)"></path>
<path d="M17.4483378,7.63791129 L9.17805228,11.4482941 L0.907766719,7.63791129 L0.907766719,8.97628555 L8.92490085,12.6686655 C9.08498864,12.7420416 9.26909878,12.7420416 9.42918657,12.6686655 L17.4483378,8.97628555 L17.4483378,7.63791129 Z" id="路径" fill="url(#linearGradient-2)"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Leveys:  |  Korkeus:  |  Koko: 3.0 KiB

12
src/icons/svg/1_6.svg Normal file
Näytä tiedosto

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>产品</title>
<g id="驾驶舱" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="运营总览_生产监控驾驶舱" transform="translate(-1198.000000, -824.000000)" fill-rule="nonzero">
<g id="产品" transform="translate(1198.000000, 824.000000)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="24" height="24"></rect>
<path d="M19.5,17.25 L13.65,20.85 C13.2,21.15 12.75,20.85 12.75,20.25 L12.75,11.85 C12.75,11.7 12.9,11.4 13.05,11.25 L18.9,7.65 C19.35,7.35 19.8,7.65 19.8,8.25 L19.8,16.8 C19.8,16.95 19.65,17.25 19.5,17.25 Z M4.5,17.25 L10.35,20.85 C10.8,21.15 11.25,20.85 11.25,20.25 L11.25,11.85 C11.25,11.7 11.1,11.4 10.95,11.25 L5.1,7.65 C4.8,7.5 4.2,7.8 4.2,8.25 L4.2,16.8 C4.2,16.95 4.35,17.25 4.5,17.25 Z M11.85,3 L5.1,5.55 C4.8,5.7 4.8,6.15 5.1,6.3 L11.85,10.5 C12,10.5 12.15,10.5 12.15,10.5 L19.05,6.3 C19.35,6.15 19.35,5.7 19.05,5.55 L12.15,3 C12,3 12,3 11.85,3 Z" id="形状" fill="#47F7DD"></path>
</g>
</g>
</g>
</svg>

After

Leveys:  |  Korkeus:  |  Koko: 1.2 KiB

1
src/icons/svg/404.svg Normal file
Näytä tiedosto

@ -0,0 +1 @@
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M121.718 73.272v9.953c3.957-7.584 6.199-16.05 6.199-24.995C127.917 26.079 99.273 0 63.958 0 28.644 0 0 26.079 0 58.23c0 .403.028.806.028 1.21l22.97-25.953h13.34l-19.76 27.187h6.42V53.77l13.728-19.477v49.361H22.998V73.272H2.158c5.951 20.284 23.608 36.208 45.998 41.399-1.44 3.3-5.618 11.263-12.565 12.674-8.607 1.764 23.358.428 46.163-13.178 17.519-4.611 31.938-15.849 39.77-30.513h-13.506V73.272H85.02V59.464l22.998-25.977h13.008l-19.429 27.187h6.421v-7.433l13.727-19.402v39.433h-.027zm-78.24 2.822a10.516 10.516 0 0 1-.996-4.535V44.548c0-1.613.332-3.124.996-4.535a11.66 11.66 0 0 1 2.713-3.68c1.134-1.032 2.49-1.864 4.04-2.468 1.55-.605 3.21-.908 4.982-.908h11.292c1.77 0 3.431.303 4.981.908 1.522.604 2.85 1.41 3.986 2.418l-12.26 16.303v-2.898a1.96 1.96 0 0 0-.665-1.512c-.443-.403-.996-.604-1.66-.604-.665 0-1.218.201-1.661.604a1.96 1.96 0 0 0-.664 1.512v9.071L44.364 77.606a10.556 10.556 0 0 1-.886-1.512zm35.73-4.535c0 1.613-.332 3.124-.997 4.535a11.66 11.66 0 0 1-2.712 3.68c-1.134 1.032-2.49 1.864-4.04 2.469-1.55.604-3.21.907-4.982.907H55.185c-1.77 0-3.431-.303-4.981-.907-1.55-.605-2.906-1.437-4.041-2.47a12.49 12.49 0 0 1-1.384-1.512l13.727-18.217v6.375c0 .605.222 1.109.665 1.512.442.403.996.604 1.66.604.664 0 1.218-.201 1.66-.604a1.96 1.96 0 0 0 .665-1.512V53.87L75.97 36.838c.913.932 1.66 1.99 2.214 3.175.664 1.41.996 2.922.996 4.535v27.011h.028z"/></svg>

After

Leveys:  |  Korkeus:  |  Koko: 1.4 KiB

20
src/icons/svg/5_1.svg Normal file
Näytä tiedosto

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>总览</title>
<defs>
<linearGradient x1="93.764924%" y1="100%" x2="24.0202641%" y2="7.84095011e-14%" id="linearGradient-1">
<stop stop-color="#4BFFC8" offset="0%"></stop>
<stop stop-color="#45F2EC" offset="100%"></stop>
</linearGradient>
</defs>
<g id="驾驶舱" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="运营总览_质量管理驾驶舱" transform="translate(-49.000000, -137.000000)" fill-rule="nonzero">
<g id="编组-5备份-7" transform="translate(24.000000, 112.000000)">
<g id="总览" transform="translate(25.000000, 25.000000)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="24" height="24"></rect>
<path d="M12.0378407,13.2200821 L5.21704525,7.4725743 C2.18247299,11.1003099 2.78379376,16.2604811 6.40453724,19.3067069 C10.0311075,22.3575941 15.4453251,21.8926193 18.4973776,18.2672144 C20.2209307,16.2196939 20.8187555,13.9577489 20.3631035,11.5175053 L12.0378407,13.2200821 Z M17.400783,4.80159134 C17.3599957,4.76546548 17.3203738,4.72933962 17.2784212,4.69321376 C13.6518509,1.64116124 8.23879866,2.10730138 5.18674614,5.73503695 C5.18091939,5.74086371 5.17625799,5.74669046 5.17159659,5.75251721 L11.8630382,11.38349 L17.400783,4.80159134 Z M18.4868895,5.92615441 L12.607697,11.9964643 L20.7138739,9.53640973 C20.3619381,7.90025787 19.5182245,6.75355314 18.4868895,5.92615441 Z" id="形状" fill="url(#linearGradient-1)"></path>
</g>
</g>
</g>
</g>
</svg>

After

Leveys:  |  Korkeus:  |  Koko: 1.7 KiB

20
src/icons/svg/5_2.svg Normal file
Näytä tiedosto

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>开课情况</title>
<defs>
<linearGradient x1="78.125%" y1="100%" x2="33.3044364%" y2="7.84095011e-14%" id="linearGradient-1">
<stop stop-color="#4BFFC8" offset="0%"></stop>
<stop stop-color="#45F2EC" offset="100%"></stop>
</linearGradient>
</defs>
<g id="驾驶舱" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="运营总览_质量管理驾驶舱" transform="translate(-49.000000, -458.000000)" fill-rule="nonzero">
<g id="编组-5备份-8" transform="translate(24.000000, 432.000000)">
<g id="开课情况" transform="translate(25.000000, 26.000000)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="24" height="24"></rect>
<path d="M16.78125,6.79995 L16.78125,7.74375 L7.18125,7.74375 L7.18125,6.79995 L6.25,6.79995 C5.69771525,6.79995 5.25,7.24766525 5.25,7.79995 L5.25,20 C5.25,20.5522847 5.69771525,21 6.25,21 L17.75,21 C18.3022847,21 18.75,20.5522847 18.75,20 L18.75,7.79995 C18.75,7.24766525 18.3022847,6.79995 17.75,6.79995 L16.78125,6.79995 L16.78125,6.79995 Z M7.14375,9.6099 L16.74375,9.6099 L16.74375,11.41875 L7.14375,11.41875 L7.14375,9.6099 Z M13.9311,19.06875 L7.1811,19.06875 L7.1811,17.19375 L13.9311,17.19375 L13.9311,19.06875 Z M16.7907,15.333 L7.1907,15.333 L7.1907,13.425 L16.7907,13.425 L16.7907,15.333 Z M11.07805,3 L12.9218,3 C13.4740847,3 13.9218,3.44771525 13.9218,4 L13.9218,5.83125 L13.9218,5.83125 L10.07805,5.83125 L10.07805,4 C10.07805,3.44771525 10.5257653,3 11.07805,3 Z M15.8532,5.9125 L15.8532,6.79995 L15.8532,6.79995 L8.1468,6.79995 L8.1468,5.9125 C8.1468,5.36021525 8.59451525,4.9125 9.1468,4.9125 L14.8532,4.9125 C15.4054847,4.9125 15.8532,5.36021525 15.8532,5.9125 Z" id="形状" fill="url(#linearGradient-1)"></path>
</g>
</g>
</g>
</g>
</svg>

After

Leveys:  |  Korkeus:  |  Koko: 2.0 KiB

20
src/icons/svg/5_3.svg Normal file
Näytä tiedosto

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>area chart</title>
<defs>
<linearGradient x1="100%" y1="92.0138889%" x2="20.318998%" y2="7.98611111%" id="linearGradient-1">
<stop stop-color="#4BFFC8" offset="0%"></stop>
<stop stop-color="#45F2EC" offset="100%"></stop>
</linearGradient>
</defs>
<g id="驾驶舱" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="运营总览_质量管理驾驶舱" transform="translate(-49.000000, -777.000000)" fill-rule="nonzero">
<g id="编组-5备份-9" transform="translate(24.000000, 752.000000)">
<g id="area-chart" transform="translate(25.000000, 25.000000)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="24" height="24"></rect>
<path d="M20.8125,18.5625 L4.6875,18.5625 L4.6875,3.9375 C4.6875,3.834375 4.603125,3.75 4.5,3.75 L3.1875,3.75 C3.084375,3.75 3,3.834375 3,3.9375 L3,20.0625 C3,20.165625 3.084375,20.25 3.1875,20.25 L20.8125,20.25 C20.915625,20.25 21,20.165625 21,20.0625 L21,18.75 C21,18.646875 20.915625,18.5625 20.8125,18.5625 Z M6.375,17.0625 L18.9375,17.0625 C19.040625,17.0625 19.125,16.978125 19.125,16.875 L19.125,6.65625 C19.125,6.4875 18.9210937,6.40546875 18.8039062,6.52265625 L13.875,11.4515625 L10.9359375,8.5453125 C10.8632812,8.47265625 10.74375,8.47265625 10.6710938,8.5453125 L6.24140625,12.9890625 C6.20625,13.0242188 6.1875,13.0710938 6.1875,13.1203125 L6.1875,16.875 C6.1875,16.978125 6.271875,17.0625 6.375,17.0625 Z" id="形状" fill="url(#linearGradient-1)"></path>
</g>
</g>
</g>
</g>
</svg>

After

Leveys:  |  Korkeus:  |  Koko: 1.8 KiB

Some files were not shown because too many files have changed in this diff Show More