Merge branch 'feature/store-module' into develop

# Conflicts:
#	src/pages/demo/playground/store/menu/index.vue


Former-commit-id: 77cb9e9175b35a94c8c5cbefb6981f75718bf282 [formerly 77cb9e9175b35a94c8c5cbefb6981f75718bf282 [formerly 77cb9e9175b35a94c8c5cbefb6981f75718bf282 [formerly 77cb9e9175b35a94c8c5cbefb6981f75718bf282 [formerly 6ebe5372a382d911bdbe82f5a1867f72ab58f286 [formerly f7811326ccd36bd64b92f6c3094060be390a2b76]]]]]
Former-commit-id: 1a0ec7498901cca64a7d12c2b2c8f13ae701ca21
Former-commit-id: 3531de0dd9e330312c5073676f4c3aa82d28dfb9
Former-commit-id: cc70c17a885ff8b72df8b799921e38fbcbedd3e9 [formerly 73282cfd24758da343bea77d413773d569606110]
Former-commit-id: fa461f51727fdfc67b8ae790e1f0df161f85ca8b
Former-commit-id: 10e2f2cfce4a446c01957229fe254e4c5ec211a6
Former-commit-id: 602f7a473458e6f5f0d5ec96388e608971daca34
Former-commit-id: bb4a69677e9c9a76c8f653fb2b7c714eff13fa67
Former-commit-id: 277ce50885de084a418ba885418c22e8978e3c22
This commit is contained in:
liyang
2018-08-12 08:07:35 +08:00
39 changed files with 1372 additions and 371 deletions

View File

