部分代码简化

RegionSelector的数据存放改用Vue.observable
部分beforeDestroy使用hook声明
master
toesbieya 6 years ago
parent 6dc561543c
commit 58abb624cc
  1. 2
      vue/src/assets/styles/variables.scss
  2. 7
      vue/src/components/Guide/main.vue
  3. 5
      vue/src/components/RegionSelector/Tab/index.vue
  4. 7
      vue/src/components/RegionSelector/Tree/TreeDialog.vue
  5. 12
      vue/src/components/RegionSelector/store.js
  6. 7
      vue/src/components/SearchForm/index.vue
  7. 8
      vue/src/components/SignautreBoard/main.vue
  8. 7
      vue/src/components/TinymceEditor/index.vue
  9. 4
      vue/src/layout/components/Header.vue
  10. 6
      vue/src/layout/components/Sidebar/index.vue
  11. 6
      vue/src/layout/components/TagsView/mixin/shortcuts.js
  12. 10
      vue/src/layout/mixin/ResizeHandler.js
  13. 15
      vue/src/mixins/chart/resize.js
  14. 2
      vue/src/mixins/tablePageMixin.js
  15. 4
      vue/src/router/authority/modules/message.js
  16. 8
      vue/src/router/authority/modules/purchase.js
  17. 8
      vue/src/router/authority/modules/sell.js
  18. 2
      vue/src/router/authority/modules/stock.js
  19. 14
      vue/src/router/authority/modules/system.js
  20. 4
      vue/src/router/constant/index.js
  21. 24
      vue/src/router/constant/modules/example.js
  22. 2
      vue/src/router/util.js
  23. 18
      vue/src/store/modules/dataCache.js
  24. 3
      vue/src/store/modules/iframe.js
  25. 2
      vue/src/store/modules/resource.js
  26. 2
      vue/src/store/modules/setting.js
  27. 8
      vue/src/views/app/login/LoginForm.vue
  28. 4
      vue/src/views/app/login/RegisterForm.vue
  29. 4
      vue/src/views/example/cool/fluid.vue
  30. 8
      vue/src/views/example/stylePage.vue
  31. 2
      vue/src/views/message/manage/EditDialog.vue
  32. 2
      vue/src/views/purchase/inbound/components/OrderSelector.vue
  33. 2
      vue/src/views/purchase/inbound/index.vue
  34. 2
      vue/src/views/sell/outbound/components/OrderSelector.vue
  35. 6
      vue/src/views/sell/outbound/detail.vue
  36. 13
      vue/src/views/stock/current/DetailDialog.vue
  37. 2
      vue/src/views/stock/current/index.vue
  38. 9
      vue/src/views/system/category/components/List.vue

