Initial commit all
|
@ -0,0 +1,2 @@
|
|||
> 1%
|
||||
last 2 versions
|
|
@ -0,0 +1,5 @@
|
|||
[*.{js,jsx,ts,tsx,vue}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
|
@ -0,0 +1,4 @@
|
|||
/**
|
||||
* Created by Zhang Haijun on 2018/8/13.
|
||||
*/
|
||||
VUE_APP_BASEURL = '/'
|
|
@ -0,0 +1,4 @@
|
|||
/**
|
||||
* Created by Zhang Haijun on 2018/8/13.
|
||||
*/
|
||||
VUE_APP_BASEURL = '/sms-web/'
|
|
@ -0,0 +1 @@
|
|||
/resourceApply
|
|
@ -0,0 +1,29 @@
|
|||
module.exports = {
|
||||
root: true,
|
||||
env: {
|
||||
node: true
|
||||
},
|
||||
extends: ['plugin:vue/essential', '@vue/standard', '@vue/typescript'],
|
||||
rules: {
|
||||
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
|
||||
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
|
||||
'no-unused-vars': [
|
||||
0,
|
||||
{
|
||||
vars: 'all',
|
||||
args: 'none'
|
||||
}
|
||||
],
|
||||
semi: 0,
|
||||
eqeqeq: 0,
|
||||
'one-var': 0,
|
||||
camelcase: 0,
|
||||
'no-case-declarations': 0,
|
||||
'space-before-function-paren': 0,
|
||||
'vue/no-parsing-error': [2, { 'x-invalid-end-tag': false }],
|
||||
'@typescript-eslint/indent': ['error', 2]
|
||||
},
|
||||
parserOptions: {
|
||||
parser: '@typescript-eslint/parser'
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"printWidth": 300,
|
||||
"tabWidth": 2,
|
||||
"singleQuote": true,
|
||||
"semi": false,
|
||||
"trailingComma": "none"
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
@Library('jgpl') _
|
||||
webPipeline([onBuildInstallShell:{->
|
||||
return """
|
||||
pnpm install -no-frozen-lockfile
|
||||
pnpm run build || echo 'Ignore build error !!!'
|
||||
"""
|
||||
}])
|
|
@ -0,0 +1,29 @@
|
|||
# ts
|
||||
|
||||
## Project setup
|
||||
|
||||
```
|
||||
yarn install
|
||||
```
|
||||
|
||||
### Compiles and hot-reloads for development
|
||||
|
||||
```
|
||||
yarn serve
|
||||
```
|
||||
|
||||
### Compiles and minifies for production
|
||||
|
||||
```
|
||||
yarn build
|
||||
```
|
||||
|
||||
### Lints and fixes files
|
||||
|
||||
```
|
||||
yarn lint
|
||||
```
|
||||
|
||||
### Customize configuration
|
||||
|
||||
See [Configuration Reference](https://cli.vuejs.org/config/).
|
|
@ -0,0 +1,3 @@
|
|||
module.exports = {
|
||||
presets: ['@vue/cli-plugin-babel/preset']
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
module.exports = {
|
||||
extends: ['@commitlint/config-conventional']
|
||||
}
|
|
@ -0,0 +1,104 @@
|
|||
{
|
||||
"name": "sms-web",
|
||||
"version": "5.6.0",
|
||||
"private": true,
|
||||
"author": "Haijun Zhang <zhanghaijun@beyondcent.com>",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"lint": "vue-cli-service lint",
|
||||
"fix": "vue-cli-service lint --fix",
|
||||
"fix-memory-limit": "cross-env LIMIT=4096 increase-memory-limit",
|
||||
"precommit": "lint-staged",
|
||||
"upload": "node upload.js",
|
||||
"deploy": "yarn build && yarn upload"
|
||||
},
|
||||
"dependencies": {
|
||||
"@antv/g6": "3.8.5",
|
||||
"vue-grid-layout": "2.3.12",
|
||||
"@vue/composition-api": "^1.7.1",
|
||||
"axios": "^0.21.1",
|
||||
"clipboard": "^2.0.6",
|
||||
"cmp-echarts": "2.0.0-5.6-release",
|
||||
"cmp-element": "1.0.0-5.6-release",
|
||||
"cmp-socket": "1.0.0",
|
||||
"core-js": "^3.3.2",
|
||||
"crypto-js": "^3.1.9-1",
|
||||
"dayjs": "^1.10.4",
|
||||
"element-ui": "2.13.0",
|
||||
"js-cookie": "^2.2.0",
|
||||
"lodash-es": "^4.17.21",
|
||||
"nprogress": "^0.2.0",
|
||||
"qs": "^6.7.0",
|
||||
"regenerator-runtime": "^0.13.11",
|
||||
"tslib": "^2.4.1",
|
||||
"url-loader": "^4.1.1",
|
||||
"vue": "2.6.14",
|
||||
"vue-class-component": "^7.0.2",
|
||||
"vue-i18n": "^8.15.0",
|
||||
"vue-property-decorator": "^8.3.0",
|
||||
"vue-router": "^3.3.4",
|
||||
"vue2-animate": "^1.0.4",
|
||||
"vuedraggable": "^2.15.0",
|
||||
"vuex": "^3.0.1",
|
||||
"wangeditor": "^4.6.16"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^11.0.0",
|
||||
"@commitlint/config-conventional": "^11.0.0",
|
||||
"@types/js-cookie": "^2.2.4",
|
||||
"@types/lodash-es": "^4.17.4",
|
||||
"@types/nprogress": "^0.2.0",
|
||||
"@types/qs": "^6.5.3",
|
||||
"@typescript-eslint/eslint-plugin": "^2.18.0",
|
||||
"@typescript-eslint/parser": "^2.18.0",
|
||||
"@vue/cli-plugin-babel": "~4.4.1",
|
||||
"@vue/cli-plugin-eslint": "~4.4.1",
|
||||
"@vue/cli-plugin-router": "~4.4.1",
|
||||
"@vue/cli-plugin-typescript": "~4.4.1",
|
||||
"@vue/cli-plugin-vuex": "~4.4.1",
|
||||
"@vue/cli-service": "~4.4.1",
|
||||
"@vue/eslint-config-standard": "^5.1.0",
|
||||
"@vue/eslint-config-typescript": "^5.0.1",
|
||||
"chalk": "^4.1.1",
|
||||
"compress-webpack-plugin": "^1.0.6",
|
||||
"cross-env": "^5.2.0",
|
||||
"eslint": "^6.7.2",
|
||||
"eslint-plugin-import": "^2.20.1",
|
||||
"eslint-plugin-node": "^11.0.0",
|
||||
"eslint-plugin-promise": "^4.2.1",
|
||||
"eslint-plugin-standard": "^4.0.0",
|
||||
"eslint-plugin-vue": "^6.1.2",
|
||||
"husky": "^1.3.1",
|
||||
"increase-memory-limit": "^1.0.6",
|
||||
"lint-staged": "^8.1.5",
|
||||
"ora": "^5.4.0",
|
||||
"sass": "~1.32.6",
|
||||
"sass-loader": "^8.0.0",
|
||||
"scp2": "^0.5.0",
|
||||
"svg-sprite-loader": "^6.0.2",
|
||||
"typescript": "~3.9.3",
|
||||
"vite": "2.4.1",
|
||||
"vite-plugin-svg-icons": "^0.6.2",
|
||||
"vite-plugin-vue2": "^1.5.1",
|
||||
"vue-template-compiler": "2.6.14"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"parserOptions": {
|
||||
"parser": "@typescript-eslint/parser"
|
||||
}
|
||||
},
|
||||
"lint-staged": {
|
||||
"src/**/*.{js,vue}": [
|
||||
"eslint --fix",
|
||||
"git add"
|
||||
]
|
||||
},
|
||||
"husky": {
|
||||
"hooks": {
|
||||
"pre-commit": "lint-staged",
|
||||
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
module.exports = {
|
||||
plugins: {
|
||||
autoprefixer: {}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<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" />
|
||||
<title>多云集中纳管系统</title>
|
||||
<link rel="stylesheet" href="/web-common-resource/css/loading.css" />
|
||||
</head>
|
||||
|
||||
<body id="cmp">
|
||||
<noscript>
|
||||
<strong>We're sorry but cmc-web3.0 doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
||||
</noscript>
|
||||
<div class="loading">
|
||||
<div class="loader-inner line-scale-pulse-out-rapid">
|
||||
<div></div>
|
||||
<div></div>
|
||||
<div></div>
|
||||
<div></div>
|
||||
<div></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="app"></div>
|
||||
<!-- built files will be auto injected -->
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,12 @@
|
|||
const exec = require('child_process').exec
|
||||
const params = process.argv[2]
|
||||
const str = `git subtree ${params || 'pull'} --prefix=src/common http://haijun@58.210.154.140:8888/web/cmp-common.git master --squash`
|
||||
exec(str, function (err, stdout, stderr) {
|
||||
if (err) {
|
||||
console.log('======执行失败=======')
|
||||
console.log(err)
|
||||
} else {
|
||||
console.log('======执行成功=======')
|
||||
console.log(stdout)
|
||||
}
|
||||
})
|
|
@ -0,0 +1,53 @@
|
|||
<template>
|
||||
<div id="app" @click="setTime">
|
||||
<router-view></router-view>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { onMounted, ref } from '@vue/composition-api'
|
||||
|
||||
export default {
|
||||
setup(props, context) {
|
||||
const dialogVisible = ref(false)
|
||||
context.root.$store.dispatch('GetPageConfigs')
|
||||
context.root.$store.dispatch('GetSystemConfigs')
|
||||
onMounted(() => {
|
||||
// 偶发后退无效问题 hack
|
||||
window.addEventListener(
|
||||
'hashchange',
|
||||
() => {
|
||||
const currentPath = window.location.hash.slice(1)
|
||||
if (context.root.$route.path !== currentPath) {
|
||||
context.root.$router.push(currentPath)
|
||||
}
|
||||
},
|
||||
false
|
||||
)
|
||||
// 移除loading
|
||||
setTimeout(() => {
|
||||
const el = document.getElementsByClassName('loading')[0]
|
||||
if (el && el.parentElement) {
|
||||
el.parentElement.removeChild(el)
|
||||
}
|
||||
}, 1000 * 2)
|
||||
})
|
||||
function judgeAgent() {
|
||||
if (window.navigator.userAgent.indexOf('MSIE') > 0) {
|
||||
dialogVisible.value = true
|
||||
}
|
||||
}
|
||||
function setTime() {
|
||||
context.root.$store.commit('SET_OPERATETIME')
|
||||
}
|
||||
judgeAgent()
|
||||
return {
|
||||
dialogVisible,
|
||||
setTime
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss">
|
||||
@import './common/css/index.scss';
|
||||
</style>
|
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 5.7 KiB |
|
@ -0,0 +1,117 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-radio-group v-model="params.time" @change="selectTime">
|
||||
<el-radio-button v-for="item in timeList" :key="item.value" :label="item.value">{{ item.label }}</el-radio-button>
|
||||
</el-radio-group>
|
||||
<el-button class="m-l-sm" :type="params.startTime ? 'primary' : 'ghost'" @click="selectTime()">自定义</el-button>
|
||||
<span class="tip m-l" v-if="params.startTime">时间范围:{{ params.startTime }} - {{ params.endTime }}</span>
|
||||
<el-dialog title="时间选择" :visible.sync="dialogVisible" width="500px" v-if="dialogVisible">
|
||||
<el-date-picker v-model="time" value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange" :picker-options="pickerOptions" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" align="right"> </el-date-picker>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click.native="dialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click.native="submit">确定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
timeList: {
|
||||
type: Array,
|
||||
default: function () {
|
||||
return [
|
||||
{ label: '天', value: 'Days' },
|
||||
{ label: '周', value: 'Weeks' },
|
||||
{ label: '月', value: 'Months' },
|
||||
{ label: '季度', value: 'QuarterYears' },
|
||||
{ label: '半年', value: 'HalfYears' },
|
||||
{ label: '一年', value: 'Years' }
|
||||
]
|
||||
}
|
||||
},
|
||||
getData: {
|
||||
type: Function
|
||||
},
|
||||
defaultTime: {
|
||||
type: String,
|
||||
default: 'Months'
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
pickerOptions: {
|
||||
shortcuts: [
|
||||
{
|
||||
text: '最近一周',
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
|
||||
picker.$emit('pick', [start, end])
|
||||
}
|
||||
},
|
||||
{
|
||||
text: '最近一个月',
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
|
||||
picker.$emit('pick', [start, end])
|
||||
}
|
||||
},
|
||||
{
|
||||
text: '最近三个月',
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
|
||||
picker.$emit('pick', [start, end])
|
||||
}
|
||||
}
|
||||
],
|
||||
disabledDate(time) {
|
||||
return time.getTime() > new Date().getTime()
|
||||
}
|
||||
},
|
||||
dialogVisible: false,
|
||||
time: '',
|
||||
params: {
|
||||
time: '',
|
||||
startTime: '',
|
||||
endTime: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.params.time = this.defaultTime
|
||||
},
|
||||
methods: {
|
||||
selectTime(value) {
|
||||
// 自定义
|
||||
if (!value) {
|
||||
this.dialogVisible = true
|
||||
this.dialogVisible = true
|
||||
return
|
||||
}
|
||||
this.time = ''
|
||||
this.params.startTime = ''
|
||||
this.params.endTime = ''
|
||||
this.getData(this.params)
|
||||
},
|
||||
submit() {
|
||||
if (!this.time) return this.$message.error('请选择时间范围')
|
||||
const [startTime, endTime] = this.time
|
||||
if (new Date(endTime).getTime() - new Date(startTime) < 1000 * 60 * 60) {
|
||||
return this.$message.error('时间间隔必须大于一小时')
|
||||
}
|
||||
this.params.time = ''
|
||||
this.params.startTime = startTime
|
||||
this.params.endTime = endTime
|
||||
this.dialogVisible = false
|
||||
this.getData(this.params)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,283 @@
|
|||
const elementIcons = [
|
||||
'platform-eleme',
|
||||
'eleme',
|
||||
'delete-solid',
|
||||
'delete',
|
||||
's-tools',
|
||||
'setting',
|
||||
'user-solid',
|
||||
'user',
|
||||
'phone',
|
||||
'phone-outline',
|
||||
'more',
|
||||
'more-outline',
|
||||
'star-on',
|
||||
'star-off',
|
||||
's-goods',
|
||||
'goods',
|
||||
'warning',
|
||||
'warning-outline',
|
||||
'question',
|
||||
'info',
|
||||
'remove',
|
||||
'circle-plus',
|
||||
'success',
|
||||
'error',
|
||||
'zoom-in',
|
||||
'zoom-out',
|
||||
'remove-outline',
|
||||
'circle-plus-outline',
|
||||
'circle-check',
|
||||
'circle-close',
|
||||
's-help',
|
||||
'help',
|
||||
'minus',
|
||||
'plus',
|
||||
'check',
|
||||
'close',
|
||||
'picture',
|
||||
'picture-outline',
|
||||
'picture-outline-round',
|
||||
'upload',
|
||||
'upload2',
|
||||
'download',
|
||||
'camera-solid',
|
||||
'camera',
|
||||
'video-camera-solid',
|
||||
'video-camera',
|
||||
'message-solid',
|
||||
'bell',
|
||||
's-cooperation',
|
||||
's-order',
|
||||
's-platform',
|
||||
's-fold',
|
||||
's-unfold',
|
||||
's-operation',
|
||||
's-promotion',
|
||||
's-home',
|
||||
's-release',
|
||||
's-ticket',
|
||||
's-management',
|
||||
's-open',
|
||||
's-shop',
|
||||
's-marketing',
|
||||
's-flag',
|
||||
's-comment',
|
||||
's-finance',
|
||||
's-claim',
|
||||
's-custom',
|
||||
's-opportunity',
|
||||
's-data',
|
||||
's-check',
|
||||
's-grid',
|
||||
'menu',
|
||||
'share',
|
||||
'd-caret',
|
||||
'caret-left',
|
||||
'caret-right',
|
||||
'caret-bottom',
|
||||
'caret-top',
|
||||
'bottom-left',
|
||||
'bottom-right',
|
||||
'back',
|
||||
'right',
|
||||
'bottom',
|
||||
'top',
|
||||
'top-left',
|
||||
'top-right',
|
||||
'arrow-left',
|
||||
'arrow-right',
|
||||
'arrow-down',
|
||||
'arrow-up',
|
||||
'd-arrow-left',
|
||||
'd-arrow-right',
|
||||
'video-pause',
|
||||
'video-play',
|
||||
'refresh',
|
||||
'refresh-right',
|
||||
'refresh-left',
|
||||
'finished',
|
||||
'sort',
|
||||
'sort-up',
|
||||
'sort-down',
|
||||
'rank',
|
||||
'view',
|
||||
'c-scale-to-original',
|
||||
'date',
|
||||
'edit',
|
||||
'edit-outline',
|
||||
'folder',
|
||||
'folder-opened',
|
||||
'folder-add',
|
||||
'folder-remove',
|
||||
'folder-delete',
|
||||
'folder-checked',
|
||||
'tickets',
|
||||
'document-remove',
|
||||
'document-delete',
|
||||
'document-copy',
|
||||
'document-checked',
|
||||
'document',
|
||||
'document-add',
|
||||
'printer',
|
||||
'paperclip',
|
||||
'takeaway-box',
|
||||
'search',
|
||||
'monitor',
|
||||
'attract',
|
||||
'mobile',
|
||||
'scissors',
|
||||
'umbrella',
|
||||
'headset',
|
||||
'brush',
|
||||
'mouse',
|
||||
'coordinate',
|
||||
'magic-stick',
|
||||
'reading',
|
||||
'data-line',
|
||||
'data-board',
|
||||
'pie-chart',
|
||||
'data-analysis',
|
||||
'collection-tag',
|
||||
'film',
|
||||
'suitcase',
|
||||
'suitcase-1',
|
||||
'receiving',
|
||||
'collection',
|
||||
'files',
|
||||
'notebook-1',
|
||||
'notebook-2',
|
||||
'toilet-paper',
|
||||
'office-building',
|
||||
'school',
|
||||
'table-lamp',
|
||||
'house',
|
||||
'no-smoking',
|
||||
'smoking',
|
||||
'shopping-cart-full',
|
||||
'shopping-cart-1',
|
||||
'shopping-cart-2',
|
||||
'shopping-bag-1',
|
||||
'shopping-bag-2',
|
||||
'sold-out',
|
||||
'sell',
|
||||
'present',
|
||||
'box',
|
||||
'bank-card',
|
||||
'money',
|
||||
'coin',
|
||||
'wallet',
|
||||
'discount',
|
||||
'price-tag',
|
||||
'news',
|
||||
'guide',
|
||||
'male',
|
||||
'female',
|
||||
'thumb',
|
||||
'cpu',
|
||||
'link',
|
||||
'connection',
|
||||
'open',
|
||||
'turn-off',
|
||||
'set-up',
|
||||
'chat-round',
|
||||
'chat-line-round',
|
||||
'chat-square',
|
||||
'chat-dot-round',
|
||||
'chat-dot-square',
|
||||
'chat-line-square',
|
||||
'message',
|
||||
'postcard',
|
||||
'position',
|
||||
'turn-off-microphone',
|
||||
'microphone',
|
||||
'close-notification',
|
||||
'bangzhu',
|
||||
'time',
|
||||
'odometer',
|
||||
'crop',
|
||||
'aim',
|
||||
'switch-button',
|
||||
'full-screen',
|
||||
'copy-document',
|
||||
'mic',
|
||||
'stopwatch',
|
||||
'medal-1',
|
||||
'medal',
|
||||
'trophy',
|
||||
'trophy-1',
|
||||
'first-aid-kit',
|
||||
'discover',
|
||||
'place',
|
||||
'location',
|
||||
'location-outline',
|
||||
'location-information',
|
||||
'add-location',
|
||||
'delete-location',
|
||||
'map-location',
|
||||
'alarm-clock',
|
||||
'timer',
|
||||
'watch-1',
|
||||
'watch',
|
||||
'lock',
|
||||
'unlock',
|
||||
'key',
|
||||
'service',
|
||||
'mobile-phone',
|
||||
'bicycle',
|
||||
'truck',
|
||||
'ship',
|
||||
'basketball',
|
||||
'football',
|
||||
'soccer',
|
||||
'baseball',
|
||||
'wind-power',
|
||||
'light-rain',
|
||||
'lightning',
|
||||
'heavy-rain',
|
||||
'sunrise',
|
||||
'sunrise-1',
|
||||
'sunset',
|
||||
'sunny',
|
||||
'cloudy',
|
||||
'partly-cloudy',
|
||||
'cloudy-and-sunny',
|
||||
'moon',
|
||||
'moon-night',
|
||||
'dish',
|
||||
'dish-1',
|
||||
'food',
|
||||
'chicken',
|
||||
'fork-spoon',
|
||||
'knife-fork',
|
||||
'burger',
|
||||
'tableware',
|
||||
'sugar',
|
||||
'dessert',
|
||||
'ice-cream',
|
||||
'hot-water',
|
||||
'water-cup',
|
||||
'coffee-cup',
|
||||
'cold-drink',
|
||||
'goblet',
|
||||
'goblet-full',
|
||||
'goblet-square',
|
||||
'goblet-square-full',
|
||||
'refrigerator',
|
||||
'grape',
|
||||
'watermelon',
|
||||
'cherry',
|
||||
'apple',
|
||||
'pear',
|
||||
'orange',
|
||||
'coffee',
|
||||
'ice-tea',
|
||||
'ice-drink',
|
||||
'milk-tea',
|
||||
'potato-strips',
|
||||
'lollipop',
|
||||
'ice-cream-square',
|
||||
'ice-cream-round'
|
||||
]
|
||||
|
||||
export default elementIcons
|
|
@ -0,0 +1,35 @@
|
|||
<template>
|
||||
<el-select clearable :value="iconName" placeholder="请选择图标" filterable="" @change="change">
|
||||
<el-option v-for="item in iconData" :key="item" :label="item" :value="item">
|
||||
<svg-icon :icon-name="item"></svg-icon>
|
||||
{{ item }}
|
||||
</el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import elementIcons from './elementIcons'
|
||||
import svgIcons from './svgIcons'
|
||||
import { defineComponent } from '@vue/composition-api'
|
||||
|
||||
export default defineComponent({
|
||||
model: {
|
||||
prop: 'iconName',
|
||||
event: 'change'
|
||||
},
|
||||
props: {
|
||||
iconName: {
|
||||
required: true
|
||||
}
|
||||
},
|
||||
setup(props, context) {
|
||||
const iconData = [...svgIcons, ...elementIcons.map((item) => `el-icon-${item}`)]
|
||||
const change = (val: string) => {
|
||||
context.emit('change', val)
|
||||
}
|
||||
return {
|
||||
iconData,
|
||||
change
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
|
@ -0,0 +1,45 @@
|
|||
// webpack
|
||||
// const req = require.context('@/icons/svg', false, /\.svg$/)
|
||||
// const requireAll = requireContext => requireContext.keys()
|
||||
|
||||
// const re = /\.\/(.*)\.svg/;
|
||||
|
||||
// const svgIcons = requireAll(req).map(i => {
|
||||
// return i.match(re)[1]
|
||||
// })
|
||||
// vite
|
||||
// const req = import.meta.globEager('/src/icons/svg/*.svg')
|
||||
// const re = /\/svg\/(.*)\.svg/
|
||||
// const svgIcons = Object.keys(req).map(i => {
|
||||
// return i.match(re)[1]
|
||||
// })
|
||||
|
||||
export default [
|
||||
'svg-about',
|
||||
'svg-basic-resource',
|
||||
'svg-bill',
|
||||
'svg-business',
|
||||
'svg-compute-resource',
|
||||
'svg-db',
|
||||
'svg-disabled',
|
||||
'svg-dot',
|
||||
'svg-middle',
|
||||
'svg-network-resource',
|
||||
'svg-operate',
|
||||
'svg-ops-analysis',
|
||||
'svg-order',
|
||||
'svg-permission',
|
||||
'svg-port',
|
||||
'svg-product',
|
||||
'svg-repository',
|
||||
'svg-resource-interface',
|
||||
'svg-resource-manage',
|
||||
'svg-resource-monitor',
|
||||
'svg-resource-ops',
|
||||
'svg-screen',
|
||||
'svg-security',
|
||||
'svg-service-ops',
|
||||
'svg-setting',
|
||||
'svg-storage-resource',
|
||||
'svg-task-platform'
|
||||
]
|
|
@ -0,0 +1,20 @@
|
|||
/**
|
||||
* database64文件格式转换为2进制
|
||||
*
|
||||
* @param {[String]} data dataURL 的格式为 “data:image/png;base64,****”,逗号之前都是一些说明性的文字,我们只需要逗号之后的就行了
|
||||
* @param {[String]} mime [description]
|
||||
* @return {[blob]} [description]
|
||||
*/
|
||||
/* eslint-disable*/
|
||||
export default function (data, mime) {
|
||||
data = data.split(',')[1]
|
||||
data = window.atob(data)
|
||||
const ia = new Uint8Array(data.length)
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
ia[i] = data.charCodeAt(i)
|
||||
}
|
||||
// canvas.toDataURL 返回的默认格式就是 image/png
|
||||
return new Blob([ia], {
|
||||
type: mime
|
||||
})
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
/**
|
||||
* 点击波纹效果
|
||||
*
|
||||
* @param {[event]} e [description]
|
||||
* @param {[Object]} arg_opts [description]
|
||||
* @return {[bollean]} [description]
|
||||
*/
|
||||
/* eslint-disable*/
|
||||
export default function (e, arg_opts) {
|
||||
const opts = Object.assign(
|
||||
{
|
||||
ele: e.target, // 波纹作用元素
|
||||
type: 'hit', // hit点击位置扩散center中心点扩展
|
||||
bgc: 'rgba(0, 0, 0, 0.15)' // 波纹颜色
|
||||
},
|
||||
arg_opts
|
||||
),
|
||||
target = opts.ele
|
||||
if (target) {
|
||||
let rect = target.getBoundingClientRect(),
|
||||
ripple = target.querySelector('.e-ripple')
|
||||
if (!ripple) {
|
||||
ripple = document.createElement('span')
|
||||
ripple.className = 'e-ripple'
|
||||
ripple.style.height = ripple.style.width = Math.max(rect.width, rect.height) + 'px'
|
||||
target.appendChild(ripple)
|
||||
} else {
|
||||
ripple.className = 'e-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.body.scrollTop + 'px'
|
||||
ripple.style.left = e.pageX - rect.left - ripple.offsetWidth / 2 - document.body.scrollLeft + 'px'
|
||||
}
|
||||
ripple.style.backgroundColor = opts.bgc
|
||||
ripple.className = 'e-ripple z-active'
|
||||
return false
|
||||
}
|
||||
}
|
|
@ -0,0 +1,365 @@
|
|||
export default {
|
||||
zh: {
|
||||
hint: '点击,或拖动图片至此处',
|
||||
loading: '正在上传……',
|
||||
noSupported: '浏览器不支持该功能,请使用IE10以上或其他现在浏览器!',
|
||||
success: '上传成功',
|
||||
fail: '图片上传失败',
|
||||
preview: '预览',
|
||||
btn: {
|
||||
off: '取消',
|
||||
close: '关闭',
|
||||
back: '上一步',
|
||||
save: '保存'
|
||||
},
|
||||
error: {
|
||||
onlyImg: '仅限图片格式',
|
||||
outOfSize: '单文件大小不能超过 ',
|
||||
lowestPx: '图片最低像素为(宽*高):'
|
||||
}
|
||||
},
|
||||
'zh-tw': {
|
||||
hint: '點擊,或拖動圖片至此處',
|
||||
loading: '正在上傳……',
|
||||
noSupported: '瀏覽器不支持該功能,請使用IE10以上或其他現代瀏覽器!',
|
||||
success: '上傳成功',
|
||||
fail: '圖片上傳失敗',
|
||||
preview: '頭像預覽',
|
||||
btn: {
|
||||
off: '取消',
|
||||
close: '關閉',
|
||||
back: '上一步',
|
||||
save: '保存'
|
||||
},
|
||||
error: {
|
||||
onlyImg: '僅限圖片格式',
|
||||
outOfSize: '單文件大小不能超過 ',
|
||||
lowestPx: '圖片最低像素為(寬*高):'
|
||||
}
|
||||
},
|
||||
en: {
|
||||
hint: 'Click or drag the file here to upload',
|
||||
loading: 'Uploading…',
|
||||
noSupported: 'Browser is not supported, please use IE10+ or other browsers',
|
||||
success: 'Upload success',
|
||||
fail: 'Upload failed',
|
||||
preview: 'Preview',
|
||||
btn: {
|
||||
off: 'Cancel',
|
||||
close: 'Close',
|
||||
back: 'Back',
|
||||
save: 'Save'
|
||||
},
|
||||
error: {
|
||||
onlyImg: 'Image only',
|
||||
outOfSize: 'Image exceeds size limit: ',
|
||||
lowestPx: "Image's size is too low. Expected at least: "
|
||||
}
|
||||
},
|
||||
ro: {
|
||||
hint: 'Atinge sau trage fișierul aici',
|
||||
loading: 'Se încarcă',
|
||||
noSupported: 'Browser-ul tău nu suportă acest feature. Te rugăm încearcă cu alt browser.',
|
||||
success: 'S-a încărcat cu succes',
|
||||
fail: 'A apărut o problemă la încărcare',
|
||||
preview: 'Previzualizează',
|
||||
|
||||
btn: {
|
||||
off: 'Anulează',
|
||||
close: 'Închide',
|
||||
back: 'Înapoi',
|
||||
save: 'Salvează'
|
||||
},
|
||||
|
||||
error: {
|
||||
onlyImg: 'Doar imagini',
|
||||
outOfSize: 'Imaginea depășește limita de: ',
|
||||
loewstPx: 'Imaginea este prea mică; Minim: '
|
||||
}
|
||||
},
|
||||
ru: {
|
||||
hint: 'Нажмите, или перетащите файл в это окно',
|
||||
loading: 'Загружаю……',
|
||||
noSupported: 'Ваш браузер не поддерживается, пожалуйста, используйте IE10 + или другие браузеры',
|
||||
success: 'Загрузка выполнена успешно',
|
||||
fail: 'Ошибка загрузки',
|
||||
preview: 'Предпросмотр',
|
||||
btn: {
|
||||
off: 'Отменить',
|
||||
close: 'Закрыть',
|
||||
back: 'Назад',
|
||||
save: 'Сохранить'
|
||||
},
|
||||
error: {
|
||||
onlyImg: 'Только изображения',
|
||||
outOfSize: 'Изображение превышает предельный размер: ',
|
||||
lowestPx: 'Минимальный размер изображения: '
|
||||
}
|
||||
},
|
||||
'pt-br': {
|
||||
hint: 'Clique ou arraste o arquivo aqui para carregar',
|
||||
loading: 'Carregando…',
|
||||
noSupported: 'Browser não suportado, use o IE10+ ou outro browser',
|
||||
success: 'Sucesso ao carregar imagem',
|
||||
fail: 'Falha ao carregar imagem',
|
||||
preview: 'Pré-visualizar',
|
||||
btn: {
|
||||
off: 'Cancelar',
|
||||
close: 'Fechar',
|
||||
back: 'Voltar',
|
||||
save: 'Salvar'
|
||||
},
|
||||
error: {
|
||||
onlyImg: 'Apenas imagens',
|
||||
outOfSize: 'A imagem excede o limite de tamanho: ',
|
||||
lowestPx: 'O tamanho da imagem é muito pequeno. Tamanho mínimo: '
|
||||
}
|
||||
},
|
||||
fr: {
|
||||
hint: 'Cliquez ou glissez le fichier ici.',
|
||||
loading: 'Téléchargement…',
|
||||
noSupported: "Votre navigateur n'est pas supporté. Utilisez IE10 + ou un autre navigateur s'il vous plaît.",
|
||||
success: 'Téléchargement réussit',
|
||||
fail: 'Téléchargement echoué',
|
||||
preview: 'Aperçu',
|
||||
btn: {
|
||||
off: 'Annuler',
|
||||
close: 'Fermer',
|
||||
back: 'Retour',
|
||||
save: 'Enregistrer'
|
||||
},
|
||||
error: {
|
||||
onlyImg: 'Image uniquement',
|
||||
outOfSize: "L'image sélectionnée dépasse la taille maximum: ",
|
||||
lowestPx: "L'image sélectionnée est trop petite. Dimensions attendues: "
|
||||
}
|
||||
},
|
||||
nl: {
|
||||
hint: 'Klik hier of sleep een afbeelding in dit vlak',
|
||||
loading: 'Uploaden…',
|
||||
noSupported: 'Je browser wordt helaas niet ondersteund. Gebruik IE10+ of een andere browser.',
|
||||
success: 'Upload succesvol',
|
||||
fail: 'Upload mislukt',
|
||||
preview: 'Voorbeeld',
|
||||
btn: {
|
||||
off: 'Annuleren',
|
||||
close: 'Sluiten',
|
||||
back: 'Terug',
|
||||
save: 'Opslaan'
|
||||
},
|
||||
error: {
|
||||
onlyImg: 'Alleen afbeeldingen',
|
||||
outOfSize: 'De afbeelding is groter dan: ',
|
||||
lowestPx: 'De afbeelding is te klein! Minimale afmetingen: '
|
||||
}
|
||||
},
|
||||
tr: {
|
||||
hint: 'Tıkla veya yüklemek istediğini buraya sürükle',
|
||||
loading: 'Yükleniyor…',
|
||||
noSupported: 'Tarayıcı desteklenmiyor, lütfen IE10+ veya farklı tarayıcı kullanın',
|
||||
success: 'Yükleme başarılı',
|
||||
fail: 'Yüklemede hata oluştu',
|
||||
preview: 'Önizle',
|
||||
btn: {
|
||||
off: 'İptal',
|
||||
close: 'Kapat',
|
||||
back: 'Geri',
|
||||
save: 'Kaydet'
|
||||
},
|
||||
error: {
|
||||
onlyImg: 'Sadece resim',
|
||||
outOfSize: 'Resim yükleme limitini aşıyor: ',
|
||||
lowestPx: 'Resmin boyutu çok küçük. En az olması gereken: '
|
||||
}
|
||||
},
|
||||
'es-MX': {
|
||||
hint: 'Selecciona o arrastra una imagen',
|
||||
loading: 'Subiendo...',
|
||||
noSupported: 'Tu navegador no es soportado, por favor usa IE10+ u otros navegadores más recientes',
|
||||
success: 'Subido exitosamente',
|
||||
fail: 'Sucedió un error',
|
||||
preview: 'Vista previa',
|
||||
btn: {
|
||||
off: 'Cancelar',
|
||||
close: 'Cerrar',
|
||||
back: 'Atrás',
|
||||
save: 'Guardar'
|
||||
},
|
||||
error: {
|
||||
onlyImg: 'Únicamente imágenes',
|
||||
outOfSize: 'La imagen excede el tamaño maximo:',
|
||||
lowestPx: 'La imagen es demasiado pequeña. Se espera por lo menos:'
|
||||
}
|
||||
},
|
||||
de: {
|
||||
hint: 'Klick hier oder zieh eine Datei hier rein zum Hochladen',
|
||||
loading: 'Hochladen…',
|
||||
noSupported: 'Browser wird nicht unterstützt, bitte verwende IE10+ oder andere Browser',
|
||||
success: 'Upload erfolgreich',
|
||||
fail: 'Upload fehlgeschlagen',
|
||||
preview: 'Vorschau',
|
||||
btn: {
|
||||
off: 'Abbrechen',
|
||||
close: 'Schließen',
|
||||
back: 'Zurück',
|
||||
save: 'Speichern'
|
||||
},
|
||||
error: {
|
||||
onlyImg: 'Nur Bilder',
|
||||
outOfSize: 'Das Bild ist zu groß: ',
|
||||
lowestPx: 'Das Bild ist zu klein. Mindestens: '
|
||||
}
|
||||
},
|
||||
ja: {
|
||||
hint: 'クリック・ドラッグしてファイルをアップロード',
|
||||
loading: 'アップロード中...',
|
||||
noSupported: 'このブラウザは対応されていません。IE10+かその他の主要ブラウザをお使いください。',
|
||||
success: 'アップロード成功',
|
||||
fail: 'アップロード失敗',
|
||||
preview: 'プレビュー',
|
||||
btn: {
|
||||
off: 'キャンセル',
|
||||
close: '閉じる',
|
||||
back: '戻る',
|
||||
save: '保存'
|
||||
},
|
||||
error: {
|
||||
onlyImg: '画像のみ',
|
||||
outOfSize: '画像サイズが上限を超えています。上限: ',
|
||||
lowestPx: '画像が小さすぎます。最小サイズ: '
|
||||
}
|
||||
},
|
||||
ua: {
|
||||
hint: 'Натисніть, або перетягніть файл в це вікно',
|
||||
loading: 'Завантажую……',
|
||||
noSupported: 'Ваш браузер не підтримується, будь ласка скористайтесь IE10 + або іншими браузерами',
|
||||
success: 'Завантаження виконано успішно',
|
||||
fail: 'Помилка завантаження',
|
||||
preview: 'Попередній перегляд',
|
||||
btn: {
|
||||
off: 'Відмінити',
|
||||
close: 'Закрити',
|
||||
back: 'Назад',
|
||||
save: 'Зберегти'
|
||||
},
|
||||
error: {
|
||||
onlyImg: 'Тільки зображення',
|
||||
outOfSize: 'Зображення перевищує граничний розмір: ',
|
||||
lowestPx: 'Мінімальний розмір зображення: '
|
||||
}
|
||||
},
|
||||
it: {
|
||||
hint: 'Clicca o trascina qui il file per caricarlo',
|
||||
loading: 'Caricamento del file…',
|
||||
noSupported: 'Browser non supportato, per favore usa IE10+ o un altro browser',
|
||||
success: 'Caricamento completato',
|
||||
fail: 'Caricamento fallito',
|
||||
preview: 'Anteprima',
|
||||
btn: {
|
||||
off: 'Annulla',
|
||||
close: 'Chiudi',
|
||||
back: 'Indietro',
|
||||
save: 'Salva'
|
||||
},
|
||||
error: {
|
||||
onlyImg: 'Sono accettate solo immagini',
|
||||
outOfSize: "L'immagine eccede i limiti di dimensione: ",
|
||||
lowestPx: "L'immagine è troppo piccola. Il requisito minimo è: "
|
||||
}
|
||||
},
|
||||
ar: {
|
||||
hint: 'اضغط أو اسحب الملف هنا للتحميل',
|
||||
loading: 'جاري التحميل...',
|
||||
noSupported: 'المتصفح غير مدعوم ، يرجى استخدام IE10 + أو متصفح أخر',
|
||||
success: 'تم التحميل بنجاح',
|
||||
fail: 'فشل التحميل',
|
||||
preview: 'معاينه',
|
||||
btn: {
|
||||
off: 'إلغاء',
|
||||
close: 'إغلاق',
|
||||
back: 'رجوع',
|
||||
save: 'حفظ'
|
||||
},
|
||||
error: {
|
||||
onlyImg: 'صور فقط',
|
||||
outOfSize: 'تتجاوز الصوره الحجم المحدد: ',
|
||||
lowestPx: 'حجم الصورة صغير جدا. من المتوقع على الأقل: '
|
||||
}
|
||||
},
|
||||
ug: {
|
||||
hint: 'مەزكۇر دائىرىنى چىكىپ رەسىم تاللاڭ ياكى رەسىمنى سۆرەپ ئەكىرىڭ',
|
||||
loading: 'يوللىنىۋاتىدۇ...',
|
||||
noSupported: 'تور كۆرگۈچ بۇ ئىقتىدارنى قوللىمايدۇ ، يۇقىرى نەشىردىكى تور كۆرگۈچنى ئىشلىتىڭ',
|
||||
success: 'غەلبىلىك بولدى',
|
||||
fail: 'مەغلۇب بولدى',
|
||||
preview: 'ئۈنۈم رەسىم',
|
||||
btn: {
|
||||
off: 'بولدى قىلىش',
|
||||
close: 'تاقاش',
|
||||
back: 'ئالدىنقى قەدەم',
|
||||
save: 'ساقلاش'
|
||||
},
|
||||
error: {
|
||||
onlyImg: 'پەقەت رەسىم فورماتىنىلا قوللايدۇ',
|
||||
outOfSize: 'رەسىم چوڭ - كىچىكلىكى چەكتىن ئىشىپ كەتتى',
|
||||
lowestPx: 'رەسىمنىڭ ئەڭ كىچىك ئۆلچىمى :'
|
||||
}
|
||||
},
|
||||
th: {
|
||||
hint: 'คลิ๊กหรือลากรูปมาที่นี่',
|
||||
loading: 'กำลังอัพโหลด…',
|
||||
noSupported: 'เบราเซอร์ไม่รองรับ, กรุณาใช้ IE เวอร์ชั่น 10 ขึ้นไป หรือใช้เบราเซอร์ตัวอื่น',
|
||||
success: 'อัพโหลดสำเร็จ',
|
||||
fail: 'อัพโหลดล้มเหลว',
|
||||
preview: 'ตัวอย่าง',
|
||||
btn: {
|
||||
off: 'ยกเลิก',
|
||||
close: 'ปิด',
|
||||
back: 'กลับ',
|
||||
save: 'บันทึก'
|
||||
},
|
||||
error: {
|
||||
onlyImg: 'ไฟล์ภาพเท่านั้น',
|
||||
outOfSize: 'ไฟล์ใหญ่เกินกำหนด: ',
|
||||
lowestPx: 'ไฟล์เล็กเกินไป. อย่างน้อยต้องมีขนาด: '
|
||||
}
|
||||
},
|
||||
mm: {
|
||||
hint: 'ဖိုင်ကို ဤနေရာတွင် နှိပ်၍ (သို့) ဆွဲထည့်၍ တင်ပါ',
|
||||
loading: 'တင်နေသည်…',
|
||||
noSupported: 'ဤဘရောက်ဇာကို အထောက်အပံ့ မပေးပါ၊ ကျေးဇူးပြု၍ IE10+ သို့မဟုတ် အခြား ဘရောက်ဇာ ကို အသုံးပြုပါ',
|
||||
success: 'ဖိုင်တင်နေမှု မပြီးမြောက်ပါ',
|
||||
fail: 'ဖိုင်တင်နေမှု မအောင်မြင်ပါ',
|
||||
preview: 'အစမ်းကြည့်',
|
||||
btn: {
|
||||
off: 'မလုပ်တော့ပါ',
|
||||
close: 'ပိတ်မည်',
|
||||
back: 'နောက်သို့',
|
||||
save: 'သိမ်းမည်'
|
||||
},
|
||||
error: {
|
||||
onlyImg: 'ဓာတ်ပုံ သီးသန့်သာ',
|
||||
outOfSize: 'ဓာတ်ပုံဆိုဒ် ကြီးလွန်းသည် ။ အများဆုံး ဆိုဒ် : ',
|
||||
lowestPx: 'ဓာတ်ပုံဆိုဒ် သေးလွန်းသည်။ အနည်းဆုံး ဆိုဒ် : '
|
||||
}
|
||||
},
|
||||
se: {
|
||||
hint: 'Klicka eller dra en fil hit för att ladda upp den',
|
||||
loading: 'Laddar upp…',
|
||||
noSupported: 'Din webbläsare stöds inte, vänligen använd IE10+ eller andra webbläsare',
|
||||
success: 'Uppladdning lyckades',
|
||||
fail: 'Uppladdning misslyckades',
|
||||
preview: 'Förhandsgranska',
|
||||
btn: {
|
||||
off: 'Avbryt',
|
||||
close: 'Stäng',
|
||||
back: 'Tillbaka',
|
||||
save: 'Spara'
|
||||
},
|
||||
error: {
|
||||
onlyImg: 'Endast bilder',
|
||||
outOfSize: 'Bilden är större än max-gränsen: ',
|
||||
lowestPx: 'Bilden är för liten. Minimum är: '
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
export default {
|
||||
jpg: 'image/jpeg',
|
||||
png: 'image/png',
|
||||
gif: 'image/gif',
|
||||
svg: 'image/svg+xml',
|
||||
psd: 'image/photoshop'
|
||||
}
|
|
@ -0,0 +1,104 @@
|
|||
<template>
|
||||
<span>
|
||||
<el-button class="m-l-sm m-r-sm" @click.stop="openDialog" icon="el-icon-upload2">导入 </el-button>
|
||||
<el-dialog title="导入Excel新增数据" :close-on-click-modal="false" :visible.sync="dialogVisible" width="480px" append-to-body>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-alert title="" type="warning" :closable="false">
|
||||
<template slot="">
|
||||
<div class="text-center">
|
||||
<p>您是否有标准的Excel模版,需要依照模版导入,否则会失败。</p>
|
||||
<a class="text-info cur-point" @click="exportData()">还没有Excel模版?请下载模版</a>
|
||||
</div>
|
||||
</template>
|
||||
</el-alert>
|
||||
</el-col>
|
||||
<el-col :span="24" class="text-center m-t">
|
||||
<el-upload ref="uploadRef" class="upload-demo" drag accept=".xlsx" :on-success="handleSuccess" :action="url" :headers="headers" :data="params">
|
||||
<i class="el-icon-upload"></i>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<div class="el-upload__tip" slot="tip">只能上传excel文件</div>
|
||||
</el-upload>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">关闭</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</span>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { downloadFile } from 'utils/index'
|
||||
import { getToken } from 'utils/auth'
|
||||
import { reactive, toRefs, ref, defineComponent } from '@vue/composition-api'
|
||||
import { Message } from 'element-ui'
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
url: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
templateUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
params: {
|
||||
type: Object,
|
||||
default: function () {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
},
|
||||
setup(props: any, context: any) {
|
||||
const state = reactive({
|
||||
dialogVisible: false,
|
||||
headers: { token: getToken() }
|
||||
})
|
||||
const uploadRef = ref(null)
|
||||
function openDialog() {
|
||||
uploadRef.value && (uploadRef.value as any).clearFiles()
|
||||
state.dialogVisible = true
|
||||
state.headers.token = getToken()
|
||||
}
|
||||
// 导出数据
|
||||
function exportData() {
|
||||
downloadFile(props.templateUrl, props.params)
|
||||
}
|
||||
// 数据导入成功回调
|
||||
// eslint-disable-next-line no-undef
|
||||
function handleSuccess(res: Base.IResponseData) {
|
||||
if (res.success) {
|
||||
if (/tenants\/import/.test(props.url)) {
|
||||
Message({
|
||||
type: 'success',
|
||||
dangerouslyUseHTMLString: true,
|
||||
message: res.message
|
||||
})
|
||||
} else {
|
||||
Message.success(res.message)
|
||||
}
|
||||
state.dialogVisible = false
|
||||
context.emit('getData')
|
||||
} else {
|
||||
if (/tenants\/import/.test(props.url)) {
|
||||
Message({
|
||||
type: 'error',
|
||||
dangerouslyUseHTMLString: true,
|
||||
message: res.message
|
||||
})
|
||||
} else {
|
||||
Message.error(res.message)
|
||||
}
|
||||
}
|
||||
}
|
||||
return {
|
||||
...toRefs(state),
|
||||
uploadRef,
|
||||
openDialog,
|
||||
exportData,
|
||||
handleSuccess
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
|
@ -0,0 +1,10 @@
|
|||
import Vue from 'vue'
|
||||
import SkuTable from './sku-table/index.vue'
|
||||
import WsUploadFile from './upload-file/index.vue'
|
||||
const components = {
|
||||
SkuTable,
|
||||
WsUploadFile
|
||||
}
|
||||
Object.keys(components).forEach((key) => {
|
||||
Vue.component(key, components[key])
|
||||
})
|
|
@ -0,0 +1,88 @@
|
|||
<template>
|
||||
<basic-table ref="table" :data="specList" v-bind="tableProps">
|
||||
<slot></slot>
|
||||
<el-table-column sortable v-for="item in columnProps" :prop="item.value" show-overflow-tooltip :label="item.label" :key="item.value" width="150px"> </el-table-column>
|
||||
<el-table-column show-overflow-tooltip label="参考价格" v-if="showPrice">
|
||||
<template v-slot="scope"> {{ getPrice(scope.row, mode) }} 元/ {{ modeUnitFilter(mode) }} </template>
|
||||
</el-table-column>
|
||||
<slot name="append"></slot>
|
||||
<div slot="pagination"></div>
|
||||
</basic-table>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { computed, defineComponent } from '@vue/composition-api'
|
||||
import { getPrice, modeUnitFilter } from './utils'
|
||||
interface IColumnProps {
|
||||
label: string
|
||||
value: string
|
||||
}
|
||||
type IProps = {
|
||||
skus: any[]
|
||||
mode: string
|
||||
columnProps: IColumnProps[]
|
||||
}
|
||||
export default defineComponent({
|
||||
props: {
|
||||
skus: {
|
||||
type: Array,
|
||||
default: function () {
|
||||
return []
|
||||
}
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
default: 'Hour'
|
||||
},
|
||||
showPrice: {
|
||||
default: false
|
||||
},
|
||||
columnProps: {
|
||||
type: Array,
|
||||
default: function () {
|
||||
return [
|
||||
{
|
||||
label: 'CPU(核)',
|
||||
value: 'cpu'
|
||||
},
|
||||
{
|
||||
label: '内存(GB)',
|
||||
value: 'memory'
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
setup(props: IProps) {
|
||||
const specList = computed(() => {
|
||||
return props.skus.map((item: any) => {
|
||||
const result: any = {}
|
||||
item.spec.forEach((cell: any) => {
|
||||
result[cell.specName] = Number(cell.specValue)
|
||||
})
|
||||
return { ...item, ...result }
|
||||
})
|
||||
})
|
||||
// 规格高度的计算
|
||||
const tableProps = computed(() => {
|
||||
const [{ value } = { value: '' }] = props.columnProps
|
||||
const prop: any = {
|
||||
defaultSort: {
|
||||
prop: value
|
||||
}
|
||||
}
|
||||
const length = props.skus.length
|
||||
if (length >= 6) {
|
||||
prop.height = '260'
|
||||
}
|
||||
return prop
|
||||
})
|
||||
return {
|
||||
specList,
|
||||
tableProps,
|
||||
getPrice,
|
||||
modeUnitFilter
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
|
@ -0,0 +1,32 @@
|
|||
export function modeUnitFilter(value: string): string {
|
||||
const map: any = {
|
||||
Hour: '小时',
|
||||
Month: '月',
|
||||
Year: '年'
|
||||
}
|
||||
return map[value]
|
||||
}
|
||||
export function getPrice(sku: any, mode: string): string | number {
|
||||
const { spec, billPolicy, billable } = sku
|
||||
// 不开启计费
|
||||
if (!billable) return 0
|
||||
const key = `${mode.toLowerCase()}Price`
|
||||
// 规格计费
|
||||
if (billPolicy !== 'agility') return sku[key]
|
||||
const basicPrice = JSON.parse(sku.basicPrice)
|
||||
// 没有specName说明没有规格设置
|
||||
const flag = spec.every((item: any) => !item.specName || item.specValue)
|
||||
// 无值直接返回
|
||||
if (!flag) return '/'
|
||||
// 获取数值map
|
||||
const countMap: any = {}
|
||||
spec.forEach((item: any) => {
|
||||
countMap[item.specName] = item.specValue
|
||||
})
|
||||
let totalPrice = 0
|
||||
basicPrice.forEach((item: any) => {
|
||||
const { specName } = item
|
||||
totalPrice += item[key] * (countMap[specName] || 1)
|
||||
})
|
||||
return totalPrice
|
||||
}
|
|
@ -0,0 +1,104 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-form-item :label="label" required>
|
||||
<input :id="id" type="file" name="file" v-if="isShowUploadFile" style="border: 1px solid #d8dce5; border-radius: 4px; padding: 5px 10px; width: 80%" />
|
||||
<el-button type="primary" v-if="isShowUploadFile" @click="submitUpload(file)">上传</el-button>
|
||||
<el-progress :percentage="file.progress" v-if="!isShowUploadFile"></el-progress>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import uploadFile from 'utils/uploadFile'
|
||||
|
||||
export default {
|
||||
props: {
|
||||
fileType: {
|
||||
type: String
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
default: 'btnFileUpload'
|
||||
},
|
||||
label: {
|
||||
type: String,
|
||||
default: '文件上传:'
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
file: null,
|
||||
isShowUploadFile: true,
|
||||
uploadSuccess: false
|
||||
}
|
||||
},
|
||||
created() {},
|
||||
mounted() {
|
||||
const self = this
|
||||
document.getElementById(this.id).addEventListener('change', function (event) {
|
||||
const files = event.target.files
|
||||
const file = files[0]
|
||||
if (/[\u4e00-\u9fa5\s]/.test(file.name)) {
|
||||
self.$message({
|
||||
message: '文件名不允许存在中文和空格',
|
||||
type: 'error'
|
||||
})
|
||||
}
|
||||
|
||||
if (file.name.length > 64) {
|
||||
self.$message({
|
||||
message: '文件名称过长',
|
||||
type: 'error'
|
||||
})
|
||||
}
|
||||
self.file = {
|
||||
file: file,
|
||||
name: file.name,
|
||||
isUploading: false,
|
||||
isCancel: false,
|
||||
isReady: false,
|
||||
isSuccess: false,
|
||||
progress: 0
|
||||
}
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
submitUpload(file) {
|
||||
if (file == undefined || file == null) {
|
||||
return this.$message.error('请选择上传文件')
|
||||
}
|
||||
if (/[\u4e00-\u9fa5\s]/.test(file.name)) {
|
||||
return this.$message.error('文件名不允许存在中文和空格')
|
||||
}
|
||||
if (this.fileType == 'EXCEL') {
|
||||
const fileName = file.name.split('.')
|
||||
let flag
|
||||
if (
|
||||
fileName[fileName.length - 1] === 'xlsx' ||
|
||||
fileName[fileName.length - 1] === 'xls' ||
|
||||
fileName[fileName.length - 1] === 'xltx' ||
|
||||
fileName[fileName.length - 1] === 'xlt' ||
|
||||
fileName[fileName.length - 1] === 'xlsm' ||
|
||||
fileName[fileName.length - 1] === 'xlsb' ||
|
||||
fileName[fileName.length - 1] === 'xltm' ||
|
||||
fileName[fileName.length - 1] === 'csv'
|
||||
) {
|
||||
flag = true
|
||||
} else {
|
||||
return this.$message.error('请上传EXCEL表格')
|
||||
}
|
||||
}
|
||||
this.isShowUploadFile = false
|
||||
this.$emit('show', this.isShowUploadFile)
|
||||
uploadFile(file, this.message)
|
||||
},
|
||||
message(item) {
|
||||
this.$message({
|
||||
message: '上传成功',
|
||||
type: 'success'
|
||||
})
|
||||
this.uploadSuccess = true
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -0,0 +1,218 @@
|
|||
/* eslint-disable */
|
||||
import { saveAs } from 'file-saver'
|
||||
import XLSX from 'xlsx'
|
||||
|
||||
function generateArray(table) {
|
||||
var out = []
|
||||
var rows = table.querySelectorAll('tr')
|
||||
var ranges = []
|
||||
for (var R = 0; R < rows.length; ++R) {
|
||||
var outRow = []
|
||||
var row = rows[R]
|
||||
var columns = row.querySelectorAll('td')
|
||||
for (var C = 0; C < columns.length; ++C) {
|
||||
var cell = columns[C]
|
||||
var colspan = cell.getAttribute('colspan')
|
||||
var rowspan = cell.getAttribute('rowspan')
|
||||
var cellValue = cell.innerText
|
||||
if (cellValue !== '' && cellValue == +cellValue) cellValue = +cellValue
|
||||
|
||||
//Skip ranges
|
||||
ranges.forEach(function (range) {
|
||||
if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
|
||||
for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null)
|
||||
}
|
||||
})
|
||||
|
||||
//Handle Row Span
|
||||
if (rowspan || colspan) {
|
||||
rowspan = rowspan || 1
|
||||
colspan = colspan || 1
|
||||
ranges.push({
|
||||
s: {
|
||||
r: R,
|
||||
c: outRow.length
|
||||
},
|
||||
e: {
|
||||
r: R + rowspan - 1,
|
||||
c: outRow.length + colspan - 1
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
//Handle Value
|
||||
outRow.push(cellValue !== '' ? cellValue : null)
|
||||
|
||||
//Handle Colspan
|
||||
if (colspan) for (var k = 0; k < colspan - 1; ++k) outRow.push(null)
|
||||
}
|
||||
out.push(outRow)
|
||||
}
|
||||
return [out, ranges]
|
||||
}
|
||||
|
||||
function datenum(v, date1904) {
|
||||
if (date1904) v += 1462
|
||||
var epoch = Date.parse(v)
|
||||
return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000)
|
||||
}
|
||||
|
||||
function sheet_from_array_of_arrays(data, opts) {
|
||||
var ws = {}
|
||||
var range = {
|
||||
s: {
|
||||
c: 10000000,
|
||||
r: 10000000
|
||||
},
|
||||
e: {
|
||||
c: 0,
|
||||
r: 0
|
||||
}
|
||||
}
|
||||
for (var R = 0; R != data.length; ++R) {
|
||||
for (var C = 0; C != data[R].length; ++C) {
|
||||
if (range.s.r > R) range.s.r = R
|
||||
if (range.s.c > C) range.s.c = C
|
||||
if (range.e.r < R) range.e.r = R
|
||||
if (range.e.c < C) range.e.c = C
|
||||
var cell = {
|
||||
v: data[R][C]
|
||||
}
|
||||
if (cell.v == null) continue
|
||||
var cell_ref = XLSX.utils.encode_cell({
|
||||
c: C,
|
||||
r: R
|
||||
})
|
||||
|
||||
if (typeof cell.v === 'number') cell.t = 'n'
|
||||
else if (typeof cell.v === 'boolean') cell.t = 'b'
|
||||
else if (cell.v instanceof Date) {
|
||||
cell.t = 'n'
|
||||
cell.z = XLSX.SSF._table[14]
|
||||
cell.v = datenum(cell.v)
|
||||
} else cell.t = 's'
|
||||
|
||||
ws[cell_ref] = cell
|
||||
}
|
||||
}
|
||||
if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range)
|
||||
return ws
|
||||
}
|
||||
|
||||
function Workbook() {
|
||||
if (!(this instanceof Workbook)) return new Workbook()
|
||||
this.SheetNames = []
|
||||
this.Sheets = {}
|
||||
}
|
||||
|
||||
function s2ab(s) {
|
||||
var buf = new ArrayBuffer(s.length)
|
||||
var view = new Uint8Array(buf)
|
||||
for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff
|
||||
return buf
|
||||
}
|
||||
|
||||
export function export_table_to_excel(id) {
|
||||
var theTable = document.getElementById(id)
|
||||
var oo = generateArray(theTable)
|
||||
var ranges = oo[1]
|
||||
|
||||
/* original data */
|
||||
var data = oo[0]
|
||||
var ws_name = 'SheetJS'
|
||||
|
||||
var wb = new Workbook(),
|
||||
ws = sheet_from_array_of_arrays(data)
|
||||
|
||||
/* add ranges to worksheet */
|
||||
// ws['!cols'] = ['apple', 'banan'];
|
||||
ws['!merges'] = ranges
|
||||
|
||||
/* add worksheet to workbook */
|
||||
wb.SheetNames.push(ws_name)
|
||||
wb.Sheets[ws_name] = ws
|
||||
|
||||
var wbout = XLSX.write(wb, {
|
||||
bookType: 'xlsx',
|
||||
bookSST: false,
|
||||
type: 'binary'
|
||||
})
|
||||
|
||||
saveAs(
|
||||
new Blob([s2ab(wbout)], {
|
||||
type: 'application/octet-stream'
|
||||
}),
|
||||
'test.xlsx'
|
||||
)
|
||||
}
|
||||
|
||||
export function exportJsonToExcel({ multiHeader = [], header, data, filename, merges = [], autoWidth = true, bookType = 'xlsx' } = {}) {
|
||||
/* original data */
|
||||
filename = filename || 'excel-list'
|
||||
data = [...data]
|
||||
data.unshift(header)
|
||||
|
||||
for (let i = multiHeader.length - 1; i > -1; i--) {
|
||||
data.unshift(multiHeader[i])
|
||||
}
|
||||
|
||||
var ws_name = 'SheetJS'
|
||||
var wb = new Workbook(),
|
||||
ws = sheet_from_array_of_arrays(data)
|
||||
|
||||
if (merges.length > 0) {
|
||||
if (!ws['!merges']) ws['!merges'] = []
|
||||
merges.forEach((item) => {
|
||||
ws['!merges'].push(XLSX.utils.decode_range(item))
|
||||
})
|
||||
}
|
||||
|
||||
if (autoWidth) {
|
||||
/*设置worksheet每列的最大宽度*/
|
||||
const colWidth = data.map((row) =>
|
||||
row.map((val) => {
|
||||
/*先判断是否为null/undefined*/
|
||||
if (val == null) {
|
||||
return {
|
||||
wch: 10
|
||||
}
|
||||
} else if (val.toString().charCodeAt(0) > 255) {
|
||||
/*再判断是否为中文*/
|
||||
return {
|
||||
wch: val.toString().length * 2
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
wch: val.toString().length
|
||||
}
|
||||
}
|
||||
})
|
||||
)
|
||||
/*以第一行为初始值*/
|
||||
let result = colWidth[0]
|
||||
for (let i = 1; i < colWidth.length; i++) {
|
||||
for (let j = 0; j < colWidth[i].length; j++) {
|
||||
if (result[j]['wch'] < colWidth[i][j]['wch']) {
|
||||
result[j]['wch'] = colWidth[i][j]['wch']
|
||||
}
|
||||
}
|
||||
}
|
||||
ws['!cols'] = result
|
||||
}
|
||||
|
||||
/* add worksheet to workbook */
|
||||
wb.SheetNames.push(ws_name)
|
||||
wb.Sheets[ws_name] = ws
|
||||
|
||||
var wbout = XLSX.write(wb, {
|
||||
bookType: bookType,
|
||||
bookSST: false,
|
||||
type: 'binary'
|
||||
})
|
||||
saveAs(
|
||||
new Blob([s2ab(wbout)], {
|
||||
type: 'application/octet-stream'
|
||||
}),
|
||||
`${filename}.${bookType}`
|
||||
)
|
||||
}
|
|
@ -0,0 +1,102 @@
|
|||
/**
|
||||
* Created by Zhang Haijun on 2017/8/24.
|
||||
* axios#request(config)
|
||||
* axios#get(url[, config])
|
||||
* axios#delete(url[, config])
|
||||
* axios#head(url[, config])
|
||||
* axios#options(url[, config])
|
||||
* axios#post(url[, data[, config]])
|
||||
* axios#put(url[, data[, config]])
|
||||
* axios#patch(url[, data[, config]])
|
||||
*/
|
||||
import axios from 'axios'
|
||||
import qs from 'qs'
|
||||
|
||||
const codeMessage = {
|
||||
200: '服务器成功返回请求的数据。',
|
||||
201: '新建或修改数据成功。',
|
||||
202: '一个请求已经进入后台排队(异步任务)。',
|
||||
204: '删除数据成功。',
|
||||
400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
|
||||
401: '用户没有权限(令牌、用户名、密码错误)。',
|
||||
403: '用户得到授权,但是访问是被禁止的。',
|
||||
404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
|
||||
406: '请求的格式不可得。',
|
||||
410: '请求的资源被永久删除,且不会再得到的。',
|
||||
422: '当创建一个对象时,发生一个验证错误。',
|
||||
500: '服务器发生错误,请检查服务器。',
|
||||
502: '网关错误。',
|
||||
503: '服务不可用,服务器暂时过载或维护。',
|
||||
504: '网关超时。'
|
||||
}
|
||||
const axiosInstance = axios.create({
|
||||
baseURL: '/api',
|
||||
headers: { 'Content-Type': 'application/x-www-form-urlencoded', BsmAjaxHeader: true },
|
||||
timeout: 20000,
|
||||
paramsSerializer: (params) => {
|
||||
return qs.stringify(params, { arrayFormat: 'indices' })
|
||||
}
|
||||
})
|
||||
// 请求完成回调
|
||||
const finishCallback = function () {}
|
||||
// 报错处理
|
||||
const handleError = function (response) {
|
||||
if (!response) return // 容错处理
|
||||
const errorText = codeMessage[response.status] || response.statusText
|
||||
// Notification({
|
||||
// type: 'error',
|
||||
// title: `请求错误 ${response.status}: ${response.config.url}`,
|
||||
// message: errorText
|
||||
// })
|
||||
const error = new Error(errorText)
|
||||
error.name = response.status
|
||||
error.response = response
|
||||
throw error
|
||||
}
|
||||
axiosInstance.interceptors.request.use(
|
||||
(config) => {
|
||||
const {
|
||||
headers: { options = {} }
|
||||
} = config
|
||||
if (config.method === 'get') {
|
||||
// 清除get缓存
|
||||
config.url = `${config.url}?t=${new Date().getTime()}`
|
||||
}
|
||||
config.headers.token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhcGlLZXkiOiIxMjE0NTQ2NzgyIiwiY2F0YWxvZyI6Ik1hbmFnZXIiLCJuYW1lIjoi6LaF57qn566h55CG5ZGYIiwiZXhwIjoxNjIzODI5OTA1LCJ1dWlkIjoxLCJhY2NvdW50IjoiYWRtaW4ifQ.H1TLrKni0z4xp3M55SUbUyLImgELqrZhCYrPXoKmucY'
|
||||
delete config.headers.options
|
||||
config.options = options
|
||||
return config
|
||||
},
|
||||
(error) => {
|
||||
return Promise.reject(error)
|
||||
}
|
||||
)
|
||||
axiosInstance.interceptors.response.use(
|
||||
(data) => {
|
||||
// const requestKey = getRequestIdentify(data.config);
|
||||
// removePending(requestKey);
|
||||
finishCallback()
|
||||
const responseData = data.data
|
||||
const { options } = data.config
|
||||
if (!responseData.success) {
|
||||
switch (responseData.status) {
|
||||
case '402':
|
||||
location.href = '/#/license'
|
||||
break
|
||||
case '401':
|
||||
case '509':
|
||||
break
|
||||
default:
|
||||
}
|
||||
if (!options.ignoreError) {
|
||||
}
|
||||
}
|
||||
return responseData
|
||||
},
|
||||
(error) => {
|
||||
finishCallback()
|
||||
handleError(error.response)
|
||||
return Promise.reject(error)
|
||||
}
|
||||
)
|
||||
export default axiosInstance
|
|
@ -0,0 +1,13 @@
|
|||
/**
|
||||
* Created by HaijunZhang on 2018/12/10.
|
||||
*/
|
||||
import path from 'path'
|
||||
export function isExternalLink(path) {
|
||||
return /^(http:|https:|mailto:|tel:)\/\//.test(path)
|
||||
}
|
||||
export function resolvePath(basePath, routePath) {
|
||||
if (isExternalLink(routePath)) {
|
||||
return routePath
|
||||
}
|
||||
return path.resolve(basePath, routePath)
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
/**
|
||||
* Created by Zhang Haijun on 2021/2/2.
|
||||
*/
|
||||
// 查询参数封装优化
|
||||
export function handleSearchParam(params) {
|
||||
// 设置参数
|
||||
const objParams = {}
|
||||
function setParams(sign, key, value) {
|
||||
if (objParams[sign]) {
|
||||
objParams[sign][key] = value
|
||||
} else {
|
||||
objParams[sign] = {
|
||||
[key]: value
|
||||
}
|
||||
}
|
||||
}
|
||||
// 将参数处理为对象
|
||||
for (const a in params) {
|
||||
const value = params[a]
|
||||
// 对参数进行处理,去除空参数
|
||||
if (value === '' || value === undefined || value === null) continue
|
||||
// 对key值进行处理
|
||||
const [key, sign = 'EQ'] = a.split(':')
|
||||
// 将sign全部转换为大写
|
||||
const signs = sign.toLocaleUpperCase()
|
||||
if (signs === 'RANGE') {
|
||||
const [first, second] = value
|
||||
setParams('GET', key, first)
|
||||
setParams('LET', key, second)
|
||||
continue
|
||||
}
|
||||
setParams(signs, key, value)
|
||||
}
|
||||
const result = []
|
||||
for (const a in objParams) {
|
||||
result.push({ param: objParams[a], sign: a })
|
||||
}
|
||||
return JSON.stringify(result)
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
/* Color
|
||||
-------------------------- */
|
||||
|
||||
$--color-primary: #1e54d5;
|
|
@ -0,0 +1,44 @@
|
|||
.buy-btn {
|
||||
position: fixed;
|
||||
top: 58px;
|
||||
right: 20px;
|
||||
}
|
||||
|
||||
.tip {
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.el-message-box__message {
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.viewer-container.viewer-backdrop {
|
||||
z-index: 99999999999999 !important;
|
||||
}
|
||||
|
||||
.w {
|
||||
width: 200px !important;
|
||||
}
|
||||
|
||||
.el-radio-button__orig-radio:checked + .el-radio-button__inner {
|
||||
color: #409eff;
|
||||
background-color: #d5e8fc;
|
||||
border-color: #409eff;
|
||||
}
|
||||
|
||||
.el-radio-button__inner {
|
||||
min-width: 80px;
|
||||
}
|
||||
|
||||
.el-drawer.rtl {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.tab-label-padding {
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
.full-height {
|
||||
height: 100%;
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
/* 改变主题色变量 */
|
||||
|
||||
@import './common-var';
|
||||
|
||||
/* 改变 icon 字体路径变量,必需 */
|
||||
|
||||
$--font-path: '~element-ui/lib/theme-chalk/fonts';
|
||||
@import '~element-ui/packages/theme-chalk/src/index';
|
|
@ -0,0 +1,23 @@
|
|||
$font-size: 16px;
|
||||
$small-font-size: 14px;
|
||||
.font-big {
|
||||
font-size: $font-size;
|
||||
.el-menu-item,
|
||||
.el-submenu__title,
|
||||
ul.header-menu li,
|
||||
.el-tabs__item {
|
||||
font-size: $font-size;
|
||||
.iconfont {
|
||||
font-size: $font-size;
|
||||
}
|
||||
}
|
||||
.el-table--mini,
|
||||
.el-table--small,
|
||||
.el-table__expand-icon,
|
||||
.app-levelbar,
|
||||
.el-button--small,
|
||||
.el-dropdown-link,
|
||||
.common-detail .detail-body .basic-info .attr {
|
||||
font-size: $font-size;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
@media screen and(-ms-high-contrast:active), (-ms-high-contrast: none) {
|
||||
.el-table__header,
|
||||
.el-table__body {
|
||||
width: 100% !important;
|
||||
}
|
||||
/* .basic-form-item{
|
||||
height: 32.76px;
|
||||
} */
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
@import './lib/index';
|
||||
@import './hack.scss';
|
||||
@import './font.scss';
|
||||
@import './common.scss';
|
|
@ -0,0 +1,29 @@
|
|||
.el-button--text {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.el-button.el-button--text [class*='el-icon-'] + span {
|
||||
margin-left: 2px;
|
||||
}
|
||||
|
||||
.el-button--ghost {
|
||||
color: #666;
|
||||
background-color: #fff;
|
||||
border-color: #d9d9d9;
|
||||
}
|
||||
|
||||
.el-button--ghost:focus,
|
||||
.el-button--ghost:hover {
|
||||
color: #2b85e4;
|
||||
background-color: transparent;
|
||||
border-color: #2b85e4;
|
||||
}
|
||||
|
||||
.el-button--ghost.is-disabled,
|
||||
.el-button--ghost.is-disabled:active,
|
||||
.el-button--ghost.is-disabled:focus,
|
||||
.el-button--ghost.is-disabled:hover {
|
||||
color: #bbb;
|
||||
background-color: #f7f7f7;
|
||||
border-color: #d9d9d9;
|
||||
}
|
|
@ -0,0 +1,807 @@
|
|||
html,
|
||||
body,
|
||||
#app {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
font-size: 14px;
|
||||
overflow: hidden !important;
|
||||
font-family: Microsoft YaHei, Hiragino Sans GB;
|
||||
}
|
||||
|
||||
.app-wrapper {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.wrapper > .el-card__body {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.wrapper-container {
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.wrapper-sm {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.search-container {
|
||||
position: relative;
|
||||
padding: 15px !important;
|
||||
border: 1px solid #ddd;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.search-container > .legend {
|
||||
color: rgba(18, 19, 20, 0.69);
|
||||
background: #fff;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
width: 78px;
|
||||
top: -10px;
|
||||
left: 15px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.search-content > .search-item {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
.pagination-container {
|
||||
margin-top: 10px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.panel {
|
||||
background-color: #fff;
|
||||
margin-bottom: 15px;
|
||||
border: 1px solid #dee5e7;
|
||||
}
|
||||
|
||||
.panel .panel-heading {
|
||||
background-color: #edf1f2;
|
||||
padding: 10px 15px;
|
||||
border-bottom: 1px solid transparent;
|
||||
}
|
||||
|
||||
.panel .panel-body {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
/*边距共有样式*/
|
||||
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.pull-right {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.pull-left {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.p-none {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.m-xxs {
|
||||
margin: 2px 4px;
|
||||
}
|
||||
|
||||
.m-xs {
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
.m-sm {
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.m {
|
||||
margin: 15px;
|
||||
}
|
||||
|
||||
.m-md {
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
.m-lg {
|
||||
margin: 30px;
|
||||
}
|
||||
|
||||
.m-xl {
|
||||
margin: 50px;
|
||||
}
|
||||
|
||||
.m-n {
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
.m-l-none {
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
|
||||
.m-l-xs {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.m-l-sm {
|
||||
margin-left: 10px !important;
|
||||
}
|
||||
|
||||
.m-l {
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
.m-l-md {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
.m-l-lg {
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
.m-l-xl {
|
||||
margin-left: 40px;
|
||||
}
|
||||
|
||||
.m-l-xxl {
|
||||
margin-left: 50px;
|
||||
}
|
||||
|
||||
.m-l-n-xxs {
|
||||
margin-left: -1px;
|
||||
}
|
||||
|
||||
.m-l-n-xs {
|
||||
margin-left: -5px;
|
||||
}
|
||||
|
||||
.m-l-n-sm {
|
||||
margin-left: -10px;
|
||||
}
|
||||
|
||||
.m-l-n {
|
||||
margin-left: -15px;
|
||||
}
|
||||
|
||||
.m-l-n-md {
|
||||
margin-left: -20px;
|
||||
}
|
||||
|
||||
.m-l-n-lg {
|
||||
margin-left: -30px;
|
||||
}
|
||||
|
||||
.m-l-n-xl {
|
||||
margin-left: -40px;
|
||||
}
|
||||
|
||||
.m-l-n-xxl {
|
||||
margin-left: -50px;
|
||||
}
|
||||
|
||||
.m-t-none {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
.m-t-xxs {
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
.m-t-xs {
|
||||
margin-top: 5px !important;
|
||||
}
|
||||
|
||||
.m-t-sm {
|
||||
margin-top: 10px !important;
|
||||
}
|
||||
|
||||
.m-t {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.m-t-md {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.m-t-lg {
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
.m-t-xl {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.m-t-xxl {
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
.m-t-n-xxs {
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
.m-t-n-xs {
|
||||
margin-top: -5px;
|
||||
}
|
||||
|
||||
.m-t-n-7 {
|
||||
margin-top: -7px;
|
||||
}
|
||||
|
||||
.m-t-n-sm {
|
||||
margin-top: -10px;
|
||||
}
|
||||
|
||||
.m-t-n {
|
||||
margin-top: -15px;
|
||||
}
|
||||
|
||||
.m-t-n-md {
|
||||
margin-top: -20px;
|
||||
}
|
||||
|
||||
.m-t-n-lg {
|
||||
margin-top: -30px;
|
||||
}
|
||||
|
||||
.m-t-n-xl {
|
||||
margin-top: -40px;
|
||||
}
|
||||
|
||||
.m-t-n-xxl {
|
||||
margin-top: -50px;
|
||||
}
|
||||
|
||||
.m-t-n-xxxl {
|
||||
margin-top: -60px;
|
||||
}
|
||||
|
||||
.m-r-none {
|
||||
margin-right: 0 !important;
|
||||
}
|
||||
|
||||
.m-r-xxs {
|
||||
margin-right: 1px;
|
||||
}
|
||||
|
||||
.m-r-xs {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
.m-r-sm {
|
||||
margin-right: 10px !important;
|
||||
}
|
||||
|
||||
.m-r {
|
||||
margin-right: 15px !important;
|
||||
}
|
||||
|
||||
.m-r-md {
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.m-r-lg {
|
||||
margin-right: 30px;
|
||||
}
|
||||
|
||||
.m-r-xl {
|
||||
margin-right: 40px;
|
||||
}
|
||||
|
||||
.m-r-xxl {
|
||||
margin-right: 50px;
|
||||
}
|
||||
|
||||
.m-r-n-xxs {
|
||||
margin-right: -1px;
|
||||
}
|
||||
|
||||
.m-r-n-xs {
|
||||
margin-right: -5px;
|
||||
}
|
||||
|
||||
.m-r-n-sm {
|
||||
margin-right: -10px;
|
||||
}
|
||||
|
||||
.m-r-n {
|
||||
margin-right: -15px;
|
||||
}
|
||||
|
||||
.m-r-n-md {
|
||||
margin-right: -20px;
|
||||
}
|
||||
|
||||
.m-r-n-lg {
|
||||
margin-right: -30px;
|
||||
}
|
||||
|
||||
.m-r-n-xl {
|
||||
margin-right: -40px;
|
||||
}
|
||||
|
||||
.m-r-n-xxl {
|
||||
margin-right: -50px;
|
||||
}
|
||||
|
||||
.m-b-none {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.m-b-xxs {
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
.m-b-xs {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.m-b-sm {
|
||||
margin-bottom: 10px !important;
|
||||
}
|
||||
|
||||
.m-b {
|
||||
margin-bottom: 15px !important;
|
||||
}
|
||||
|
||||
.m-b-md {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.m-b-lg {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.m-b-xl {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.m-b-xxl {
|
||||
margin-bottom: 50px;
|
||||
}
|
||||
|
||||
.m-b-n-xxs {
|
||||
margin-bottom: -1px;
|
||||
}
|
||||
|
||||
.m-b-n-xs {
|
||||
margin-bottom: -5px;
|
||||
}
|
||||
|
||||
.m-b-n-sm {
|
||||
margin-bottom: -10px;
|
||||
}
|
||||
|
||||
.m-b-n {
|
||||
margin-bottom: -15px;
|
||||
}
|
||||
|
||||
.m-b-n-md {
|
||||
margin-bottom: -20px;
|
||||
}
|
||||
|
||||
.m-b-n-lg {
|
||||
margin-bottom: -30px;
|
||||
}
|
||||
|
||||
.m-b-n-xl {
|
||||
margin-bottom: -40px;
|
||||
}
|
||||
|
||||
.m-b-n-xxl {
|
||||
margin-bottom: -50px;
|
||||
}
|
||||
|
||||
/*颜色共有样式*/
|
||||
|
||||
.btn-info {
|
||||
color: #ffffff !important;
|
||||
background-color: #497edf;
|
||||
border-color: #497edf;
|
||||
}
|
||||
|
||||
.btn-info:hover,
|
||||
.btn-info:focus,
|
||||
.btn-info:active,
|
||||
.btn-info.active,
|
||||
.open .dropdown-toggle.btn-info {
|
||||
color: #ffffff !important;
|
||||
background-color: #2059c1;
|
||||
border-color: #2059c1;
|
||||
}
|
||||
|
||||
.btn-success {
|
||||
color: #ffffff !important;
|
||||
background-color: #27c24c;
|
||||
border-color: #27c24c;
|
||||
}
|
||||
|
||||
.btn-success:hover,
|
||||
.btn-success:focus,
|
||||
.btn-success:active,
|
||||
.btn-success.active,
|
||||
.open .dropdown-toggle.btn-success {
|
||||
color: #ffffff !important;
|
||||
background-color: #23ad44;
|
||||
border-color: #20a03f;
|
||||
}
|
||||
|
||||
.btn-danger {
|
||||
color: #ffffff !important;
|
||||
background-color: #f05050;
|
||||
border-color: #f05050;
|
||||
}
|
||||
|
||||
.btn-danger:hover,
|
||||
.btn-danger:focus,
|
||||
.btn-danger:active,
|
||||
.btn-danger.active,
|
||||
.open .dropdown-toggle.btn-danger {
|
||||
color: #ffffff !important;
|
||||
background-color: #ee3939;
|
||||
border-color: #ed2a2a;
|
||||
}
|
||||
|
||||
.text-info {
|
||||
color: #00aeef !important;
|
||||
}
|
||||
|
||||
.text-success {
|
||||
color: #27c24c !important;
|
||||
}
|
||||
|
||||
.text-warning {
|
||||
color: #fad733 !important;
|
||||
}
|
||||
|
||||
.text-danger {
|
||||
color: #f05050;
|
||||
}
|
||||
|
||||
.text-white {
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
.text-left {
|
||||
text-align: left !important;
|
||||
}
|
||||
|
||||
.text-center {
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
.text-right {
|
||||
text-align: right !important;
|
||||
}
|
||||
|
||||
/*宽度样式*/
|
||||
|
||||
.w-xxs {
|
||||
width: 60px;
|
||||
}
|
||||
|
||||
.w-xs {
|
||||
width: 90px;
|
||||
}
|
||||
|
||||
.w-110 {
|
||||
width: 110px;
|
||||
}
|
||||
|
||||
.w-ss {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.w-sm {
|
||||
width: 150px;
|
||||
}
|
||||
|
||||
.w {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.w-md {
|
||||
width: 240px;
|
||||
}
|
||||
|
||||
.w-lg {
|
||||
width: 280px !important;
|
||||
}
|
||||
|
||||
.w-xl {
|
||||
width: 320px;
|
||||
}
|
||||
|
||||
.w-xxl {
|
||||
width: 360px;
|
||||
}
|
||||
|
||||
.w-full {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.w-auto {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.upload-file-btn {
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.upload-file-btn input[type='file'] {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
font-size: 300px;
|
||||
opacity: 0;
|
||||
filter: alpha(opacity=0);
|
||||
cursor: pointer;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
top: 0;
|
||||
position: absolute;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/*详情表格*/
|
||||
|
||||
.detail-box {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.detail-title {
|
||||
margin-bottom: 15px;
|
||||
text-indent: 8px;
|
||||
border-left: 3px solid #88b7e0;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.detail-href {
|
||||
color: $--color-primary !important;
|
||||
cursor: pointer;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.detail-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.detail-table td.title {
|
||||
color: #000;
|
||||
width: 85px;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.detail-table td,
|
||||
.detail-table th {
|
||||
padding: 6px 8px;
|
||||
border: 1px solid #ddd;
|
||||
min-width: 85px;
|
||||
width: 250px;
|
||||
word-break: break-all;
|
||||
white-space: pre-wrap;
|
||||
/*border: none;*/
|
||||
}
|
||||
|
||||
.border-top-none {
|
||||
border-top: none !important;
|
||||
}
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.bounce-enter-active,
|
||||
.bounce-leave-active,
|
||||
.bounceDown-enter-active,
|
||||
.bounceDown-leave-active,
|
||||
.bounceIn,
|
||||
.bounceInDown,
|
||||
.bounceInLeft,
|
||||
.bounceInRight,
|
||||
.bounceInUp,
|
||||
.bounceLeft-enter-active,
|
||||
.bounceLeft-leave-active,
|
||||
.bounceOut,
|
||||
.bounceOutDown,
|
||||
.bounceOutLeft,
|
||||
.bounceOutRight,
|
||||
.bounceOutUp,
|
||||
.bounceRight-enter-active,
|
||||
.bounceRight-leave-active,
|
||||
.bounceUp-enter-active,
|
||||
.bounceUp-leave-active,
|
||||
.fade-enter-active,
|
||||
.fade-leave-active,
|
||||
.fadeDown-enter-active,
|
||||
.fadeDown-leave-active,
|
||||
.fadeDownBig-enter-active,
|
||||
.fadeDownBig-leave-active,
|
||||
.fadeIn,
|
||||
.fadeInDown,
|
||||
.fadeInDownBig,
|
||||
.fadeInLeft,
|
||||
.fadeInLeftBig,
|
||||
.fadeInRight,
|
||||
.fadeInRightBig,
|
||||
.fadeInUp,
|
||||
.fadeInUpBig,
|
||||
.fadeLeft-enter-active,
|
||||
.fadeLeft-leave-active,
|
||||
.fadeLeftBig-enter-active,
|
||||
.fadeLeftBig-leave-active,
|
||||
.fadeOut,
|
||||
.fadeOutDown,
|
||||
.fadeOutDownBig,
|
||||
.fadeOutLeft,
|
||||
.fadeOutLeftBig,
|
||||
.fadeOutRight,
|
||||
.fadeOutRightBig,
|
||||
.fadeOutUp,
|
||||
.fadeOutUpBig,
|
||||
.fadeRight-enter-active,
|
||||
.fadeRight-leave-active,
|
||||
.fadeRightBig-enter-active,
|
||||
.fadeRightBig-leave-active,
|
||||
.fadeUp-enter-active,
|
||||
.fadeUp-leave-active,
|
||||
.fadeUpBig-enter-active,
|
||||
.fadeUpBig-leave-active,
|
||||
.rotateDownLeft-enter-active,
|
||||
.rotateDownLeft-leave-active,
|
||||
.rotateDownRight-enter-active,
|
||||
.rotateDownRight-leave-active,
|
||||
.rotateInDownLeft,
|
||||
.rotateInDownRight,
|
||||
.rotateInUpLeft,
|
||||
.rotateInUpRight,
|
||||
.rotateOutDownLeft,
|
||||
.rotateOutDownRight,
|
||||
.rotateOutUpLeft,
|
||||
.rotateOutUpRight,
|
||||
.rotateUpLeft-enter-active,
|
||||
.rotateUpLeft-leave-active,
|
||||
.rotateUpRight-enter-active,
|
||||
.rotateUpRight-leave-active,
|
||||
.slide-enter-active,
|
||||
.slide-leave-active,
|
||||
.slideDown-enter-active,
|
||||
.slideDown-leave-active,
|
||||
.slideIn,
|
||||
.slideInDown,
|
||||
.slideInLeft,
|
||||
.slideInRight,
|
||||
.slideInUp,
|
||||
.slideLeft-enter-active,
|
||||
.slideLeft-leave-active,
|
||||
.slideOut,
|
||||
.slideOutDown,
|
||||
.slideOutLeft,
|
||||
.slideOutRight,
|
||||
.slideOutUp,
|
||||
.slideRight-enter-active,
|
||||
.slideRight-leave-active,
|
||||
.slideUp-enter-active,
|
||||
.slideUp-leave-active,
|
||||
.zoom-enter-active,
|
||||
.zoom-leave-active,
|
||||
.zoomDown-enter-active,
|
||||
.zoomDown-leave-active,
|
||||
.zoomIn,
|
||||
.zoomInDown,
|
||||
.zoomInLeft,
|
||||
.zoomInRight,
|
||||
.zoomInUp,
|
||||
.zoomLeft-enter-active,
|
||||
.zoomLeft-leave-active,
|
||||
.zoomOut,
|
||||
.zoomOutDown,
|
||||
.zoomOutLeft,
|
||||
.zoomOutRight,
|
||||
.zoomOutUp,
|
||||
.zoomRight-enter-active,
|
||||
.zoomRight-leave-active,
|
||||
.zoomUp-enter-active,
|
||||
.zoomUp-leave-active {
|
||||
animation-duration: 0.6s !important;
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
|
||||
.cur-point {
|
||||
cursor: pointer !important;
|
||||
}
|
||||
|
||||
/*无数据*/
|
||||
|
||||
.no-data {
|
||||
text-align: center;
|
||||
min-height: 200px;
|
||||
line-height: 200px;
|
||||
}
|
||||
|
||||
.no-data .icon-zanwushuju {
|
||||
font-size: 26px;
|
||||
color: #d2cccc;
|
||||
}
|
||||
|
||||
/*.custom-dialog .el-dialog{*/
|
||||
|
||||
/*width: 80%;*/
|
||||
|
||||
/*height: 100%;*/
|
||||
|
||||
/*position: absolute;*/
|
||||
|
||||
/*right: 0;*/
|
||||
|
||||
/*}*/
|
||||
|
||||
.text-ellipsis {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.text-muted {
|
||||
color: #98a6ad;
|
||||
}
|
||||
|
||||
.custom-scrollbar .el-scrollbar__wrap {
|
||||
overflow-x: hidden !important;
|
||||
}
|
||||
|
||||
.action-divider {
|
||||
margin: 0 8px;
|
||||
display: inline-block;
|
||||
height: 1em;
|
||||
width: 1px;
|
||||
vertical-align: middle;
|
||||
position: relative;
|
||||
top: -0.06em;
|
||||
font-size: 14px;
|
||||
line-height: 1.5;
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
padding: 0;
|
||||
background: #e8e8e8;
|
||||
}
|
||||
|
||||
.dialog-sm {
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
.dialog-md {
|
||||
width: 800px;
|
||||
}
|
||||
|
||||
.dialog-lg {
|
||||
width: 950px;
|
||||
}
|
||||
|
||||
:-ms-input-placeholder {
|
||||
/* Internet Explorer 10+ */
|
||||
color: #e9d6cf !important;
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
@import './theme.scss';
|
||||
@import './table.scss';
|
|
@ -0,0 +1,130 @@
|
|||
.sidebar-container {
|
||||
z-index: 3;
|
||||
width: 180px !important;
|
||||
transition: width 0.18s;
|
||||
.scrollbar-wrapper {
|
||||
height: calc(100vh - 50px);
|
||||
.el-scrollbar__wrap {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
}
|
||||
.sidebar-menu {
|
||||
width: 180px;
|
||||
height: calc(100vh - 50px);
|
||||
border: 0;
|
||||
}
|
||||
.sidebar-menu::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
.el-submenu__title > i,
|
||||
.el-menu-item > i {
|
||||
margin-right: 6px;
|
||||
}
|
||||
.el-submenu.is-opened .el-submenu__title {
|
||||
color: #fff !important;
|
||||
& > i {
|
||||
color: #fff !important;
|
||||
}
|
||||
}
|
||||
.el-menu-item.is-active i {
|
||||
color: #fff !important;
|
||||
}
|
||||
.el-submenu .el-menu-item {
|
||||
min-width: 180px !important;
|
||||
background: #15171d !important;
|
||||
&.is-active {
|
||||
background: #1890ff !important;
|
||||
}
|
||||
}
|
||||
.menu-wrapper .el-menu-item {
|
||||
&.is-active {
|
||||
background: #1890ff !important;
|
||||
}
|
||||
}
|
||||
.el-menu--collapse {
|
||||
width: 64px;
|
||||
overflow: inherit;
|
||||
}
|
||||
.logo {
|
||||
height: 50px;
|
||||
position: relative;
|
||||
line-height: 50px;
|
||||
transition: all 0.3s;
|
||||
background: #21242e;
|
||||
overflow: hidden;
|
||||
text-align: center;
|
||||
img {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
height: 32px;
|
||||
}
|
||||
.short-logo {
|
||||
display: none;
|
||||
}
|
||||
h1 {
|
||||
color: #fff;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
font-size: 18px;
|
||||
margin: 0 0 0 8px;
|
||||
font-family: 'Myriad Pro', 'Helvetica Neue', Arial, Helvetica, sans-serif;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
}
|
||||
.hideSidebar {
|
||||
.sidebar-container {
|
||||
width: 64px !important;
|
||||
.el-menu--collapse {
|
||||
.el-submenu {
|
||||
overflow: hidden;
|
||||
& > .el-submenu__title {
|
||||
& > span {
|
||||
height: 0;
|
||||
width: 0;
|
||||
overflow: hidden;
|
||||
visibility: hidden;
|
||||
display: inline-block;
|
||||
}
|
||||
.el-submenu__icon-arrow {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.logo {
|
||||
img {
|
||||
display: none;
|
||||
}
|
||||
.short-logo {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.top-menu {
|
||||
float: left;
|
||||
}
|
||||
// 顶部布局
|
||||
.el-menu--horizontal {
|
||||
border: none !important;
|
||||
& > .menu-wrapper {
|
||||
float: left;
|
||||
}
|
||||
.el-menu-item > i,
|
||||
.el-submenu__title > i {
|
||||
margin-right: 6px;
|
||||
}
|
||||
.el-menu-item {
|
||||
float: left;
|
||||
height: 60px;
|
||||
line-height: 60px;
|
||||
margin: 0;
|
||||
//border-bottom: 2px solid transparent;
|
||||
color: #909399;
|
||||
&.is-active {
|
||||
//border-bottom: 2px solid #409eff;
|
||||
color: #303133;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
.table-container {
|
||||
.custom-header {
|
||||
background: #f5f7fa !important;
|
||||
color: #333;
|
||||
border-bottom: 1px solid #dcdfe6 !important;
|
||||
}
|
||||
.el-table--enable-row-hover .el-table__body tr:hover > td {
|
||||
background-color: #eaf3fd;
|
||||
}
|
||||
.gutter {
|
||||
background: #f5f7fa !important;
|
||||
color: #333;
|
||||
border-bottom: 1px solid #dcdfe6 !important;
|
||||
}
|
||||
.pagination-container {
|
||||
margin-top: 10px;
|
||||
text-align: right;
|
||||
.el-pagination__jump {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
.theme-container {
|
||||
width: 280px;
|
||||
padding: 0 !important;
|
||||
top: 30px !important;
|
||||
.popper__arrow {
|
||||
display: none !important;
|
||||
}
|
||||
.el-card__header {
|
||||
padding: 10px 20px;
|
||||
}
|
||||
}
|
||||
.theme-setting {
|
||||
.icon-huanfu {
|
||||
font-size: 18px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.theme-cell {
|
||||
height: 30px;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
margin-bottom: 5px;
|
||||
span {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
background-color: rgba(32, 43, 54, 0.5);
|
||||
text-align: center;
|
||||
display: inherit;
|
||||
.icon-ok {
|
||||
position: relative;
|
||||
top: 6px;
|
||||
display: inline-block;
|
||||
font-weight: 400;
|
||||
font-size: 17px;
|
||||
line-height: 1;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
b {
|
||||
display: inline-block;
|
||||
float: left;
|
||||
width: 50%;
|
||||
height: 20px;
|
||||
}
|
||||
b.t-header {
|
||||
height: 10px;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,130 @@
|
|||
@import './button.scss';
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.el-notification__content {
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.el-cascader {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.el-form-item {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.el-button--mini,
|
||||
.el-button--mini.is-round {
|
||||
padding: 4px 15px !important;
|
||||
}
|
||||
|
||||
.el-form-item--mini.el-form-item,
|
||||
.el-form-item--small.el-form-item {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.el-table .cell {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.el-card {
|
||||
box-shadow: none;
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
|
||||
.el-tabs--border-card {
|
||||
-webkit-box-shadow: none !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.el-card__header {
|
||||
padding: 10px 20px !important;
|
||||
}
|
||||
|
||||
.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
|
||||
background-color: rgb(236 245 255) !important;
|
||||
color: rgb(64 158 255);
|
||||
}
|
||||
|
||||
.el-breadcrumb__inner,
|
||||
.el-breadcrumb__inner a {
|
||||
-webkit-transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
transition: color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
color: #666 !important;
|
||||
font-weight: normal !important;
|
||||
}
|
||||
|
||||
.el-progress-bar__inner {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.el-progress__text {
|
||||
font-size: 12px !important;
|
||||
}
|
||||
|
||||
.el-dropdown-link {
|
||||
cursor: pointer;
|
||||
color: $--color-primary;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.el-pagination button,
|
||||
.el-pagination span:not([class*='suffix']) {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.el-pagination__sizes .el-input .el-input__inner {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.el-pager li {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.el-input--small {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.el-tabs__content {
|
||||
position: static !important;
|
||||
}
|
||||
|
||||
//menu
|
||||
.el-submenu .el-menu-item {
|
||||
height: 48px;
|
||||
line-height: 48px;
|
||||
}
|
||||
|
||||
.el-menu-item,
|
||||
.el-submenu__title {
|
||||
height: 48px;
|
||||
line-height: 48px;
|
||||
}
|
||||
|
||||
.el-dialog {
|
||||
.el-dialog--middle {
|
||||
width: 60%;
|
||||
}
|
||||
.el-dialog__header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 14px 20px;
|
||||
font-weight: bold;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
.el-dialog__title {
|
||||
flex: 1;
|
||||
color: #010033;
|
||||
font-size: 14px;
|
||||
}
|
||||
.el-dialog__headerbtn {
|
||||
position: static;
|
||||
}
|
||||
}
|
||||
.el-dialog__footer {
|
||||
padding: 14px 20px;
|
||||
text-align: right;
|
||||
border-top: 1px solid #e0e0e0;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
@import './common.scss';
|
||||
@import './element-ui.scss';
|
||||
@import './components/index.scss';
|
|
@ -0,0 +1,12 @@
|
|||
/**
|
||||
* Created by Zhang Haijun on 2018/1/25.
|
||||
*/
|
||||
/* global $ */
|
||||
import Vue from 'vue'
|
||||
import store from '@/store'
|
||||
export const permission = Vue.directive('permission', function (el, binding) {
|
||||
const buttons = store.state.permission.buttons
|
||||
if (!buttons.includes(binding.value)) {
|
||||
el.parentNode && el.parentNode.removeChild(el)
|
||||
}
|
||||
})
|
|
@ -0,0 +1,3 @@
|
|||
export default function (onmessage: { (): void }, context: any) {
|
||||
context.root.$store.state.app.$webSocket.onmessage = onmessage
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
import { ref } from '@vue/composition-api'
|
||||
export default function () {
|
||||
const selectionIds = ref([])
|
||||
function handleSelectionChange(selections) {
|
||||
selectionIds.value = selections.map((item) => item.id)
|
||||
}
|
||||
return {
|
||||
selectionIds,
|
||||
handleSelectionChange
|
||||
}
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
import { ref, toRefs, reactive } from '@vue/composition-api'
|
||||
import { MessageBox, Message } from 'element-ui'
|
||||
import { handleSearchParam } from 'cmp-element/utils'
|
||||
|
||||
interface IRemoveService {
|
||||
(id: number): Promise<Base.IResponseData>
|
||||
}
|
||||
interface IConfigs {
|
||||
getService: {
|
||||
(params: Base.IListParams): Promise<Base.IResponseList>
|
||||
}
|
||||
removeService?: IRemoveService
|
||||
listFormat?: {
|
||||
(data: any): any[]
|
||||
}
|
||||
afterGetList?: {
|
||||
(): void
|
||||
}
|
||||
rows?: number
|
||||
params?: any
|
||||
initParams?: any
|
||||
deleteTipKey?: string
|
||||
}
|
||||
interface IRecord {
|
||||
id: number
|
||||
name: string
|
||||
}
|
||||
export function useDelete(removeService: IRemoveService, getData: { (): void }, deleteTipKey = 'name') {
|
||||
function handleDelete(record: any) {
|
||||
MessageBox.confirm(`您确定要删除【${record[deleteTipKey]}】吗?`, '提示', {
|
||||
confirmButtonClass: 'el-button--danger',
|
||||
type: 'warning'
|
||||
})
|
||||
.then(async () => {
|
||||
const res = await removeService(record.id)
|
||||
if (res.success) {
|
||||
Message.success(res.message)
|
||||
getData()
|
||||
}
|
||||
})
|
||||
.catch((e) => {})
|
||||
}
|
||||
return {
|
||||
handleDelete
|
||||
}
|
||||
}
|
||||
export default function <T = any>(configs: IConfigs) {
|
||||
const { getService, removeService, listFormat, rows = 10, params = {}, afterGetList, initParams, deleteTipKey = 'name' } = configs
|
||||
const loading = ref(false)
|
||||
const state: Base.IListState<T> = reactive({
|
||||
list: [],
|
||||
total: 0,
|
||||
params: {
|
||||
page: 1,
|
||||
rows,
|
||||
...params
|
||||
}
|
||||
})
|
||||
if (initParams) {
|
||||
state.params.params = handleSearchParam(initParams)
|
||||
}
|
||||
async function getList() {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await getService(state.params)
|
||||
loading.value = false
|
||||
if (data.success) {
|
||||
if (listFormat) {
|
||||
state.list = listFormat(data.data.rows)
|
||||
} else {
|
||||
state.list = data.data.rows
|
||||
}
|
||||
state.total = data.data.total
|
||||
afterGetList && afterGetList()
|
||||
}
|
||||
} catch (e) {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
const { handleDelete } = useDelete(removeService as IRemoveService, getList, deleteTipKey)
|
||||
return {
|
||||
loading,
|
||||
...toRefs(state),
|
||||
getList,
|
||||
handleDelete
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
import { onUnmounted, ref } from '@vue/composition-api'
|
||||
import WebSocket from 'cmp-socket'
|
||||
import { getToken } from 'utils/auth'
|
||||
export default function (onmessage: { (): void }) {
|
||||
const protocol = location.protocol === 'http:' ? 'ws' : 'wss'
|
||||
let webSocket = new WebSocket({
|
||||
url: `${protocol}://${location.host}/api/sms/messageService`,
|
||||
pingMsg: 'HeartBeat',
|
||||
reConnectNum: 5,
|
||||
params: getToken()
|
||||
})
|
||||
if (onmessage && typeof onmessage === 'function') {
|
||||
webSocket.onmessage = onmessage
|
||||
}
|
||||
onUnmounted(() => {
|
||||
webSocket.Destroy()
|
||||
webSocket = null
|
||||
})
|
||||
return {
|
||||
webSocket
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
export interface IListParams {
|
||||
page: number
|
||||
rows: number
|
||||
simple?: boolean
|
||||
params?: string
|
||||
}
|
||||
|
||||
export interface IAjaxData {
|
||||
success: boolean
|
||||
failed: boolean
|
||||
solution: string
|
||||
message: string
|
||||
errorMsg: string
|
||||
data: any
|
||||
status: string
|
||||
}
|
||||
|
||||
export interface IDialogConfig {
|
||||
visible: boolean
|
||||
id?: number
|
||||
vendorId?: number
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
export default {
|
||||
computed: {
|
||||
$webSocket() {
|
||||
return this.$store.state.app.$webSocket
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$webSocket.onmessage = this.onmessage
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
export default {
|
||||
data() {
|
||||
return {
|
||||
selectionIds: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleSelectionChange(selections) {
|
||||
this.selectionIds = selections.map((item) => item.id)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
import WebSocket from 'cmp-socket'
|
||||
import { getToken } from 'utils/auth'
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
webSocket: ''
|
||||
}
|
||||
},
|
||||
created() {
|
||||
const protocol = location.protocol === 'http:' ? 'ws' : 'wss'
|
||||
this.webSocket = new WebSocket({
|
||||
url: `${protocol}://${location.host}/api/sms/messageService`,
|
||||
commonFun: this.messageCommonFun,
|
||||
pingMsg: 'HeartBeat',
|
||||
reConnectNum: 5,
|
||||
params: getToken()
|
||||
})
|
||||
if (this.onmessage && typeof this.onmessage === 'function') {
|
||||
this.webSocket.onmessage = this.onmessage
|
||||
}
|
||||
},
|
||||
destroyed() {
|
||||
this.webSocket.Destroy()
|
||||
this.webSocket = null
|
||||
},
|
||||
methods: {
|
||||
messageCommonFun() {}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
import {} from 'axios'
|
||||
declare module 'axios' {
|
||||
export interface AxiosInstance {
|
||||
(config: AxiosRequestConfig): AxiosPromise
|
||||
(url: string, config?: AxiosRequestConfig): AxiosPromise
|
||||
defaults: AxiosRequestConfig
|
||||
interceptors: {
|
||||
request: AxiosInterceptorManager<AxiosRequestConfig>
|
||||
response: AxiosInterceptorManager<AxiosResponse>
|
||||
}
|
||||
getUri(config?: AxiosRequestConfig): string
|
||||
request<T = any, R = Base.IResponseData<T>>(config: AxiosRequestConfig): Promise<R>
|
||||
get<T = any, R = Base.IResponseData<T>>(url: string, config?: AxiosRequestConfig): Promise<R>
|
||||
delete<T = any, R = Base.IResponseData<T>>(url: string, config?: AxiosRequestConfig): Promise<R>
|
||||
head<T = any, R = Base.IResponseData<T>>(url: string, config?: AxiosRequestConfig): Promise<R>
|
||||
options<T = any, R = Base.IResponseData<T>>(url: string, config?: AxiosRequestConfig): Promise<R>
|
||||
post<T = any, R = Base.IResponseData<T>>(url: string, data?: any, config?: AxiosRequestConfig): Promise<R>
|
||||
put<T = any, R = Base.IResponseData<T>>(url: string, data?: any, config?: AxiosRequestConfig): Promise<R>
|
||||
patch<T = any, R = Base.IResponseData<T>>(url: string, data?: any, config?: AxiosRequestConfig): Promise<R>
|
||||
}
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
declare module Base {
|
||||
// ajax请求返回数据格式
|
||||
interface IResponseData<T = any> {
|
||||
success: boolean
|
||||
failed: boolean
|
||||
solution: string
|
||||
message: string
|
||||
errorMsg: string
|
||||
data: T
|
||||
status: string
|
||||
}
|
||||
// list接口返回数据格式
|
||||
interface IListData<T = any> {
|
||||
page: number
|
||||
pages: number
|
||||
total: number
|
||||
rows: T[]
|
||||
}
|
||||
interface IResponseList<T = any> extends IResponseData {
|
||||
data: IListData<T>
|
||||
}
|
||||
// 列表查询传参
|
||||
interface IListParams {
|
||||
page?: number
|
||||
rows?: number
|
||||
simple?: boolean
|
||||
params?: string
|
||||
sorter?: string
|
||||
}
|
||||
// 模态框打开
|
||||
interface IDialog<T = any> {
|
||||
visible: boolean
|
||||
record: T
|
||||
}
|
||||
// 搜索配置
|
||||
interface ISearchConfig<T = any> {
|
||||
label?: string
|
||||
value: string
|
||||
type: string
|
||||
initValue?: string | number
|
||||
sign?: string
|
||||
data?: T[]
|
||||
disabled?: boolean
|
||||
onChange?: {
|
||||
(val: string, listQuery: any): void
|
||||
}
|
||||
}
|
||||
// 列表
|
||||
type IListState<T = any> = {
|
||||
list: T[]
|
||||
total: number
|
||||
params: IListParams
|
||||
}
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
import Vue, { VNode } from 'vue'
|
||||
|
||||
declare global {
|
||||
namespace JSX {
|
||||
// tslint:disable no-empty-interface
|
||||
interface Element extends VNode {}
|
||||
// tslint:disable no-empty-interface
|
||||
interface ElementClass extends Vue {}
|
||||
interface IntrinsicElements {
|
||||
[elem: string]: any
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
import Vue from 'vue'
|
||||
|
||||
declare module '*.vue' {
|
||||
export default Vue
|
||||
}
|
||||
declare module 'vue/types/vue' {
|
||||
interface Vue {
|
||||
$tools: any
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
declare module 'cmp-basic'
|
||||
declare module 'cmp-echarts'
|
||||
declare module 'cmp-element'
|
||||
declare module 'cmp-socket'
|
||||
declare module 'cmp-element/utils'
|
||||
declare module 'vite-plugin-svg-icons'
|
||||
declare module 'services'
|
||||
declare module 'v-viewer/src/component.vue'
|
|
@ -0,0 +1,17 @@
|
|||
/**
|
||||
* Created by HaijunZhang on 2018/11/16.
|
||||
*/
|
||||
import Cookies from 'js-cookie'
|
||||
import { tokenKey } from '@/config'
|
||||
|
||||
export function getToken() {
|
||||
return Cookies.get(tokenKey)
|
||||
}
|
||||
|
||||
export function setToken(token) {
|
||||
return Cookies.set(tokenKey, token)
|
||||
}
|
||||
|
||||
export function removeToken() {
|
||||
return Cookies.remove(tokenKey)
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
// 同步加载
|
||||
export function getModules(files: any) {
|
||||
// 当files为方法时为webapock,为对象时为vite
|
||||
const isWebpack = typeof files === 'function'
|
||||
// 路径包含compoennts的是内置组件不向外暴露
|
||||
const modules = (isWebpack ? files.keys() : Object.keys(files))
|
||||
.filter((item: string) => !item.includes('components'))
|
||||
.reduce((modules: any, modulePath: string) => {
|
||||
// set './app.vue' => 'app'
|
||||
const moduleName = modulePath.replace(/^\.\S*\/(.*)\.\w+$/, '$1')
|
||||
const value = isWebpack ? files(modulePath) : files[modulePath]
|
||||
modules[moduleName] = value.default
|
||||
return modules
|
||||
}, {})
|
||||
return modules
|
||||
}
|
||||
// 异步加载
|
||||
export function getAsyncModules(files: any, asyncImport: any) {
|
||||
// 当files为方法时为webapock,为对象时为vite
|
||||
const isWebpack = typeof files === 'function'
|
||||
const modules = (isWebpack ? files.keys() : Object.keys(files))
|
||||
.filter((item: string) => !item.includes('components'))
|
||||
.reduce((modules: any, modulePath: string) => {
|
||||
// set './app.vue' => 'app'
|
||||
const moduleName = modulePath.replace(/^\.\S*\/(.*)\.\w+$/, '$1')
|
||||
modules[moduleName] = isWebpack ? asyncImport(modulePath) : files[moduleName]
|
||||
return modules
|
||||
}, {})
|
||||
return modules
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/**
|
||||
* Created by HaijunZhang on 2018/11/19.
|
||||
*/
|
||||
import CryptoJS from 'crypto-js'
|
||||
|
||||
const defaultKey = CryptoJS.enc.Utf8.parse(decryptByBase64('Qm9jbG91ZENNUFY1ODchIQ=='))
|
||||
const iv = CryptoJS.enc.Utf8.parse(decryptByBase64('QmV5b25kQ01QVjU4NyEhIQ=='))
|
||||
const options = {
|
||||
iv: iv,
|
||||
mode: CryptoJS.mode.CBC,
|
||||
padding: CryptoJS.pad.Pkcs7
|
||||
}
|
||||
|
||||
// 加密方法
|
||||
export function encrypt(word, key = defaultKey) {
|
||||
if (typeof word === 'object') {
|
||||
word = JSON.stringify(word)
|
||||
}
|
||||
const srcs = CryptoJS.enc.Utf8.parse(word)
|
||||
const encrypted = CryptoJS.AES.encrypt(srcs, key, options)
|
||||
return encrypted.toString()
|
||||
}
|
||||
|
||||
// 解密方法
|
||||
export function decrypt(word, key = defaultKey) {
|
||||
const decrypt = CryptoJS.AES.decrypt(word, key, options)
|
||||
return decrypt.toString(CryptoJS.enc.Utf8)
|
||||
}
|
||||
|
||||
// base64解码
|
||||
function decryptByBase64(word) {
|
||||
const base64string = CryptoJS.enc.Base64.parse(word)
|
||||
return CryptoJS.enc.Utf8.stringify(base64string)
|
||||
}
|
||||
|
||||
// base64编码
|
||||
function encryptByBase64(word) {
|
||||
const src = CryptoJS.enc.Utf8.parse(word)
|
||||
const base64string = CryptoJS.enc.Base64.stringify(src)
|
||||
return base64string
|
||||
}
|
||||
|
||||
export default {
|
||||
encrypt,
|
||||
decrypt,
|
||||
encryptByBase64,
|
||||
decryptByBase64
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
import dayjs from 'dayjs'
|
||||
import 'dayjs/locale/zh-cn'
|
||||
dayjs.locale('zh-cn')
|
||||
|
||||
export default dayjs
|
|
@ -0,0 +1,89 @@
|
|||
/**
|
||||
* Created by HaijunZhang on 2019/7/23.
|
||||
*/
|
||||
import Clipboard from 'clipboard'
|
||||
import { getToken } from 'utils/auth'
|
||||
import dayjs from './day'
|
||||
|
||||
export function wrapperParams(data) {
|
||||
return data
|
||||
// return { params: JSON.stringify(data) }
|
||||
}
|
||||
export const formatEqParams = (params) => {
|
||||
return { page: 1, rows: 9999, params: JSON.stringify([{ param: params, sign: 'EQ' }]) }
|
||||
}
|
||||
export const copyText = (text, event, successCallback, errorCallback) => {
|
||||
const clipboard = new Clipboard(event.target, {
|
||||
text: () => text
|
||||
})
|
||||
clipboard.on('success', () => {
|
||||
successCallback && successCallback()
|
||||
clipboard.destroy()
|
||||
})
|
||||
clipboard.on('error', () => {
|
||||
errorCallback && errorCallback()
|
||||
clipboard.destroy()
|
||||
})
|
||||
clipboard.onClick(event)
|
||||
}
|
||||
// export const downloadFile = (url, params = {}) => {
|
||||
// request
|
||||
// .get(url, {
|
||||
// // headers: { 'Content-Type': params.fileFormat },
|
||||
// responseType: 'blob',
|
||||
// // params: wrapperParams(params),
|
||||
// options: {
|
||||
// isBlob: true
|
||||
// }
|
||||
// })
|
||||
// .then(data => {
|
||||
// var ele = document.createElement('a') // 创建下载链接
|
||||
// ele.download = 'filename' // 设置下载的名称
|
||||
// ele.style.display = 'none' // 隐藏的可下载链接
|
||||
// // 字符内容转变成blob地址
|
||||
// const blob = new Blob([data])
|
||||
// ele.href = URL.createObjectURL(blob)
|
||||
// // 绑定点击时间
|
||||
// document.body.appendChild(ele)
|
||||
// ele.click()
|
||||
// // 然后移除
|
||||
// document.body.removeChild(ele)
|
||||
// })
|
||||
// }
|
||||
export const downloadFile = (url, params = {}) => {
|
||||
let str = ''
|
||||
Object.keys(params).forEach((item) => {
|
||||
str += `&${item}=${params[item]}`
|
||||
})
|
||||
window.location.href = encodeURI(`/api${url}?token=${getToken()}${str}`)
|
||||
}
|
||||
export const getQuery = (hash) => {
|
||||
const queryArr = hash.split('?')
|
||||
if (queryArr.length === 1) {
|
||||
return {}
|
||||
}
|
||||
const query = {}
|
||||
queryArr[1].split('&').forEach((item) => {
|
||||
const [key, value] = item.split('=')
|
||||
query[key] = value
|
||||
})
|
||||
return query
|
||||
}
|
||||
// ip比较大小
|
||||
export const compareIp = (ip1, ip2) => {
|
||||
const ip1Arr = ip1.split('.')
|
||||
const ip2Arr = ip2.split('.')
|
||||
let flag
|
||||
for (let i = 0; i < 4; i++) {
|
||||
if (Number(ip1Arr[i]) > Number(ip2Arr[i])) {
|
||||
flag = 0
|
||||
break
|
||||
} else if (Number(ip1Arr[i]) < Number(ip2Arr[i])) {
|
||||
flag = 1
|
||||
}
|
||||
}
|
||||
return flag
|
||||
}
|
||||
export function makeTimeStamp() {
|
||||
return dayjs().format('YYYYMMDDHHmmss')
|
||||
}
|
|
@ -0,0 +1,119 @@
|
|||
/**
|
||||
* Created by Zhang Haijun on 2017/8/24.
|
||||
* axios#request(config)
|
||||
* axios#get(url[, config])
|
||||
* axios#delete(url[, config])
|
||||
* axios#head(url[, config])
|
||||
* axios#options(url[, config])
|
||||
* axios#post(url[, data[, config]])
|
||||
* axios#put(url[, data[, config]])
|
||||
* axios#patch(url[, data[, config]])
|
||||
*/
|
||||
import axios from 'axios'
|
||||
import NProgress from 'nprogress'
|
||||
import qs from 'qs'
|
||||
import 'nprogress/nprogress.css'
|
||||
import { Notification, MessageBox } from 'element-ui'
|
||||
import { getToken } from 'utils/auth'
|
||||
import store from '@/store'
|
||||
|
||||
const codeMessage = {
|
||||
200: '服务器成功返回请求的数据。',
|
||||
201: '新建或修改数据成功。',
|
||||
202: '一个请求已经进入后台排队(异步任务)。',
|
||||
204: '删除数据成功。',
|
||||
400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
|
||||
401: '用户没有权限(令牌、用户名、密码错误)。',
|
||||
403: '用户得到授权,但是访问是被禁止的。',
|
||||
404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
|
||||
406: '请求的格式不可得。',
|
||||
410: '请求的资源被永久删除,且不会再得到的。',
|
||||
422: '当创建一个对象时,发生一个验证错误。',
|
||||
500: '服务器发生错误,请检查服务器。',
|
||||
502: '网关错误。',
|
||||
503: '服务不可用,服务器暂时过载或维护。',
|
||||
504: '网关超时。'
|
||||
}
|
||||
const axiosInstance = axios.create({
|
||||
baseURL: '/api',
|
||||
headers: { 'Content-Type': 'application/json', BsmAjaxHeader: true },
|
||||
timeout: 20000,
|
||||
paramsSerializer: (params) => {
|
||||
return qs.stringify(params, { arrayFormat: 'indices' })
|
||||
}
|
||||
})
|
||||
// 请求完成回调
|
||||
const finishCallback = function () {
|
||||
NProgress.done()
|
||||
}
|
||||
// 报错处理
|
||||
const handleError = function (response) {
|
||||
if (!response) return // 容错处理
|
||||
const errorText = codeMessage[response.status] || response.statusText
|
||||
Notification({
|
||||
type: 'error',
|
||||
title: `请求错误 ${response.status}: ${response.config.url}`,
|
||||
message: errorText
|
||||
})
|
||||
const error = new Error(errorText)
|
||||
error.name = response.status
|
||||
error.response = response
|
||||
throw error
|
||||
}
|
||||
axiosInstance.interceptors.request.use(
|
||||
(config) => {
|
||||
const {
|
||||
headers,
|
||||
headers: { options = {} }
|
||||
} = config
|
||||
NProgress.start()
|
||||
if (config.method === 'get') {
|
||||
// 清除get缓存
|
||||
config.url = `${config.url}?t=${new Date().getTime()}`
|
||||
} else if (headers['Content-Type'] === 'application/x-www-form-urlencoded') {
|
||||
config.data = qs.stringify(config.data || {})
|
||||
}
|
||||
config.headers.token = getToken()
|
||||
delete config.headers.options
|
||||
config.options = options
|
||||
return config
|
||||
},
|
||||
(error) => {
|
||||
return Promise.reject(error)
|
||||
}
|
||||
)
|
||||
axiosInstance.interceptors.response.use(
|
||||
(data) => {
|
||||
// const requestKey = getRequestIdentify(data.config);
|
||||
// removePending(requestKey);
|
||||
finishCallback()
|
||||
const responseData = data.data
|
||||
const { options } = data.config
|
||||
if (!responseData.success) {
|
||||
switch (responseData.status) {
|
||||
case '402':
|
||||
// store.dispatch('permission/ResetRoutes')
|
||||
// location.href = '/#/license'
|
||||
break
|
||||
case '401':
|
||||
case '509':
|
||||
store.dispatch('permission/ResetRoutes')
|
||||
break
|
||||
default:
|
||||
}
|
||||
if (!options.ignoreError) {
|
||||
Notification({
|
||||
message: responseData.message || responseData.data,
|
||||
type: 'error'
|
||||
})
|
||||
}
|
||||
}
|
||||
return responseData
|
||||
},
|
||||
(error) => {
|
||||
finishCallback()
|
||||
handleError(error.response)
|
||||
return Promise.reject(error)
|
||||
}
|
||||
)
|
||||
export default axiosInstance
|
|
@ -0,0 +1,21 @@
|
|||
/**
|
||||
* Created by HaijunZhang on 2018/12/10.
|
||||
*/
|
||||
// import path from 'path';
|
||||
import { startsWith } from 'lodash-es'
|
||||
export function isExternalLink(path) {
|
||||
return /^(http:|https:|mailto:|tel:)\/\//.test(path)
|
||||
}
|
||||
export function resolvePath(basePath, routePath) {
|
||||
if (isExternalLink(routePath)) {
|
||||
return routePath
|
||||
}
|
||||
// return path.resolve(basePath, routePath);
|
||||
const basePathArr = basePath.split('/')
|
||||
const routePathArr = routePath.split('/')
|
||||
if (startsWith(routePath, '/')) {
|
||||
return routePath
|
||||
}
|
||||
const res = [...basePathArr, ...routePathArr].filter((item) => item)
|
||||
return `/${res.join('/')}`
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
// websocket文件上传
|
||||
import { getToken } from './auth'
|
||||
export default function uploadFile(item, callback, errorCallBack) {
|
||||
const protocol = location.protocol === 'http:' ? 'ws' : 'wss'
|
||||
item.isReady = true
|
||||
const socket = new WebSocket(`${protocol}://${location.host}/api/sms/uploadService`, getToken())
|
||||
let i = 0
|
||||
let startSize = 0,
|
||||
endSize = 0
|
||||
const paragraph = 4 * 1024 * 1024 // 以4MB为一个分片
|
||||
const count = parseInt(item.file.size / paragraph) + 1
|
||||
socket.onopen = function () {
|
||||
item.isUploading = true
|
||||
socket.send(
|
||||
JSON.stringify({
|
||||
filename: item.file.name,
|
||||
upload: 'file'
|
||||
})
|
||||
)
|
||||
// 取消上传
|
||||
item.cancel = function () {
|
||||
item.progress = 0
|
||||
socket.send(
|
||||
JSON.stringify({
|
||||
UPLOAD_CANCEL: 'UPLOAD_CANCEL'
|
||||
})
|
||||
)
|
||||
item.isUploading = false
|
||||
}
|
||||
}
|
||||
socket.onmessage = function (event) {
|
||||
const sendFile = function () {
|
||||
if (startSize < item.file.size) {
|
||||
let blob
|
||||
endSize += paragraph
|
||||
if (item.file.webkitSlice) {
|
||||
blob = item.file.webkitSlice(startSize, endSize)
|
||||
} else if (item.file.mozSlice) {
|
||||
blob = item.file.mozSlice(startSize, endSize)
|
||||
} else {
|
||||
blob = item.file.slice(startSize, endSize)
|
||||
}
|
||||
const reader = new FileReader()
|
||||
reader.readAsArrayBuffer(blob)
|
||||
|
||||
reader.onload = function loaded(evt) {
|
||||
const result = evt.target.result
|
||||
i++
|
||||
const isok = (i / count) * 100
|
||||
item.progress = parseInt(isok)
|
||||
startSize = endSize
|
||||
socket.send(result)
|
||||
}
|
||||
} else {
|
||||
item.progress = 100
|
||||
socket.send(
|
||||
JSON.stringify({
|
||||
sendover: 'sendover'
|
||||
})
|
||||
)
|
||||
}
|
||||
}
|
||||
item.isUploading = true
|
||||
item.isCancel = false
|
||||
const obj = JSON.parse(event.data)
|
||||
if (obj.category == 'UPLOAD_ACK') {
|
||||
item.filePath = obj.content
|
||||
sendFile()
|
||||
} else if (obj.category == 'UPLOAD') {
|
||||
if (obj.content == 'SAVE_FAILURE') {
|
||||
item.isUploading = false
|
||||
errorCallBack(item)
|
||||
} else if (obj.content == 'SAVE_SUCCESS') {
|
||||
sendFile()
|
||||
} else if (obj.content == 'TRUE') {
|
||||
callback(item)
|
||||
item.isReady = true
|
||||
item.isSuccess = true
|
||||
item.isUploading = false
|
||||
socket.close()
|
||||
}
|
||||
} else if (obj.category == 'UPLOAD_CANCEL') {
|
||||
item.progress = 0
|
||||
item.isCancel = true
|
||||
socket.close()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
/**
|
||||
* 启用缓存加载速度会变快,但是数据安全性和实时性降低
|
||||
*/
|
||||
// 是否启用权限本地缓存
|
||||
export const enablePermissionStorage = false
|
||||
// 本地缓存的菜单key值
|
||||
export const menuKey = 'cmcMenuData'
|
||||
// 是否启用用户本地缓存
|
||||
export const enableUserStorage = false
|
||||
// 本地缓存的用户key值
|
||||
export const userKey = 'cmcUserData'
|
||||
// 本地存储的cookie kye值
|
||||
export const tokenKey = 'CMC_TOKEN'
|
||||
// 最大缓存组件实例数
|
||||
export const cacheViewMax = 15
|
||||
export const baseUrl = '/sms-web'
|
|
@ -0,0 +1,29 @@
|
|||
/**
|
||||
* Created by HaijunZhang on 2019/10/21.
|
||||
*/
|
||||
import Vue from 'vue'
|
||||
import store from './store'
|
||||
import request from 'utils/request'
|
||||
|
||||
const { host, hash } = location
|
||||
const sendLog = (msg, vm, info, level) => {
|
||||
request.post('http://10.20.51.92:7001/log', {
|
||||
service: 'CMC',
|
||||
level,
|
||||
username: store.state.app.userData.username,
|
||||
host,
|
||||
view: hash,
|
||||
msg: `${msg}`,
|
||||
info
|
||||
})
|
||||
}
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
Vue.config.errorHandler = function (err, vm, info) {
|
||||
console.error(err, vm, info)
|
||||
// sendLog(err, vm, info, 'error')
|
||||
}
|
||||
Vue.config.warnHandler = function (msg, vm, info) {
|
||||
console.warn(msg, vm, info)
|
||||
// sendLog(msg, vm, info, 'warning')
|
||||
}
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
export function numberFilter(value, digit) {
|
||||
return value.toFixed(digit)
|
||||
}
|
||||
|
||||
// 正反编译
|
||||
export function booleanFilter(value) {
|
||||
const obj = {
|
||||
true: '是',
|
||||
false: '否',
|
||||
1: '是',
|
||||
0: '否',
|
||||
YES: '是',
|
||||
NO: '否'
|
||||
}
|
||||
return obj[value] || value
|
||||
}
|
||||
|
||||
export function sexFilter(value) {
|
||||
const obj = {
|
||||
true: '男',
|
||||
false: '女'
|
||||
}
|
||||
return obj[value]
|
||||
}
|
||||
|
||||
export function generalStatusFilter(value, type) {
|
||||
const cnUserData = {
|
||||
NORMAL: '正常',
|
||||
ABNORMAL: '已冻结',
|
||||
EXPIRED: '已过期',
|
||||
LOGOUT: '已注销'
|
||||
}
|
||||
const colorMap = {
|
||||
ABNORMAL: 'danger',
|
||||
NORMAL: 'success',
|
||||
EXPIRED: 'warning',
|
||||
LOGOUT: 'primary'
|
||||
}
|
||||
return type == 'color' ? colorMap[value] : cnUserData[value]
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
const req = require.context('./svg', false, /\.svg$/)
|
||||
const requireAll = (requireContext) => requireContext.keys().map(requireContext)
|
||||
requireAll(req)
|
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1617877873787" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="17931" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M512 153.6c197.9392 0 358.4 160.4608 358.4 358.4s-160.4608 358.4-358.4 358.4S153.6 709.9392 153.6 512 314.0608 153.6 512 153.6z m0 51.2C342.3232 204.8 204.8 342.3488 204.8 512s137.5232 307.2 307.2 307.2c169.6512 0 307.2-137.5488 307.2-307.2S681.6512 204.8 512 204.8z m6.6816 220.5952c34.5856 0 49.3312 25.856 48.4864 61.952l-0.256 6.6816c-0.896 15.616-3.8144 31.744-10.8032 63.3344l-4.352 19.3536c-9.6512 42.9312-13.312 69.2224-11.9808 81.92l0.4608 2.9696 2.1248-1.1008c2.304-1.28 4.9408-3.0208 7.7824-5.12l2.8928-2.2272a226.1248 226.1248 0 0 0 25.856-25.2416l0.4096-0.5376 45.44 23.6032c-4.5568 8.7296-23.5008 29.2864-39.8848 42.2912-30.7712 24.4224-61.2096 32.6144-83.2 4.3008-17.7408-22.8352-17.3312-49.6384-4.6848-109.8752l11.4432-51.9168c4.992-23.296 6.9888-35.7888 7.4752-47.0528l0.1024-2.56a59.5712 59.5712 0 0 0-0.4352-9.472l-1.0752 0.0256c-7.936 0.512-13.44 2.56-19.8912 7.0144-5.9904 4.1472-35.5072 31.5136-50.8416 45.056l-5.2992 4.5568-32.9472-39.1936 8.2944-7.296c15.3856-13.824 43.2128-39.3728 51.712-45.2608 16.0512-11.0592 32.384-16.2048 53.1712-16.2048zM512 280.576a38.4 38.4 0 1 1 0 76.8 38.4 38.4 0 0 1 0-76.8z" p-id="17932"></path></svg>
|
After Width: | Height: | Size: 1.5 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1617879939853" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1574" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M950.4256 252.16v448.4096c0 13.6192-3.1744 26.2656-9.5232 37.9904a71.168 71.168 0 0 1-26.0096 27.4432L541.184 990.208a59.7504 59.7504 0 0 1-32.3584 9.3184c-11.6736 0-22.4768-3.1232-32.3584-9.3184l-373.7088-224.256a71.1168 71.1168 0 0 1-26.0096-27.392 77.9776 77.9776 0 0 1-9.5232-37.9904V252.16c0-15.5648 4.096-29.7472 12.1856-42.5984 8.192-12.8512 18.944-22.016 32.4096-27.4432L485.4784 32.6144a62.464 62.464 0 0 1 23.3472-4.608c7.7824 0 15.5648 1.536 23.3472 4.608l373.6576 149.504c13.4656 5.4272 24.2688 14.592 32.4096 27.4432 8.1408 12.8 12.1856 27.0336 12.1856 42.5984zM508.8256 399.36l370.4832-148.3264-370.4832-148.2752-370.4832 148.2752L508.8256 399.36z m33.9968 505.0368l339.6608-203.776V329.2672L542.8224 465.3056v439.04z" p-id="1575"></path></svg>
|
After Width: | Height: | Size: 1.1 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1618221398745" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5067" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M817.92 135.893333c7.808 0 15.232 3.242667 20.778667 9.002667a31.146667 31.146667 0 0 1 8.661333 21.674667v564.224c0 8.106667-3.114667 15.786667-8.661333 21.674666a28.544 28.544 0 0 1-20.736 9.002667H330.581333a28.8 28.8 0 0 1-20.736-9.002667 30.848 30.848 0 0 1-8.661333-21.674666V166.570667c0-8.106667 3.114667-15.786667 8.661333-21.674667a28.330667 28.330667 0 0 1 20.736-9.002667h487.381334z m0-50.56H330.624c-42.88 0-78.08 36.48-78.08 81.109334v564.266666c0 44.629333 35.2 81.109333 78.08 81.109334h487.381333c42.88 0 78.037333-36.48 78.037334-81.109334V166.4C896.085333 121.898667 860.970667 85.333333 817.92 85.333333z" p-id="5068"></path><path d="M767.36 708.053333H381.056c-13.653333 0-24.746667-11.946667-24.746667-26.496 0-14.592 11.093333-26.453333 24.746667-26.453333h386.432c13.653333 0 24.746667 11.861333 24.746667 26.453333 0 14.549333-11.093333 26.453333-24.874667 26.453334z m-107.093333-265.002666h-68.138667V398.08h68.181333c13.653333 0 24.746667-11.904 24.746667-26.453333 0-14.677333-11.093333-26.496-24.746667-26.496H602.453333l64.554667-69.205334a27.946667 27.946667 0 0 0 0-37.546666 23.552 23.552 0 0 0-34.986667 0L567.381333 307.626667l-64.64-69.205334a23.594667 23.594667 0 0 0-35.029333 0 27.946667 27.946667 0 0 0 0 37.546667l64.554667 69.205333h-57.770667c-13.653333 0-24.746667 11.946667-24.746667 26.453334 0 14.72 11.093333 26.496 24.746667 26.496h68.181333v44.928H474.453333c-13.653333 0-24.746667 11.946667-24.746666 26.453333 0 14.72 11.093333 26.538667 24.746666 26.538667h68.181334v27.733333a24.746667 24.746667 0 1 0 49.493333 0v-27.733333h68.138667c13.653333 0 24.746667-11.946667 24.746666-26.496 0-14.677333-11.093333-26.453333-24.746666-26.453334v-0.042666z" p-id="5069"></path><path d="M829.525333 882.133333H177.92V174.378667c0-14.762667-11.221333-26.794667-25.002667-26.794667-13.738667 0-24.96 12.032-24.96 26.794667v735.189333c0 14.805333 11.221333 26.794667 24.96 26.794667a25.301333 25.301333 0 0 0 5.290667-0.554667h671.274667c13.781333 0 24.96-11.989333 24.96-26.794667 0-14.762667-11.221333-26.88-24.96-26.88z" p-id="5070"></path></svg>
|
After Width: | Height: | Size: 2.4 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1617878067266" class="icon" viewBox="0 0 1088 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="18832" xmlns:xlink="http://www.w3.org/1999/xlink" width="212.5" height="200"><defs><style type="text/css"></style></defs><path d="M768.149096 256.014491H448.009723a32.008484 32.008484 0 0 1 0-64.016969h320.139373a32.008484 32.008484 0 0 1 0 64.016969z m0 192.269022H448.009723a32.008484 32.008484 0 0 1 0-64.016969h320.139373a32.008484 32.008484 0 0 1 0 64.016969z" p-id="18833"></path><path d="M928.027931 607.998761a32.008484 32.008484 0 0 1-32.008485-32.008484v-512.026692H320.030315v512.026692a32.008484 32.008484 0 0 1-64.016969 0V32.009629A32.008484 32.008484 0 0 1 288.294475 0.001145h639.733456a32.008484 32.008484 0 0 1 32.008484 32.008484v543.980648a32.008484 32.008484 0 0 1-32.008484 32.008484z" p-id="18834"></path><path d="M288.294475 607.998761H128.033937a32.008484 32.008484 0 0 1-32.008484-32.008484V159.989038a32.008484 32.008484 0 0 1 32.008484-32.008484h160.260538a32.008484 32.008484 0 0 1 32.008484 32.008484v416.001239a32.008484 32.008484 0 0 1-32.008484 32.008484zM159.987893 543.981792h96.025453V191.997522H159.987893z" p-id="18835"></path><path d="M1056.007339 1024H32.008484A32.008484 32.008484 0 0 1 0 991.991516v-416.001239a32.008484 32.008484 0 0 1 32.008484-32.008485h405.368097a31.953955 31.953955 0 0 1 30.318087 21.811574l35.389279 106.058777h113.856414l35.389279-106.113306a31.899426 31.899426 0 0 1 30.318087-21.811573h373.359612a32.008484 32.008484 0 0 1 32.008485 32.008484v416.001239a32.008484 32.008484 0 0 1-32.008485 32.008484zM64.016969 959.983031H1024.053384V607.998761h-318.285389l-35.389278 106.113306a31.899426 31.899426 0 0 1-30.318088 21.811574H480.072736a31.899426 31.899426 0 0 1-30.372616-21.811574l-35.334749-106.113306H64.016969z" p-id="18836"></path></svg>
|
After Width: | Height: | Size: 1.9 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1617880094595" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1704" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M826.55232 438.82496H767.4368l5.4272-310.04672c0-13.18912-22.58944-17.92-35.78368-17.92H140.66688c-13.184 0-29.824 16.64512-29.824 29.83936v328.2432H289.792c13.18912 0 29.824 28.57984 29.824 41.77408V588.288h119.51616v59.6736H289.792c1.13664 4.77696-29.81888-16.64512-29.81888-29.83936v-89.50272H110.83776v238.70464c0-1.13152 16.64 0 29.824 0h298.4704v59.68384h-328.2944c-26.368 0-59.64288-33.28-59.64288-59.68384V110.87872C51.2 84.48 84.48 51.2 110.83776 51.2h656.07168c26.37312 0 59.64288 33.28 59.64288 59.67872v327.94624z m-172.96384-238.43328c13.18912 0 23.8592 16.64512 23.8592 29.84448s-16.63488 29.83424-29.824 29.83424H230.13376c-13.18912 0-29.824-16.64512-29.824-29.83424s10.6752-29.84448 23.8592-29.84448h429.42464z m-5.9648 149.19168c13.184 0 29.824 16.64 29.824 29.83936s-16.64 29.84448-29.824 29.84448H230.13376c-14.11072 3.4816-34.69312 1.78176-29.824-29.84448 2.01216-13.04064 16.63488-29.83936 29.824-29.83936h417.48992zM538.78784 487.3728h382.87872a51.2512 51.2512 0 0 1 51.13344 51.11296v383.15008a51.2 51.2 0 0 1-51.13344 51.16416h-382.87872a51.2 51.2 0 0 1-51.13856-51.16416v-383.15008a51.2 51.2 0 0 1 51.13856-51.11296z m-14.75072 423.62368a25.43616 25.43616 0 0 0 25.37984 25.40032h361.61536a25.44128 25.44128 0 0 0 25.37984-25.40032v-361.86112a25.43616 25.43616 0 0 0-25.37984-25.35936h-361.61536a25.43616 25.43616 0 0 0-25.37984 25.35936v361.86112z m348.32896-282.84928a12.18048 12.18048 0 1 1 0 24.2688h-92.70272a12.1856 12.1856 0 1 1 0-24.2688h92.70272z m0 157.76256a12.1856 12.1856 0 1 1 0 24.2688h-92.70272a12.1856 12.1856 0 1 1 0-24.2688h92.70272z m0 48.54784a12.18048 12.18048 0 1 1 0 24.2688h-92.70272a12.1856 12.1856 0 1 1 0-24.2688h92.70272z m-246.44608-204.4672v-40.7296a12.18048 12.18048 0 1 1 24.25856 0v40.7296h40.69888a12.13952 12.13952 0 0 1 0 24.27392h-40.69888v40.72448a12.18048 12.18048 0 1 1-24.25856 0v-40.72448h-40.704a12.13952 12.13952 0 1 1 0-24.27392h40.704z m40.96 145.72544h0.0512a12.18048 12.18048 0 1 1 17.21344 17.23904l-28.81024 28.77952 28.81024 28.83584a12.21632 12.21632 0 0 1-17.36192 17.18272l-28.7744-28.83072-28.81536 28.83072a12.18048 12.18048 0 1 1-17.21856-17.2288l29.1072-28.84096-29.1072-28.77952a12.20096 12.20096 0 1 1 17.3056-17.18784l28.7744 28.78464z m0 0" p-id="1705"></path></svg>
|
After Width: | Height: | Size: 2.6 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1632389997069" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2441" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M394.666667 106.666667h448a74.666667 74.666667 0 0 1 74.666666 74.666666v448a74.666667 74.666667 0 0 1-74.666666 74.666667H394.666667a74.666667 74.666667 0 0 1-74.666667-74.666667V181.333333a74.666667 74.666667 0 0 1 74.666667-74.666666z m0 64a10.666667 10.666667 0 0 0-10.666667 10.666666v448a10.666667 10.666667 0 0 0 10.666667 10.666667h448a10.666667 10.666667 0 0 0 10.666666-10.666667V181.333333a10.666667 10.666667 0 0 0-10.666666-10.666666H394.666667z m245.333333 597.333333a32 32 0 0 1 64 0v74.666667a74.666667 74.666667 0 0 1-74.666667 74.666666H181.333333a74.666667 74.666667 0 0 1-74.666666-74.666666V394.666667a74.666667 74.666667 0 0 1 74.666666-74.666667h74.666667a32 32 0 0 1 0 64h-74.666667a10.666667 10.666667 0 0 0-10.666666 10.666667v448a10.666667 10.666667 0 0 0 10.666666 10.666666h448a10.666667 10.666667 0 0 0 10.666667-10.666666v-74.666667z" p-id="2442"></path></svg>
|
After Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1617880555359" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2098" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M936.33 732.203c-9.872-10.814-23.349-17.123-37.953-17.778-14.849-0.451-28.613 4.383-39.427 14.255-0.215 0.195-0.282 0.476-0.492 0.673l-144.256-83.448c0.625-2.939 1.994-5.635 2.133-8.697 0.676-14.624-4.383-28.634-14.255-39.448-20.379-22.284-55.096-23.841-77.401-3.523-22.305 20.4-23.882 55.096-3.502 77.421 7.932 8.707 18.534 13.533 29.878 15.799l17.069 160.864c-5.049 2.466-10.138 4.9-14.422 8.82-23.964 21.875-25.643 59.192-3.769 83.156 11.593 12.699 27.507 19.13 43.483 19.13 14.173 0 28.408-5.08 39.673-15.361 11.613-10.61 18.393-25.111 19.109-40.8 0.264-5.807-1.162-11.301-2.527-16.782l114.101-74.264c8.695 6.485 18.549 11.122 29.627 11.618 0.86 0.041 1.7 0.082 2.56 0.082 13.682 0 26.688-5.039 36.867-14.337 22.307-20.359 23.863-55.096 3.504-77.38z m-92.616 24.03c-2.588 10.576-2.855 21.552 0.968 31.893l-109.7 71.397c-9.88-10.018-22.696-16.007-36.719-17.202l-16.624-156.665a54.739 54.739 0 0 0 16.898-10.515c0.637-0.579 0.891-1.421 1.498-2.025l143.679 83.117z m-206.233-122.63c0.287-6.431 3.072-12.412 7.824-16.754a24.194 24.194 0 0 1 16.304-6.308c6.575 0 13.108 2.663 17.86 7.865 4.342 4.752 6.575 10.937 6.288 17.41-0.287 6.431-3.072 12.371-7.824 16.713h-0.021c-4.793 4.342-11.081 6.964-17.409 6.308-6.431-0.287-12.371-3.072-16.713-7.824-4.364-4.752-6.596-10.937-6.309-17.41z m74.963 287.851c-11.47 10.528-29.432 9.708-39.898-1.802-10.487-11.511-9.688-29.412 1.802-39.898 5.243-4.793 11.961-7.414 19.028-7.414 0.43 0 0.86 0.041 1.29 0.041 7.537 0.328 14.501 3.605 19.581 9.176 5.1 5.571 7.701 12.781 7.353 20.318-0.328 7.536-3.585 14.5-9.156 19.579z m199.738-134.483c-4.772 4.342-10.61 6.185-17.389 6.308-6.452-0.328-12.391-3.113-16.754-7.865-8.971-9.831-8.275-25.152 1.557-34.123a24.057 24.057 0 0 1 16.263-6.308c6.554 0 13.108 2.663 17.86 7.865 4.363 4.752 6.595 10.937 6.308 17.369-0.287 6.472-3.072 12.412-7.845 16.754z" p-id="2099"></path><path d="M151.81 219.064v18.751c65.713 49.346 192.006 82.731 337.007 82.731s271.291-33.385 337.005-82.731v-18.751c-57.667 50.36-186.873 85.432-337.005 85.432-150.134 0-279.341-35.072-337.007-85.432zM488.817 63.779c-221.567 0-401.197 71.858-401.197 160.48V721.72h2.025c20.146 81.105 191.141 144.432 399.172 144.432 24.529 0 32.095-2.058 55.411-3.746l0.023-31.962c-23.252 1.598-30.838 3.61-55.434 3.61-203.85 0-369.102-57.477-369.102-128.382V608.14c61.194 57.349 203.387 97.532 369.102 97.532 20.51 0 40.664-0.614 60.344-1.802l1.249-32.051a1057.38 1057.38 0 0 1-61.594 1.779c-203.85 0-369.102-57.477-369.102-128.382v-97.555c61.194 57.349 203.387 97.555 369.102 97.555s307.908-40.206 369.079-97.555v175.217l32.095-0.545V224.259c0.001-88.622-179.609-160.48-401.173-160.48z m369.079 320.957c0 70.908-165.229 128.382-369.079 128.382s-369.102-57.474-369.102-128.382v-97.555c61.194 57.352 203.387 97.555 369.102 97.555s307.908-40.203 369.079-97.555v97.555z m-369.079-32.095c-203.85 0-369.102-57.477-369.102-128.382 0-70.908 165.252-128.385 369.102-128.385s369.079 57.477 369.079 128.385c0 70.905-165.229 128.382-369.079 128.382z" p-id="2100"></path></svg>
|
After Width: | Height: | Size: 3.3 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1619519603943" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2064" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M512 64C262.4 64 64 262.4 64 512s198.4 448 448 448 448-198.4 448-448-198.4-448-448-448z m0 64c96 0 185.6 32 249.6 96L217.6 768C160 697.6 128 608 128 512c0-211.2 172.8-384 384-384z m0 768c-96 0-179.2-32-243.2-89.6l537.6-537.6c57.6 64 89.6 147.2 89.6 243.2 0 211.2-172.8 384-384 384z" p-id="2065"></path></svg>
|
After Width: | Height: | Size: 685 B |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1617877444762" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15703" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M509.93242628 444.74945473c82.85751593 0 150.02079234 67.13107507 150.02079236 149.98537081 0 82.85751593-67.16381295 150.02079234-150.02079236 150.02079235-82.8215584 0-149.98537081-67.16381295-149.98537081-150.02079235C359.94759199 511.88052927 427.11086789 444.74945473 509.93242628 444.74945473z" p-id="15704"></path></svg>
|
After Width: | Height: | Size: 705 B |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1633746443542" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12465" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M452.8128 54.6816H79.4624a30.72 30.72 0 0 0-30.72 30.72v853.1968a30.72 30.72 0 0 0 30.72 30.72h373.3504a30.72 30.72 0 0 0 30.72-30.72V85.4016a30.72 30.72 0 0 0-30.72-30.72z m-30.72 853.1968H110.1824V116.1216h311.9104z" p-id="12466" fill="#4FACD4"></path><path d="M192.7168 274.8416h146.8416a30.72 30.72 0 0 0 0-61.44H192.7168a30.72 30.72 0 0 0 0 61.44zM192.7168 410.8288h146.8416a30.72 30.72 0 0 0 0-61.44H192.7168a30.72 30.72 0 0 0 0 61.44zM192.7168 547.6352h146.8416a30.72 30.72 0 0 0 0-61.44H192.7168a30.72 30.72 0 0 0 0 61.44zM250.88 674.2016a52.8384 52.8384 0 1 0 52.8384 52.8384 52.6336 52.6336 0 0 0-52.8384-52.8384zM944.7424 54.6816H571.1872a30.72 30.72 0 0 0-30.72 30.72v853.1968a30.72 30.72 0 0 0 30.72 30.72h373.5552a30.72 30.72 0 0 0 30.72-30.72V85.4016a30.72 30.72 0 0 0-30.72-30.72z m-30.72 853.1968H601.9072V116.1216h312.1152z" p-id="12467" fill="#4FACD4"></path><path d="M684.4416 274.8416h146.8416a30.72 30.72 0 0 0 0-61.44h-146.8416a30.72 30.72 0 0 0 0 61.44zM684.4416 410.8288h146.8416a30.72 30.72 0 0 0 0-61.44h-146.8416a30.72 30.72 0 0 0 0 61.44zM684.4416 547.6352h146.8416a30.72 30.72 0 0 0 0-61.44h-146.8416a30.72 30.72 0 0 0 0 61.44zM773.12 674.2016a52.8384 52.8384 0 1 0 52.8384 52.8384 52.6336 52.6336 0 0 0-52.8384-52.8384z" p-id="12468" fill="#4FACD4"></path></svg>
|
After Width: | Height: | Size: 1.6 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1633746280970" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9416" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M514.432 128a62.08 62.08 0 0 1 42.752 16.896 56.256 56.256 0 0 1 17.728 40.704v652.8c0 31.808-27.072 57.6-60.48 57.6s-60.544-25.792-60.544-57.6V185.6c0-15.296 6.4-29.952 17.728-40.704A62.08 62.08 0 0 1 514.432 128z m461.76 0c26.496 0 48 20.48 47.808 45.632v651.904a44.8 44.8 0 0 1-17.792 35.584 49.792 49.792 0 0 1-40.192 9.152l-293.056-87.168a56.832 56.832 0 0 1-32.448-50.752V267.904a57.6 57.6 0 0 1 44.032-55.04c-0.192 0.192-0.512 0.192-1.024 0.32l282.752-84.288c3.2-0.448 6.464-0.896 9.92-0.896zM47.808 128c3.456 0 6.72 0.448 9.92 0.96L340.48 213.184c-0.384-0.128-0.768-0.128-0.96-0.256 25.408 6.72 44.032 28.8 44.032 54.976v464.448a56.832 56.832 0 0 1-32.448 50.752l-293.12 87.168a49.792 49.792 0 0 1-40.192-9.216 44.8 44.8 0 0 1-17.728-35.584V173.632a44.288 44.288 0 0 1 13.952-32.32A48.896 48.896 0 0 1 47.872 128z" p-id="9417" fill="#AA8DD9"></path></svg>
|
After Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1617880577563" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2229" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M827.9552 490.0864L757.76 530.7392l84.992 149.6064-35.1232 64.6656h-164.4032v79.4112h210.5856L936.96 680.3456l-109.0048-190.2592zM478.8224 161.28h64.6656l81.2544 140.3904 70.1952-40.6528-105.3184-181.0432H430.7968L325.5296 262.8608l70.1952 40.6528L478.8224 161.28z m-301.056 519.0656l84.992-147.7632-70.2464-40.6528-109.0048 188.416 83.1488 144.0768h212.4288v-79.4112H212.8384l-35.072-64.6656z m0 0" p-id="2230"></path><path d="M776.2432 401.408c29.5424 24.0128 72.0384 24.0128 99.7376-3.6864 29.5424-29.5424 29.5424-75.7248 0-105.3184-29.5424-29.5424-75.7248-29.5424-105.3184 0-16.64 16.64-24.0128 40.6528-20.3264 64.6656l-158.8736 88.6784-3.6864-3.6864c-42.496-42.496-112.6912-42.496-157.0304 0l-3.6864 3.6864-158.8224-88.6784c3.6864-22.1696-3.6864-46.1824-20.3264-64.6656-29.5424-29.5424-75.7248-29.5424-105.3184 0-29.5424 29.5424-29.5424 75.7248 0 105.3184 27.6992 27.6992 72.0384 27.6992 99.7376 3.6864l160.7168 88.6784c-11.1104 36.9664-1.8432 79.4112 27.6992 109.0048 14.7968 14.7968 33.2288 24.0128 53.5552 29.5424v179.2c-9.216 3.6864-18.4832 9.216-27.6992 16.64-29.5424 29.5424-29.5424 75.7248 0 105.2672s75.7248 29.5424 105.3184 0c29.5424-29.5424 29.5424-75.7248 0-105.2672-7.3728-7.3728-16.64-12.9536-27.6992-16.64v-179.2c18.4832-3.6864 36.9664-14.7968 53.5552-29.5424 29.5424-29.5424 38.8096-70.1952 27.6992-109.0048l160.768-88.6784z m0 0" p-id="2231"></path></svg>
|
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 30 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1619161189850" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2649" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M819.2 870.4H204.8c-56.32 0-102.4-46.08-102.4-102.4V256c0-56.32 46.08-102.4 102.4-102.4h614.4c56.32 0 102.4 46.08 102.4 102.4v512c0 56.32-46.08 102.4-102.4 102.4zM204.8 256v512h614.4V256H204.8z" fill="" p-id="2650"></path><path d="M542.72 665.6h-10.24c-15.36-5.12-30.72-15.36-40.96-30.72L435.2 501.76l-87.04 97.28c-20.48 20.48-51.2 20.48-71.68 5.12-20.48-20.48-20.48-51.2-5.12-71.68l138.24-153.6c10.24-15.36 30.72-20.48 46.08-20.48 15.36 5.12 30.72 15.36 40.96 30.72l61.44 133.12 122.88-133.12c20.48-20.48 51.2-20.48 71.68-5.12 20.48 20.48 20.48 51.2 5.12 71.68l-174.08 194.56c-15.36 10.24-30.72 15.36-40.96 15.36z" fill="" p-id="2651"></path></svg>
|
After Width: | Height: | Size: 1.0 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1617876209511" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4338" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M109.7 590.8c-22.1 0-40-17.9-40-40v-6.4c0.2-11.3 0.8-22.7 1.8-33.9 6.1-65.6 27.7-129.8 62.3-185.8 33.8-54.5 80.3-101.7 134.4-136.3 18.6-11.9 43.3-6.5 55.3 12.1s6.5 43.3-12.1 55.3C219.6 314.5 161.2 410 151.2 517.9c-0.9 9.1-1.4 18.4-1.5 27.6v5.3c0 22.1-17.9 40-40 40zM499.7 980.8c-79.6 0-157.4-21.9-224.9-63.4-18.8-11.6-24.7-36.2-13.1-55 11.6-18.8 36.2-24.7 55-13.1 54.9 33.8 118.2 51.6 183 51.6 88.6 0 173.1-33.2 238-93.4 16.2-15 41.5-14.1 56.5 2.1s14.1 41.5-2.1 56.5c-79.8 74-183.6 114.7-292.4 114.7zM880.1 504.9c-18.3 0-34.8-12.6-39-31.2-21.4-95.3-82.6-177.9-167.7-226.7-19.2-11-25.8-35.4-14.8-54.6s35.4-25.8 54.6-14.8c104.6 59.9 179.7 161.5 206 278.6 4.8 21.6-8.7 43-30.2 47.8-3 0.6-6 0.9-8.9 0.9zM499.7 282c-66 0-120-54-120-120s54-120 120-120 120 54 120 120-54 120-120 120zM158.1 862c-66 0-120-54-120-120s54-120 120-120 120 54 120 120-54 120-120 120zM871.7 787.8c-66 0-120-54-120-120s54-120 120-120 120 54 120 120-54 120-120 120z" p-id="4339"></path></svg>
|
After Width: | Height: | Size: 1.3 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1619161235402" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2782" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M727.2 374H292.6c-13.5 0-24.5-11-24.5-24.5v-1.1c0-13.5 11-24.5 24.5-24.5h434.5c13.5 0 24.5 11 24.5 24.5v1.1c0 13.5-11 24.5-24.4 24.5zM654.6 98.2H368.1c-11.1 0-20.1-9.1-20.1-20.1v-9.8c0-11.1 9.1-20.1 20.1-20.1h286.5c11.1 0 20.1 9.1 20.1 20.1V78c0 11.1-9 20.2-20.1 20.2zM727.2 547H292.6c-13.5 0-24.5-11-24.5-24.5v-1.1c0-13.5 11-24.5 24.5-24.5h434.5c13.5 0 24.5 11 24.5 24.5v1.1c0 13.5-11 24.5-24.4 24.5zM727.2 714.4H292.6c-13.5 0-24.5-11-24.5-24.5v-1.1c0-13.5 11-24.5 24.5-24.5h434.5c13.5 0 24.5 11 24.5 24.5v1.1c0 13.5-11 24.5-24.4 24.5z" fill="#686868" p-id="2783"></path><path d="M822.7 975.6H199.6c-62.3 0-113-50.7-113-113V162c0-62.3 50.7-113 113-113h95.3l42.3 87v0.8h350.2v-0.8l42.3-87h92.9c62.3 0 113 50.7 113 113v700.6c0.1 62.3-50.6 113-112.9 113zM199.6 99c-34.7 0-63 28.3-63 63v700.6c0 34.7 28.3 63 63 63h623.1c34.7 0 63-28.3 63-63V162c0-34.7-28.3-63-63-63H761l-24.1 49.6c-3.3 21.6-22 38.2-44.5 38.2H332.2c-22.5 0-41.2-16.6-44.5-38.2L263.6 99h-64z" fill="#686868" p-id="2784"></path></svg>
|
After Width: | Height: | Size: 1.3 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1617877587265" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15833" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M874.538573 127.922397H862.390562C734.516757 127.922397 610.479167 85.724041 559.329645 13.475342a54.985736 54.985736 0 0 0-38.362141-13.42675h-21.099178C478.769148 0.048592 463.424292 5.802913 458.30934 17.311556 409.077925 87.002779 290.155287 127.922397 159.084637 127.922397H146.297256a58.82195 58.82195 0 0 0-51.149521 59.461319v351.013593A526.840075 526.840075 0 0 0 502.425802 1023.039028a26.21413 26.21413 0 0 0 14.066119 0A526.200706 526.200706 0 0 0 926.327464 549.266583a30.689713 30.689713 0 0 0 0-12.787381V187.383716a56.903843 56.903843 0 0 0-51.149522-59.461319zM862.390562 524.97056v9.590535A462.263803 462.263803 0 0 1 509.458861 959.102126 462.263803 462.263803 0 0 1 159.084637 536.479202V199.531727A441.164626 441.164626 0 0 0 505.622647 63.985494h8.951167c63.936902 81.839235 196.925659 134.906864 347.177379 135.546233z" p-id="15834"></path><path d="M382.863795 351.701555A127.873805 127.873805 0 0 0 478.769148 474.460407V831.228322a31.968451 31.968451 0 0 0 31.968451 31.968451 31.968451 31.968451 0 0 0 31.968452-31.968451v-63.936903h63.936902a31.968451 31.968451 0 0 0 31.968451-31.968451 31.968451 31.968451 0 0 0-31.968451-31.968451H542.706051v-63.936902h63.936902a31.968451 31.968451 0 0 0 31.968451-31.968451A31.968451 31.968451 0 0 0 606.642953 575.480712H542.706051V474.460407A127.873805 127.873805 0 1 0 382.863795 351.701555z m191.810707 0a63.936902 63.936902 0 1 1-63.936903-63.936903 63.936902 63.936902 0 0 1 63.936903 63.936903z" p-id="15835"></path></svg>
|
After Width: | Height: | Size: 1.8 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1618310470844" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7840" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M852 261.2v-78.5H732v-110H292v110H172v78.5H64v690h896v-690H852z m58 640H114v-590h108v-78.5h120v-110h340v110h120v78.5h108v590zM245 474.8h50v319.5h-50V474.8z m161.3 0h50v319.5h-50V474.8z m161.4 0h50v319.5h-50V474.8z m161.3 0h50v319.5h-50V474.8z" fill="" p-id="7841"></path></svg>
|
After Width: | Height: | Size: 654 B |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1619161122519" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2517" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M423.300438 484.294258L136.046395 334.422584a76.46514 76.46514 0 0 0-34.664197-8.666049 47.663271 47.663271 0 0 0-49.702341 48.937689v405.265243a105.521893 105.521893 0 0 0 60.407461 84.876305l287.254042 150.126558a80.543281 80.543281 0 0 0 34.409313 8.411166 47.663271 47.663271 0 0 0 49.702341-48.93769V569.425448A105.267009 105.267009 0 0 0 423.300438 484.294258z m2.803721 410.108035a35.173964 35.173964 0 0 1-36.448383 35.938616 57.858623 57.858623 0 0 1-25.48838-6.372095l-211.29867-110.109802a76.46514 76.46514 0 0 1-44.094898-61.936764V454.472854a34.919081 34.919081 0 0 1 36.448384-35.938616 54.545133 54.545133 0 0 1 25.48838 6.372095L381.754378 535.271018a76.46514 76.46514 0 0 1 44.349781 62.191648zM970.79084 779.959467V374.694224a47.918154 47.918154 0 0 0-50.97676-49.192573 80.798165 80.798165 0 0 0-34.409313 8.666049L598.660492 484.294258a105.521893 105.521893 0 0 0-61.172112 85.386073v405.265243a47.663271 47.663271 0 0 0 50.97676 48.937689 76.46514 76.46514 0 0 0 34.664197-8.666049l287.254043-150.381442A105.267009 105.267009 0 0 0 970.79084 779.959467z m-57.603739-28.037219A76.46514 76.46514 0 0 1 868.83732 814.113896l-211.043786 110.109801a56.839087 56.839087 0 0 1-25.48838 6.372095 35.173964 35.173964 0 0 1-36.448384-35.938615V597.462666A76.46514 76.46514 0 0 1 639.4419 535.271018l210.788903-110.364685a53.780482 53.780482 0 0 1 25.48838-6.372095 34.919081 34.919081 0 0 1 36.448383 35.938616V751.922248z m-25.48838-581.644831L566.290249 12.249461a136.872601 136.872601 0 0 0-58.623274-12.234423 142.734928 142.734928 0 0 0-62.446531 13.508842L120.753367 178.433698a57.093971 57.093971 0 0 0-35.173965 48.427922 54.290249 54.290249 0 0 0 34.919081 47.408387L441.906955 433.317498a136.107949 136.107949 0 0 0 58.623274 12.234423 141.715393 141.715393 0 0 0 62.446531-14.528377l324.721961-164.400051a56.32932 56.32932 0 0 0 34.664197-48.93769 55.054901 55.054901 0 0 0-34.91908-47.408386z m-116.481896 82.837235l-226.336815 114.69771a97.620495 97.620495 0 0 1-43.330246 9.4307 90.738633 90.738633 0 0 1-40.526524-8.666049l-224.552628-110.109802a38.23257 38.23257 0 0 1-25.48838-33.134894 39.506989 39.506989 0 0 1 25.48838-33.899545L462.807427 76.480178a103.227939 103.227939 0 0 1 43.585129-9.4307 95.836309 95.836309 0 0 1 41.036292 9.4307l224.042861 110.109802a38.23257 38.23257 0 0 1 24.213961 33.389778 38.997221 38.997221 0 0 1-25.48838 33.899545z" fill="" p-id="2518"></path></svg>
|
After Width: | Height: | Size: 2.7 KiB |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1617881405978" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4872" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M397.4 736.2h-79.9c-4.4 0-8 3.6-8 8v79.9c0 4.4 3.6 8 8 8h79.9c4.4 0 8-3.6 8-8v-79.9c0-4.5-3.6-8-8-8z m0-147.9h-79.9c-4.4 0-8 3.6-8 8v79.9c0 4.4 3.6 8 8 8h79.9c4.4 0 8-3.6 8-8v-79.9c0-4.4-3.6-8-8-8z m0-147.9h-79.9c-4.4 0-8 3.6-8 8v79.9c0 4.4 3.6 8 8 8h79.9c4.4 0 8-3.6 8-8v-79.9c0-4.4-3.6-8-8-8z m328 511.3c-13.6 0-27.4-1.2-40.8-3.6l-1.4-0.3c-10.4-1.9-18.8-10.2-20.7-20.7l-6.7-36.5c-14.8-6.1-28.8-14.2-41.6-24.2l-35 12.4c-2.8 1-5.7 1.5-8.6 1.5-7.6 0-14.7-3.3-19.6-9.1l-0.9-1c-17.8-21.1-31.6-44.9-40.9-70.9l-0.5-1.4c-3.5-9.9-0.5-21.3 7.5-28.2l28.3-24.2c-1-7.8-1.6-15.9-1.6-24s0.5-16.2 1.6-24l-28.3-24.2c-8.1-6.9-11.1-18.3-7.5-28.2l0.5-1.3c9.3-25.9 23.1-49.8 40.9-70.9l0.9-1.1c4.8-5.7 12-9.1 19.6-9.1 2.9 0 5.8 0.5 8.6 1.5l35 12.4c12.8-9.9 26.8-18 41.6-24.2l6.7-36.5c1.9-10.4 10.2-18.7 20.7-20.7l1.3-0.2c13.4-2.4 27.1-3.6 40.8-3.6 13.8 0 27.5 1.2 40.8 3.6l1.4 0.3c10.4 1.9 18.8 10.2 20.7 20.7l6.7 36.3c15 6.2 29.1 14.3 42 24.3l34.7-12.3c2.8-1 5.7-1.5 8.6-1.5 7.6 0 14.7 3.3 19.6 9.1l0.9 1c17.9 21.1 31.6 44.9 40.9 70.9l0.5 1.3c3.6 10 0.5 21.4-7.5 28.2l-27.9 23.9c1.1 8.1 1.6 16.3 1.6 24.4 0 8.1-0.5 16.3-1.6 24.4l27.9 23.9c8.1 7 11.1 18.3 7.5 28.2l-0.5 1.3c-9.3 25.9-23.1 49.8-40.9 70.9l-0.9 1.1c-4.8 5.7-12 9.1-19.6 9.1-2.9 0-5.8-0.5-8.6-1.5l-34.7-12.3c-12.9 9.9-26.9 18.1-42 24.3l-6.7 36.3c-1.9 10.4-10.2 18.7-20.7 20.7l-1.3 0.2c-13.4 2.2-27.2 3.5-40.8 3.5zM712.9 896c4.1 0.3 8.3 0.4 12.4 0.4s8.3-0.1 12.4-0.4l8.4-45.8 24-9c13-4.9 25.2-11.9 36.1-20.9L826 804l43.7 15.5c4.7-6.9 8.8-14.1 12.4-21.5L847 767.9l4.2-25.3c1.1-7 1.7-14 1.7-21s-0.6-14.1-1.7-21l-4.1-25.2 35.2-30.1c-3.7-7.5-7.8-14.7-12.4-21.5L826 639.3 806.3 623c-10.9-8.9-23-15.9-36.1-20.9l-24-9-8.4-45.8c-4.1-0.3-8.3-0.4-12.4-0.4s-8.3 0.1-12.4 0.4l-8.4 45.9-23.9 9c-12.9 4.9-25 11.9-35.8 20.8l-19.8 16.3-44.1-15.6c-4.7 6.9-8.8 14.1-12.4 21.5l35.6 30.4-4.1 25.2c-1.1 6.7-1.7 13.7-1.7 20.8 0 6.8 0.6 13.8 1.7 20.8l4.1 25.2-35.6 30.4c3.7 7.5 7.8 14.7 12.4 21.5l44-15.7 19.8 16.3c10.8 8.9 22.8 15.9 35.8 20.8l23.8 9.2 8.5 45.9z" p-id="4873"></path><path d="M725.4 682.4c17.6 0 32 14.4 32 32.1s-14.3 32.1-32 32.1-32-14.4-32-32.1 14.3-32.1 32-32.1m0-56c-48.6 0-88 39.4-88 88.1s39.4 88.1 88 88.1 88-39.4 88-88.1-39.5-88.1-88-88.1z" p-id="4874"></path><path d="M474.3 889H235.5V366.9l278.9-213.5 278.6 216v92.4c0 4.4 3.6 8 8 8h53c4.4 0 8-3.6 8-8v-38.9l38.8 30.1c3.5 2.7 8.5 2.1 11.2-1.4l34.3-44.2c2.7-3.5 2.1-8.5-1.4-11.2L534.2 77.7c-11.5-8.9-27.5-8.9-39-0.1l-416 318.5c-3.5 2.7-4.2 7.7-1.5 11.2l34 44.4c2.7 3.5 7.7 4.2 11.2 1.5l43.7-33.5V921c0 17.7 14.3 32 32 32h275.7c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z" p-id="4875"></path></svg>
|
After Width: | Height: | Size: 2.9 KiB |
|
@ -0,0 +1 @@
|
|||
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 48 48"><defs><style>.cls-1{fill:none;}.cls-2{clip-path:url(#clip-path);}</style><clipPath id="clip-path"><rect class="cls-1" x="1" y="2.84" width="46" height="42.33"/></clipPath></defs><title>画板 1</title><g class="cls-2"><path d="M6,37.68A5,5,0,0,1,1,32.74V28.67a1.65,1.65,0,1,1,3.3,0v4.07A1.65,1.65,0,0,0,6,34.39H42.07a1.65,1.65,0,0,0,1.64-1.65v-25a1.65,1.65,0,0,0-1.64-1.65H6A1.65,1.65,0,0,0,4.34,7.79V12A1.65,1.65,0,1,1,1,12V7.79A5,5,0,0,1,6,2.85H42.07A5,5,0,0,1,47,7.79v25a4.94,4.94,0,0,1-4.94,4.94Zm4.94,7.42a1.65,1.65,0,1,1,0-3.29h26.2a1.65,1.65,0,0,1,0,3.29Zm0,0"/></g><path d="M23.52,21.43l-5.71,5.71a1.63,1.63,0,0,1-1.17.49,1.65,1.65,0,0,1-1.16-.49,1.64,1.64,0,0,1,0-2.33l2.9-2.9H3.69a1.65,1.65,0,0,1,0-3.29H18.38l-2.9-2.9a1.65,1.65,0,1,1,2.33-2.33l5.71,5.71A1.65,1.65,0,0,1,23.52,21.43Z"/></svg>
|
After Width: | Height: | Size: 940 B |
|
@ -0,0 +1 @@
|
|||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1617874168481" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2954" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M966.4 731.733333V78.933333H57.6v652.8H469.333333v125.866667H57.6v85.333333h908.8v-85.333333H554.666667v-125.866667h411.733333z m-85.333333-567.466666v204.8H142.933333V164.266667h738.133334zM142.933333 456.533333h738.133334v192H142.933333v-192z" p-id="2955"></path><path d="M627.2 230.4h194.133333v85.333333h-194.133333zM200.533333 230.4h85.333334v85.333333h-85.333334zM627.2 514.133333h194.133333v85.333334h-194.133333zM200.533333 514.133333h85.333334v85.333334h-85.333334z" p-id="2956"></path></svg>
|
After Width: | Height: | Size: 878 B |