db 模块更新 去除不需要的 vm

vm 参数全部改名为 instance


Former-commit-id: 31eace893963f8ec80b381259e95c5be612bb24b [formerly 31eace893963f8ec80b381259e95c5be612bb24b [formerly 31eace893963f8ec80b381259e95c5be612bb24b [formerly 31eace893963f8ec80b381259e95c5be612bb24b [formerly 142d265d06dff6f2f8479e1c02d1f1bb422c819c [formerly d512ac72e712f18109203ed77adda18dd780209f]]]]]
Former-commit-id: 38c36f8f289cc0194605f6bc30218ed84d01df61
Former-commit-id: 7e1d26c28a90ba3bb3b74c9874401e1d1dd0a1eb
Former-commit-id: a138950066ac8203549d3f0a98efd7df2f42d5f1 [formerly 7574226fcaee9f148973a0ee355c33c055dbe479]
Former-commit-id: 05c995e96c33e934edc51cf5928ac2f560108f2f
Former-commit-id: 3893a7761db8baa15af6d1d02edbaee8323a5539
Former-commit-id: 094ab1e39e3bd9af618d767dfec3c7c4f5ed0d2a
Former-commit-id: 14ee8ce1a85a958d2323907dd3e8da7f33b350c8
Former-commit-id: 709a0c724ec21c1c4bb3da67c12b766c90b4fa5c
This commit is contained in:
liyang
2019-02-06 15:49:47 +08:00
parent 4a3dffc376
commit b3cc0f9a09
18 changed files with 60 additions and 91 deletions

View File

@@ -20,7 +20,7 @@
v-if="props.row.type === 'error'"
type="error"
title="报错组件"
:value="get(props.row.vm, '$vnode.tag', '')"/>
:value="get(props.row.instance, '$vnode.tag', '')"/>
<expand-item
v-if="props.row.type === 'error'"
type="error"

View File