@ -26,7 +26,7 @@ $--color-warning: $--color-deep-orange;
$--color-danger: $--color-red;
$--color-info: $--color-teal;
@mixin clearfix{
@mixin clearfix {
&::after {
visibility: hidden;
display: block;

@ -230,11 +230,12 @@
mounted() {
this.resize = debounce(this.resize)
window.addEventListener('resize', this.resize)
},
beforeDestroy() {
window.removeEventListener('resize', this.resize)
this.$once('hook:beforeDestroy', () => {
window.removeEventListener('resize', this.resize)
})
}
}
</script>

@ -61,6 +61,7 @@
<script>
import {debounce} from "@/utils"
import {createLimitTree, getNodeId} from "@/utils/tree"
import {store, init} from '../store'
import common from '../mixin'
const PROVINCE_CITIES = ['北京市', '天津市', '上海市', '重庆市']
@ -91,7 +92,7 @@
computed: {
regionTree() {
return this.$store.state.dataCache.regionTree
return store.data
},
},
@ -235,7 +236,7 @@
init() {
this.loading = true
const hasInit = this.regionTree.length > 0
const promise = () => hasInit ? Promise.resolve() : this.$store.dispatch('dataCache/initRegion')
const promise = () => hasInit ? Promise.resolve() : init()
return promise()
.then(() => this.limit ? this.limitApi() : Promise.resolve())
.then(data => {

@ -1,5 +1,5 @@
<script type="text/jsx">
import store from '@/store'
import {store,init} from '../store'
import FormDialog from "@/components/FormDialog"
import {createLimitTree, getNodeId} from "@/utils/tree"
@ -20,7 +20,7 @@
computed: {
regionTree() {
return store.state.dataCache.regionTree
return store.data
}
},
@ -31,6 +31,7 @@
nodeClick(obj) {
const payload = [obj]
if (this.getChildrenOnSelect) {
const ids = getNodeId(obj.children)
ids.unshift(obj.id)
@ -45,7 +46,7 @@
init() {
this.loading = true
const hasInit = this.regionTree.length > 0
const promise = () => hasInit ? Promise.resolve() : store.dispatch('dataCache/initRegion')
const promise = () => hasInit ? Promise.resolve() : init()
return promise()
.then(() => this.limit ? this.limitApi() : Promise.resolve())
.then(data => data && (this.limitTree = createLimitTree(this.regionTree, data)))

@ -0,0 +1,12 @@
import Vue from 'vue'
import {regionDataUrl} from '@/config'
export const store = Vue.observable({
data: []
})
export function init() {
return fetch(regionDataUrl)
.then(r => r.json())
.then(r => store.data = r || [])
}

@ -51,11 +51,12 @@
mounted() {
this.resize()
window.addEventListener('resize', this.resize)
},
beforeDestroy() {
window.removeEventListener('resize', this.resize)
this.$once('hook:beforeDestroy', () => {
window.removeEventListener('resize', this.resize)
})
},
render() {

@ -132,11 +132,11 @@
mounted() {
window.addEventListener('resize', this.resize)
},
beforeDestroy() {
this.clear()
window.removeEventListener('resize', this.resize)
this.$once('hook:beforeDestroy', () => {
this.clear()
window.removeEventListener('resize', this.resize)
})
}
}
</script>

@ -103,11 +103,8 @@
mounted() {
this.init()
},
beforeDestroy() {
this.destroy()
},
this.$once('hook:beforeDestroy', this.destroy)
}
}
</script>

@ -73,10 +73,8 @@
mounted() {
this.appMain = document.querySelector('.app-main')
if (this.headerAutoHidden) this.addEvent()
},
beforeDestroy() {
this.removeEvent()
this.$once('hook:beforeDestroy', this.removeEvent)
}
}
</script>

@ -104,10 +104,10 @@
if (this.sidebarAutoHidden) {
document.addEventListener('mousemove', this.moveEvent)
}
},
beforeDestroy() {
document.removeEventListener('mousemove', this.moveEvent)
this.$once('hook:beforeDestroy', () => {
document.removeEventListener('mousemove', this.moveEvent)
})
},
render() {

@ -42,9 +42,9 @@ export default {
mounted() {
window.addEventListener('keydown', this.shortcutsListen)
},
beforeDestroy() {
window.removeEventListener('keydown', this.shortcutsListen)
this.$once('hook:beforeDestroy', () => {
window.removeEventListener('keydown', this.shortcutsListen)
})
}
}

@ -13,10 +13,12 @@ export default {
},
mounted() {
this.$_resizeHandler = debounce(this.$_resizeHandler)
window.addEventListener('resize', this.$_resizeHandler)
this.$_resizeHandler()
},
beforeDestroy() {
window.removeEventListener('resize', this.$_resizeHandler)
window.addEventListener('resize', this.$_resizeHandler)
this.$once('hook:beforeDestroy', () => {
window.removeEventListener('resize', this.$_resizeHandler)
})
}
}

@ -7,6 +7,7 @@ export default {
$_resizeHandler: null
}
},
methods: {
$_initResizeEvent() {
window.addEventListener('resize', this.$_resizeHandler)
@ -15,19 +16,17 @@ export default {
window.removeEventListener('resize', this.$_resizeHandler)
}
},
mounted() {
this.$_resizeHandler = debounce(() => this.chart && this.chart.resize())
this.$_initResizeEvent()
this.$nextTick(() => this.$_resizeHandler())
},
beforeDestroy() {
this.$_destroyResizeEvent()
this.$nextTick(this.$_resizeHandler)
this.$once('hook:deactivated', this.$_destroyResizeEvent)
this.$once('hook:beforeDestroy', this.$_destroyResizeEvent)
},
activated() {
this.$_initResizeEvent()
this.$nextTick(() => this.$_resizeHandler())
},
deactivated() {
this.$_destroyResizeEvent()
this.$nextTick(this.$_resizeHandler)
}
}

@ -38,7 +38,7 @@ const mixin = {
tablePageNeedSearchMap: {
deep: true,
handler(v) {
if (this._routePath === this.$route.path){
if (this._routePath === this.$route.path) {
this.reSearch(v)
}
}

@ -11,13 +11,13 @@ const router = {
{
path: 'manage',
name: 'messageManagement',
component: () => lazyLoadView(import('@/views/message/manage')),
component: lazyLoadView(import('@/views/message/manage')),
meta: {title: '消息管理'}
},
{
path: 'user',
name: 'userMessage',
component: () => lazyLoadView(import('@/views/message/user')),
component: lazyLoadView(import('@/views/message/user')),
meta: {title: '个人消息', noAuth: true, noCache: true}
}
]

@ -11,7 +11,7 @@ const router = {
{
path: 'order',
name: 'purchaseOrder',
component: () => lazyLoadView(import('@/views/purchase/order')),
component: lazyLoadView(import('@/views/purchase/order')),
meta: {title: '采购订单'}
},
{
@ -19,7 +19,7 @@ const router = {
name: 'purchaseOrderDetail',
hidden: true,
props: true,
component: () => lazyLoadView(import('@/views/purchase/order/detail')),
component: lazyLoadView(import('@/views/purchase/order/detail')),
meta: {
title: '采购订单详情',
activeMenu: '/document/purchase/order',
@ -30,7 +30,7 @@ const router = {
{
path: 'inbound',
name: 'purchaseInbound',
component: () => lazyLoadView(import('@/views/purchase/inbound')),
component: lazyLoadView(import('@/views/purchase/inbound')),
meta: {title: '采购入库'}
},
{
@ -38,7 +38,7 @@ const router = {
name: 'purchaseInboundDetail',
hidden: true,
props: true,
component: () => lazyLoadView(import('@/views/purchase/inbound/detail')),
component: lazyLoadView(import('@/views/purchase/inbound/detail')),
meta: {
title: '采购入库详情',
activeMenu: '/document/purchase/inbound',

@ -11,7 +11,7 @@ const router = {
{
path: 'order',
name: 'sellOrder',
component: () => lazyLoadView(import('@/views/sell/order')),
component: lazyLoadView(import('@/views/sell/order')),
meta: {title: '销售订单'}
},
{
@ -19,7 +19,7 @@ const router = {
name: 'purchaseOrderDetail',
hidden: true,
props: true,
component: () => lazyLoadView(import('@/views/sell/order/detail')),
component: lazyLoadView(import('@/views/sell/order/detail')),
meta: {
title: '销售订单详情',
activeMenu: '/document/sell/order',
@ -30,7 +30,7 @@ const router = {
{
path: 'outbound',
name: 'sellOutbound',
component: () => lazyLoadView(import('@/views/sell/outbound')),
component: lazyLoadView(import('@/views/sell/outbound')),
meta: {title: '销售出库'}
},
{
@ -38,7 +38,7 @@ const router = {
name: 'purchaseOutboundDetail',
hidden: true,
props: true,
component: () => lazyLoadView(import('@/views/sell/outbound/detail')),
component: lazyLoadView(import('@/views/sell/outbound/detail')),
meta: {
title: '销售出库详情',
activeMenu: '/document/outbound/order',

@ -11,7 +11,7 @@ const router = {
{
path: 'current',
name: 'currentStock',
component: () => lazyLoadView(import('@/views/stock/current')),
component: lazyLoadView(import('@/views/stock/current')),
meta: {title: '当前库存'}
}
]

@ -11,43 +11,43 @@ const router = {
{
path: 'department',
name: 'departmentManagement',
component: () => lazyLoadView(import('@/views/system/department')),
component: lazyLoadView(import('@/views/system/department')),
meta: {title: '部门管理'}
},
{
path: 'role',
name: 'roleManagement',
component: () => lazyLoadView(import('@/views/system/role')),
component: lazyLoadView(import('@/views/system/role')),
meta: {title: '角色管理'}
},
{
path: 'user',
name: 'userManagement',
component: () => lazyLoadView(import('@/views/system/user')),
component: lazyLoadView(import('@/views/system/user')),
meta: {title: '用户管理'}
},
{
path: 'category',
name: 'categorySetting',
component: () => lazyLoadView(import('@/views/system/category')),
component: lazyLoadView(import('@/views/system/category')),
meta: {title: '商品分类'}
},
{
path: 'customer',
name: 'customerManagement',
component: () => lazyLoadView(import('@/views/system/customer')),
component: lazyLoadView(import('@/views/system/customer')),
meta: {title: '客户管理'}
},
{
path: 'supplier',
name: 'supplierManagement',
component: () => lazyLoadView(import('@/views/system/supplier')),
component: lazyLoadView(import('@/views/system/supplier')),
meta: {title: '供应商管理'}
},
{
path: 'resource',
name: 'resourceManagement',
component: () => lazyLoadView(import('@/views/system/resource')),
component: lazyLoadView(import('@/views/system/resource')),
hidden: true,
meta: {title: '接口设置'}
}

@ -22,7 +22,7 @@ const routes = [
children: [
{
path: 'index',
component: () => lazyLoadView(import('@/views/index')),
component: lazyLoadView(import('@/views/index')),
name: 'index',
meta: {title: '首页', affix: true, icon: 'home'}
}
@ -42,7 +42,7 @@ const routes = [
{
path: 'index',
name: 'userCenter',
component: () => lazyLoadView(import('@/views/userCenter')),
component: lazyLoadView(import('@/views/userCenter')),
meta: {title: '个人中心', noCache: true, icon: 'user'},
}
]

@ -10,13 +10,13 @@ const router = {
{
path: 'stylePage',
name: 'stylePage',
component: () => lazyLoadView(import('@/views/example/stylePage')),
component: lazyLoadView(import('@/views/example/stylePage')),
meta: {title: '样 式'}
},
{
path: 'icons',
name: 'icons',
component: () => lazyLoadView(import('@/views/example/icons')),
component: lazyLoadView(import('@/views/example/icons')),
meta: {title: '图 标'}
},
{
@ -32,13 +32,13 @@ const router = {
{
path: 'fluid',
name: 'fluid',
component: () => lazyLoadView(import('@/views/example/cool/fluid')),
component: lazyLoadView(import('@/views/example/cool/fluid')),
meta: {title: '流体动画'}
},
{
path: 'l2d',
name: 'l2d',
component: () => lazyLoadView(import('@/views/example/cool/l2d')),
component: lazyLoadView(import('@/views/example/cool/l2d')),
meta: {title: '看板娘'}
},
]
@ -51,31 +51,31 @@ const router = {
{
path: 'uploadExample',
name: 'uploadExample',
component: () => lazyLoadView(import('@/views/example/components/uploadExample')),
component: lazyLoadView(import('@/views/example/components/uploadExample')),
meta: {title: '上传文件'}
},
{
path: 'skeletonExample',
name: 'skeletonExample',
component: () => lazyLoadView(import('@/views/example/components/skeletonExample')),
component: lazyLoadView(import('@/views/example/components/skeletonExample')),
meta: {title: '骨架屏'}
},
{
path: 'rippleExample',
name: 'rippleExample',
component: () => lazyLoadView(import('@/views/example/components/rippleExample')),
component: lazyLoadView(import('@/views/example/components/rippleExample')),
meta: {title: '波纹'}
},
{
path: 'signatureExample',
name: 'signatureExample',
component: () => lazyLoadView(import('@/views/example/components/signatureExample')),
component: lazyLoadView(import('@/views/example/components/signatureExample')),
meta: {title: '手写签名'}
},
{
path: 'regionSelectorExample',
name: 'regionSelectorExample',
component: () => lazyLoadView(import('@/views/example/components/regionSelectorExample')),
component: lazyLoadView(import('@/views/example/components/regionSelectorExample')),
meta: {title: '行政区划选择'}
}
]
@ -83,19 +83,19 @@ const router = {
{
path: 'developingTest',
name: 'developingTest',
component: () => lazyLoadView(import('@/views/example/developingTest')),
component: lazyLoadView(import('@/views/example/developingTest')),
meta: {title: '开发测试'}
},
{
path: 'detailPage1',
name: 'detailPage1',
component: () => lazyLoadView(import('@/views/example/detailPage')),
component: lazyLoadView(import('@/views/example/detailPage')),
meta: {title: '详情页缓存1', noCache: false, isDetailPage: true}
},
{
path: 'detailPage2',
name: 'detailPage2',
component: () => lazyLoadView(import('@/views/example/detailPage')),
component: lazyLoadView(import('@/views/example/detailPage')),
meta: {title: '详情页缓存2', noCache: false, isDetailPage: true}
}
]

@ -33,7 +33,7 @@ export function metaExtend(routes, meta) {
export function lazyLoadView(component) {
const AsyncHandler = () => ({component, loading: PageSkeleton})
return Promise.resolve({
return () => Promise.resolve({
functional: true,
render(h, {data, children}) {
return h(AsyncHandler, data, children)

@ -2,30 +2,17 @@
* 数据缓存
* 比如商品分类信息等等
* */
import {regionDataUrl} from '@/config'
import {createTree} from '@/utils/tree'
const state = {
categories: [],
categoryTree: [],
regionTree: []
categoryTree: []
}
const mutations = {
categories(state, categories) {
state.categories = categories || []
state.categoryTree = createTree(state.categories)
},
regionTree(state, regionTree) {
state.regionTree = regionTree || []
},
}
const actions = {
initRegion({commit}) {
return fetch(regionDataUrl)
.then(r => r.json())
.then(r => commit('regionTree', r))
}
}
@ -33,6 +20,5 @@ const actions = {
export default {
namespaced: true,
state,
mutations,
actions
mutations
}

@ -9,8 +9,7 @@ const state = {
const mutations = {
...createMutations(state),
add(state, src) {
if (state.list.some(i => i === src)) return
state.list.push(src)
!state.list.includes(src) && state.list.push(src)
},
del(state, src) {
const index = state.list.findIndex(i => i === src)

@ -4,7 +4,7 @@ import authorityRoutes from '@/router/authority'
import {needAuth} from "@/utils/auth"
import {createTree} from "@/utils/tree"
import {getAllResources} from "@/api/system/resource"
import {emptyOrDefault, isEmpty} from "@/utils"
import {isEmpty} from "@/utils"
import {isExternal} from "@/utils/validate"
const finalConstantRoutes = transformOriginRoutes(constantRoutes)

@ -43,6 +43,7 @@ Object.keys(state).forEach(key => {
const mutations = {
...createMutations(state),
sidebarCollapse(state, v) {
if (v && state.sidebarAutoHidden) {
state.sidebarAutoHidden = false
@ -50,6 +51,7 @@ const mutations = {
state.sidebarCollapse = v
setLocalPersonalSettings(state)
},
sidebarAutoHidden(state, v) {
if (v && state.sidebarCollapse) {
state.sidebarCollapse = false

@ -137,12 +137,10 @@
mounted() {
this.addCapsLockEvent()
if (isEmpty(this.form.username)) this.$refs.username.focus()
else this.$refs.password.focus()
},
const key = isEmpty(this.form.username) ? 'username' : 'password'
this.$refs[key].focus()
beforeDestroy() {
this.removeEvent()
this.$once('hook:beforeDestroy', this.removeEvent)
}
}
</script>

@ -122,10 +122,8 @@
mounted() {
this.addEvent()
this.$nextTick(() => this.$refs.username.focus())
},
beforeDestroy() {
this.removeEvent()
this.$once('hook:beforeDestroy', this.removeEvent)
}
}
</script>

@ -9,6 +9,7 @@
export default {
name: "fluid",
data() {
return {
sign: true,
@ -18,6 +19,7 @@
parentDom: null
}
},
methods: {
$_initResizeEvent() {
window.addEventListener('resize', this.$_resizeHandler)
@ -32,6 +34,7 @@
window.location.reload()
}
},
mounted() {
this.parentDom = document.querySelector('.app-main')
this.width = this.parentDom.clientWidth
@ -43,6 +46,7 @@
this.$_initResizeEvent()
this.$nextTick(() => this.start())
},
beforeDestroy() {
this.$_destroyResizeEvent()
this.close()

@ -66,7 +66,9 @@
export default {
name: "stylePage",
components: {AbstractTable, LinerProgress, FormDialog},
data() {
return {
dialog: false,
@ -83,6 +85,7 @@
]
}
},
mounted() {
const f = (type, time = 0) => {
setTimeout(() => {
@ -99,9 +102,8 @@
f(t, i)
i += 200
})
},
beforeDestroy() {
this.$notify.closeAll()
this.$once('hook:beforeDestroy', this.$notify.closeAll)
}
}
</script>

@ -68,7 +68,7 @@
mixins: [dialogMixin],
components: {AbstractForm,AbstractFormItem,FormDialog, TinymceEditor, UserSelector},
components: {AbstractForm, AbstractFormItem, FormDialog, TinymceEditor, UserSelector},
props: {
value: {type: Boolean, default: false},

@ -16,7 +16,7 @@
</el-row>
<el-row v-loading="config.loading" class="table-container">
<abstract-table :data="tableData" @expand-change="getSubList">
<abstract-table :data="tableData" :highlight-current-row="false" @expand-change="getSubList">
<el-table-column align="center" type="expand">
<template v-slot="{row}">
<liner-progress :show="row._loading"/>

@ -99,7 +99,7 @@
import SearchForm from '@/components/SearchForm'
import SearchFormItem from "@/components/SearchForm/SearchFormItem"
import documentTableMixin from '@/mixins/bizDocumentTableMixin'
import {baseUrl,del, getSubById, search} from "@/api/document/purchase/inbound"
import {baseUrl, del, getSubById, search} from "@/api/document/purchase/inbound"
export default {
name: "purchaseInbound",

@ -16,7 +16,7 @@
</el-row>
<el-row v-loading="config.loading" class="table-container">
<abstract-table :data="tableData" @expand-change="getSubList">
<abstract-table :data="tableData" :highlight-current-row="false" @expand-change="getSubList">
<el-table-column align="center" type="expand">
<template v-slot="{row}">
<liner-progress :show="row._loading"/>

@ -24,12 +24,14 @@
<el-card header="出库商品">
<abstract-table :data="form.data" :highlight-current-row="false">
<el-table-column align="center" type="expand">
<el-table slot-scope="{row}" :data="row.data" border show-summary :summary-method="summaryStock(row)">
<el-table slot-scope="{row}" :data="row.data" border show-summary
:summary-method="summaryStock(row)">
<el-table-column align="center" label="#" type="index" width="80"/>
<el-table-column align="center">
<template slot="header">
出库数量
<el-button v-if="canSave" type="text" size="small" @click="openStock(row)">选择库存</el-button>
<el-button v-if="canSave" type="text" size="small" @click="openStock(row)">选择库存
</el-button>
</template>
<template v-slot="d">
<el-input-number

@ -2,11 +2,18 @@
<form-dialog :value="value" :loading="false" :title="title" width="70%" @close="cancel" @open="search">
<liner-progress :show="loading"/>
<abstract-table :data="tableData" border show-summary :summary-method="summary" :span-method="span">
<abstract-table
:data="tableData"
:highlight-current-row="false"
border
show-summary
:summary-method="summary"
:span-method="span"
>
<el-table-column align="center" label="采购订单" show-overflow-tooltip>
<router-link
slot-scope="{row}"
:to="{name:'purchaseOrder',params:{type:'see',id:row.cgddid}}"
:to="{name:'purchaseOrderDetail',params:{type:'see',id:row.cgddid}}"
@click.native="cancel"
>
{{row.cgddid}}
@ -16,7 +23,7 @@
<el-table-column align="center" label="采购入库单" show-overflow-tooltip>
<router-link
slot-scope="{row}"
:to="{name:'purchaseInbound',params:{type:'see',id:row.cgrkid}}"
:to="{name:'purchaseInboundDetail',params:{type:'see',id:row.cgrkid}}"
@click.native="cancel"
>
{{row.cgrkid}}

@ -40,7 +40,7 @@
</el-row>
<el-row v-loading="config.loading" class="table-container">
<abstract-table :data="tableData" show-summary :summary-method="summary">
<abstract-table :data="tableData" :highlight-current-row="false" show-summary :summary-method="summary">
<el-table-column align="center" label="#" type="index" width="80"/>
<el-table-column align="center" label="商品分类" prop="cname" show-overflow-tooltip/>
<el-table-column align="center" label="库存数量" prop="total_num" show-overflow-tooltip/>

@ -103,15 +103,16 @@
},
mounted() {
this.$el.querySelector(".el-card__body").addEventListener('contextmenu', this.openContextMenu)
waitUntilSuccess(
() => !isEmpty(this.form()),
() => this.form().$on('commit-success', this.commitSuccess)
)
},
beforeDestroy() {
this.$el.querySelector(".el-card__body").removeEventListener('contextmenu', this.openContextMenu)
this.$el.querySelector(".el-card__body").addEventListener('contextmenu', this.openContextMenu)
this.$once('hook:beforeDestroy', () => {
this.$el.querySelector(".el-card__body").removeEventListener('contextmenu', this.openContextMenu)
})
}
}
</script>

Loading…
Cancel
Save