```
+同时您可以将您的项目汇报给我们,优秀项目我们会放置在 D2Admin 相关位置并帮助您宣传。
+
## 加入我们
D2Admin 是完全开源免费的项目,旨在帮助开发者更方便地进行管理系统开发,同时也提供 2000 人的 QQ 交流群和微信群,前后端的朋友可以相互答疑,项目组成员全部在内,所有 D2 相关项目使用问题欢迎在群内提问。
diff --git a/doc/CH.md b/doc/CH.md
index 369932cf..1e2f03b2 100644
--- a/doc/CH.md
+++ b/doc/CH.md
@@ -98,6 +98,22 @@
| D2 CRUD | [Github](https://github.com/d2-projects/d2-crud) | [预览](https://d2-projects.github.io/d2-admin/#/demo/d2-crud/index) | 表格常用操作封装 |
| D2 Ribbons | [Github](https://github.com/d2-projects/d2-ribbons) | [预览](https://github.com/d2-projects/d2-ribbons) | 开源项目徽标库 |
+## 徽章
+
+如果您的开源项目基于 D2Admin 开发,请在您的 README 添加下面的徽章:
+
+
+
+
+
+复制下面代码加入到 README 中即可:
+
+``` html
+
+```
+
+同时您可以将您的项目汇报给我们,优秀项目我们会放置在 D2Admin 相关位置并帮助您宣传。
+
## 加入我们
D2Admin 是完全开源免费的项目,旨在帮助开发者更方便地进行管理系统开发,同时也提供 2000 人的 QQ 交流群和微信群,前后端的朋友可以相互答疑,项目组成员全部在内,所有 D2 相关项目使用问题欢迎在群内提问。
From 30f67d7fa5ab853db5f1f4abe414a084e71bc167 Mon Sep 17 00:00:00 2001
From: liyang <1711467488@qq.com>
Date: Tue, 11 Sep 2018 08:50:18 +0800
Subject: [PATCH 2/9] =?UTF-8?q?=E5=9C=A8=E7=BC=93=E5=AD=98=E8=AE=BE?=
=?UTF-8?q?=E7=BD=AE=E4=B8=AD=E5=88=A0=E9=99=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Former-commit-id: d2e6d45be9e79abb643958480f65ffd56db429b1 [formerly d2e6d45be9e79abb643958480f65ffd56db429b1 [formerly d2e6d45be9e79abb643958480f65ffd56db429b1 [formerly d2e6d45be9e79abb643958480f65ffd56db429b1 [formerly 5d1132f35914405de5fc84bb4cac0ee46a30cc9c [formerly 66566d20e8084089424b7b4ba41bc17d24988d46]]]]]
Former-commit-id: b1ec14cfa928d8ce273ee8c4b3befccd4dfa4d04
Former-commit-id: 9f7dd61f9224e9c461221aa84e7d8bff6cf830c0
Former-commit-id: 4290a74559e2491b6a80588fd85b988afa77338c [formerly 80c69ce60678baea8d62269fbae23553b6b13677]
Former-commit-id: a5abba411bb53cddaeb0746a60f382e1c973dd58
Former-commit-id: cd8040bde5092645b65451693bb9d912838da2e8
Former-commit-id: 0beca05b15e8742bf1b7c66e48e43a8d33ba4628
Former-commit-id: 08c13769901dd86cb5a2133a1edca815c742c8b7
Former-commit-id: ffab044bd3160bb6bda7ff8af39644d2d68b7c97
---
src/store/modules/d2admin/modules/page.js | 315 ------------------
.../d2admin/modules/page.js.REMOVED.git-id | 1 +
2 files changed, 1 insertion(+), 315 deletions(-)
delete mode 100644 src/store/modules/d2admin/modules/page.js
create mode 100644 src/store/modules/d2admin/modules/page.js.REMOVED.git-id
diff --git a/src/store/modules/d2admin/modules/page.js b/src/store/modules/d2admin/modules/page.js
deleted file mode 100644
index c2f51013..00000000
--- a/src/store/modules/d2admin/modules/page.js
+++ /dev/null
@@ -1,315 +0,0 @@
-// 设置文件
-import setting from '@/setting.js'
-
-export default {
- namespaced: true,
- state: {
- // 可以在多页 tab 模式下显示的页面
- pool: [],
- // 当前显示的多页面列表
- opened: setting.page.opened,
- // 当前页面
- current: '',
- // 需要缓存的页面 name
- keepAlive: []
- },
- mutations: {
- /**
- * @class keepAlive
- * @description 从已经打开的页面记录中更新需要缓存的页面记录
- * @param {Object} state vuex state
- */
- updateKeepAliveFromOpened (state) {
- state.keepAlive = state.opened.filter(item => {
- if (item.meta) {
- if (item.meta.notCache) {
- return false
- }
- }
- return true
- }).map(e => e.name)
- },
- /**
- * @class current
- * @description 打开一个新的页面
- * @param {Object} state vuex state
- * @param {Object} param { name, params, query } 路由信息
- */
- open (state, { name, params, query }) {
- // 已经打开的页面
- let opened = state.opened
- // 判断此页面是否已经打开 并且记录位置
- let pageOpendIndex = 0
- const pageOpend = opened.find((page, index) => {
- const same = page.name === name
- pageOpendIndex = same ? index : pageOpendIndex
- return same
- })
- if (pageOpend) {
- // 页面以前打开过 但是新的页面可能 name 一样,参数不一样
- this.commit('d2admin/page/openedUpdate', {
- index: pageOpendIndex,
- params,
- query
- })
- } else {
- // 页面以前没有打开过
- let page = state.pool.find(t => t.name === name)
- if (page) {
- this.commit('d2admin/page/add', {
- tag: page,
- params,
- query
- })
- }
- }
- this.commit('d2admin/page/currentSet', name)
- },
- /**
- * @class current
- * @description 设置当前激活的页面 name
- * @param {Object} state vuex state
- * @param {String} name new name
- */
- currentSet (state, name) {
- state.current = name
- },
- /**
- * @class opened
- * @description 更新页面列表上的某一项
- * @param {Object} state vuex state
- * @param {Object} param { index, params, query } 路由信息
- */
- openedUpdate (state, { index, params, query }) {
- // 更新页面列表某一项
- let page = state.opened[index]
- page.params = params || page.params
- page.query = query || page.query
- state.opened.splice(index, 1, page)
- // 持久化
- this.commit('d2admin/page/opend2db')
- },
- /**
- * 将 opened 属性赋值并持久化 在这之前请先确保已经更新了 state.opened
- * @param {Object} state vuex state
- */
- opend2db (state) {
- this.dispatch('d2admin/db/set', {
- dbName: 'sys',
- path: 'page.opened',
- value: state.opened,
- user: true
- })
- },
- /**
- * @class opened
- * @description 从持久化数据载入分页列表
- * @param {Object} state vuex state
- */
- async openedLoad (state) {
- // store 赋值
- const value = await this.dispatch('d2admin/db/get', {
- dbName: 'sys',
- path: 'page.opened',
- defaultValue: setting.page.opened,
- user: true
- })
- // 在处理函数中进行数据优化 过滤掉现在已经失效的页签或者已经改变了信息的页签
- // 以 name 字段为准
- // 如果页面过多的话可能需要优化算法
- // valid 有效列表 1, 1, 0, 1 => 有效, 有效, 失效, 有效
- const valid = []
- // 处理数据
- state.opened = value.map(opened => {
- // 忽略首页
- if (opened.name === 'index') {
- valid.push(1)
- return opened
- }
- // 尝试在所有的支持多标签页的页面里找到 name 匹配的页面
- const find = state.pool.find(item => item.name === opened.name)
- // 记录有效或无效信息
- valid.push(find ? 1 : 0)
- // 返回合并后的数据 新的覆盖旧的
- // 新的数据中一般不会携带 params 和 query, 所以旧的参数会留存
- return Object.assign({}, opened, find)
- }).filter((opened, index) => valid[index] === 1)
- },
- /**
- * @class opened
- * @description 新增一个 tag (打开一个页面)
- * @param {Object} state vuex state
- * @param {Object} param new tag info
- */
- add (state, { tag, params, query }) {
- // 设置新的 tag 在新打开一个以前没打开过的页面时使用
- let newTag = tag
- newTag.params = params || newTag.params
- newTag.query = query || newTag.query
- // 添加进当前显示的页面数组
- state.opened.push(newTag)
- // 持久化
- this.commit('d2admin/page/opend2db')
- },
- /**
- * @class opened
- * @description 关闭一个 tag (关闭一个页面)
- * @param {Object} state vuex state
- * @param {Object} param { tagName: 要关闭的标签名字, vm: vue }
- */
- close (state, { tagName, vm }) {
- // 下个新的页面
- let newPage = state.opened[0]
- const isCurrent = state.current === tagName
- // 如果关闭的页面就是当前显示的页面
- if (isCurrent) {
- // 去找一个新的页面
- let len = state.opened.length
- for (let i = 1; i < len; i++) {
- if (state.opened[i].name === tagName) {
- if (i < len - 1) {
- newPage = state.opened[i + 1]
- } else {
- newPage = state.opened[i - 1]
- }
- break
- }
- }
- }
- // 找到这个页面在已经打开的数据里是第几个
- const index = state.opened.findIndex(page => page.name === tagName)
- if (index >= 0) {
- state.opened.splice(index, 1)
- }
- // 持久化
- this.commit('d2admin/page/opend2db')
- // 最后需要判断是否需要跳到首页
- if (isCurrent) {
- const { name = '', params = {}, query = {} } = newPage
- let routerObj = {
- name,
- params,
- query
- }
- vm.$router.push(routerObj)
- }
- },
- /**
- * @class opened
- * @description 关闭当前标签左边的标签
- * @param {Object} state vuex state
- * @param {Object} param { pageSelect: 当前选中的tagName, vm: vue }
- */
- closeLeft (state, { pageSelect, vm } = {}) {
- const pageAim = pageSelect || state.current
- let currentIndex = 0
- state.opened.forEach((page, index) => {
- if (page.name === pageAim) {
- currentIndex = index
- }
- })
- if (currentIndex > 0) {
- state.opened.splice(1, currentIndex - 1)
- }
- state.current = pageAim
- if (vm && vm.$route.name !== pageAim) {
- vm.$router.push({
- name: pageAim
- })
- }
- // 持久化
- this.commit('d2admin/page/opend2db')
- },
- /**
- * @class opened
- * @description 关闭当前标签右边的标签
- * @param {Object} state vuex state
- * @param {Object} param { pageSelect: 当前选中的tagName, vm: vue }
- */
- closeRight (state, { pageSelect, vm } = {}) {
- const pageAim = pageSelect || state.current
- let currentIndex = 0
- state.opened.forEach((page, index) => {
- if (page.name === pageAim) {
- currentIndex = index
- }
- })
- state.opened.splice(currentIndex + 1)
- state.current = pageAim
- if (vm && vm.$route.name !== pageAim) {
- vm.$router.push({
- name: pageAim
- })
- }
- // 持久化
- this.commit('d2admin/page/opend2db')
- },
- /**
- * @class opened
- * @description 关闭当前激活之外的 tag
- * @param {Object} state vuex state
- * @param {Object} param { pageSelect: 当前选中的tagName, vm: vue }
- */
- closeOther (state, { pageSelect, vm } = {}) {
- const pageAim = pageSelect || state.current
- let currentIndex = 0
- state.opened.forEach((page, index) => {
- if (page.name === pageAim) {
- currentIndex = index
- }
- })
- if (currentIndex === 0) {
- state.opened.splice(1)
- } else {
- state.opened.splice(currentIndex + 1)
- state.opened.splice(1, currentIndex - 1)
- }
- state.current = pageAim
- if (vm && vm.$route.name !== pageAim) {
- vm.$router.push({
- name: pageAim
- })
- }
- // 持久化
- this.commit('d2admin/page/opend2db')
- },
- /**
- * @class opened
- * @description 关闭所有 tag
- * @param {Object} state vuex state
- * @param {Object} vm vue
- */
- closeAll (state, vm) {
- state.opened.splice(1)
- // 持久化
- this.commit('d2admin/page/opend2db')
- // 关闭所有的标签页后需要判断一次现在是不是在首页
- if (vm.$route.name !== 'index') {
- vm.$router.push({
- name: 'index'
- })
- }
- },
- /**
- * @class pool
- * @description 保存 pool (候选池)
- * @param {Object} state vuex state
- * @param {Array} routes routes
- */
- init (state, routes) {
- const pool = []
- const push = function (routes) {
- routes.forEach(route => {
- if (route.children) {
- push(route.children)
- } else {
- const { meta, name, path } = route
- pool.push({ meta, name, path })
- }
- })
- }
- push(routes)
- state.pool = pool
- }
- }
-}
diff --git a/src/store/modules/d2admin/modules/page.js.REMOVED.git-id b/src/store/modules/d2admin/modules/page.js.REMOVED.git-id
new file mode 100644
index 00000000..8b489c6a
--- /dev/null
+++ b/src/store/modules/d2admin/modules/page.js.REMOVED.git-id
@@ -0,0 +1 @@
+3ea93a47151c1e74b0de50125934245e1917cb89
\ No newline at end of file
From dcaca434aff74481c038fc42955150271f70c97b Mon Sep 17 00:00:00 2001
From: liyang <1711467488@qq.com>
Date: Tue, 11 Sep 2018 10:28:47 +0800
Subject: [PATCH 3/9] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=AD=97=E4=BD=93?=
=?UTF-8?q?=E5=A4=A7=E5=B0=8F=E5=90=8E=E9=87=8D=E6=96=B0=E5=8A=A0=E8=BD=BD?=
=?UTF-8?q?=E9=A1=B5=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Former-commit-id: 8bd2181aebe2d5bb0031d3f14285d99dd71cd600 [formerly 51cfdcb33fea7ed230623e6af1c6fabf82f46385] [formerly 8bd2181aebe2d5bb0031d3f14285d99dd71cd600 [formerly 51cfdcb33fea7ed230623e6af1c6fabf82f46385] [formerly 8bd2181aebe2d5bb0031d3f14285d99dd71cd600 [formerly 51cfdcb33fea7ed230623e6af1c6fabf82f46385] [formerly 51cfdcb33fea7ed230623e6af1c6fabf82f46385 [formerly 3971f03675e8e0821dbd3f368256e16a994b6e51 [formerly 776505901685f2c95336c3c436d2534b31f398a8]]]]]
Former-commit-id: 2f6323c1e76bde0b8ab10eba2a682e1002dbb5db
Former-commit-id: f3022bef3c6cbc5a692597c92469bdac1949765b
Former-commit-id: ff9779ffcd0a7249242431e09ac9dd1115282d4a [formerly 0ddfd187a6f0078ccb8f6c73b4486221c5a23a06]
Former-commit-id: 753bce6ee4c53f6ae3d635d4756562ce75bf5ad1
Former-commit-id: 90faedc34e09c7caea4ab6c86835f19963121d45
Former-commit-id: e51610d40966f4b6ef460e6c350a61e51fbf52c9
Former-commit-id: ce9941f577755eae35b65f684bf2c937fd2aeaac
Former-commit-id: dfc181c42686598941822acffe437e596550c01d
---
.../components/header-size/index.vue | 24 ++++++++++++-------
src/pages/redirect/index.vue | 12 ++++++++++
src/router/routes.js.REMOVED.git-id | 2 +-
.../d2admin/modules/page.js.REMOVED.git-id | 2 +-
4 files changed, 29 insertions(+), 11 deletions(-)
create mode 100755 src/pages/redirect/index.vue
diff --git a/src/layout/header-aside/components/header-size/index.vue b/src/layout/header-aside/components/header-size/index.vue
index b13b0783..140cca8d 100644
--- a/src/layout/header-aside/components/header-size/index.vue
+++ b/src/layout/header-aside/components/header-size/index.vue
@@ -4,7 +4,7 @@