@@ -32,7 +32,7 @@
<script>
import day from 'dayjs'
import { mapMutations } from 'vuex'
import { mapActions } from 'vuex'
export default {
data () {
return {
@@ -54,66 +54,63 @@ export default {
this.load()
},
methods: {
...mapMutations([
'd2adminUtilDatabase',
'd2adminUtilDatabaseClear'
...mapActions('d2admin/db', [
'database',
'databaseClear'
]),
/**
* 加载本地数据
*/
load () {
this.d2adminUtilDatabase(database => {
this.dataDisplay = JSON.stringify(database.value(), null, 2)
this.keyNameList = Object.keys(database.value()).map(k => ({
value: k,
label: k
}))
})
async load () {
const db = await this.database()
this.dataDisplay = JSON.stringify(db.value(), null, 2)
this.keyNameList = Object.keys(db.value()).map(k => ({
value: k,
label: k
}))
},
/**
* 删除一个字段
*/
handleDelete (name) {
this.d2adminUtilDatabase(database => {
database
.unset(name)
.write()
})
async handleDelete (name) {
const db = await this.database()
db
.unset(name)
.write()
this.load()
this.keyNameToDelete = ''
},
/**
* 清空当前用户的数据
*/
handleClear () {
this.d2adminUtilDatabaseClear()
async handleClear () {
const db = await this.databaseClear()
// db 是已经清空了的数据库对象 没有后续操作的话可以不接收这个值
this.load()
},
/**
* 添加一个数据
*/
handleSet () {
async handleSet () {
if (this.keyNameToSet === '') {
this.$message.error('字段名不能为空')
return
}
this.d2adminUtilDatabase(database => {
database
.set(this.keyNameToSet, this.valueToSet)
.write()
})
const db = await this.database()
db
.set(this.keyNameToSet, this.valueToSet)
.write()
this.load()
},
/**
* 添加一个随机数据
*/
handleSetRandom () {
this.d2adminUtilDatabase(database => {
const id = day().valueOf()
database
.set(id, Math.round(id * Math.random()))
.write()
})
async handleSetRandom () {
const id = day().valueOf()
const db = await this.database()
db
.set(id, Math.round(id * Math.random()))
.write()
this.load()
}
}

View File

@@ -32,7 +32,7 @@
<script>
import day from 'dayjs'
import { mapMutations } from 'vuex'
import { mapActions } from 'vuex'
export default {
data () {
return {
@@ -54,66 +54,63 @@ export default {
this.load()
},
methods: {
...mapMutations([
'd2adminUtilDatabaseUser',
'd2adminUtilDatabaseUserClear'
...mapActions('d2admin/db', [
'databaseByUser',
'databaseByUserClear'
]),
/**
* 加载本地数据
*/
load () {
this.d2adminUtilDatabaseUser(database => {
this.dataDisplay = JSON.stringify(database.value(), null, 2)
this.keyNameList = Object.keys(database.value()).map(k => ({
value: k,
label: k
}))
})
async load () {
const db = await this.databaseByUser()
this.dataDisplay = JSON.stringify(db.value(), null, 2)
this.keyNameList = Object.keys(db.value()).map(k => ({
value: k,
label: k
}))
},
/**
* 删除一个字段
*/
handleDelete (name) {
this.d2adminUtilDatabaseUser(database => {
database
.unset(name)
.write()
})
async handleDelete (name) {
const db = await this.databaseByUser()
db
.unset(name)
.write()
this.load()
this.keyNameToDelete = ''
},
/**
* 清空当前用户的数据
*/
handleClear () {
this.d2adminUtilDatabaseUserClear()
async handleClear () {
const db = await this.databaseByUserClear()
// db 是已经清空了的数据库对象 没有后续操作的话可以不接收这个值
this.load()
},
/**
* 添加一个数据
*/
handleSet () {
async handleSet () {
if (this.keyNameToSet === '') {
this.$message.error('字段名不能为空')
return
}
this.d2adminUtilDatabaseUser(database => {
database
.set(this.keyNameToSet, this.valueToSet)
.write()
})
const db = await this.databaseByUser()
db
.set(this.keyNameToSet, this.valueToSet)
.write()
this.load()
},
/**
* 添加一个随机数据
*/
handleSetRandom () {
this.d2adminUtilDatabaseUser(database => {
const id = day().valueOf()
database
.set(id, Math.round(id * Math.random()))
.write()
})
async handleSetRandom () {
const id = day().valueOf()
const db = await this.databaseByUser()
db
.set(id, Math.round(id * Math.random()))
.write()
this.load()
}
}

View File

@@ -1,23 +1,18 @@
<template>
<d2-container type="card" class="page-demo-playground-fullscreen">
<template slot="header">全屏</template>
<el-button type="primary" @click="d2adminFullScreenToggle">
d2adminFullScreenToggle 切换全屏
<el-button type="primary" @click="toggle">
toggle 切换全屏
</el-button>
</d2-container>
</template>
<script>
import { mapState, mapMutations } from 'vuex'
import { mapMutations } from 'vuex'
export default {
computed: {
...mapState({
isFullScreen: state => state.d2admin.isFullScreen
})
},
methods: {
...mapMutations([
'd2adminFullScreenToggle'
...mapMutations('d2admin/fullscreen', [
'toggle'
])
}
}

View File

@@ -1,12 +1,12 @@
<template>
<d2-container type="card" class="page-demo-playground-gray">
<template slot="header">
<div class="colorful">{{isGrayMode ? 'GRAY' : 'COLORFUL'}}</div>
<div class="colorful">{{grayActive ? 'GRAY' : 'COLORFUL'}}</div>
</template>
<el-button-group>
<el-button @click="d2adminGrayModeToggle">切换灰度模式</el-button>
<el-button @click="d2adminGrayModeSet(true)">打开灰度模式</el-button>
<el-button @click="d2adminGrayModeSet(false)">关闭灰度模式</el-button>
<el-button @click="grayToggle">切换灰度模式</el-button>
<el-button @click="graySet(true)">打开灰度模式</el-button>
<el-button @click="graySet(false)">关闭灰度模式</el-button>
<el-button @click="dialogVisible = true">模拟报错提示框</el-button>
</el-button-group>
<el-dialog
@@ -47,20 +47,20 @@ export default {
}
},
computed: {
...mapState({
isGrayMode: state => state.d2admin.isGrayMode
...mapState('d2admin/gray', {
grayActive: 'active'
})
},
methods: {
...mapMutations([
'd2adminGrayModeToggle',
'd2adminGrayModeSet'
]),
...mapMutations('d2admin/gray', {
grayToggle: 'toggle',
graySet: 'set'
}),
handleDialogOpen () {
this.d2adminGrayModeSet(true)
this.graySet(true)
},
handleDialogClosed () {
this.d2adminGrayModeSet(false)
this.graySet(false)
}
}
}

View File

@@ -1,13 +1,16 @@
<template>
<d2-container type="ghost">
<template slot="header">version {{version}} [ {{releasesUpdate ? '有新版本' : '已经是最新版本'}} ]</template>
<template slot="header">version {{releasesVersion}} [ {{releasesUpdate ? '有新版本' : '已经是最新版本'}} ]</template>
<div class="d2-mt d2-mr">
<el-row :gutter="20">
<el-col :span="12">
<el-card shadow="never" class="d2-card d2-mb">
<template slot="header">顶栏菜单数据</template>
<div style="height: 300px; overflow: auto;">
<tree-view class="tree-view-small" :data="menuHeader" :options="{ rootObjectKey: 'menuHeader', maxDepth: 2 }"/>
<tree-view
class="tree-view-small"
:data="menuHeader"
:options="{ rootObjectKey: 'menuHeader', maxDepth: 2 }"/>
</div>
</el-card>
</el-col>
@@ -15,7 +18,10 @@
<el-card shadow="never" class="d2-card d2-mb">
<template slot="header">侧边栏菜单数据</template>
<div style="height: 300px; overflow: auto;">
<tree-view class="tree-view-small" :data="menuAside" :options="{ rootObjectKey: 'menuAside', maxDepth: 1 }"/>
<tree-view
class="tree-view-small"
:data="menuAside"
:options="{ rootObjectKey: 'menuAside', maxDepth: 1 }"/>
</div>
</el-card>
</el-col>
@@ -24,19 +30,19 @@
<el-col :span="8">
<el-card shadow="never" class="d2-card d2-mb">
<template slot="header">全屏模式</template>
<el-switch v-model="isFullScreen" active-text="打开" inactive-text="关闭" disabled/>
<el-switch v-model="fullscreenActive" active-text="打开" inactive-text="关闭" disabled/>
</el-card>
</el-col>
<el-col :span="8">
<el-card shadow="never" class="d2-card d2-mb">
<template slot="header">灰度模式</template>
<el-switch v-model="isGrayMode" active-text="打开" inactive-text="关闭" disabled/>
<el-switch v-model="grayActive" active-text="打开" inactive-text="关闭" disabled/>
</el-card>
</el-col>
<el-col :span="8">
<el-card shadow="never" class="d2-card d2-mb">
<template slot="header">侧边栏折叠</template>
<el-switch v-model="isMenuAsideCollapse" active-text="收缩" inactive-text="展开" disabled/>
<el-switch v-model="menuAsideCollapse" active-text="收缩" inactive-text="展开" disabled/>
</el-card>
</el-col>
</el-row>
@@ -53,7 +59,10 @@
<el-card shadow="never" class="d2-card d2-mb">
<template slot="header">已经注册的主题</template>
<div style="height: 300px; overflow: auto;">
<tree-view class="tree-view-small" :data="themeList" :options="{ rootObjectKey: 'themeList', maxDepth: 1 }"/>
<tree-view
class="tree-view-small"
:data="themeList"
:options="{ rootObjectKey: 'themeList', maxDepth: 1 }"/>
</div>
</el-card>
</el-col>
@@ -61,7 +70,10 @@
<el-card shadow="never" class="d2-card d2-mb">
<template slot="header">当前主题信息</template>
<div style="height: 300px; overflow: auto;">
<tree-view class="tree-view-small" :data="d2adminThemeActiveSetting" :options="{ rootObjectKey: 'd2adminThemeActiveSetting', maxDepth: 1 }"/>
<tree-view
class="tree-view-small"
:data="themeActiveSetting"
:options="{ rootObjectKey: 'themeActiveSetting', maxDepth: 1 }"/>
</div>
</el-card>
</el-col>
@@ -75,7 +87,10 @@
<el-card shadow="never" class="d2-card d2-mb">
<template slot="header">支持多页显示的页面列表</template>
<div style="height: 300px; overflow: auto;">
<tree-view class="tree-view-small" :data="pagePool" :options="{ rootObjectKey: 'pagePool', maxDepth: 1 }"/>
<tree-view
class="tree-view-small"
:data="pagePool"
:options="{ rootObjectKey: 'pagePool', maxDepth: 1 }"/>
</div>
</el-card>
</el-col>
@@ -83,7 +98,10 @@
<el-card shadow="never" class="d2-card d2-mb">
<template slot="header">打开的标签页</template>
<div style="height: 300px; overflow: auto;">
<tree-view class="tree-view-small" :data="pageOpenedList" :options="{ rootObjectKey: 'pageOpenedList', maxDepth: 1 }"/>
<tree-view
class="tree-view-small"
:data="pageopened"
:options="{ rootObjectKey: 'pageopened', maxDepth: 1 }"/>
</div>
</el-card>
</el-col>
@@ -91,14 +109,20 @@
<el-card shadow="never" class="d2-card d2-mb">
<template slot="header">缓存页面</template>
<div style="height: 300px; overflow: auto;">
<tree-view class="tree-view-small" :data="d2adminKeepAliveInclude" :options="{ rootObjectKey: 'd2adminKeepAliveInclude', maxDepth: 1 }"/>
<tree-view
class="tree-view-small"
:data="keepAlive"
:options="{ rootObjectKey: 'keepAlive', maxDepth: 1 }"/>
</div>
</el-card>
</el-col>
</el-row>
<el-card shadow="never" class="d2-card d2-mb">
<template slot="header">最新版本数据 [ {{releasesUpdate ? '有新版本' : '已经是最新版本'}} ]</template>
<tree-view class="tree-view-small" :data="releasesLatest" :options="{ rootObjectKey: 'releasesLatest', maxDepth: 1 }"/>
<tree-view
class="tree-view-small"
:data="releasesLatest"
:options="{ rootObjectKey: 'releasesLatest', maxDepth: 1 }"/>
</el-card>
</div>
</d2-container>
@@ -108,27 +132,33 @@
import { mapState, mapGetters } from 'vuex'
export default {
computed: {
...mapState({
userInfo: state => state.d2admin.userInfo,
version: state => state.d2admin.version,
releasesLatest: state => state.d2admin.releasesLatest,
releasesUpdate: state => state.d2admin.releasesUpdate,
menuHeader: state => state.d2admin.menuHeader,
menuAside: state => state.d2admin.menuAside,
isFullScreen: state => state.d2admin.isFullScreen,
isGrayMode: state => state.d2admin.isGrayMode,
isMenuAsideCollapse: state => state.d2admin.isMenuAsideCollapse,
themeList: state => state.d2admin.themeList,
themeActiveName: state => state.d2admin.themeActiveName,
pagePool: state => state.d2admin.pagePool,
pageOpenedList: state => state.d2admin.pageOpenedList,
pageCurrent: state => state.d2admin.pageCurrent,
ua: state => state.d2admin.ua
...mapState('d2admin', {
// 用户信息
userInfo: state => state.user.info,
// 版本
releasesVersion: state => state.releases.version,
releasesLatest: state => state.releases.latest,
releasesUpdate: state => state.releases.update,
// 菜单
menuHeader: state => state.menu.header,
menuAside: state => state.menu.aside,
menuAsideCollapse: state => state.menu.asideCollapse,
// 主题
themeList: state => state.theme.list,
themeActiveName: state => state.theme.activeName,
// 全屏
fullscreenActive: state => state.fullscreen.active,
// 灰度模式
grayActive: state => state.gray.active,
// tag 池
pagePool: state => state.page.pool,
pageCurrent: state => state.page.current,
pageopened: state => state.page.opened
}),
...mapGetters([
'd2adminThemeActiveSetting',
'd2adminKeepAliveInclude'
])
...mapGetters('d2admin', {
keepAlive: 'page/keepAlive',
themeActiveSetting: 'theme/activeSetting'
})
}
}
</script>

View File

@@ -1,7 +1,7 @@
<template>
<d2-container type="card" class="page">
<template slot="header">主题</template>
<el-table :data="themeList" v-bind="table">
<el-table :data="list" v-bind="table">
<el-table-column prop="name" align="center" width="260"/>
<el-table-column label="预览" width="120">
<div
@@ -12,7 +12,7 @@
</el-table-column>
<el-table-column prop="address" align="center">
<template slot-scope="scope">
<el-button v-if="themeActiveName === scope.row.name" type="success" icon="el-icon-check" round>已激活</el-button>
<el-button v-if="activeName === scope.row.name" type="success" icon="el-icon-check" round>已激活</el-button>
<el-button v-else round @click="handleSelectTheme(scope.row.name)">使用</el-button>
</template>
</el-table-column>
@@ -25,7 +25,7 @@
</el-button>
</div>
<template slot="footer">
<el-button type="primary" size="small">当前激活主题 {{themeActiveName}}</el-button>
<el-button type="primary" size="small">当前激活主题 {{activeName}}</el-button>
</template>
</d2-container>
</template>
@@ -42,17 +42,17 @@ export default {
}
},
computed: {
...mapState({
themeList: state => state.d2admin.themeList,
themeActiveName: state => state.d2admin.themeActiveName
})
...mapState('d2admin/theme', [
'list',
'activeName'
])
},
methods: {
...mapMutations([
'd2adminThemeSet'
...mapMutations('d2admin/theme', [
'set'
]),
handleSelectTheme (name) {
this.d2adminThemeSet(name)
this.set(name)
}
}
}

View File

@@ -1,8 +1,8 @@
<template>
<d2-container>
<p class="d2-mt-0">useragent</p>
<el-input :value="ua.ua"></el-input>
<p>格式化数据 in vuex: state.d2admin.ua</p>
<el-input :value="uaData.ua"></el-input>
<p>格式化数据 in vuex: state.d2admin.ua.data</p>
<d2-highlight :code="uaStr"/>
</d2-container>
</template>
@@ -11,11 +11,11 @@
import { mapState } from 'vuex'
export default {
computed: {
...mapState({
ua: state => state.d2admin.ua
...mapState('d2admin/ua', {
uaData: 'data'
}),
uaStr () {
const { browser, engine, os, device, cpu } = this.ua
const { browser, engine, os, device, cpu } = this.uaData
return JSON.stringify({ browser, engine, os, device, cpu }, null, 2)
}
}

View File

@@ -114,8 +114,8 @@ export default {
}
},
methods: {
...mapActions([
'd2adminLogin'
...mapActions('d2admin/account', [
'login'
]),
/**
* @description 接收选择一个用户快速登陆的事件
@@ -136,7 +136,7 @@ export default {
// 登陆
// 注意 这里的演示没有传验证码
// 具体需要传递的数据请自行修改代码
this.d2adminLogin({
this.login({
vm: this,
username: this.formLogin.username,
password: this.formLogin.password