update
This commit is contained in:
@@ -1,3 +1,2 @@
|
||||
> 1%
|
||||
last 2 versions
|
||||
not ie <= 8
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
[*.{js,jsx,ts,tsx,vue}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
# 构建预览页面
|
||||
|
||||
# 指定构建模式
|
||||
NODE_ENV=production
|
||||
|
||||
# 标记当前构建方式
|
||||
VUE_APP_BUILD_MODE=PREVIEW
|
||||
|
||||
# 显示源码按钮
|
||||
VUE_APP_SCOURCE_LINK=TRUE
|
||||
|
||||
# 部署路径
|
||||
VUE_APP_PUBLIC_PATH=/d2-admin-start-kit/
|
||||
@@ -0,0 +1,13 @@
|
||||
# 构建预览页面
|
||||
|
||||
# 指定构建模式
|
||||
NODE_ENV=production
|
||||
|
||||
# 标记当前构建方式
|
||||
VUE_APP_BUILD_MODE=PREVIEW
|
||||
|
||||
# 显示源码按钮
|
||||
VUE_APP_SCOURCE_LINK=TRUE
|
||||
|
||||
# 部署路径
|
||||
VUE_APP_PUBLIC_PATH=/
|
||||
@@ -3,6 +3,9 @@ build/
|
||||
tests/
|
||||
node_modules/
|
||||
|
||||
# D2CRUD 演示
|
||||
src/views/demo/d2-crud/
|
||||
|
||||
# node 覆盖率文件
|
||||
coverage/
|
||||
|
||||
|
||||
+12
-1
@@ -13,5 +13,16 @@ module.exports = {
|
||||
},
|
||||
parserOptions: {
|
||||
parser: 'babel-eslint'
|
||||
}
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
files: [
|
||||
'**/__tests__/*.{j,t}s?(x)',
|
||||
'**/tests/unit/**/*.spec.{j,t}s?(x)'
|
||||
],
|
||||
env: {
|
||||
jest: true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
name: Deploy cdn
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
env:
|
||||
SITE: https://cdn.d2.pub/
|
||||
QINIU_BUCKET: d2-cdn
|
||||
DIST_FOLDER: /dist
|
||||
PATH_SUFFIX: /preview
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: '10.x'
|
||||
- name: Download qshell
|
||||
run: |
|
||||
wget http://devtools.qiniu.com/qshell-linux-x86-v2.4.0.zip
|
||||
unzip qshell-linux-x86-v2.4.0.zip
|
||||
mv qshell-linux-x86-v2.4.0 qshell
|
||||
- name: Install packages
|
||||
run: npm i
|
||||
- name: Build
|
||||
run: npm run build:preview
|
||||
- name: CDN login
|
||||
run: ./qshell account ${{ secrets.AK }} ${{ secrets.SK }} GITHUB_ACTION
|
||||
- name: CDN upload
|
||||
run: |
|
||||
REPO=${GITHUB_REPOSITORY//*\//}
|
||||
echo $SITE > cdnrefresh.txt
|
||||
./qshell qupload2 \
|
||||
--src-dir=$GITHUB_WORKSPACE$DIST_FOLDER \
|
||||
--bucket=$QINIU_BUCKET \
|
||||
--key-prefix=$REPO$PATH_SUFFIX/ \
|
||||
--overwrite=true \
|
||||
--check-exists=true \
|
||||
--check-hash=true \
|
||||
--check-size=true \
|
||||
--rescan-local=true \
|
||||
--thread-count=32
|
||||
- name: CDN refresh
|
||||
run: ./qshell cdnrefresh --dirs -i ./cdnrefresh.txt
|
||||
@@ -1,4 +1,4 @@
|
||||
name: Deploy
|
||||
name: Deploy https://d2.pub
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -0,0 +1,21 @@
|
||||
name: Deploy Github
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Build and Deploy
|
||||
uses: JamesIves/github-pages-deploy-action@master
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
|
||||
BRANCH: gh-pages
|
||||
FOLDER: dist
|
||||
BUILD_SCRIPT: npm install && npm run build:github
|
||||
CLEAN: true
|
||||
@@ -1,4 +1,4 @@
|
||||
name: feedback
|
||||
name: Feedback
|
||||
on: [fork, watch, issues]
|
||||
jobs:
|
||||
feedback:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
name: Send message on star
|
||||
name: Star notice
|
||||
|
||||
on:
|
||||
watch:
|
||||
|
||||
+5
-1
@@ -2,6 +2,10 @@
|
||||
node_modules
|
||||
/dist
|
||||
|
||||
# local env files
|
||||
.env.local
|
||||
.env.*.local
|
||||
|
||||
# Log files
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
@@ -14,4 +18,4 @@ yarn-error.log*
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw*
|
||||
*.sw?
|
||||
|
||||
@@ -1,3 +1,12 @@
|
||||
[D2Admin](https://github.com/d2-projects/d2-admin) simplified version of the start template, delete all the sample code in the full version, retain all core functions.
|
||||
[D2Admin](https://github.com/d2-projects/d2-admin) is a fully open source and free enterprise back-end product front-end integration solution, using the latest front-end technology stack, javascript files loading of local first screen less than 60kb, has prepared most of the project preparations, and with a lot of sample code to help the management system agile development.
|
||||
|
||||
[Gitee](https://gitee.com/fairyever/d2-admin-start-kit)
|
||||
[中文](https://github.com/d2-projects/d2-admin/blob/master/README.zh.md) | **English**
|
||||
|
||||
## Preview
|
||||
|
||||
| server | link | server | status |
|
||||
| --- | --- | --- | --- |
|
||||
| d2.pub | [d2.pub/d2-admin-start-kit/preview](https://d2.pub/d2-admin-start-kit/preview) | China server | [](https://github.com/d2-projects/d2-admin-start-kit/actions?query=workflow%3A%22Deploy+https%3A%2F%2Fd2.pub%22) |
|
||||
| cdn.d2.pub | [cdn.d2.pub/d2-admin-start-kit/preview](https://cdn.d2.pub/d2-admin-start-kit/preview) | qiniu CDN | [](https://github.com/d2-projects/d2-admin-start-kit/actions?query=workflow%3A%22Deploy+cdn%22) |
|
||||
| github | [d2-projects.github.io/d2-admin-start-kit](https://d2-projects.github.io/d2-admin-start-kit) | GitHub pages | [](https://github.com/d2-projects/d2-admin-start-kit/actions?query=workflow%3A%22Deploy+Github%22) |
|
||||
| netlify | [d2-admin-start-kit.netlify.com](https://d2-admin-start-kit.netlify.com) | Netlify CDN | [](https://app.netlify.com/sites/d2-admin-start-kit/deploys) |
|
||||
|
||||
+11
-2
@@ -1,3 +1,12 @@
|
||||
[D2Admin](https://github.com/d2-projects/d2-admin) 简化版起始模板,删除所有完整版中的示例代码,保留所有核心功能。
|
||||
[D2Admin](https://github.com/d2-projects/d2-admin) 是一个完全 **开源免费** 的企业中后台产品前端集成方案,使用最新的前端技术栈,小于 60kb 的本地首屏 js 加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助力管理系统敏捷开发。
|
||||
|
||||
[码云镜像](https://gitee.com/fairyever/d2-admin-start-kit)
|
||||
**中文** | [English](https://github.com/d2-projects/d2-admin)
|
||||
|
||||
## 预览
|
||||
|
||||
| 位置 | 链接 | 部署位置 | 状态 |
|
||||
| --- | --- | --- | --- |
|
||||
| d2.pub | [d2.pub/d2-admin-start-kit/preview](https://d2.pub/d2-admin-start-kit/preview) | 中国服务器 | [](https://github.com/d2-projects/d2-admin-start-kit/actions?query=workflow%3A%22Deploy+https%3A%2F%2Fd2.pub%22) |
|
||||
| cdn.d2.pub | [cdn.d2.pub/d2-admin-start-kit/preview](https://cdn.d2.pub/d2-admin-start-kit/preview) | 七牛云 CDN | [](https://github.com/d2-projects/d2-admin-start-kit/actions?query=workflow%3A%22Deploy+cdn%22) |
|
||||
| github | [d2-projects.github.io/d2-admin-start-kit](https://d2-projects.github.io/d2-admin-start-kit) | GitHub pages | [](https://github.com/d2-projects/d2-admin-start-kit/actions?query=workflow%3A%22Deploy+Github%22) |
|
||||
| netlify | [d2-admin-start-kit.netlify.com](https://d2-admin-start-kit.netlify.com) | Netlify CDN | [](https://app.netlify.com/sites/d2-admin-start-kit/deploys) |
|
||||
|
||||
+4
-2
@@ -1,5 +1,7 @@
|
||||
module.exports = {
|
||||
presets: [
|
||||
'@vue/app'
|
||||
]
|
||||
'@vue/cli-plugin-babel/preset'
|
||||
],
|
||||
// 允许两种编码引入方式共存,也就是 common 规范与 es6 规范的共存处理
|
||||
sourceType: 'unambiguous'
|
||||
}
|
||||
|
||||
+165
@@ -0,0 +1,165 @@
|
||||
<babeledit_project version="1.2">
|
||||
<!--
|
||||
|
||||
BabelEdit project file
|
||||
https://www.codeandweb.com/babeledit
|
||||
|
||||
This file contains meta data for all translations, but not the translation texts itself.
|
||||
They are stored in framework-specific message files (.json / .vue / .yaml / .properties)
|
||||
|
||||
-->
|
||||
<preset_collections/>
|
||||
<framework>vue-json</framework>
|
||||
<filename>d2-admin.babel</filename>
|
||||
<source_root_dir></source_root_dir>
|
||||
<folder_node>
|
||||
<name></name>
|
||||
<children>
|
||||
<concept_node>
|
||||
<name>_element</name>
|
||||
<definition_loaded>false</definition_loaded>
|
||||
<description></description>
|
||||
<comment></comment>
|
||||
<default_text></default_text>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>ja-JP</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>zh-CHS</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>zh-CHT</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>_name</name>
|
||||
<definition_loaded>false</definition_loaded>
|
||||
<description></description>
|
||||
<comment></comment>
|
||||
<default_text></default_text>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>ja-JP</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>zh-CHS</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>zh-CHT</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<folder_node>
|
||||
<name>page</name>
|
||||
<children>
|
||||
<folder_node>
|
||||
<name>demo</name>
|
||||
<children>
|
||||
<folder_node>
|
||||
<name>playground</name>
|
||||
<children>
|
||||
<folder_node>
|
||||
<name>locales</name>
|
||||
<children>
|
||||
<concept_node>
|
||||
<name>text</name>
|
||||
<definition_loaded>false</definition_loaded>
|
||||
<description></description>
|
||||
<comment></comment>
|
||||
<default_text></default_text>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>ja-JP</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>zh-CHS</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>zh-CHT</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
</children>
|
||||
</folder_node>
|
||||
</children>
|
||||
</folder_node>
|
||||
</children>
|
||||
</folder_node>
|
||||
</children>
|
||||
</folder_node>
|
||||
</children>
|
||||
</folder_node>
|
||||
<isTemplateProject>false</isTemplateProject>
|
||||
<languages>
|
||||
<language>
|
||||
<code>en-US</code>
|
||||
<source_id></source_id>
|
||||
<source_file>src/locales/en.json</source_file>
|
||||
</language>
|
||||
<language>
|
||||
<code>ja-JP</code>
|
||||
<source_id></source_id>
|
||||
<source_file>src/locales/ja.json</source_file>
|
||||
</language>
|
||||
<language>
|
||||
<code>zh-CHS</code>
|
||||
<source_id></source_id>
|
||||
<source_file>src/locales/zh-chs.json</source_file>
|
||||
</language>
|
||||
<language>
|
||||
<code>zh-CHT</code>
|
||||
<source_id></source_id>
|
||||
<source_file>src/locales/zh-cht.json</source_file>
|
||||
</language>
|
||||
</languages>
|
||||
<translation_files>
|
||||
<translation_file>
|
||||
<file>src/locales/en.json</file>
|
||||
</translation_file>
|
||||
<translation_file>
|
||||
<file>src/locales/ja.json</file>
|
||||
</translation_file>
|
||||
<translation_file>
|
||||
<file>src/locales/zh-chs.json</file>
|
||||
</translation_file>
|
||||
<translation_file>
|
||||
<file>src/locales/zh-cht.json</file>
|
||||
</translation_file>
|
||||
</translation_files>
|
||||
<editor_configuration>
|
||||
<save_empty_translations>true</save_empty_translations>
|
||||
<copy_templates>
|
||||
<copy_template>$t('%1')</copy_template>
|
||||
<copy_template>{{ $t('%1') }}</copy_template>
|
||||
<copy_template>this.$t('%1')</copy_template>
|
||||
</copy_templates>
|
||||
</editor_configuration>
|
||||
<primary_language>zh-CHS</primary_language>
|
||||
<configuration>
|
||||
<indent>tab</indent>
|
||||
<format>namespaced-json</format>
|
||||
</configuration>
|
||||
</babeledit_project>
|
||||
@@ -0,0 +1,22 @@
|
||||
module.exports = [
|
||||
{ name: 'vue', library: 'Vue', js: 'https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.js', css: '' },
|
||||
{ name: 'vue-i18n', library: 'VueI18n', js: 'https://cdn.jsdelivr.net/npm/vue-i18n@8.15.1/dist/vue-i18n.js', css: '' },
|
||||
{ name: 'vue-router', library: 'VueRouter', js: 'https://cdn.jsdelivr.net/npm/vue-router@3.1.3/dist/vue-router.js', css: '' },
|
||||
{ name: 'vuex', library: 'Vuex', js: 'https://cdn.jsdelivr.net/npm/vuex@3.1.2/dist/vuex.js', css: '' },
|
||||
{ name: 'axios', library: 'axios', js: 'https://cdn.jsdelivr.net/npm/axios@0.19.0/dist/axios.min.js', css: '' },
|
||||
{ name: 'better-scroll', library: 'BScroll', js: 'https://cdn.jsdelivr.net/npm/better-scroll@1.15.2/dist/bscroll.min.js', css: '' },
|
||||
{ name: 'element-ui', library: 'ELEMENT', js: 'https://cdn.jsdelivr.net/npm/element-ui@2.13.0/lib/index.js', css: 'https://cdn.jsdelivr.net/npm/element-ui@2.13.0/lib/theme-chalk/index.css' },
|
||||
{ name: 'mockjs', library: 'Mock', js: 'https://cdn.jsdelivr.net/npm/mockjs@1.1.0/dist/mock.min.js', css: '' },
|
||||
{ name: 'lodash', library: '_', js: 'https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js', css: '' },
|
||||
{ name: 'ua-parser-js', library: 'UAParser', js: 'https://cdn.jsdelivr.net/npm/ua-parser-js@0.7.20/dist/ua-parser.min.js', css: '' },
|
||||
{ name: 'js-cookie', library: 'Cookies', js: 'https://cdn.jsdelivr.net/npm/js-cookie@2.2.1/src/js.cookie.min.js', css: '' },
|
||||
{ name: 'nprogress', library: 'NProgress', js: 'https://cdn.jsdelivr.net/npm/nprogress@0.2.0/nprogress.min.js', css: 'https://cdn.jsdelivr.net/npm/nprogress@0.2.0/nprogress.css' },
|
||||
{ name: 'dayjs', library: 'dayjs', js: 'https://cdn.jsdelivr.net/npm/dayjs@1.8.17/dayjs.min.js', css: '' },
|
||||
{ name: 'fuse.js', library: 'Fuse', js: 'https://cdn.jsdelivr.net/npm/fuse.js@3.4.6/dist/fuse.min.js', css: '' },
|
||||
{ name: 'hotkeys-js', library: 'hotkeys', js: 'https://cdn.jsdelivr.net/npm/hotkeys-js@3.7.3/dist/hotkeys.js', css: '' },
|
||||
{ name: 'qs', library: 'Qs', js: 'https://cdn.jsdelivr.net/npm/qs@6.9.1/dist/qs.js', css: '' },
|
||||
{ name: 'lowdb', library: 'low', js: 'https://cdn.jsdelivr.net/npm/lowdb@1.0.0/dist/low.min.js', css: '' },
|
||||
{ name: 'lowdb/adapters/LocalStorage', library: 'LocalStorage', js: 'https://cdn.jsdelivr.net/npm/lowdb@1.0.0/dist/LocalStorage.min.js', css: '' },
|
||||
{ name: 'screenfull', library: 'screenfull', js: 'https://cdn.jsdelivr.net/npm/screenfull@5.0.0/dist/screenfull.min.js', css: '' },
|
||||
{ name: 'sortablejs', library: 'Sortable', js: 'https://cdn.jsdelivr.net/npm/sortablejs@1.10.1/Sortable.min.js', css: '' },
|
||||
]
|
||||
+1
-21
@@ -1,23 +1,3 @@
|
||||
module.exports = {
|
||||
moduleFileExtensions: [
|
||||
'js',
|
||||
'jsx',
|
||||
'json',
|
||||
'vue'
|
||||
],
|
||||
transform: {
|
||||
'^.+\\.vue$': 'vue-jest',
|
||||
'.+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
|
||||
'^.+\\.jsx?$': 'babel-jest'
|
||||
},
|
||||
moduleNameMapper: {
|
||||
'^@/(.*)$': '<rootDir>/src/$1'
|
||||
},
|
||||
snapshotSerializers: [
|
||||
'jest-serializer-vue'
|
||||
],
|
||||
testMatch: [
|
||||
'**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
|
||||
],
|
||||
testURL: 'http://localhost/'
|
||||
preset: '@vue/cli-plugin-unit-jest'
|
||||
}
|
||||
|
||||
Generated
+2535
-4078
File diff suppressed because it is too large
Load Diff
+38
-30
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "d2-admin",
|
||||
"version": "1.7.2",
|
||||
"version": "1.8.0",
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve --open",
|
||||
"start": "npm run serve",
|
||||
@@ -8,50 +8,58 @@
|
||||
"build": "vue-cli-service build",
|
||||
"build:nomock": "vue-cli-service build --mode nomock",
|
||||
"build:preview": "NODE_OPTIONS=--max_old_space_size=4096 vue-cli-service build --mode preview",
|
||||
"build:github": "NODE_OPTIONS=--max_old_space_size=4096 vue-cli-service build --mode github",
|
||||
"build:netlify": "NODE_OPTIONS=--max_old_space_size=4096 vue-cli-service build --mode netlify",
|
||||
"lint": "vue-cli-service lint --fix",
|
||||
"test:unit": "vue-cli-service test:unit"
|
||||
"test:unit": "vue-cli-service test:unit",
|
||||
"i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'",
|
||||
"analyz": "npm_config_report=true npm run build"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^0.18.0",
|
||||
"axios": "^0.19.0",
|
||||
"better-scroll": "^1.15.2",
|
||||
"core-js": "^2.6.5",
|
||||
"dayjs": "^1.8.12",
|
||||
"element-ui": "^2.11.1",
|
||||
"core-js": "^3.4.3",
|
||||
"dayjs": "^1.8.17",
|
||||
"element-ui": "^2.13.0",
|
||||
"flex.css": "^1.1.7",
|
||||
"fuse.js": "^3.4.4",
|
||||
"hotkeys-js": "^3.6.2",
|
||||
"js-cookie": "^2.2.0",
|
||||
"lodash": "^4.17.11",
|
||||
"fuse.js": "^3.4.6",
|
||||
"hotkeys-js": "^3.7.3",
|
||||
"js-cookie": "^2.2.1",
|
||||
"lodash": "^4.17.15",
|
||||
"lowdb": "^1.0.0",
|
||||
"mockjs": "^1.1.0",
|
||||
"nprogress": "^0.2.0",
|
||||
"qs": "^6.7.0",
|
||||
"screenfull": "^4.2.0",
|
||||
"ua-parser-js": "^0.7.19",
|
||||
"vue": "^2.6.10",
|
||||
"vue-i18n": "^8.14.0",
|
||||
"vue-router": "^3.0.3",
|
||||
"vuex": "^3.0.1"
|
||||
"qs": "^6.9.1",
|
||||
"screenfull": "^5.0.0",
|
||||
"sortablejs": "^1.10.1",
|
||||
"ua-parser-js": "^0.7.20",
|
||||
"vue": "^2.6.11",
|
||||
"vue-i18n": "^8.15.1",
|
||||
"vue-router": "^3.1.3",
|
||||
"vuex": "^3.1.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@d2-projects/vue-filename-injector": "^1.0.0",
|
||||
"@kazupon/vue-i18n-loader": "^0.3.0",
|
||||
"@vue/cli-plugin-babel": "^3.8.0",
|
||||
"@vue/cli-plugin-eslint": "^3.8.0",
|
||||
"@vue/cli-plugin-unit-jest": "^3.8.0",
|
||||
"@vue/cli-service": "^3.8.0",
|
||||
"@d2-projects/vue-filename-injector": "^1.1.0",
|
||||
"@kazupon/vue-i18n-loader": "^0.4.1",
|
||||
"@vue/cli-plugin-babel": "^4.1.0",
|
||||
"@vue/cli-plugin-eslint": "^4.1.0",
|
||||
"@vue/cli-plugin-router": "^4.1.0",
|
||||
"@vue/cli-plugin-unit-jest": "^4.1.0",
|
||||
"@vue/cli-plugin-vuex": "^4.1.0",
|
||||
"@vue/cli-service": "^4.1.0",
|
||||
"@vue/eslint-config-standard": "^4.0.0",
|
||||
"@vue/test-utils": "1.0.0-beta.29",
|
||||
"babel-eslint": "^10.0.2",
|
||||
"babel-jest": "^24.8.0",
|
||||
"babel-eslint": "^10.0.3",
|
||||
"compression-webpack-plugin": "^3.0.1",
|
||||
"eslint": "^5.16.0",
|
||||
"eslint-plugin-vue": "^5.2.2",
|
||||
"sass": "^1.21.0",
|
||||
"sass-loader": "^7.1.0",
|
||||
"eslint-plugin-vue": "^5.0.0",
|
||||
"sass": "^1.23.7",
|
||||
"sass-loader": "^8.0.0",
|
||||
"svg-sprite-loader": "^4.1.6",
|
||||
"text-loader": "0.0.1",
|
||||
"text-loader": "^0.0.1",
|
||||
"vue-cli-plugin-i18n": "^0.6.0",
|
||||
"vue-template-compiler": "^2.6.10",
|
||||
"webpack-theme-color-replacer": "^1.2.15"
|
||||
"webpack-bundle-analyzer": "^3.6.0",
|
||||
"webpack-theme-color-replacer": "^1.3.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
> 1%
|
||||
last 2 versions
|
||||
not ie <= 8
|
||||
@@ -1,21 +0,0 @@
|
||||
.DS_Store
|
||||
node_modules
|
||||
/dist
|
||||
|
||||
# local env files
|
||||
.env.local
|
||||
.env.*.local
|
||||
|
||||
# Log files
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
.vscode
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw*
|
||||
@@ -1,5 +0,0 @@
|
||||
module.exports = {
|
||||
plugins: {
|
||||
autoprefixer: {}
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
# filters-dayjs
|
||||
@@ -1,5 +0,0 @@
|
||||
module.exports = {
|
||||
presets: [
|
||||
'@vue/app'
|
||||
]
|
||||
}
|
||||
Generated
-10047
File diff suppressed because it is too large
Load Diff
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"name": "@d2-admin/filters-dayjs",
|
||||
"version": "1.0.3",
|
||||
"main": "dist/@d2-admin/filters-dayjs.common.js",
|
||||
"scripts": {
|
||||
"build": "vue-cli-service build --target lib --name @d2-admin/filters-dayjs --entry src/main.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"core-js": "^2.6.5",
|
||||
"dayjs": "^1.8.12",
|
||||
"vue": "^2.6.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vue/cli-plugin-babel": "^3.0.0",
|
||||
"@vue/cli-service": "^3.0.0",
|
||||
"vue-template-compiler": "^2.5.21"
|
||||
}
|
||||
}
|
||||
@@ -1,86 +0,0 @@
|
||||
// 日期时间相关 filter
|
||||
// https://github.com/iamkun/dayjs/blob/master/docs/zh-cn/API-reference.md
|
||||
|
||||
import dayjs from 'dayjs'
|
||||
|
||||
// 对象代理
|
||||
const P = Day => {
|
||||
return new Proxy(Day, {
|
||||
get (target, key) {
|
||||
if (dayjs.isDayjs(target)) {
|
||||
// 是 Dayjs 对象,正常返回
|
||||
return target[key]
|
||||
} else {
|
||||
// 不是 Dayjs 对象
|
||||
if (dayjs(target).isValid()) {
|
||||
// 尝试帮用户解析成 Dayjs 对象
|
||||
return dayjs(target)[key]
|
||||
} else {
|
||||
// 无法解析
|
||||
return function () {
|
||||
return '无效日期'
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
set (target, key, value) {
|
||||
target[key] = value
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export default {
|
||||
// ---------- [ dayjs 解析 ] ----------
|
||||
// 时间字符串 | Date 对象 | Unix 时间戳 (毫秒)
|
||||
day: value => dayjs(value),
|
||||
// Unix 时间戳 (秒)
|
||||
date_unix: value => dayjs.unix(value),
|
||||
// ---------- [ 获取 ] ----------
|
||||
date_year: Day => P(Day).year(),
|
||||
date_month: Day => P(Day).month(),
|
||||
date_date: Day => P(Day).date(),
|
||||
date_day: Day => P(Day).day(),
|
||||
date_hour: Day => P(Day).hour(),
|
||||
date_minute: Day => P(Day).minute(),
|
||||
date_second: Day => P(Day).second(),
|
||||
date_millisecond: Day => P(Day).millisecond(),
|
||||
// ---------- [ 设置 ] ----------
|
||||
// date | day | month | year | hour | minute | second | millisecond
|
||||
// 对大小写不敏感
|
||||
date_set: (Day, unit, value) => P(Day).set(unit, value),
|
||||
// ---------- [ 操作 ] ----------
|
||||
// 增加
|
||||
date_add: (Day, value, unit) => P(Day).add(value, unit),
|
||||
// 减少
|
||||
date_subtract: (Day, value, unit) => P(Day).subtract(value, unit),
|
||||
// 开头时间
|
||||
date_startof: (Day, unit) => P(Day).startOf(unit),
|
||||
// 末尾时间
|
||||
date_endof: (Day, unit) => P(Day).endOf(unit),
|
||||
// ---------- [ 显示 ] ----------
|
||||
// 格式化
|
||||
date_format: (Day, setting = 'YYYY-MM-DD HH:mm:ss') => P(Day).format(setting),
|
||||
// 时间差
|
||||
date_diff: (Day, Day2 = '', unit = 'millisecond', accurate = false) => P(Day).diff(dayjs(Day2), unit, accurate),
|
||||
// Unix 时间戳 (毫秒)
|
||||
date_value_millisecond: Day => P(Day).valueOf(),
|
||||
// Unix 时间戳 (秒)
|
||||
date_value_second: Day => P(Day).unix(),
|
||||
// 月份的天数
|
||||
date_days_in_month: Day => P(Day).daysInMonth(),
|
||||
// Date 对象
|
||||
date_to_date: Day => P(Day).toDate(),
|
||||
// JSON
|
||||
date_to_json: Day => P(Day).toJSON(),
|
||||
// ISO8601 格式
|
||||
date_to_iso: Day => P(Day).toISOString(),
|
||||
// 字符
|
||||
date_to_string: Day => P(Day).toString(),
|
||||
// ---------- [ 查询 ] ----------
|
||||
// 是否之前
|
||||
date_is_before: (Day, Day2, unit = 'millisecond') => P(Day).isBefore(dayjs(Day2), unit),
|
||||
// 是否之后
|
||||
date_is_after: (Day, Day2, unit = 'millisecond') => P(Day).isAfter(dayjs(Day2), unit),
|
||||
// 是否相同
|
||||
date_is_same: (Day, Day2, unit = 'millisecond') => P(Day).isSame(dayjs(Day2), unit)
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
import filters from './filters'
|
||||
|
||||
const vueFiltersDate = {
|
||||
install: function (Vue, options) {
|
||||
Object.keys(filters).forEach(name => {
|
||||
Vue.filter(name, filters[name])
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof window !== 'undefined' && window.Vue) {
|
||||
window.Vue.use(vueFiltersDate)
|
||||
}
|
||||
|
||||
export default vueFiltersDate
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
After Width: | Height: | Size: 6.3 KiB |
+15
-10
@@ -5,6 +5,15 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<link rel="icon" href="<%= BASE_URL %>icon.ico">
|
||||
<!-- 使用 CDN 加速的 CSS 文件,配置在 vue.config.js 下 -->
|
||||
<% for (var i in htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.css) { %>
|
||||
<link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="preload" as="style">
|
||||
<link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="stylesheet">
|
||||
<% } %>
|
||||
<!-- 使用 CDN 加速的 JS 文件,配置在 vue.config.js 下 -->
|
||||
<% for (var i in htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.js) { %>
|
||||
<link href="<%= htmlWebpackPlugin.options.cdn.js[i] %>" rel="preload" as="script">
|
||||
<% } %>
|
||||
<title><%= VUE_APP_TITLE %></title>
|
||||
<style>
|
||||
html, body, #app { height: 100%; margin: 0px; padding: 0px; width: 100%; }
|
||||
@@ -13,19 +22,17 @@
|
||||
.d2-home__footer { width: 100%; flex-grow: 0; text-align: center; padding: 1em 0; }
|
||||
.d2-home__footer > a { font-size: 12px; color: #ABABAB; text-decoration: none; }
|
||||
.d2-home__loading { height: 32px; width: 32px; margin-bottom: 20px; }
|
||||
.d2-home__title { color: #FFF; font-size: 14px; margin-bottom: 10px; }
|
||||
.d2-home__sub-title { color: #ABABAB; font-size: 12px; }
|
||||
</style>
|
||||
<script>
|
||||
var _hmt = _hmt || [];
|
||||
var hmid = "1dfa88d0c8571eef2d383070cb3e5ca1";
|
||||
var hmid = "bc38887aa5588add05a38704342ad7e8";
|
||||
(function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?" + hmid; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s);})();
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
<strong>
|
||||
很抱歉,如果没有 JavaScript 支持,D2Admin 将不能正常工作。请启用浏览器的 JavaScript 然后继续。
|
||||
Sorry, D2Admin will not work properly without JavaScript support. Enable JavaScript for browsers and continue.
|
||||
</strong>
|
||||
</noscript>
|
||||
<div id="app">
|
||||
@@ -35,12 +42,6 @@
|
||||
class="d2-home__loading"
|
||||
src="./image/loading/loading-spin.svg"
|
||||
alt="loading">
|
||||
<div class="d2-home__title">
|
||||
正在加载资源
|
||||
</div>
|
||||
<div class="d2-home__sub-title">
|
||||
初次加载资源可能需要较多时间 请耐心等待
|
||||
</div>
|
||||
</div>
|
||||
<div class="d2-home__footer">
|
||||
<a
|
||||
@@ -51,5 +52,9 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 使用 CDN 加速的 JS 文件,配置在 vue.config.js 下 -->
|
||||
<% for (var i in htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.js) { %>
|
||||
<script src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script>
|
||||
<% } %>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -170,6 +170,9 @@
|
||||
padding: 14px 12px;
|
||||
border-radius: 4px;
|
||||
margin: 0px !important;
|
||||
&.el-color-picker.el-color-picker--mini {
|
||||
padding: 9px 6px;
|
||||
}
|
||||
}
|
||||
.el-dropdown {
|
||||
@extend %unable-select;
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
<slot name="header"/>
|
||||
</div>
|
||||
<div class="d2-container-ghost-bs__body" ref="wrapper">
|
||||
<!-- https://github.com/d2-projects/d2-admin/issues/181 -->
|
||||
<div>
|
||||
<slot/>
|
||||
</div>
|
||||
|
||||
@@ -21,7 +21,7 @@ export function elSubmenu (createElement, menu) {
|
||||
createElement('i', { slot: 'title', attrs: { class: `fa fa-${menu.icon}` } })
|
||||
] : [],
|
||||
...menu.icon === undefined & !menu.iconSvg ? [
|
||||
createElement('i', { slot: 'title', attrs: { class: 'fa fa-file-o' } })
|
||||
createElement('i', { slot: 'title', attrs: { class: 'fa fa-folder-o' } })
|
||||
] : [],
|
||||
...menu.iconSvg ? [
|
||||
createElement('d2-icon-svg', { slot: 'title', props: { name: menu.iconSvg } })
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
@rowClick="contextmenuClick"/>
|
||||
</d2-contextmenu>
|
||||
<el-tabs
|
||||
class="d2-multiple-page-control"
|
||||
class="d2-multiple-page-control d2-multiple-page-sort"
|
||||
:value="current"
|
||||
type="card"
|
||||
:closable="true"
|
||||
@@ -60,6 +60,7 @@
|
||||
|
||||
<script>
|
||||
import { mapState, mapActions } from 'vuex'
|
||||
import Sortable from 'sortablejs'
|
||||
export default {
|
||||
components: {
|
||||
D2Contextmenu: () => import('../contextmenu'),
|
||||
@@ -94,7 +95,8 @@ export default {
|
||||
'closeLeft',
|
||||
'closeRight',
|
||||
'closeOther',
|
||||
'closeAll'
|
||||
'closeAll',
|
||||
'openedSort'
|
||||
]),
|
||||
/**
|
||||
* @description 右键菜单功能点击
|
||||
@@ -172,6 +174,15 @@ export default {
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
const el = document.querySelectorAll('.d2-multiple-page-sort .el-tabs__nav')[0]
|
||||
Sortable.create(el, {
|
||||
onEnd: (evt) => {
|
||||
const { oldIndex, newIndex } = evt
|
||||
this.openedSort({ oldIndex, newIndex })
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
}"
|
||||
flex-box="0"
|
||||
flex>
|
||||
<div class="logo-group" :style="{width: asideCollapse ? asideWidthCollapse : asideWidth}" flex-box="0">
|
||||
<router-link to="/index" class="logo-group" :style="{width: asideCollapse ? asideWidthCollapse : asideWidth}" flex-box="0">
|
||||
<img v-if="asideCollapse" :src="`${$baseUrl}image/theme/${themeActiveSetting.name}/logo/icon-only.png`">
|
||||
<img v-else :src="`${$baseUrl}image/theme/${themeActiveSetting.name}/logo/all.png`">
|
||||
</div>
|
||||
</router-link>
|
||||
<div class="toggle-aside-btn" @click="handleToggleAside" flex-box="0">
|
||||
<d2-icon name="bars"/>
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
const userDB = [
|
||||
{ username: 'admin', password: 'admin', uuid: 'admin-uuid', name: '管理员' },
|
||||
{ username: 'editor', password: 'editor', uuid: 'editor-uuid', name: '编辑' },
|
||||
{ username: 'user1', password: 'user1', uuid: 'user1-uuid', name: '用户1' }
|
||||
{ username: 'admin', password: 'admin', uuid: 'admin-uuid', name: 'Admin' },
|
||||
{ username: 'editor', password: 'editor', uuid: 'editor-uuid', name: 'Editor' },
|
||||
{ username: 'user1', password: 'user1', uuid: 'user1-uuid', name: 'User1' }
|
||||
]
|
||||
|
||||
export default [
|
||||
|
||||
@@ -113,6 +113,24 @@ export default {
|
||||
resolve()
|
||||
})
|
||||
},
|
||||
/**
|
||||
* @class opened
|
||||
* @description 重排页面列表上的某一项
|
||||
* @param {Object} context
|
||||
* @param {Object} payload { oldIndex, newIndex } 位置信息
|
||||
*/
|
||||
openedSort ({ state, commit, dispatch }, { oldIndex, newIndex }) {
|
||||
return new Promise(async resolve => {
|
||||
// 重排页面列表某一项
|
||||
let page = state.opened[oldIndex]
|
||||
state.opened.splice(oldIndex, 1)
|
||||
state.opened.splice(newIndex, 0, page)
|
||||
// 持久化
|
||||
await dispatch('opened2db')
|
||||
// end
|
||||
resolve()
|
||||
})
|
||||
},
|
||||
/**
|
||||
* @class opened
|
||||
* @description 新增一个 tag (打开一个页面)
|
||||
@@ -402,7 +420,7 @@ export default {
|
||||
const pool = []
|
||||
const push = function (routes) {
|
||||
routes.forEach(route => {
|
||||
if (route.children) {
|
||||
if (route.children && route.children.length > 0) {
|
||||
push(route.children)
|
||||
} else {
|
||||
if (!route.hidden) {
|
||||
|
||||
@@ -1,22 +1,45 @@
|
||||
<template>
|
||||
<div class="d2-badge">
|
||||
<p align="center">
|
||||
<a><img src="https://img.shields.io/github/release/d2-projects/d2-admin.svg"/></a>
|
||||
<a><img src="https://img.shields.io/github/forks/d2-projects/d2-admin.svg"/></a>
|
||||
<a><img src="https://img.shields.io/github/stars/d2-projects/d2-admin.svg"/></a>
|
||||
<a><img src="https://img.shields.io/github/issues/d2-projects/d2-admin.svg"/></a>
|
||||
<a><img src="https://img.shields.io/github/issues-closed/d2-projects/d2-admin.svg"/></a>
|
||||
<a><img src="https://img.shields.io/github/issues-pr/d2-projects/d2-admin.svg"/></a>
|
||||
<a><img src="https://img.shields.io/github/issues-pr-closed/d2-projects/d2-admin.svg"/></a>
|
||||
</p>
|
||||
<p align="center">
|
||||
<a><img src="https://img.shields.io/github/last-commit/d2-projects/d2-admin.svg"/></a>
|
||||
<a><img src="https://img.shields.io/badge/code_style-standard-brightgreen.svg"/></a>
|
||||
<a><img src="https://api.netlify.com/api/v1/badges/a5dd4bbd-da3f-4145-98a9-8012577bdcf5/deploy-status"/></a>
|
||||
<p v-for="(group, groupIndex) of badges" :key="groupIndex" align="center">
|
||||
<a v-for="(badge, badgeIndex) of group" :key="badgeIndex" :href="badge.link" target="_blank">
|
||||
<img :src="badge.img"/>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
const linkD2Admin = 'https://github.com/d2-projects/d2-admin'
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
badges: [
|
||||
[
|
||||
{ img: 'https://img.shields.io/github/stars/d2-projects/d2-admin.svg', link: `${linkD2Admin}/stargazers` },
|
||||
{ img: 'https://img.shields.io/github/forks/d2-projects/d2-admin.svg', link: `${linkD2Admin}/network/members` },
|
||||
{ img: 'https://img.shields.io/github/issues/d2-projects/d2-admin.svg', link: `${linkD2Admin}/issues` },
|
||||
{ img: 'https://img.shields.io/github/issues-closed/d2-projects/d2-admin.svg', link: `${linkD2Admin}/issues?q=is%3Aissue+is%3Aclosed` },
|
||||
{ img: 'https://img.shields.io/github/issues-pr/d2-projects/d2-admin.svg', link: `${linkD2Admin}/pulls` },
|
||||
{ img: 'https://img.shields.io/github/issues-pr-closed/d2-projects/d2-admin.svg', link: `${linkD2Admin}/pulls?q=is%3Apr+is%3Aclosed` },
|
||||
{ img: 'https://img.shields.io/github/last-commit/d2-projects/d2-admin.svg', link: linkD2Admin }
|
||||
],
|
||||
[
|
||||
{ img: 'https://github.com/d2-projects/d2-admin-start-kit/workflows/Deploy%20https%3A%2F%2Fd2.pub/badge.svg', link: `${linkD2Admin}/actions?query=workflow%3A%22Deploy+https%3A%2F%2Fd2.pub%22` },
|
||||
{ img: 'https://github.com/d2-projects/d2-admin-start-kit/workflows/Deploy%20cdn/badge.svg', link: `${linkD2Admin}/actions?query=workflow%3A%22Deploy+cdn%22` },
|
||||
{ img: 'https://github.com/d2-projects/d2-admin-start-kit/workflows/Deploy%20Github/badge.svg', link: `${linkD2Admin}/actions?query=workflow%3A%22Deploy+Github%22` },
|
||||
{ img: 'https://api.netlify.com/api/v1/badges/08ff8c93-f0a8-497a-a081-440b31fb3aa4/deploy-status', link: 'https://app.netlify.com/sites/d2-admin-start-kit/deploys' }
|
||||
],
|
||||
[
|
||||
{ img: 'https://visitor-count-badge.herokuapp.com/today.svg?repo_id=d2-projects.d2-admin', link: linkD2Admin },
|
||||
{ img: 'https://visitor-count-badge.herokuapp.com/total.svg?repo_id=d2-projects.d2-admin', link: linkD2Admin },
|
||||
{ img: 'https://img.shields.io/github/release/d2-projects/d2-admin.svg', link: `${linkD2Admin}/releases` }
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.d2-badge {
|
||||
margin-bottom: 20px;
|
||||
@@ -26,7 +49,7 @@
|
||||
&:last-child {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
a {
|
||||
img {
|
||||
display: inline-block;
|
||||
margin: 0px 2px;
|
||||
}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 7.6 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 95 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 109 KiB |
@@ -1,54 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<img
|
||||
src="./image/d2-help-button@2x.png"
|
||||
style="width: 138px;"
|
||||
@click="dialogVisible = true">
|
||||
<el-dialog
|
||||
title="帮助"
|
||||
width="600px"
|
||||
:visible.sync="dialogVisible"
|
||||
:append-to-body="true">
|
||||
<div style="margin-top: -25px; margin-bottom: -25px;">
|
||||
<el-button-group class="d2-mb">
|
||||
<el-button @click="$open('https://github.com/d2-projects/d2-admin')">
|
||||
<d2-icon name="github" class="d2-mr-5"/>
|
||||
主页
|
||||
</el-button>
|
||||
<el-button @click="$open('https://fairyever.com/d2-admin/doc/zh/')">
|
||||
<d2-icon name="book" class="d2-mr-5"/>
|
||||
中文文档
|
||||
</el-button>
|
||||
<el-button @click="$open('https://github.com/d2-projects/d2-admin/issues')">
|
||||
<d2-icon name="question" class="d2-mr-5"/>
|
||||
issues
|
||||
</el-button>
|
||||
<el-button @click="$open('https://github.com/d2-projects/d2-admin/issues/new/choose')">
|
||||
<d2-icon name="plus" class="d2-mr-5"/>
|
||||
New issue
|
||||
</el-button>
|
||||
</el-button-group>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-alert :closable="false" type="info" title="QQ群 [ 1500+ / 2000 人 ]" class="d2-mb"/>
|
||||
<img src="./image/qq.jpg" style="width: 100%;">
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-alert :closable="false" type="info" title="与作者成为好友后邀请进微信群" class="d2-mb"/>
|
||||
<img src="./image/we.jpg" style="width: 100%;">
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
dialogVisible: false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
File diff suppressed because it is too large
Load Diff
|
After Width: | Height: | Size: 84 KiB |
@@ -0,0 +1,707 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" xmlns:xlink="http://www.w3.org/1999/xlink" width="468" height="468" viewBox="0 0 468 468">
|
||||
<desc></desc>
|
||||
<rect width="468" height="468" fill="#ffffff" cx="0" cy="0" />
|
||||
<defs>
|
||||
<rect id="p" width="12" height="12" />
|
||||
</defs>
|
||||
<g fill="#000000">
|
||||
<use x="12" y="12" xlink:href="#p" />
|
||||
<use x="24" y="12" xlink:href="#p" />
|
||||
<use x="36" y="12" xlink:href="#p" />
|
||||
<use x="48" y="12" xlink:href="#p" />
|
||||
<use x="60" y="12" xlink:href="#p" />
|
||||
<use x="72" y="12" xlink:href="#p" />
|
||||
<use x="84" y="12" xlink:href="#p" />
|
||||
<use x="108" y="12" xlink:href="#p" />
|
||||
<use x="144" y="12" xlink:href="#p" />
|
||||
<use x="156" y="12" xlink:href="#p" />
|
||||
<use x="180" y="12" xlink:href="#p" />
|
||||
<use x="204" y="12" xlink:href="#p" />
|
||||
<use x="240" y="12" xlink:href="#p" />
|
||||
<use x="264" y="12" xlink:href="#p" />
|
||||
<use x="276" y="12" xlink:href="#p" />
|
||||
<use x="288" y="12" xlink:href="#p" />
|
||||
<use x="300" y="12" xlink:href="#p" />
|
||||
<use x="348" y="12" xlink:href="#p" />
|
||||
<use x="372" y="12" xlink:href="#p" />
|
||||
<use x="384" y="12" xlink:href="#p" />
|
||||
<use x="396" y="12" xlink:href="#p" />
|
||||
<use x="408" y="12" xlink:href="#p" />
|
||||
<use x="420" y="12" xlink:href="#p" />
|
||||
<use x="432" y="12" xlink:href="#p" />
|
||||
<use x="444" y="12" xlink:href="#p" />
|
||||
<use x="12" y="24" xlink:href="#p" />
|
||||
<use x="84" y="24" xlink:href="#p" />
|
||||
<use x="108" y="24" xlink:href="#p" />
|
||||
<use x="132" y="24" xlink:href="#p" />
|
||||
<use x="144" y="24" xlink:href="#p" />
|
||||
<use x="168" y="24" xlink:href="#p" />
|
||||
<use x="192" y="24" xlink:href="#p" />
|
||||
<use x="216" y="24" xlink:href="#p" />
|
||||
<use x="228" y="24" xlink:href="#p" />
|
||||
<use x="240" y="24" xlink:href="#p" />
|
||||
<use x="264" y="24" xlink:href="#p" />
|
||||
<use x="276" y="24" xlink:href="#p" />
|
||||
<use x="336" y="24" xlink:href="#p" />
|
||||
<use x="348" y="24" xlink:href="#p" />
|
||||
<use x="372" y="24" xlink:href="#p" />
|
||||
<use x="444" y="24" xlink:href="#p" />
|
||||
<use x="12" y="36" xlink:href="#p" />
|
||||
<use x="36" y="36" xlink:href="#p" />
|
||||
<use x="48" y="36" xlink:href="#p" />
|
||||
<use x="60" y="36" xlink:href="#p" />
|
||||
<use x="84" y="36" xlink:href="#p" />
|
||||
<use x="108" y="36" xlink:href="#p" />
|
||||
<use x="120" y="36" xlink:href="#p" />
|
||||
<use x="180" y="36" xlink:href="#p" />
|
||||
<use x="192" y="36" xlink:href="#p" />
|
||||
<use x="204" y="36" xlink:href="#p" />
|
||||
<use x="216" y="36" xlink:href="#p" />
|
||||
<use x="240" y="36" xlink:href="#p" />
|
||||
<use x="252" y="36" xlink:href="#p" />
|
||||
<use x="264" y="36" xlink:href="#p" />
|
||||
<use x="276" y="36" xlink:href="#p" />
|
||||
<use x="324" y="36" xlink:href="#p" />
|
||||
<use x="372" y="36" xlink:href="#p" />
|
||||
<use x="396" y="36" xlink:href="#p" />
|
||||
<use x="408" y="36" xlink:href="#p" />
|
||||
<use x="420" y="36" xlink:href="#p" />
|
||||
<use x="444" y="36" xlink:href="#p" />
|
||||
<use x="12" y="48" xlink:href="#p" />
|
||||
<use x="36" y="48" xlink:href="#p" />
|
||||
<use x="48" y="48" xlink:href="#p" />
|
||||
<use x="60" y="48" xlink:href="#p" />
|
||||
<use x="84" y="48" xlink:href="#p" />
|
||||
<use x="120" y="48" xlink:href="#p" />
|
||||
<use x="144" y="48" xlink:href="#p" />
|
||||
<use x="168" y="48" xlink:href="#p" />
|
||||
<use x="192" y="48" xlink:href="#p" />
|
||||
<use x="204" y="48" xlink:href="#p" />
|
||||
<use x="216" y="48" xlink:href="#p" />
|
||||
<use x="288" y="48" xlink:href="#p" />
|
||||
<use x="300" y="48" xlink:href="#p" />
|
||||
<use x="312" y="48" xlink:href="#p" />
|
||||
<use x="324" y="48" xlink:href="#p" />
|
||||
<use x="336" y="48" xlink:href="#p" />
|
||||
<use x="372" y="48" xlink:href="#p" />
|
||||
<use x="396" y="48" xlink:href="#p" />
|
||||
<use x="408" y="48" xlink:href="#p" />
|
||||
<use x="420" y="48" xlink:href="#p" />
|
||||
<use x="444" y="48" xlink:href="#p" />
|
||||
<use x="12" y="60" xlink:href="#p" />
|
||||
<use x="36" y="60" xlink:href="#p" />
|
||||
<use x="48" y="60" xlink:href="#p" />
|
||||
<use x="60" y="60" xlink:href="#p" />
|
||||
<use x="84" y="60" xlink:href="#p" />
|
||||
<use x="132" y="60" xlink:href="#p" />
|
||||
<use x="144" y="60" xlink:href="#p" />
|
||||
<use x="156" y="60" xlink:href="#p" />
|
||||
<use x="168" y="60" xlink:href="#p" />
|
||||
<use x="180" y="60" xlink:href="#p" />
|
||||
<use x="192" y="60" xlink:href="#p" />
|
||||
<use x="204" y="60" xlink:href="#p" />
|
||||
<use x="240" y="60" xlink:href="#p" />
|
||||
<use x="276" y="60" xlink:href="#p" />
|
||||
<use x="300" y="60" xlink:href="#p" />
|
||||
<use x="324" y="60" xlink:href="#p" />
|
||||
<use x="372" y="60" xlink:href="#p" />
|
||||
<use x="396" y="60" xlink:href="#p" />
|
||||
<use x="408" y="60" xlink:href="#p" />
|
||||
<use x="420" y="60" xlink:href="#p" />
|
||||
<use x="444" y="60" xlink:href="#p" />
|
||||
<use x="12" y="72" xlink:href="#p" />
|
||||
<use x="84" y="72" xlink:href="#p" />
|
||||
<use x="108" y="72" xlink:href="#p" />
|
||||
<use x="168" y="72" xlink:href="#p" />
|
||||
<use x="180" y="72" xlink:href="#p" />
|
||||
<use x="192" y="72" xlink:href="#p" />
|
||||
<use x="228" y="72" xlink:href="#p" />
|
||||
<use x="264" y="72" xlink:href="#p" />
|
||||
<use x="288" y="72" xlink:href="#p" />
|
||||
<use x="300" y="72" xlink:href="#p" />
|
||||
<use x="324" y="72" xlink:href="#p" />
|
||||
<use x="336" y="72" xlink:href="#p" />
|
||||
<use x="348" y="72" xlink:href="#p" />
|
||||
<use x="372" y="72" xlink:href="#p" />
|
||||
<use x="444" y="72" xlink:href="#p" />
|
||||
<use x="12" y="84" xlink:href="#p" />
|
||||
<use x="24" y="84" xlink:href="#p" />
|
||||
<use x="36" y="84" xlink:href="#p" />
|
||||
<use x="48" y="84" xlink:href="#p" />
|
||||
<use x="60" y="84" xlink:href="#p" />
|
||||
<use x="72" y="84" xlink:href="#p" />
|
||||
<use x="84" y="84" xlink:href="#p" />
|
||||
<use x="108" y="84" xlink:href="#p" />
|
||||
<use x="132" y="84" xlink:href="#p" />
|
||||
<use x="156" y="84" xlink:href="#p" />
|
||||
<use x="180" y="84" xlink:href="#p" />
|
||||
<use x="204" y="84" xlink:href="#p" />
|
||||
<use x="228" y="84" xlink:href="#p" />
|
||||
<use x="252" y="84" xlink:href="#p" />
|
||||
<use x="276" y="84" xlink:href="#p" />
|
||||
<use x="300" y="84" xlink:href="#p" />
|
||||
<use x="324" y="84" xlink:href="#p" />
|
||||
<use x="348" y="84" xlink:href="#p" />
|
||||
<use x="372" y="84" xlink:href="#p" />
|
||||
<use x="384" y="84" xlink:href="#p" />
|
||||
<use x="396" y="84" xlink:href="#p" />
|
||||
<use x="408" y="84" xlink:href="#p" />
|
||||
<use x="420" y="84" xlink:href="#p" />
|
||||
<use x="432" y="84" xlink:href="#p" />
|
||||
<use x="444" y="84" xlink:href="#p" />
|
||||
<use x="108" y="96" xlink:href="#p" />
|
||||
<use x="180" y="96" xlink:href="#p" />
|
||||
<use x="192" y="96" xlink:href="#p" />
|
||||
<use x="216" y="96" xlink:href="#p" />
|
||||
<use x="240" y="96" xlink:href="#p" />
|
||||
<use x="276" y="96" xlink:href="#p" />
|
||||
<use x="300" y="96" xlink:href="#p" />
|
||||
<use x="312" y="96" xlink:href="#p" />
|
||||
<use x="348" y="96" xlink:href="#p" />
|
||||
<use x="36" y="108" xlink:href="#p" />
|
||||
<use x="48" y="108" xlink:href="#p" />
|
||||
<use x="60" y="108" xlink:href="#p" />
|
||||
<use x="84" y="108" xlink:href="#p" />
|
||||
<use x="108" y="108" xlink:href="#p" />
|
||||
<use x="120" y="108" xlink:href="#p" />
|
||||
<use x="144" y="108" xlink:href="#p" />
|
||||
<use x="180" y="108" xlink:href="#p" />
|
||||
<use x="192" y="108" xlink:href="#p" />
|
||||
<use x="204" y="108" xlink:href="#p" />
|
||||
<use x="228" y="108" xlink:href="#p" />
|
||||
<use x="276" y="108" xlink:href="#p" />
|
||||
<use x="312" y="108" xlink:href="#p" />
|
||||
<use x="324" y="108" xlink:href="#p" />
|
||||
<use x="348" y="108" xlink:href="#p" />
|
||||
<use x="360" y="108" xlink:href="#p" />
|
||||
<use x="372" y="108" xlink:href="#p" />
|
||||
<use x="384" y="108" xlink:href="#p" />
|
||||
<use x="420" y="108" xlink:href="#p" />
|
||||
<use x="432" y="108" xlink:href="#p" />
|
||||
<use x="444" y="108" xlink:href="#p" />
|
||||
<use x="24" y="120" xlink:href="#p" />
|
||||
<use x="36" y="120" xlink:href="#p" />
|
||||
<use x="72" y="120" xlink:href="#p" />
|
||||
<use x="168" y="120" xlink:href="#p" />
|
||||
<use x="204" y="120" xlink:href="#p" />
|
||||
<use x="252" y="120" xlink:href="#p" />
|
||||
<use x="276" y="120" xlink:href="#p" />
|
||||
<use x="288" y="120" xlink:href="#p" />
|
||||
<use x="300" y="120" xlink:href="#p" />
|
||||
<use x="312" y="120" xlink:href="#p" />
|
||||
<use x="336" y="120" xlink:href="#p" />
|
||||
<use x="348" y="120" xlink:href="#p" />
|
||||
<use x="444" y="120" xlink:href="#p" />
|
||||
<use x="36" y="132" xlink:href="#p" />
|
||||
<use x="84" y="132" xlink:href="#p" />
|
||||
<use x="108" y="132" xlink:href="#p" />
|
||||
<use x="120" y="132" xlink:href="#p" />
|
||||
<use x="132" y="132" xlink:href="#p" />
|
||||
<use x="144" y="132" xlink:href="#p" />
|
||||
<use x="180" y="132" xlink:href="#p" />
|
||||
<use x="192" y="132" xlink:href="#p" />
|
||||
<use x="204" y="132" xlink:href="#p" />
|
||||
<use x="216" y="132" xlink:href="#p" />
|
||||
<use x="228" y="132" xlink:href="#p" />
|
||||
<use x="252" y="132" xlink:href="#p" />
|
||||
<use x="312" y="132" xlink:href="#p" />
|
||||
<use x="324" y="132" xlink:href="#p" />
|
||||
<use x="336" y="132" xlink:href="#p" />
|
||||
<use x="372" y="132" xlink:href="#p" />
|
||||
<use x="384" y="132" xlink:href="#p" />
|
||||
<use x="396" y="132" xlink:href="#p" />
|
||||
<use x="420" y="132" xlink:href="#p" />
|
||||
<use x="432" y="132" xlink:href="#p" />
|
||||
<use x="444" y="132" xlink:href="#p" />
|
||||
<use x="48" y="144" xlink:href="#p" />
|
||||
<use x="120" y="144" xlink:href="#p" />
|
||||
<use x="156" y="144" xlink:href="#p" />
|
||||
<use x="180" y="144" xlink:href="#p" />
|
||||
<use x="216" y="144" xlink:href="#p" />
|
||||
<use x="228" y="144" xlink:href="#p" />
|
||||
<use x="240" y="144" xlink:href="#p" />
|
||||
<use x="264" y="144" xlink:href="#p" />
|
||||
<use x="276" y="144" xlink:href="#p" />
|
||||
<use x="288" y="144" xlink:href="#p" />
|
||||
<use x="324" y="144" xlink:href="#p" />
|
||||
<use x="336" y="144" xlink:href="#p" />
|
||||
<use x="372" y="144" xlink:href="#p" />
|
||||
<use x="384" y="144" xlink:href="#p" />
|
||||
<use x="396" y="144" xlink:href="#p" />
|
||||
<use x="432" y="144" xlink:href="#p" />
|
||||
<use x="444" y="144" xlink:href="#p" />
|
||||
<use x="24" y="156" xlink:href="#p" />
|
||||
<use x="36" y="156" xlink:href="#p" />
|
||||
<use x="60" y="156" xlink:href="#p" />
|
||||
<use x="84" y="156" xlink:href="#p" />
|
||||
<use x="168" y="156" xlink:href="#p" />
|
||||
<use x="192" y="156" xlink:href="#p" />
|
||||
<use x="204" y="156" xlink:href="#p" />
|
||||
<use x="240" y="156" xlink:href="#p" />
|
||||
<use x="264" y="156" xlink:href="#p" />
|
||||
<use x="300" y="156" xlink:href="#p" />
|
||||
<use x="312" y="156" xlink:href="#p" />
|
||||
<use x="324" y="156" xlink:href="#p" />
|
||||
<use x="360" y="156" xlink:href="#p" />
|
||||
<use x="372" y="156" xlink:href="#p" />
|
||||
<use x="384" y="156" xlink:href="#p" />
|
||||
<use x="396" y="156" xlink:href="#p" />
|
||||
<use x="408" y="156" xlink:href="#p" />
|
||||
<use x="420" y="156" xlink:href="#p" />
|
||||
<use x="432" y="156" xlink:href="#p" />
|
||||
<use x="444" y="156" xlink:href="#p" />
|
||||
<use x="24" y="168" xlink:href="#p" />
|
||||
<use x="36" y="168" xlink:href="#p" />
|
||||
<use x="48" y="168" xlink:href="#p" />
|
||||
<use x="60" y="168" xlink:href="#p" />
|
||||
<use x="96" y="168" xlink:href="#p" />
|
||||
<use x="120" y="168" xlink:href="#p" />
|
||||
<use x="192" y="168" xlink:href="#p" />
|
||||
<use x="216" y="168" xlink:href="#p" />
|
||||
<use x="228" y="168" xlink:href="#p" />
|
||||
<use x="240" y="168" xlink:href="#p" />
|
||||
<use x="252" y="168" xlink:href="#p" />
|
||||
<use x="312" y="168" xlink:href="#p" />
|
||||
<use x="324" y="168" xlink:href="#p" />
|
||||
<use x="336" y="168" xlink:href="#p" />
|
||||
<use x="348" y="168" xlink:href="#p" />
|
||||
<use x="360" y="168" xlink:href="#p" />
|
||||
<use x="384" y="168" xlink:href="#p" />
|
||||
<use x="408" y="168" xlink:href="#p" />
|
||||
<use x="420" y="168" xlink:href="#p" />
|
||||
<use x="12" y="180" xlink:href="#p" />
|
||||
<use x="36" y="180" xlink:href="#p" />
|
||||
<use x="84" y="180" xlink:href="#p" />
|
||||
<use x="96" y="180" xlink:href="#p" />
|
||||
<use x="108" y="180" xlink:href="#p" />
|
||||
<use x="120" y="180" xlink:href="#p" />
|
||||
<use x="132" y="180" xlink:href="#p" />
|
||||
<use x="144" y="180" xlink:href="#p" />
|
||||
<use x="168" y="180" xlink:href="#p" />
|
||||
<use x="180" y="180" xlink:href="#p" />
|
||||
<use x="192" y="180" xlink:href="#p" />
|
||||
<use x="204" y="180" xlink:href="#p" />
|
||||
<use x="228" y="180" xlink:href="#p" />
|
||||
<use x="240" y="180" xlink:href="#p" />
|
||||
<use x="252" y="180" xlink:href="#p" />
|
||||
<use x="264" y="180" xlink:href="#p" />
|
||||
<use x="276" y="180" xlink:href="#p" />
|
||||
<use x="288" y="180" xlink:href="#p" />
|
||||
<use x="300" y="180" xlink:href="#p" />
|
||||
<use x="312" y="180" xlink:href="#p" />
|
||||
<use x="324" y="180" xlink:href="#p" />
|
||||
<use x="336" y="180" xlink:href="#p" />
|
||||
<use x="348" y="180" xlink:href="#p" />
|
||||
<use x="372" y="180" xlink:href="#p" />
|
||||
<use x="408" y="180" xlink:href="#p" />
|
||||
<use x="432" y="180" xlink:href="#p" />
|
||||
<use x="444" y="180" xlink:href="#p" />
|
||||
<use x="12" y="192" xlink:href="#p" />
|
||||
<use x="24" y="192" xlink:href="#p" />
|
||||
<use x="60" y="192" xlink:href="#p" />
|
||||
<use x="96" y="192" xlink:href="#p" />
|
||||
<use x="108" y="192" xlink:href="#p" />
|
||||
<use x="120" y="192" xlink:href="#p" />
|
||||
<use x="156" y="192" xlink:href="#p" />
|
||||
<use x="180" y="192" xlink:href="#p" />
|
||||
<use x="192" y="192" xlink:href="#p" />
|
||||
<use x="204" y="192" xlink:href="#p" />
|
||||
<use x="216" y="192" xlink:href="#p" />
|
||||
<use x="228" y="192" xlink:href="#p" />
|
||||
<use x="288" y="192" xlink:href="#p" />
|
||||
<use x="300" y="192" xlink:href="#p" />
|
||||
<use x="324" y="192" xlink:href="#p" />
|
||||
<use x="360" y="192" xlink:href="#p" />
|
||||
<use x="372" y="192" xlink:href="#p" />
|
||||
<use x="384" y="192" xlink:href="#p" />
|
||||
<use x="396" y="192" xlink:href="#p" />
|
||||
<use x="432" y="192" xlink:href="#p" />
|
||||
<use x="72" y="204" xlink:href="#p" />
|
||||
<use x="84" y="204" xlink:href="#p" />
|
||||
<use x="132" y="204" xlink:href="#p" />
|
||||
<use x="144" y="204" xlink:href="#p" />
|
||||
<use x="156" y="204" xlink:href="#p" />
|
||||
<use x="180" y="204" xlink:href="#p" />
|
||||
<use x="216" y="204" xlink:href="#p" />
|
||||
<use x="240" y="204" xlink:href="#p" />
|
||||
<use x="264" y="204" xlink:href="#p" />
|
||||
<use x="276" y="204" xlink:href="#p" />
|
||||
<use x="300" y="204" xlink:href="#p" />
|
||||
<use x="312" y="204" xlink:href="#p" />
|
||||
<use x="324" y="204" xlink:href="#p" />
|
||||
<use x="360" y="204" xlink:href="#p" />
|
||||
<use x="372" y="204" xlink:href="#p" />
|
||||
<use x="396" y="204" xlink:href="#p" />
|
||||
<use x="420" y="204" xlink:href="#p" />
|
||||
<use x="432" y="204" xlink:href="#p" />
|
||||
<use x="444" y="204" xlink:href="#p" />
|
||||
<use x="24" y="216" xlink:href="#p" />
|
||||
<use x="36" y="216" xlink:href="#p" />
|
||||
<use x="48" y="216" xlink:href="#p" />
|
||||
<use x="72" y="216" xlink:href="#p" />
|
||||
<use x="120" y="216" xlink:href="#p" />
|
||||
<use x="168" y="216" xlink:href="#p" />
|
||||
<use x="180" y="216" xlink:href="#p" />
|
||||
<use x="192" y="216" xlink:href="#p" />
|
||||
<use x="276" y="216" xlink:href="#p" />
|
||||
<use x="288" y="216" xlink:href="#p" />
|
||||
<use x="348" y="216" xlink:href="#p" />
|
||||
<use x="360" y="216" xlink:href="#p" />
|
||||
<use x="384" y="216" xlink:href="#p" />
|
||||
<use x="12" y="228" xlink:href="#p" />
|
||||
<use x="24" y="228" xlink:href="#p" />
|
||||
<use x="36" y="228" xlink:href="#p" />
|
||||
<use x="60" y="228" xlink:href="#p" />
|
||||
<use x="84" y="228" xlink:href="#p" />
|
||||
<use x="96" y="228" xlink:href="#p" />
|
||||
<use x="132" y="228" xlink:href="#p" />
|
||||
<use x="156" y="228" xlink:href="#p" />
|
||||
<use x="168" y="228" xlink:href="#p" />
|
||||
<use x="180" y="228" xlink:href="#p" />
|
||||
<use x="204" y="228" xlink:href="#p" />
|
||||
<use x="228" y="228" xlink:href="#p" />
|
||||
<use x="252" y="228" xlink:href="#p" />
|
||||
<use x="264" y="228" xlink:href="#p" />
|
||||
<use x="276" y="228" xlink:href="#p" />
|
||||
<use x="288" y="228" xlink:href="#p" />
|
||||
<use x="312" y="228" xlink:href="#p" />
|
||||
<use x="336" y="228" xlink:href="#p" />
|
||||
<use x="432" y="228" xlink:href="#p" />
|
||||
<use x="444" y="228" xlink:href="#p" />
|
||||
<use x="24" y="240" xlink:href="#p" />
|
||||
<use x="48" y="240" xlink:href="#p" />
|
||||
<use x="60" y="240" xlink:href="#p" />
|
||||
<use x="108" y="240" xlink:href="#p" />
|
||||
<use x="120" y="240" xlink:href="#p" />
|
||||
<use x="168" y="240" xlink:href="#p" />
|
||||
<use x="180" y="240" xlink:href="#p" />
|
||||
<use x="192" y="240" xlink:href="#p" />
|
||||
<use x="264" y="240" xlink:href="#p" />
|
||||
<use x="276" y="240" xlink:href="#p" />
|
||||
<use x="300" y="240" xlink:href="#p" />
|
||||
<use x="324" y="240" xlink:href="#p" />
|
||||
<use x="348" y="240" xlink:href="#p" />
|
||||
<use x="396" y="240" xlink:href="#p" />
|
||||
<use x="432" y="240" xlink:href="#p" />
|
||||
<use x="444" y="240" xlink:href="#p" />
|
||||
<use x="12" y="252" xlink:href="#p" />
|
||||
<use x="24" y="252" xlink:href="#p" />
|
||||
<use x="72" y="252" xlink:href="#p" />
|
||||
<use x="84" y="252" xlink:href="#p" />
|
||||
<use x="108" y="252" xlink:href="#p" />
|
||||
<use x="120" y="252" xlink:href="#p" />
|
||||
<use x="132" y="252" xlink:href="#p" />
|
||||
<use x="144" y="252" xlink:href="#p" />
|
||||
<use x="156" y="252" xlink:href="#p" />
|
||||
<use x="168" y="252" xlink:href="#p" />
|
||||
<use x="216" y="252" xlink:href="#p" />
|
||||
<use x="252" y="252" xlink:href="#p" />
|
||||
<use x="264" y="252" xlink:href="#p" />
|
||||
<use x="288" y="252" xlink:href="#p" />
|
||||
<use x="300" y="252" xlink:href="#p" />
|
||||
<use x="324" y="252" xlink:href="#p" />
|
||||
<use x="360" y="252" xlink:href="#p" />
|
||||
<use x="372" y="252" xlink:href="#p" />
|
||||
<use x="384" y="252" xlink:href="#p" />
|
||||
<use x="396" y="252" xlink:href="#p" />
|
||||
<use x="408" y="252" xlink:href="#p" />
|
||||
<use x="420" y="252" xlink:href="#p" />
|
||||
<use x="432" y="252" xlink:href="#p" />
|
||||
<use x="444" y="252" xlink:href="#p" />
|
||||
<use x="12" y="264" xlink:href="#p" />
|
||||
<use x="48" y="264" xlink:href="#p" />
|
||||
<use x="60" y="264" xlink:href="#p" />
|
||||
<use x="72" y="264" xlink:href="#p" />
|
||||
<use x="96" y="264" xlink:href="#p" />
|
||||
<use x="120" y="264" xlink:href="#p" />
|
||||
<use x="180" y="264" xlink:href="#p" />
|
||||
<use x="192" y="264" xlink:href="#p" />
|
||||
<use x="204" y="264" xlink:href="#p" />
|
||||
<use x="216" y="264" xlink:href="#p" />
|
||||
<use x="228" y="264" xlink:href="#p" />
|
||||
<use x="252" y="264" xlink:href="#p" />
|
||||
<use x="276" y="264" xlink:href="#p" />
|
||||
<use x="360" y="264" xlink:href="#p" />
|
||||
<use x="384" y="264" xlink:href="#p" />
|
||||
<use x="432" y="264" xlink:href="#p" />
|
||||
<use x="12" y="276" xlink:href="#p" />
|
||||
<use x="24" y="276" xlink:href="#p" />
|
||||
<use x="60" y="276" xlink:href="#p" />
|
||||
<use x="72" y="276" xlink:href="#p" />
|
||||
<use x="84" y="276" xlink:href="#p" />
|
||||
<use x="144" y="276" xlink:href="#p" />
|
||||
<use x="156" y="276" xlink:href="#p" />
|
||||
<use x="192" y="276" xlink:href="#p" />
|
||||
<use x="216" y="276" xlink:href="#p" />
|
||||
<use x="228" y="276" xlink:href="#p" />
|
||||
<use x="240" y="276" xlink:href="#p" />
|
||||
<use x="252" y="276" xlink:href="#p" />
|
||||
<use x="288" y="276" xlink:href="#p" />
|
||||
<use x="312" y="276" xlink:href="#p" />
|
||||
<use x="324" y="276" xlink:href="#p" />
|
||||
<use x="336" y="276" xlink:href="#p" />
|
||||
<use x="372" y="276" xlink:href="#p" />
|
||||
<use x="444" y="276" xlink:href="#p" />
|
||||
<use x="48" y="288" xlink:href="#p" />
|
||||
<use x="60" y="288" xlink:href="#p" />
|
||||
<use x="96" y="288" xlink:href="#p" />
|
||||
<use x="132" y="288" xlink:href="#p" />
|
||||
<use x="144" y="288" xlink:href="#p" />
|
||||
<use x="168" y="288" xlink:href="#p" />
|
||||
<use x="192" y="288" xlink:href="#p" />
|
||||
<use x="216" y="288" xlink:href="#p" />
|
||||
<use x="372" y="288" xlink:href="#p" />
|
||||
<use x="384" y="288" xlink:href="#p" />
|
||||
<use x="432" y="288" xlink:href="#p" />
|
||||
<use x="444" y="288" xlink:href="#p" />
|
||||
<use x="12" y="300" xlink:href="#p" />
|
||||
<use x="36" y="300" xlink:href="#p" />
|
||||
<use x="48" y="300" xlink:href="#p" />
|
||||
<use x="84" y="300" xlink:href="#p" />
|
||||
<use x="96" y="300" xlink:href="#p" />
|
||||
<use x="108" y="300" xlink:href="#p" />
|
||||
<use x="132" y="300" xlink:href="#p" />
|
||||
<use x="144" y="300" xlink:href="#p" />
|
||||
<use x="216" y="300" xlink:href="#p" />
|
||||
<use x="228" y="300" xlink:href="#p" />
|
||||
<use x="240" y="300" xlink:href="#p" />
|
||||
<use x="252" y="300" xlink:href="#p" />
|
||||
<use x="264" y="300" xlink:href="#p" />
|
||||
<use x="300" y="300" xlink:href="#p" />
|
||||
<use x="312" y="300" xlink:href="#p" />
|
||||
<use x="324" y="300" xlink:href="#p" />
|
||||
<use x="348" y="300" xlink:href="#p" />
|
||||
<use x="372" y="300" xlink:href="#p" />
|
||||
<use x="396" y="300" xlink:href="#p" />
|
||||
<use x="420" y="300" xlink:href="#p" />
|
||||
<use x="444" y="300" xlink:href="#p" />
|
||||
<use x="12" y="312" xlink:href="#p" />
|
||||
<use x="24" y="312" xlink:href="#p" />
|
||||
<use x="72" y="312" xlink:href="#p" />
|
||||
<use x="108" y="312" xlink:href="#p" />
|
||||
<use x="132" y="312" xlink:href="#p" />
|
||||
<use x="144" y="312" xlink:href="#p" />
|
||||
<use x="192" y="312" xlink:href="#p" />
|
||||
<use x="204" y="312" xlink:href="#p" />
|
||||
<use x="228" y="312" xlink:href="#p" />
|
||||
<use x="240" y="312" xlink:href="#p" />
|
||||
<use x="264" y="312" xlink:href="#p" />
|
||||
<use x="300" y="312" xlink:href="#p" />
|
||||
<use x="336" y="312" xlink:href="#p" />
|
||||
<use x="348" y="312" xlink:href="#p" />
|
||||
<use x="360" y="312" xlink:href="#p" />
|
||||
<use x="384" y="312" xlink:href="#p" />
|
||||
<use x="444" y="312" xlink:href="#p" />
|
||||
<use x="12" y="324" xlink:href="#p" />
|
||||
<use x="48" y="324" xlink:href="#p" />
|
||||
<use x="84" y="324" xlink:href="#p" />
|
||||
<use x="108" y="324" xlink:href="#p" />
|
||||
<use x="120" y="324" xlink:href="#p" />
|
||||
<use x="132" y="324" xlink:href="#p" />
|
||||
<use x="156" y="324" xlink:href="#p" />
|
||||
<use x="168" y="324" xlink:href="#p" />
|
||||
<use x="216" y="324" xlink:href="#p" />
|
||||
<use x="240" y="324" xlink:href="#p" />
|
||||
<use x="264" y="324" xlink:href="#p" />
|
||||
<use x="300" y="324" xlink:href="#p" />
|
||||
<use x="324" y="324" xlink:href="#p" />
|
||||
<use x="336" y="324" xlink:href="#p" />
|
||||
<use x="348" y="324" xlink:href="#p" />
|
||||
<use x="372" y="324" xlink:href="#p" />
|
||||
<use x="384" y="324" xlink:href="#p" />
|
||||
<use x="396" y="324" xlink:href="#p" />
|
||||
<use x="432" y="324" xlink:href="#p" />
|
||||
<use x="444" y="324" xlink:href="#p" />
|
||||
<use x="12" y="336" xlink:href="#p" />
|
||||
<use x="48" y="336" xlink:href="#p" />
|
||||
<use x="60" y="336" xlink:href="#p" />
|
||||
<use x="108" y="336" xlink:href="#p" />
|
||||
<use x="168" y="336" xlink:href="#p" />
|
||||
<use x="180" y="336" xlink:href="#p" />
|
||||
<use x="204" y="336" xlink:href="#p" />
|
||||
<use x="240" y="336" xlink:href="#p" />
|
||||
<use x="252" y="336" xlink:href="#p" />
|
||||
<use x="300" y="336" xlink:href="#p" />
|
||||
<use x="324" y="336" xlink:href="#p" />
|
||||
<use x="336" y="336" xlink:href="#p" />
|
||||
<use x="348" y="336" xlink:href="#p" />
|
||||
<use x="360" y="336" xlink:href="#p" />
|
||||
<use x="384" y="336" xlink:href="#p" />
|
||||
<use x="432" y="336" xlink:href="#p" />
|
||||
<use x="12" y="348" xlink:href="#p" />
|
||||
<use x="36" y="348" xlink:href="#p" />
|
||||
<use x="48" y="348" xlink:href="#p" />
|
||||
<use x="60" y="348" xlink:href="#p" />
|
||||
<use x="72" y="348" xlink:href="#p" />
|
||||
<use x="84" y="348" xlink:href="#p" />
|
||||
<use x="96" y="348" xlink:href="#p" />
|
||||
<use x="120" y="348" xlink:href="#p" />
|
||||
<use x="132" y="348" xlink:href="#p" />
|
||||
<use x="168" y="348" xlink:href="#p" />
|
||||
<use x="180" y="348" xlink:href="#p" />
|
||||
<use x="204" y="348" xlink:href="#p" />
|
||||
<use x="216" y="348" xlink:href="#p" />
|
||||
<use x="240" y="348" xlink:href="#p" />
|
||||
<use x="252" y="348" xlink:href="#p" />
|
||||
<use x="264" y="348" xlink:href="#p" />
|
||||
<use x="276" y="348" xlink:href="#p" />
|
||||
<use x="300" y="348" xlink:href="#p" />
|
||||
<use x="312" y="348" xlink:href="#p" />
|
||||
<use x="348" y="348" xlink:href="#p" />
|
||||
<use x="360" y="348" xlink:href="#p" />
|
||||
<use x="372" y="348" xlink:href="#p" />
|
||||
<use x="384" y="348" xlink:href="#p" />
|
||||
<use x="396" y="348" xlink:href="#p" />
|
||||
<use x="420" y="348" xlink:href="#p" />
|
||||
<use x="432" y="348" xlink:href="#p" />
|
||||
<use x="108" y="360" xlink:href="#p" />
|
||||
<use x="132" y="360" xlink:href="#p" />
|
||||
<use x="144" y="360" xlink:href="#p" />
|
||||
<use x="180" y="360" xlink:href="#p" />
|
||||
<use x="192" y="360" xlink:href="#p" />
|
||||
<use x="204" y="360" xlink:href="#p" />
|
||||
<use x="240" y="360" xlink:href="#p" />
|
||||
<use x="252" y="360" xlink:href="#p" />
|
||||
<use x="276" y="360" xlink:href="#p" />
|
||||
<use x="312" y="360" xlink:href="#p" />
|
||||
<use x="336" y="360" xlink:href="#p" />
|
||||
<use x="348" y="360" xlink:href="#p" />
|
||||
<use x="396" y="360" xlink:href="#p" />
|
||||
<use x="432" y="360" xlink:href="#p" />
|
||||
<use x="12" y="372" xlink:href="#p" />
|
||||
<use x="24" y="372" xlink:href="#p" />
|
||||
<use x="36" y="372" xlink:href="#p" />
|
||||
<use x="48" y="372" xlink:href="#p" />
|
||||
<use x="60" y="372" xlink:href="#p" />
|
||||
<use x="72" y="372" xlink:href="#p" />
|
||||
<use x="84" y="372" xlink:href="#p" />
|
||||
<use x="132" y="372" xlink:href="#p" />
|
||||
<use x="144" y="372" xlink:href="#p" />
|
||||
<use x="168" y="372" xlink:href="#p" />
|
||||
<use x="216" y="372" xlink:href="#p" />
|
||||
<use x="264" y="372" xlink:href="#p" />
|
||||
<use x="276" y="372" xlink:href="#p" />
|
||||
<use x="324" y="372" xlink:href="#p" />
|
||||
<use x="336" y="372" xlink:href="#p" />
|
||||
<use x="348" y="372" xlink:href="#p" />
|
||||
<use x="372" y="372" xlink:href="#p" />
|
||||
<use x="396" y="372" xlink:href="#p" />
|
||||
<use x="408" y="372" xlink:href="#p" />
|
||||
<use x="432" y="372" xlink:href="#p" />
|
||||
<use x="444" y="372" xlink:href="#p" />
|
||||
<use x="12" y="384" xlink:href="#p" />
|
||||
<use x="84" y="384" xlink:href="#p" />
|
||||
<use x="120" y="384" xlink:href="#p" />
|
||||
<use x="156" y="384" xlink:href="#p" />
|
||||
<use x="168" y="384" xlink:href="#p" />
|
||||
<use x="180" y="384" xlink:href="#p" />
|
||||
<use x="228" y="384" xlink:href="#p" />
|
||||
<use x="324" y="384" xlink:href="#p" />
|
||||
<use x="348" y="384" xlink:href="#p" />
|
||||
<use x="396" y="384" xlink:href="#p" />
|
||||
<use x="12" y="396" xlink:href="#p" />
|
||||
<use x="36" y="396" xlink:href="#p" />
|
||||
<use x="48" y="396" xlink:href="#p" />
|
||||
<use x="60" y="396" xlink:href="#p" />
|
||||
<use x="84" y="396" xlink:href="#p" />
|
||||
<use x="108" y="396" xlink:href="#p" />
|
||||
<use x="132" y="396" xlink:href="#p" />
|
||||
<use x="168" y="396" xlink:href="#p" />
|
||||
<use x="180" y="396" xlink:href="#p" />
|
||||
<use x="192" y="396" xlink:href="#p" />
|
||||
<use x="204" y="396" xlink:href="#p" />
|
||||
<use x="216" y="396" xlink:href="#p" />
|
||||
<use x="228" y="396" xlink:href="#p" />
|
||||
<use x="240" y="396" xlink:href="#p" />
|
||||
<use x="252" y="396" xlink:href="#p" />
|
||||
<use x="264" y="396" xlink:href="#p" />
|
||||
<use x="276" y="396" xlink:href="#p" />
|
||||
<use x="300" y="396" xlink:href="#p" />
|
||||
<use x="312" y="396" xlink:href="#p" />
|
||||
<use x="336" y="396" xlink:href="#p" />
|
||||
<use x="348" y="396" xlink:href="#p" />
|
||||
<use x="360" y="396" xlink:href="#p" />
|
||||
<use x="372" y="396" xlink:href="#p" />
|
||||
<use x="384" y="396" xlink:href="#p" />
|
||||
<use x="396" y="396" xlink:href="#p" />
|
||||
<use x="420" y="396" xlink:href="#p" />
|
||||
<use x="432" y="396" xlink:href="#p" />
|
||||
<use x="12" y="408" xlink:href="#p" />
|
||||
<use x="36" y="408" xlink:href="#p" />
|
||||
<use x="48" y="408" xlink:href="#p" />
|
||||
<use x="60" y="408" xlink:href="#p" />
|
||||
<use x="84" y="408" xlink:href="#p" />
|
||||
<use x="108" y="408" xlink:href="#p" />
|
||||
<use x="180" y="408" xlink:href="#p" />
|
||||
<use x="252" y="408" xlink:href="#p" />
|
||||
<use x="264" y="408" xlink:href="#p" />
|
||||
<use x="300" y="408" xlink:href="#p" />
|
||||
<use x="312" y="408" xlink:href="#p" />
|
||||
<use x="372" y="408" xlink:href="#p" />
|
||||
<use x="396" y="408" xlink:href="#p" />
|
||||
<use x="408" y="408" xlink:href="#p" />
|
||||
<use x="12" y="420" xlink:href="#p" />
|
||||
<use x="36" y="420" xlink:href="#p" />
|
||||
<use x="48" y="420" xlink:href="#p" />
|
||||
<use x="60" y="420" xlink:href="#p" />
|
||||
<use x="84" y="420" xlink:href="#p" />
|
||||
<use x="108" y="420" xlink:href="#p" />
|
||||
<use x="120" y="420" xlink:href="#p" />
|
||||
<use x="168" y="420" xlink:href="#p" />
|
||||
<use x="180" y="420" xlink:href="#p" />
|
||||
<use x="204" y="420" xlink:href="#p" />
|
||||
<use x="228" y="420" xlink:href="#p" />
|
||||
<use x="264" y="420" xlink:href="#p" />
|
||||
<use x="276" y="420" xlink:href="#p" />
|
||||
<use x="300" y="420" xlink:href="#p" />
|
||||
<use x="324" y="420" xlink:href="#p" />
|
||||
<use x="336" y="420" xlink:href="#p" />
|
||||
<use x="348" y="420" xlink:href="#p" />
|
||||
<use x="360" y="420" xlink:href="#p" />
|
||||
<use x="384" y="420" xlink:href="#p" />
|
||||
<use x="420" y="420" xlink:href="#p" />
|
||||
<use x="444" y="420" xlink:href="#p" />
|
||||
<use x="12" y="432" xlink:href="#p" />
|
||||
<use x="84" y="432" xlink:href="#p" />
|
||||
<use x="144" y="432" xlink:href="#p" />
|
||||
<use x="168" y="432" xlink:href="#p" />
|
||||
<use x="180" y="432" xlink:href="#p" />
|
||||
<use x="192" y="432" xlink:href="#p" />
|
||||
<use x="228" y="432" xlink:href="#p" />
|
||||
<use x="240" y="432" xlink:href="#p" />
|
||||
<use x="252" y="432" xlink:href="#p" />
|
||||
<use x="276" y="432" xlink:href="#p" />
|
||||
<use x="300" y="432" xlink:href="#p" />
|
||||
<use x="336" y="432" xlink:href="#p" />
|
||||
<use x="348" y="432" xlink:href="#p" />
|
||||
<use x="360" y="432" xlink:href="#p" />
|
||||
<use x="372" y="432" xlink:href="#p" />
|
||||
<use x="444" y="432" xlink:href="#p" />
|
||||
<use x="12" y="444" xlink:href="#p" />
|
||||
<use x="24" y="444" xlink:href="#p" />
|
||||
<use x="36" y="444" xlink:href="#p" />
|
||||
<use x="48" y="444" xlink:href="#p" />
|
||||
<use x="60" y="444" xlink:href="#p" />
|
||||
<use x="72" y="444" xlink:href="#p" />
|
||||
<use x="84" y="444" xlink:href="#p" />
|
||||
<use x="132" y="444" xlink:href="#p" />
|
||||
<use x="168" y="444" xlink:href="#p" />
|
||||
<use x="204" y="444" xlink:href="#p" />
|
||||
<use x="216" y="444" xlink:href="#p" />
|
||||
<use x="240" y="444" xlink:href="#p" />
|
||||
<use x="252" y="444" xlink:href="#p" />
|
||||
<use x="276" y="444" xlink:href="#p" />
|
||||
<use x="288" y="444" xlink:href="#p" />
|
||||
<use x="300" y="444" xlink:href="#p" />
|
||||
<use x="324" y="444" xlink:href="#p" />
|
||||
<use x="336" y="444" xlink:href="#p" />
|
||||
<use x="372" y="444" xlink:href="#p" />
|
||||
<use x="384" y="444" xlink:href="#p" />
|
||||
<use x="408" y="444" xlink:href="#p" />
|
||||
<use x="420" y="444" xlink:href="#p" />
|
||||
<use x="432" y="444" xlink:href="#p" />
|
||||
<use x="444" y="444" xlink:href="#p" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 27 KiB |
@@ -0,0 +1,78 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-button type="primary" @click="dialogVisible = true" plain round>
|
||||
<d2-icon name="question-circle-o" class="d2-mr-5"/>
|
||||
需要帮助吗
|
||||
</el-button>
|
||||
<el-dialog
|
||||
title="帮助"
|
||||
width="600px"
|
||||
:visible.sync="dialogVisible"
|
||||
:append-to-body="true">
|
||||
<div style="margin-top: -25px;">
|
||||
<h2 class="d2-mt-0">
|
||||
这里有一些参考资料
|
||||
</h2>
|
||||
<el-button-group>
|
||||
<el-button @click="$open('https://fairyever.com/d2-admin/doc/zh/')">
|
||||
<d2-icon name="book" class="d2-mr-5"/>
|
||||
文档
|
||||
</el-button>
|
||||
<el-button @click="$open('https://github.com/d2-projects/d2-admin/issues?q=is%3Aissue+is%3Aclosed')">
|
||||
<d2-icon name="question" class="d2-mr-5"/>
|
||||
历史提问
|
||||
</el-button>
|
||||
<el-button @click="$open('https://github.com/d2-projects/d2-admin/issues/new/choose')">
|
||||
<d2-icon name="plus" class="d2-mr-5"/>
|
||||
提交问题
|
||||
</el-button>
|
||||
</el-button-group>
|
||||
<h2>询问其它使用者或作者</h2>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<img src="./image/qq.svg" style="width: 100%;">
|
||||
<div class="d2-help--qr-info">
|
||||
请使用手机 QQ 扫面上方二维码<br/>
|
||||
1群 806395827 (满) | 2群 592981556
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<img src="./image/we.svg" style="width: 100%;">
|
||||
<div class="d2-help--qr-info">
|
||||
请使用手机微信扫面上方二维码<br/>
|
||||
添加作者微信好友,邀请加入微信群
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
dialogVisible: false
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.d2-help--qr-info {
|
||||
background-color: #f4f4f5;
|
||||
color: #909399;
|
||||
width: 100%;
|
||||
padding: 8px 16px;
|
||||
margin: 0;
|
||||
box-sizing: border-box;
|
||||
border-radius: 4px;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
opacity: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
transition: opacity .2s;
|
||||
}
|
||||
</style>
|
||||
@@ -8,9 +8,8 @@
|
||||
<span class="btn-group__btn" @click="$open('https://fairyever.com/d2-admin/doc/zh/')">文档</span> |
|
||||
<span class="btn-group__btn" @click="$open('https://github.com/d2-projects/d2-admin-start-kit')">简化版</span> |
|
||||
<span class="btn-group__btn" @click="$open('https://juejin.im/user/57a48b632e958a006691b946/posts')">掘金</span> |
|
||||
<span class="btn-group__btn" @click="$open('https://daily.fairyever.com')">日报</span> |
|
||||
<el-popover :width="172" trigger="hover">
|
||||
<p class="d2-mt-0 d2-mb-10">D2Projects</p>
|
||||
<p class="d2-mt-0 d2-mb-10">今日前端</p>
|
||||
<img src="./image/qr@2x.png" style="width: 172px;">
|
||||
<span slot="reference" class="btn-group__btn btn-group__btn--link">
|
||||
<d2-icon name="weixin"/>
|
||||
@@ -22,20 +21,20 @@
|
||||
</el-popover>
|
||||
</div>
|
||||
<d2-badge/>
|
||||
<d2-help-btn/>
|
||||
<d2-help/>
|
||||
</template>
|
||||
</d2-page-cover>
|
||||
</d2-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import D2HelpBtn from './components/d2-help-btn'
|
||||
import D2Badge from './components/d2-badge'
|
||||
import D2Help from './components/d2-help'
|
||||
import D2PageCover from './components/d2-page-cover'
|
||||
export default {
|
||||
components: {
|
||||
D2HelpBtn,
|
||||
D2Badge,
|
||||
D2Help,
|
||||
D2PageCover
|
||||
},
|
||||
data () {
|
||||
@@ -54,6 +53,7 @@ export default {
|
||||
.btn-group {
|
||||
color: $color-text-placehoder;
|
||||
font-size: 12px;
|
||||
line-height: 12px;
|
||||
margin-top: 0px;
|
||||
margin-bottom: 20px;
|
||||
.btn-group__btn {
|
||||
|
||||
@@ -56,16 +56,15 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<template slot="footer">
|
||||
<el-button
|
||||
type="primary"
|
||||
size="mini"
|
||||
:loading="uploading"
|
||||
@click="handleUpload">
|
||||
<d2-icon name="cloud-upload"/>
|
||||
Upload {{log.length}} log data
|
||||
</el-button>
|
||||
</template>
|
||||
<el-button
|
||||
slot="footer"
|
||||
type="primary"
|
||||
size="mini"
|
||||
:loading="uploading"
|
||||
@click="handleUpload">
|
||||
<d2-icon name="cloud-upload"/>
|
||||
Upload {{log.length}} log data
|
||||
</el-button>
|
||||
</d2-container>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
import D2ContainerCardBs from '@/components/d2-container/components/d2-container-card-bs.vue'
|
||||
|
||||
describe('d2-container-card-bs', () => {
|
||||
// 存在且是Vue组件实例
|
||||
it('is a vue instance', () => {
|
||||
const wrapper = mount(D2ContainerCardBs)
|
||||
|
||||
expect(wrapper.exists()).toBeTruthy()
|
||||
expect(wrapper.isVueInstance()).toBeTruthy()
|
||||
})
|
||||
|
||||
// 包含特定类名
|
||||
it('contains specific classnames', () => {
|
||||
const wrapper = mount(D2ContainerCardBs, {
|
||||
slots: {
|
||||
default: '<div>body</div>',
|
||||
header: '<div>header</div>',
|
||||
footer: '<div>footer</div>'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.is('.d2-container-card-bs')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-card-bs__header')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-card-bs__body')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-card-bs__body-card')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-card-bs__footer')).toBeTruthy()
|
||||
})
|
||||
|
||||
// props
|
||||
it('has props', () => {
|
||||
const wrapper = mount(D2ContainerCardBs, {
|
||||
propsData: {
|
||||
betterScrollOptions: {}
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.props().betterScrollOptions).toEqual({})
|
||||
})
|
||||
|
||||
// 渲染slot
|
||||
it('has one or more slots', () => {
|
||||
const wrapper = mount(D2ContainerCardBs, {
|
||||
slots: {
|
||||
default: '<div>body</div>',
|
||||
header: '<div>header</div>',
|
||||
footer: '<div>footer</div>'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.text()).toMatch('header')
|
||||
expect(wrapper.text()).toMatch('body')
|
||||
expect(wrapper.text()).toMatch('footer')
|
||||
})
|
||||
})
|
||||
@@ -1,55 +0,0 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
import D2ContainerCard from '@/components/d2-container/components/d2-container-card.vue'
|
||||
|
||||
describe('d2-container-card', () => {
|
||||
// 存在且是Vue组件实例
|
||||
it('is a vue instance', () => {
|
||||
const wrapper = mount(D2ContainerCard)
|
||||
|
||||
expect(wrapper.exists()).toBeTruthy()
|
||||
expect(wrapper.isVueInstance()).toBeTruthy()
|
||||
})
|
||||
|
||||
// 包含特定类名
|
||||
it('contains specific classnames', () => {
|
||||
const wrapper = mount(D2ContainerCard, {
|
||||
slots: {
|
||||
default: '<div>body</div>',
|
||||
header: '<div>header</div>',
|
||||
footer: '<div>footer</div>'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.is('.d2-container-card')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-card__header')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-card__body')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-card__body-card')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-card__footer')).toBeTruthy()
|
||||
})
|
||||
|
||||
// props
|
||||
it('has props', () => {
|
||||
const wrapper = mount(D2ContainerCard, {
|
||||
propsData: {
|
||||
scrollDelay: 30
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.props().scrollDelay).toEqual(30)
|
||||
})
|
||||
|
||||
// 渲染slot
|
||||
it('has one or more slots', () => {
|
||||
const wrapper = mount(D2ContainerCard, {
|
||||
slots: {
|
||||
default: '<div>body</div>',
|
||||
header: '<div>header</div>',
|
||||
footer: '<div>footer</div>'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.text()).toMatch('header')
|
||||
expect(wrapper.text()).toMatch('body')
|
||||
expect(wrapper.text()).toMatch('footer')
|
||||
})
|
||||
})
|
||||
@@ -1,35 +0,0 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
import D2ContainerFrame from '@/components/d2-container-frame/index.vue'
|
||||
|
||||
describe('d2-container-frame', () => {
|
||||
// 存在且是Vue组件实例
|
||||
it('is a vue instance', () => {
|
||||
const wrapper = mount(D2ContainerFrame, {
|
||||
stubs: ['d2-container']
|
||||
})
|
||||
|
||||
expect(wrapper.exists()).toBeTruthy()
|
||||
expect(wrapper.isVueInstance()).toBeTruthy()
|
||||
})
|
||||
|
||||
// 包含特定类名
|
||||
it('contains specific classnames', () => {
|
||||
const wrapper = mount(D2ContainerFrame, {
|
||||
stubs: ['d2-container']
|
||||
})
|
||||
|
||||
expect(wrapper.contains('.d2-container-frame')).toBeTruthy()
|
||||
})
|
||||
|
||||
// props
|
||||
it('has props', () => {
|
||||
const wrapper = mount(D2ContainerFrame, {
|
||||
stubs: ['d2-container'],
|
||||
propsData: {
|
||||
src: 'https://fairyever.com/d2-admin/doc/zh/'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.props().src).toEqual('https://fairyever.com/d2-admin/doc/zh/')
|
||||
})
|
||||
})
|
||||
@@ -1,55 +0,0 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
import D2ContainerFullBs from '@/components/d2-container/components/d2-container-full-bs.vue'
|
||||
|
||||
describe('d2-container-full-bs', () => {
|
||||
// 存在且是Vue组件实例
|
||||
it('is a vue instance', () => {
|
||||
const wrapper = mount(D2ContainerFullBs)
|
||||
|
||||
expect(wrapper.exists()).toBeTruthy()
|
||||
expect(wrapper.isVueInstance()).toBeTruthy()
|
||||
})
|
||||
|
||||
// 包含特定类名
|
||||
it('contains specific classnames', () => {
|
||||
const wrapper = mount(D2ContainerFullBs, {
|
||||
slots: {
|
||||
default: '<div>body</div>',
|
||||
header: '<div>header</div>',
|
||||
footer: '<div>footer</div>'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.is('.d2-container-full-bs')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-full-bs__header')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-full-bs__body')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-full-bs__body-wrapper-inner')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-full-bs__footer')).toBeTruthy()
|
||||
})
|
||||
|
||||
// props
|
||||
it('has props', () => {
|
||||
const wrapper = mount(D2ContainerFullBs, {
|
||||
propsData: {
|
||||
betterScrollOptions: {}
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.props().betterScrollOptions).toEqual({})
|
||||
})
|
||||
|
||||
// 渲染slot
|
||||
it('has one or more slots', () => {
|
||||
const wrapper = mount(D2ContainerFullBs, {
|
||||
slots: {
|
||||
default: '<div>body</div>',
|
||||
header: '<div>header</div>',
|
||||
footer: '<div>footer</div>'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.text()).toMatch('header')
|
||||
expect(wrapper.text()).toMatch('body')
|
||||
expect(wrapper.text()).toMatch('footer')
|
||||
})
|
||||
})
|
||||
@@ -1,54 +0,0 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
import D2ContainerFull from '@/components/d2-container/components/d2-container-full.vue'
|
||||
|
||||
describe('d2-container-full', () => {
|
||||
// 存在且是Vue组件实例
|
||||
it('is a vue instance', () => {
|
||||
const wrapper = mount(D2ContainerFull)
|
||||
|
||||
expect(wrapper.exists()).toBeTruthy()
|
||||
expect(wrapper.isVueInstance()).toBeTruthy()
|
||||
})
|
||||
|
||||
// 包含特定类名
|
||||
it('contains specific classnames', () => {
|
||||
const wrapper = mount(D2ContainerFull, {
|
||||
slots: {
|
||||
default: '<div>body</div>',
|
||||
header: '<div>header</div>',
|
||||
footer: '<div>footer</div>'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.is('.d2-container-full')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-full__header')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-full__body')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-full__footer')).toBeTruthy()
|
||||
})
|
||||
|
||||
// props
|
||||
it('has props', () => {
|
||||
const wrapper = mount(D2ContainerFull, {
|
||||
propsData: {
|
||||
scrollDelay: 30
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.props().scrollDelay).toEqual(30)
|
||||
})
|
||||
|
||||
// 渲染slot
|
||||
it('has one or more slots', () => {
|
||||
const wrapper = mount(D2ContainerFull, {
|
||||
slots: {
|
||||
default: '<div>body</div>',
|
||||
header: '<div>header</div>',
|
||||
footer: '<div>footer</div>'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.text()).toMatch('header')
|
||||
expect(wrapper.text()).toMatch('body')
|
||||
expect(wrapper.text()).toMatch('footer')
|
||||
})
|
||||
})
|
||||
@@ -1,65 +0,0 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
import D2ContainerGhostBs from '@/components/d2-container/components/d2-container-ghost-bs.vue'
|
||||
|
||||
describe('d2-container-ghost-bs', () => {
|
||||
// 存在且是Vue组件实例
|
||||
it('is a vue instance', () => {
|
||||
const wrapper = mount(D2ContainerGhostBs, {
|
||||
slots: {
|
||||
default: '<div>body</div>',
|
||||
header: '<div>header</div>',
|
||||
footer: '<div>footer</div>'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.exists()).toBeTruthy()
|
||||
expect(wrapper.isVueInstance()).toBeTruthy()
|
||||
})
|
||||
|
||||
// 包含特定类名
|
||||
it('contains specific classnames', () => {
|
||||
const wrapper = mount(D2ContainerGhostBs, {
|
||||
slots: {
|
||||
default: '<div>body</div>',
|
||||
header: '<div>header</div>',
|
||||
footer: '<div>footer</div>'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.is('.d2-container-ghost-bs')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-ghost-bs__header')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-ghost-bs__body')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-ghost-bs__footer')).toBeTruthy()
|
||||
})
|
||||
|
||||
// props
|
||||
it('has props', () => {
|
||||
const wrapper = mount(D2ContainerGhostBs, {
|
||||
slots: {
|
||||
default: '<div>body</div>',
|
||||
header: '<div>header</div>',
|
||||
footer: '<div>footer</div>'
|
||||
},
|
||||
propsData: {
|
||||
betterScrollOptions: {}
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.props().betterScrollOptions).toEqual({})
|
||||
})
|
||||
|
||||
// 渲染slot
|
||||
it('has one or more slots', () => {
|
||||
const wrapper = mount(D2ContainerGhostBs, {
|
||||
slots: {
|
||||
default: '<div>body</div>',
|
||||
header: '<div>header</div>',
|
||||
footer: '<div>footer</div>'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.text()).toMatch('header')
|
||||
expect(wrapper.text()).toMatch('body')
|
||||
expect(wrapper.text()).toMatch('footer')
|
||||
})
|
||||
})
|
||||
@@ -1,54 +0,0 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
import D2ContainerGhost from '@/components/d2-container/components/d2-container-ghost.vue'
|
||||
|
||||
describe('d2-container-ghost', () => {
|
||||
// 存在且是Vue组件实例
|
||||
it('is a vue instance', () => {
|
||||
const wrapper = mount(D2ContainerGhost)
|
||||
|
||||
expect(wrapper.exists()).toBeTruthy()
|
||||
expect(wrapper.isVueInstance()).toBeTruthy()
|
||||
})
|
||||
|
||||
// 包含特定类名
|
||||
it('contains specific classnames', () => {
|
||||
const wrapper = mount(D2ContainerGhost, {
|
||||
slots: {
|
||||
default: '<div>body</div>',
|
||||
header: '<div>header</div>',
|
||||
footer: '<div>footer</div>'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.is('.d2-container-ghost')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-ghost__header')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-ghost__body')).toBeTruthy()
|
||||
expect(wrapper.contains('.d2-container-ghost__footer')).toBeTruthy()
|
||||
})
|
||||
|
||||
// props
|
||||
it('has props', () => {
|
||||
const wrapper = mount(D2ContainerGhost, {
|
||||
propsData: {
|
||||
scrollDelay: 30
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.props().scrollDelay).toEqual(30)
|
||||
})
|
||||
|
||||
// 渲染slot
|
||||
it('has one or more slots', () => {
|
||||
const wrapper = mount(D2ContainerGhost, {
|
||||
slots: {
|
||||
default: '<div>body</div>',
|
||||
header: '<div>header</div>',
|
||||
footer: '<div>footer</div>'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.text()).toMatch('header')
|
||||
expect(wrapper.text()).toMatch('body')
|
||||
expect(wrapper.text()).toMatch('footer')
|
||||
})
|
||||
})
|
||||
@@ -1,27 +0,0 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
import D2IconSvg from '@/components/d2-icon-svg/index.vue'
|
||||
|
||||
describe('d2-icon-svg', () => {
|
||||
// 存在且是Vue组件实例
|
||||
it('is a vue instance', () => {
|
||||
const wrapper = mount(D2IconSvg, {
|
||||
propsData: {
|
||||
name: 'add'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.exists()).toBeTruthy()
|
||||
expect(wrapper.isVueInstance()).toBeTruthy()
|
||||
})
|
||||
|
||||
// props
|
||||
it('has props', () => {
|
||||
const wrapper = mount(D2IconSvg, {
|
||||
propsData: {
|
||||
name: 'add'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.props().name).toEqual('add')
|
||||
})
|
||||
})
|
||||
@@ -1,31 +0,0 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
import D2Icon from '@/components/d2-icon/index.vue'
|
||||
|
||||
describe('d2-icon', () => {
|
||||
// 存在且是Vue组件实例
|
||||
it('is a vue instance', () => {
|
||||
const wrapper = mount(D2Icon)
|
||||
|
||||
expect(wrapper.exists()).toBeTruthy()
|
||||
expect(wrapper.isVueInstance()).toBeTruthy()
|
||||
})
|
||||
|
||||
// 包含特定类名
|
||||
it('contains specific classnames', () => {
|
||||
const wrapper = mount(D2Icon)
|
||||
|
||||
expect(wrapper.is('.fa')).toBeTruthy()
|
||||
expect(wrapper.contains('.fa-font-awesome')).toBeTruthy()
|
||||
})
|
||||
|
||||
// props
|
||||
it('has props', () => {
|
||||
const wrapper = mount(D2Icon, {
|
||||
propsData: {
|
||||
name: 'font-awesome'
|
||||
}
|
||||
})
|
||||
|
||||
expect(wrapper.props().name).toEqual('font-awesome')
|
||||
})
|
||||
})
|
||||
+56
-4
@@ -1,7 +1,8 @@
|
||||
const CompressionWebpackPlugin = require('compression-webpack-plugin')
|
||||
const VueFilenameInjector = require('@d2-projects/vue-filename-injector')
|
||||
|
||||
const ThemeColorReplacer = require('webpack-theme-color-replacer')
|
||||
const forElementUI = require('webpack-theme-color-replacer/forElementUI')
|
||||
const cdnDependencies = require('./dependencies-cdn')
|
||||
|
||||
// 拼接路径
|
||||
const resolve = dir => require('path').join(__dirname, dir)
|
||||
@@ -13,6 +14,16 @@ process.env.VUE_APP_BUILD_TIME = require('dayjs')().format('YYYY-M-D HH:mm:ss')
|
||||
// 基础路径 注意发布之前要先修改这里
|
||||
let publicPath = process.env.VUE_APP_PUBLIC_PATH || '/'
|
||||
|
||||
// 设置不参与构建的库
|
||||
let externals = {}
|
||||
cdnDependencies.forEach(package => { externals[package.name] = package.library })
|
||||
|
||||
// 引入文件的 cdn 链接
|
||||
const cdn = {
|
||||
css: cdnDependencies.map(e => e.css).filter(e => e),
|
||||
js: cdnDependencies.map(e => e.js).filter(e => e)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
// 根据你的实际情况更改这里
|
||||
publicPath,
|
||||
@@ -24,12 +35,46 @@ module.exports = {
|
||||
loaderOptions: {
|
||||
// 设置 scss 公用变量文件
|
||||
sass: {
|
||||
data: `@import '~@/assets/style/public.scss';`
|
||||
prependData: `@import '~@/assets/style/public.scss';`
|
||||
}
|
||||
}
|
||||
},
|
||||
configureWebpack: config => {
|
||||
const configNew = {}
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
configNew.externals = externals
|
||||
configNew.plugins = [
|
||||
// gzip
|
||||
new CompressionWebpackPlugin({
|
||||
filename: '[path].gz[query]',
|
||||
test: new RegExp('\\.(' + ['js', 'css'].join('|') + ')$'),
|
||||
threshold: 10240,
|
||||
minRatio: 0.8,
|
||||
deleteOriginalAssets: false
|
||||
})
|
||||
]
|
||||
}
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
// 关闭 host check,方便使用 ngrok 之类的内网转发工具
|
||||
configNew.devServer = {
|
||||
disableHostCheck: true
|
||||
}
|
||||
}
|
||||
return configNew
|
||||
},
|
||||
// 默认设置: https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-service/lib/config/base.js
|
||||
chainWebpack: config => {
|
||||
/**
|
||||
* 添加 CDN 参数到 htmlWebpackPlugin 配置中
|
||||
*/
|
||||
config.plugin('html').tap(args => {
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
args[0].cdn = cdn
|
||||
} else {
|
||||
args[0].cdn = []
|
||||
}
|
||||
return args
|
||||
})
|
||||
/**
|
||||
* 删除懒加载模块的 prefetch preload,降低带宽压力
|
||||
* https://cli.vuejs.org/zh/guide/html-and-static-assets.html#prefetch
|
||||
@@ -53,9 +98,8 @@ module.exports = {
|
||||
changeSelector: forElementUI.changeSelector
|
||||
}])
|
||||
config
|
||||
// 开发环境
|
||||
// 开发环境 sourcemap 不包含列信息
|
||||
.when(process.env.NODE_ENV === 'development',
|
||||
// sourcemap不包含列信息
|
||||
config => config.devtool('cheap-source-map')
|
||||
)
|
||||
// 预览环境构建 vue-loader 添加 filename
|
||||
@@ -101,7 +145,15 @@ module.exports = {
|
||||
.add('@/mock')
|
||||
.end()
|
||||
}
|
||||
// 分析工具
|
||||
if (process.env.npm_config_report) {
|
||||
config
|
||||
.plugin('webpack-bundle-analyzer')
|
||||
.use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
|
||||
}
|
||||
},
|
||||
// 不输出 map 文件
|
||||
productionSourceMap: false,
|
||||
// i18n
|
||||
pluginOptions: {
|
||||
i18n: {
|
||||
|
||||
Reference in New Issue
Block a user