@@ -168,8 +168,7 @@ export default {
handleTabsEdit (tagName, action) {
if (action === 'remove') {
this.close({
tagName,
vm: this
tagName
})
}
}

View File

@@ -37,12 +37,12 @@ export default {
beforeRouteEnter (to, from, next) {
const id = to.params.id
if (id) {
next(async vm => {
next(async instance => {
if (from.name === 'demo-business-issues-142') {
await vm.getFormData(id)
vm.saveDataToDb()
await instance.getFormData(id)
instance.saveDataToDb()
} else {
vm.loadDataFromDb(to)
instance.loadDataFromDb(to)
}
})
}
@@ -67,23 +67,22 @@ export default {
methods: {
...mapActions('d2admin/db', [
'pageSet',
'pageGet',
'pageClear'
'pageGet'
]),
// 将页面数据同步到持久化存储
saveDataToDb () {
this.pageSet({ vm: this, user: true })
this.pageSet({ instance: this, user: true })
},
// 从持久化存储恢复数据到页面
async loadDataFromDb (to) {
const vm = {
const instance = {
$route: {
fullPath: to.fullPath
},
$data: {}
}
const data = await this.pageGet({
vm,
instance,
user: true
})
for (const key in data) {

View File

@@ -36,9 +36,9 @@ export default {
beforeRouteEnter (to, from, next) {
const id = to.params.id
if (id) {
next(vm => {
vm.resetFormData()
vm.getFormData(id)
next(instance => {
instance.resetFormData()
instance.getFormData(id)
})
} else {
next(new Error('未指定ID'))

View File

@@ -36,9 +36,9 @@ export default {
}
},
methods: {
handleClick (vm, event) {
handleClick (instance, event) {
this.$message({
message: `你点击了${vm.$slots.default[0].text}`,
message: `你点击了${instance.$slots.default[0].text}`,
type: 'info'
})
}

View File

@@ -28,9 +28,9 @@ export default {
}
},
methods: {
handleClick (vm, event) {
handleClick (instance, event) {
this.$message({
message: `你点击了${vm.$slots.default[0].text}`,
message: `你点击了${instance.$slots.default[0].text}`,
type: 'info'
})
}

View File

@@ -21,9 +21,9 @@ export default {
}
},
methods: {
handleClick (vm, event) {
handleClick (instance, event) {
this.$message({
message: `你点击了${vm.$slots.default[0].text}`,
message: `你点击了${instance.$slots.default[0].text}`,
type: 'info'
})
}

View File

@@ -20,9 +20,9 @@ export default {
}
},
methods: {
handleClick (vm, event) {
handleClick (instance, event) {
this.$message({
message: `你点击了${vm.$slots.default[0].text}`,
message: `你点击了${instance.$slots.default[0].text}`,
type: 'info'
})
}

View File

@@ -30,9 +30,9 @@ export default {
}
},
methods: {
handleClick (vm, event) {
handleClick (instance, event) {
this.$message({
message: `你点击了${vm.$slots.default[0].text}`,
message: `你点击了${instance.$slots.default[0].text}`,
type: 'info'
})
}

View File

@@ -6,7 +6,7 @@
:closable="false"
title="路由存储指当前路由的存储区域,
不同路由之间存储不会相互干扰,
使用 await this.$store.dispatch('d2admin/db/databasePage', { vm: this }) 获得存储实例进行操作,
使用 await this.$store.dispatch('d2admin/db/databasePage') 获得存储实例进行操作,
不同路由条件下获取的存储实例指向位置不同,
可以指定路由区分依据 name | path | fullPath
默认根据路由的 name 区分不同的路由"/>
@@ -73,9 +73,7 @@ export default {
* 加载本地数据
*/
async load () {
const db = await this.databasePage({
vm: this
})
const db = await this.databasePage()
this.dataDisplay = JSON.stringify(db.value(), null, 2)
this.keyNameList = Object.keys(db.value()).map(k => ({
value: k,
@@ -86,9 +84,7 @@ export default {
* 删除一个字段
*/
async handleDelete (name) {
const db = await this.databasePage({
vm: this
})
const db = await this.databasePage()
db
.unset(name)
.write()
@@ -99,9 +95,7 @@ export default {
* 清空当前用户的数据
*/
async handleClear () {
await this.databasePageClear({
vm: this
})
await this.databasePageClear()
this.load()
},
/**
@@ -112,9 +106,7 @@ export default {
this.$message.error('字段名不能为空')
return
}
const db = await this.databasePage({
vm: this
})
const db = await this.databasePage()
db
.set(this.keyNameToSet, this.valueToSet)
.write()
@@ -125,9 +117,7 @@ export default {
*/
async handleSetRandom () {
const id = uniqueId()
const db = await this.databasePage({
vm: this
})
const db = await this.databasePage()
db
.set(`uniqueKey${id}`, `value${id}`)
.write()

View File

@@ -5,7 +5,7 @@
type="success"
:closable="false"
title="路由快照相当于路由存储一种快捷操作,
会将传入 vm 实例的 $data 全部持久化,
会将传入 vue instance 携带的 $data 全部持久化,
下面的表单来自 Element 的表单示例,
在 D2Admin 的本页示例中你可以随意填写这个表单,
表单内容会自动实时持久化,
@@ -87,7 +87,7 @@ export default {
}
},
async created () {
const data = await this.pageGet({ vm: this })
const data = await this.pageGet({ instance: this })
for (const key in data) {
if (data.hasOwnProperty(key)) this[key] = data[key]
}
@@ -95,7 +95,7 @@ export default {
watch: {
$data: {
handler () {
this.pageSet({ vm: this })
this.pageSet({ instance: this })
},
deep: true
}
@@ -107,7 +107,7 @@ export default {
'pageClear'
]),
async handleClear () {
await this.pageClear({ vm: this })
await this.pageClear({ instance: this })
this.$message.success('此页面快照已经删除,请重新进入该页面或者关闭选项卡重新打开')
}
}

View File

@@ -5,7 +5,7 @@
type="success"
:closable="false"
title="私有路由快照相当于私有路由存储一种快捷操作,
会将传入 vm 实例的 $data 全部根据用户区分持久化,
会将传入 vue instance 携带的 $data 全部根据用户区分持久化,
下面的表单来自 Element 的表单示例,
在 D2Admin 的本页示例中你可以随意填写这个表单,
表单内容会自动实时持久化,
@@ -87,7 +87,7 @@ export default {
}
},
async created () {
const data = await this.pageGet({ vm: this, user: true })
const data = await this.pageGet({ instance: this, user: true })
for (const key in data) {
if (data.hasOwnProperty(key)) this[key] = data[key]
}
@@ -95,7 +95,7 @@ export default {
watch: {
$data: {
handler () {
this.pageSet({ vm: this, user: true })
this.pageSet({ instance: this, user: true })
},
deep: true
}
@@ -107,7 +107,7 @@ export default {
'pageClear'
]),
async handleClear () {
await this.pageClear({ vm: this, user: true })
await this.pageClear({ instance: this, user: true })
this.$message.success('此页面快照已经删除,请重新进入该页面或者关闭选项卡重新打开')
}
}

View File

@@ -8,7 +8,7 @@
并且同时还根据用户区分,
相当于结合了 “路由存储” 和 “私有存储”,
不同路由以及不同用户之间存储不会相互干扰,
使用 await this.$store.dispatch('d2admin/db/databasePage', { vm: this, user: true }) 获得存储实例进行操作,
使用 await this.$store.dispatch('d2admin/db/databasePage', { user: true }) 获得存储实例进行操作,
不同路由和用户条件下获取的存储实例指向位置不同,
可以指定路由区分依据 name | path | fullPath
默认根据路由的 name 区分不同的路由"/>
@@ -76,7 +76,6 @@ export default {
*/
async load () {
const db = await this.databasePage({
vm: this,
user: true
})
this.dataDisplay = JSON.stringify(db.value(), null, 2)
@@ -90,7 +89,6 @@ export default {
*/
async handleDelete (name) {
const db = await this.databasePage({
vm: this,
user: true
})
db
@@ -104,7 +102,6 @@ export default {
*/
async handleClear () {
await this.databasePageClear({
vm: this,
user: true
})
this.load()
@@ -118,7 +115,6 @@ export default {
return
}
const db = await this.databasePage({
vm: this,
user: true
})
db
@@ -132,7 +128,6 @@ export default {
async handleSetRandom () {
const id = uniqueId()
const db = await this.databasePage({
vm: this,
user: true
})
db

View File

@@ -43,9 +43,7 @@ export default {
console.log('beforeRouteEnter => ', to)
const id = to.params.id
if (id) {
next(vm => {
vm.switchData(id)
})
next(instance => instance.switchData(id))
} else {
next(new Error('未指定ID'))
}

View File

@@ -3,13 +3,13 @@ import util from '@/libs/util'
export default {
install (Vue, options) {
Vue.config.errorHandler = function (err, vm, info) {
Vue.config.errorHandler = function (err, instance, info) {
Vue.nextTick(() => {
// 添加 log
store.dispatch('d2admin/log/add', {
type: 'error',
err,
vm,
instance,
info
})
// 只在开发模式下打印 log
@@ -18,7 +18,7 @@ export default {
util.log.danger('>>>>>> 错误信息 >>>>>>')
console.log(info)
util.log.danger('>>>>>> Vue 实例 >>>>>>')
console.log(vm)
console.log(instance)
util.log.danger('>>>>>> Error >>>>>>')
console.log(err)
}

View File

@@ -35,7 +35,7 @@ const frameIn = [
hidden: true,
component: {
beforeRouteEnter (to, from, next) {
next(vm => vm.$router.replace(from.fullPath))
next(instance => instance.$router.replace(from.fullPath))
},
render: h => h()
}
@@ -47,7 +47,7 @@ const frameIn = [
hidden: true,
component: {
beforeRouteEnter (to, from, next) {
next(vm => vm.$router.replace(JSON.parse(from.params.route)))
next(instance => instance.$router.replace(JSON.parse(from.params.route)))
},
render: h => h()
}

View File

@@ -1,4 +1,5 @@
import util from '@/libs/util'
import router from '@/router'
import { cloneDeep } from 'lodash'
/**
@@ -20,13 +21,6 @@ function pathInit ({
const uuid = util.cookies.get('uuid') || 'ghost-uuid'
const currentPath = `${dbName}.${user ? `user.${uuid}` : 'public'}${path ? `.${path}` : ''}`
const value = util.db.get(currentPath).value()
// console.group('pathInit')
// console.log('dbName', dbName)
// console.log('path', path)
// console.log('user', user)
// console.log('defaultValue', defaultValue)
// console.log('value', value)
// console.groupEnd()
if (!(value !== undefined && validator(value))) {
util.db
.set(currentPath, defaultValue)
@@ -119,19 +113,17 @@ export default {
/**
* @description 获取存储数据库对象 [ 区分页面 ]
* @param {Object} context context
* @param {Object} param vm {Object} vue
* @param {Object} param basis {String} 页面区分依据 [ name | path | fullPath ]
* @param {Object} param user {Boolean} 是否区分用户
*/
databasePage (context, {
vm,
basis = 'fullPath',
user = false
} = {}) {
return new Promise(resolve => {
resolve(util.db.get(pathInit({
dbName: 'database',
path: `$page.${vm.$route[basis]}`,
path: `$page.${router.app.$route[basis]}`,
user,
defaultValue: {}
})))
@@ -140,19 +132,17 @@ export default {
/**
* @description 清空存储数据库对象 [ 区分页面 ]
* @param {Object} context context
* @param {Object} param vm {Object} vue
* @param {Object} param basis {String} 页面区分依据 [ name | path | fullPath ]
* @param {Object} param user {Boolean} 是否区分用户
*/
databasePageClear (context, {
vm,
basis = 'fullPath',
user = false
} = {}) {
return new Promise(resolve => {
resolve(util.db.get(pathInit({
dbName: 'database',
path: `$page.${vm.$route[basis]}`,
path: `$page.${router.app.$route[basis]}`,
user,
validator: () => false,
defaultValue: {}
@@ -162,62 +152,60 @@ export default {
/**
* @description 快速将页面当前的数据 ( $data ) 持久化
* @param {Object} context context
* @param {Object} param vm {Object} vue
* @param {Object} param instance {Object} vue 实例
* @param {Object} param basis {String} 页面区分依据 [ name | path | fullPath ]
* @param {Object} param user {Boolean} 是否区分用户
*/
pageSet (context, {
vm,
instance,
basis = 'fullPath',
user = false
}) {
return new Promise(resolve => {
resolve(util.db.get(pathInit({
dbName: 'database',
path: `$page.${vm.$route[basis]}.$data`,
path: `$page.${router.app.$route[basis]}.$data`,
user,
validator: () => false,
defaultValue: cloneDeep(vm.$data)
defaultValue: cloneDeep(instance.$data)
})))
})
},
/**
* @description 快速获取页面快速持久化的数据
* @param {Object} context context
* @param {Object} param vm {Object} vue
* @param {Object} param instance {Object} vue 实例
* @param {Object} param basis {String} 页面区分依据 [ name | path | fullPath ]
* @param {Object} param user {Boolean} 是否区分用户
*/
pageGet (context, {
vm,
instance,
basis = 'fullPath',
user = false
}) {
return new Promise(resolve => {
resolve(cloneDeep(util.db.get(pathInit({
dbName: 'database',
path: `$page.${vm.$route[basis]}.$data`,
path: `$page.${router.app.$route[basis]}.$data`,
user,
defaultValue: cloneDeep(vm.$data)
defaultValue: cloneDeep(instance.$data)
})).value()))
})
},
/**
* @description 清空页面快照
* @param {Object} context context
* @param {Object} param vm {Object} vue
* @param {Object} param basis {String} 页面区分依据 [ name | path | fullPath ]
* @param {Object} param user {Boolean} 是否区分用户
*/
pageClear (context, {
vm,
basis = 'fullPath',
user = false
}) {
return new Promise(resolve => {
resolve(util.db.get(pathInit({
dbName: 'database',
path: `$page.${vm.$route[basis]}.$data`,
path: `$page.${router.app.$route[basis]}.$data`,
user,
validator: () => false,
defaultValue: {}

View File

@@ -29,10 +29,10 @@ export default {
* @description 添加一个日志
* @param {Object} param type {String} 类型
* @param {Object} param err {Error} 错误对象
* @param {Object} param vm {Object} vue 实例
* @param {Object} param instance {Object} vue 实例
* @param {Object} param info {String} 信息
*/
add ({ state, rootState }, { type, err, vm, info }) {
add ({ state, rootState }, { type, err, instance, info }) {
// store 赋值
state.list.push(Object.assign({
// 记录类型
@@ -42,7 +42,7 @@ export default {
// 错误对象
err: '',
// vue 实例
vm: '',
instance: '',
// 当前用户信息
user: rootState.d2admin.user.info,
// 当前用户的 uuid
@@ -56,7 +56,7 @@ export default {
}, {
type,
err,
vm,
instance,
info: toString(info)
}))
}