mirror of
https://gitee.com/elegant_wings/dbd-meeting-html.git
synced 2025-06-21 09:09:37 +08:00
改首页;
加入统计下钻; 加入数据导出
This commit is contained in:
parent
3647205419
commit
e18408b7f4
@ -133,4 +133,25 @@ export function addStaff(parameter) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 按天导出会议室预约记录列表
|
||||||
|
export function expMRByDate(parameter){
|
||||||
|
return axios({
|
||||||
|
// url: '/api/roomContent/cancelOrder',
|
||||||
|
url: api.meetingReservation + '/io/exportDayMR',
|
||||||
|
method: 'post',
|
||||||
|
params: parameter,
|
||||||
|
responseType: 'blob'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 按月导出会议室预约记录
|
||||||
|
export function expMRByMonth(parameter){
|
||||||
|
return axios({
|
||||||
|
// url: '/api/roomContent/cancelOrder',
|
||||||
|
url: api.meetingReservation + '/io/exportMonthMR',
|
||||||
|
method: 'post',
|
||||||
|
params: parameter,
|
||||||
|
responseType: 'blob'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export const meetingReservationExport = api.meetingReservation + '/export'
|
export const meetingReservationExport = api.meetingReservation + '/export'
|
||||||
|
@ -21,6 +21,15 @@ export function exportRepair (parameter) {
|
|||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function exportRepairType (parameter) {
|
||||||
|
return axios({
|
||||||
|
url: api.repairFailureType + '/exportCategory',
|
||||||
|
method: 'get',
|
||||||
|
params: parameter,
|
||||||
|
responseType: 'blob'
|
||||||
|
})
|
||||||
|
}
|
||||||
export function importData (data) {
|
export function importData (data) {
|
||||||
return axios({
|
return axios({
|
||||||
url: api.repairFailureType + '/importRepair',
|
url: api.repairFailureType + '/importRepair',
|
||||||
|
@ -14,7 +14,7 @@ export const defaultRouterMap = [
|
|||||||
export const constantRouterMap = [
|
export const constantRouterMap = [
|
||||||
{
|
{
|
||||||
path: '/',
|
path: '/',
|
||||||
redirect: '/admin/repair/RepairDeviceList/repairStatistics' // 默认首页
|
redirect: '/dashboard/Analysis' // 默认首页
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/user',
|
path: '/user',
|
||||||
|
@ -12,7 +12,7 @@ NProgress.configure({ showSpinner: false }) // NProgress Configuration
|
|||||||
|
|
||||||
const allowList = ['login', 'register', 'registerResult', 'chart'] // no redirect allowList
|
const allowList = ['login', 'register', 'registerResult', 'chart'] // no redirect allowList
|
||||||
const loginRoutePath = '/user/login'
|
const loginRoutePath = '/user/login'
|
||||||
const defaultRoutePath = '/admin/repair/RepairDeviceList/repairStatistics' // 登录跳转
|
const defaultRoutePath = '/dashboard/Analysis' // 登录跳转
|
||||||
|
|
||||||
|
|
||||||
router.beforeEach((to, from, next) => {
|
router.beforeEach((to, from, next) => {
|
||||||
|
@ -24,7 +24,7 @@ const rootRouter = {
|
|||||||
'key': '',
|
'key': '',
|
||||||
'name': 'index',
|
'name': 'index',
|
||||||
'component': 'BasicLayout',
|
'component': 'BasicLayout',
|
||||||
'redirect': '/admin/repair/RepairDeviceList/repairStatistics', // 登录跳转
|
'redirect': '/dashboard/Analysis', // 登录跳转
|
||||||
'children': []
|
'children': []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,31 +10,31 @@
|
|||||||
type="inner"
|
type="inner"
|
||||||
@openChange="onOpenChange"
|
@openChange="onOpenChange"
|
||||||
>
|
>
|
||||||
<a-menu-item key="/account/settings/base">
|
<!-- <a-menu-item key="/account/settings/base">-->
|
||||||
<router-link :to="{ name: 'base' }">
|
<!-- <router-link :to="{ name: 'base' }">-->
|
||||||
{{ i18nRender('menu.account.settings.base') }}
|
<!-- {{ i18nRender('menu.account.settings.base') }}-->
|
||||||
</router-link>
|
<!-- </router-link>-->
|
||||||
</a-menu-item>
|
<!-- </a-menu-item>-->
|
||||||
<a-menu-item key="/account/settings/security">
|
<a-menu-item key="/account/settings/security">
|
||||||
<router-link :to="{ name: 'security' }">
|
<router-link :to="{ name: 'security' }">
|
||||||
{{ i18nRender('menu.account.settings.security') }}
|
{{ i18nRender('menu.account.settings.security') }}
|
||||||
</router-link>
|
</router-link>
|
||||||
</a-menu-item>
|
</a-menu-item>
|
||||||
<a-menu-item key="/account/settings/custom">
|
<!-- <a-menu-item key="/account/settings/custom">-->
|
||||||
<router-link :to="{ name: 'custom' }">
|
<!-- <router-link :to="{ name: 'custom' }">-->
|
||||||
{{ i18nRender('menu.account.settings.custom') }}
|
<!-- {{ i18nRender('menu.account.settings.custom') }}-->
|
||||||
</router-link>
|
<!-- </router-link>-->
|
||||||
</a-menu-item>
|
<!-- </a-menu-item>-->
|
||||||
<a-menu-item key="/account/settings/binding">
|
<!-- <a-menu-item key="/account/settings/binding">-->
|
||||||
<router-link :to="{ name: 'binding' }">
|
<!-- <router-link :to="{ name: 'binding' }">-->
|
||||||
{{ i18nRender('menu.account.settings.binding') }}
|
<!-- {{ i18nRender('menu.account.settings.binding') }}-->
|
||||||
</router-link>
|
<!-- </router-link>-->
|
||||||
</a-menu-item>
|
<!-- </a-menu-item>-->
|
||||||
<a-menu-item key="/account/settings/notification">
|
<!-- <a-menu-item key="/account/settings/notification">-->
|
||||||
<router-link :to="{ name: 'notification' }">
|
<!-- <router-link :to="{ name: 'notification' }">-->
|
||||||
{{ i18nRender('menu.account.settings.notification') }}
|
<!-- {{ i18nRender('menu.account.settings.notification') }}-->
|
||||||
</router-link>
|
<!-- </router-link>-->
|
||||||
</a-menu-item>
|
<!-- </a-menu-item>-->
|
||||||
</a-menu>
|
</a-menu>
|
||||||
</div>
|
</div>
|
||||||
<div class="account-settings-info-right">
|
<div class="account-settings-info-right">
|
||||||
|
@ -87,7 +87,7 @@
|
|||||||
<a-button style='margin-left: 8px' type='primary' @click='exportRepair()'>导出工单模版</a-button>
|
<a-button style='margin-left: 8px' type='primary' @click='exportRepair()'>导出工单模版</a-button>
|
||||||
<a-button style='margin-left: 8px' type='primary' @click='importDataVisible()'>导入</a-button>
|
<a-button style='margin-left: 8px' type='primary' @click='importDataVisible()'>导入</a-button>
|
||||||
<a-button style='margin-left: 8px' type='primary' @click='exportRepairList()'>导出工单数据</a-button>
|
<a-button style='margin-left: 8px' type='primary' @click='exportRepairList()'>导出工单数据</a-button>
|
||||||
|
<a-button style='margin-left: 8px' type='primary' @click='exportRepairTypeList()'>导出类型汇总数据</a-button>
|
||||||
</span>
|
</span>
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
@ -154,7 +154,7 @@ import RepairModal from './modules/RepairModal.vue'
|
|||||||
import { checkPermission } from '@/utils/permissions'
|
import { checkPermission } from '@/utils/permissions'
|
||||||
import { getRepairDeviceList } from '@/api/admin/repair/repairDevice'
|
import { getRepairDeviceList } from '@/api/admin/repair/repairDevice'
|
||||||
import { getRepairTypeList } from '@/api/admin/repair/repairDeviceType'
|
import { getRepairTypeList } from '@/api/admin/repair/repairDeviceType'
|
||||||
import { exportRepair, exportTemplate, importData } from '@/api/admin/repair/repairIo'
|
import { exportRepair, exportRepairType, exportTemplate, importData } from '@/api/admin/repair/repairIo'
|
||||||
import storage from 'store'
|
import storage from 'store'
|
||||||
import { ACCESS_TOKEN } from '@/store/mutation-types'
|
import { ACCESS_TOKEN } from '@/store/mutation-types'
|
||||||
import { message } from 'ant-design-vue'
|
import { message } from 'ant-design-vue'
|
||||||
@ -474,6 +474,21 @@ export default {
|
|||||||
this.exportExcel('工单数据', res)
|
this.exportExcel('工单数据', res)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
exportRepairTypeList() {
|
||||||
|
if (this.dateRange.length < 2) {
|
||||||
|
message.error('请先设置时间范围,系统将根据时间范围导出工单数据')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const startDate = this.dateRange[0].format('YYYY-MM-DD')
|
||||||
|
const endDate = this.dateRange[1].format('YYYY-MM-DD')
|
||||||
|
|
||||||
|
exportRepairType({
|
||||||
|
'beginTime': startDate,
|
||||||
|
'endTime': endDate
|
||||||
|
}).then(res => {
|
||||||
|
this.exportExcel('工单按维修类型汇总', res)
|
||||||
|
})
|
||||||
|
},
|
||||||
exportExcel(filename, res) {
|
exportExcel(filename, res) {
|
||||||
const link = document.createElement('a')
|
const link = document.createElement('a')
|
||||||
let blob = new Blob([res], { type: 'application/vnd.ms-excel;charset=UTF-8' })
|
let blob = new Blob([res], { type: 'application/vnd.ms-excel;charset=UTF-8' })
|
||||||
|
@ -70,9 +70,9 @@
|
|||||||
<a-row>
|
<a-row>
|
||||||
<a-col :span='18'>
|
<a-col :span='18'>
|
||||||
<a-card title='会议日历' bodyStyle='height: 780px'>
|
<a-card title='会议日历' bodyStyle='height: 780px'>
|
||||||
<a-calendar :header-render='headerRender'>
|
<a-calendar :header-render='headerRender' @select="onSelect">
|
||||||
<ul slot='dateCellRender' slot-scope='value' class='c_meeting' style='padding: 0'>
|
<ul slot='dateCellRender' slot-scope='value' class='c_meeting' style='padding: 0'>
|
||||||
<a-popover :title='item.title' v-for='item in getListData(value)'>
|
<a-popover @click.stop='return false' :title='item.title' v-for='item in getListData(value)'>
|
||||||
<template slot='content'>
|
<template slot='content'>
|
||||||
<div>预约部门:{{ item.org }}</div>
|
<div>预约部门:{{ item.org }}</div>
|
||||||
<div>会议时间:{{ item.time }}</div>
|
<div>会议时间:{{ item.time }}</div>
|
||||||
@ -87,15 +87,15 @@
|
|||||||
</a-col>
|
</a-col>
|
||||||
<a-col :span='6'>
|
<a-col :span='6'>
|
||||||
<a-card title='会议状态'>
|
<a-card title='会议状态'>
|
||||||
<a-row>
|
<a-row >
|
||||||
<a-col :span='18'>
|
<a-col :span='18'>
|
||||||
<a-icon type='message' theme='filled' style='font-size: 24px;color: #E6A23C' />
|
<a-icon type='message' theme='filled' style='font-size: 24px;color: #E6A23C' />
|
||||||
<label style='position: relative;top: -1px;left: 10px;font-size: 20px'>
|
<label @click='goRes({status: "9"})' style='position: relative;top: -1px;left: 10px;font-size: 20px;cursor:pointer;'>
|
||||||
进行中
|
进行中
|
||||||
</label>
|
</label>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :span='6'>
|
<a-col :span='6'>
|
||||||
<div style='text-align: right; font-weight: 700;font-size: 20px; position: relative;top: -1px;'>
|
<div @click='goRes({status: "9"})' style='text-align: right; font-weight: 700;font-size: 20px; position: relative;top: -1px;cursor:pointer;'>
|
||||||
{{ statusNum.going }}
|
{{ statusNum.going }}
|
||||||
</div>
|
</div>
|
||||||
</a-col>
|
</a-col>
|
||||||
@ -103,12 +103,12 @@
|
|||||||
<a-row style='margin-top: 15px'>
|
<a-row style='margin-top: 15px'>
|
||||||
<a-col :span='18'>
|
<a-col :span='18'>
|
||||||
<a-icon type='flag' theme='filled' style='font-size: 24px;color: #409EFF' />
|
<a-icon type='flag' theme='filled' style='font-size: 24px;color: #409EFF' />
|
||||||
<label style='position: relative;top: -1px;left: 10px;font-size: 20px'>
|
<label @click='goRes({status: "7"})' style='position: relative;top: -1px;left: 10px;font-size: 20px;cursor:pointer;'>
|
||||||
未开始
|
待开始
|
||||||
</label>
|
</label>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :span='6'>
|
<a-col :span='6'>
|
||||||
<div style='text-align: right; font-weight: 700;font-size: 20px; position: relative;top: -1px;'>
|
<div @click='goRes({status: "7"})' style='text-align: right; font-weight: 700;font-size: 20px; position: relative;top: -1px;cursor:pointer;'>
|
||||||
{{ statusNum.wait }}
|
{{ statusNum.wait }}
|
||||||
</div>
|
</div>
|
||||||
</a-col>
|
</a-col>
|
||||||
@ -116,20 +116,20 @@
|
|||||||
<a-row style='margin-top: 15px'>
|
<a-row style='margin-top: 15px'>
|
||||||
<a-col :span='18'>
|
<a-col :span='18'>
|
||||||
<a-icon type='carry-out' theme='filled' style='font-size: 24px;color: #919399' />
|
<a-icon type='carry-out' theme='filled' style='font-size: 24px;color: #919399' />
|
||||||
<label style='position: relative;top: -1px;left: 10px;font-size: 20px'>
|
<label @click='goRes({status: "11"})' style='position: relative;top: -1px;left: 10px;font-size: 20px;cursor:pointer;'>
|
||||||
已结束
|
已结束
|
||||||
</label>
|
</label>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :span='6'>
|
<a-col :span='6'>
|
||||||
<div style='text-align: right; font-weight: 700;font-size: 20px; position: relative;top: -1px;'>
|
<div @click='goRes({status: "11"})' style='text-align: right; font-weight: 700;font-size: 20px; position: relative;top: -1px;cursor:pointer;'>
|
||||||
{{ statusNum.closed }}
|
{{ statusNum.closed }}
|
||||||
</div>
|
</div>
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
</a-card>
|
</a-card>
|
||||||
<a-card title='任务代办(小程序审核)' bodyStyle='height: 554px'>
|
<a-card title='任务代办' bodyStyle='height: 554px'>
|
||||||
<a-list item-layout='horizontal' :data-source='waitList'>
|
<a-list item-layout='horizontal' :data-source='waitList'>
|
||||||
<a-list-item slot='renderItem' slot-scope='item, index'>
|
<a-list-item @click='goRes({status: "5"})' slot='renderItem' slot-scope='item, index'>
|
||||||
<!-- <a slot='actions'>审核</a>-->
|
<!-- <a slot='actions'>审核</a>-->
|
||||||
<a-list-item-meta
|
<a-list-item-meta
|
||||||
:description="item.time + '(' +item.org + ')'"
|
:description="item.time + '(' +item.org + ')'"
|
||||||
@ -275,6 +275,14 @@ export default {
|
|||||||
// this.drawChart()
|
// this.drawChart()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
onSelect(nowDate) {
|
||||||
|
let date = nowDate.format('YYYY-MM-DD')
|
||||||
|
this.goRes({date: date})
|
||||||
|
},
|
||||||
|
// 跳转预约列表
|
||||||
|
goRes(query) {
|
||||||
|
this.$router.push({ name: 'reservation', query: query })
|
||||||
|
},
|
||||||
/**
|
/**
|
||||||
* 改变会议室管理统计日期
|
* 改变会议室管理统计日期
|
||||||
* @param date
|
* @param date
|
||||||
|
@ -58,14 +58,20 @@
|
|||||||
<a-input placeholder='预约单位' v-model='queryParam.userOrg' />
|
<a-input placeholder='预约单位' v-model='queryParam.userOrg' />
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
<a-col :md='5' :sm='15'>
|
||||||
|
<a-form-item label='预约时间'>
|
||||||
|
<a-date-picker v-model='queryParam.chooseDate' @change='res => this.$forceUpdate()' />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
<a-col :md='8' :sm='24'>
|
<a-col :md='8' :sm='24'>
|
||||||
<span class='table-page-search-submitButtons'>
|
<span class='table-page-search-submitButtons'>
|
||||||
<a-button type='primary' @click='$refs.table.refresh(true)'>查询</a-button>
|
<a-button type='primary' @click='$refs.table.refresh(true)'>查询</a-button>
|
||||||
<a-button style='margin-left: 8px' @click='reset'>重置</a-button>
|
<a-button style='margin-left: 8px' @click='reset'>重置</a-button>
|
||||||
<a-dropdown v-if='removeEnable&&selectedRowKeys.length > 0'>
|
<a-button v-if='isAdmin' type='danger' style='margin-left: 8px'
|
||||||
<a-button style='margin-left: 8px' type='danger' icon='delete'
|
@click='exportOrderList'>导出会议日程</a-button>
|
||||||
@click='delByIds(selectedRowKeys)'>删除</a-button>
|
<a-button v-if='isAdmin' type='danger' style='margin-left: 8px'
|
||||||
</a-dropdown>
|
@click='exportMonthOrder'>导出月度汇总</a-button>
|
||||||
|
|
||||||
</span>
|
</span>
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
@ -157,7 +163,13 @@
|
|||||||
<script>
|
<script>
|
||||||
import { STable } from '@/components'
|
import { STable } from '@/components'
|
||||||
|
|
||||||
import { getMeetingReservationList, cancelOrder, approveOrder } from '@/api/admin/meeting/meetingReservation'
|
import {
|
||||||
|
getMeetingReservationList,
|
||||||
|
cancelOrder,
|
||||||
|
approveOrder,
|
||||||
|
expMRByDate,
|
||||||
|
expMRByMonth
|
||||||
|
} from '@/api/admin/meeting/meetingReservation'
|
||||||
import { checkPermission } from '@/utils/permissions'
|
import { checkPermission } from '@/utils/permissions'
|
||||||
|
|
||||||
import moment from 'moment'
|
import moment from 'moment'
|
||||||
@ -237,7 +249,12 @@ export default {
|
|||||||
// 加载数据方法 必须为 Promise 对象
|
// 加载数据方法 必须为 Promise 对象
|
||||||
loadData: parameter => {
|
loadData: parameter => {
|
||||||
// this.queryParam.name = this.$route.params.roomId
|
// this.queryParam.name = this.$route.params.roomId
|
||||||
// 处理一下时间
|
let chooseDate = this.queryParam.chooseDate
|
||||||
|
if (chooseDate) {
|
||||||
|
this.queryParam.filterDate = chooseDate.format('YYYY-MM-DD')
|
||||||
|
} else {
|
||||||
|
this.queryParam.filterDate = ''
|
||||||
|
}
|
||||||
return getMeetingReservationList(Object.assign(parameter, this.queryParam)).then(res => {
|
return getMeetingReservationList(Object.assign(parameter, this.queryParam)).then(res => {
|
||||||
for (let key in res.rows) {
|
for (let key in res.rows) {
|
||||||
let startTime = res.rows[key].start
|
let startTime = res.rows[key].start
|
||||||
@ -331,8 +348,28 @@ export default {
|
|||||||
},
|
},
|
||||||
filters: {},
|
filters: {},
|
||||||
created() {
|
created() {
|
||||||
|
let date = this.$route.query.date
|
||||||
|
if (date) {
|
||||||
|
this.queryParam.chooseDate = moment(date)
|
||||||
|
}
|
||||||
|
let status = this.$route.query.status
|
||||||
|
if (status) {
|
||||||
|
this.queryParam.status = status
|
||||||
|
}
|
||||||
|
// 获取当前路由的查询参数
|
||||||
|
const query = { ...this.$route.query }
|
||||||
|
// 检查要删除的查询参数是否存在,如果存在则删除
|
||||||
|
if (query.date) {
|
||||||
|
delete query.date
|
||||||
|
}
|
||||||
|
if (query.status) {
|
||||||
|
delete query.status
|
||||||
|
}
|
||||||
|
// 使用 $router.replace() 方法更新路由,但不改变浏览历史
|
||||||
|
this.$router.replace({ query })
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
reset() {
|
reset() {
|
||||||
@ -456,6 +493,60 @@ export default {
|
|||||||
},
|
},
|
||||||
staff(id) {
|
staff(id) {
|
||||||
this.$refs.staffModal.add(id)
|
this.$refs.staffModal.add(id)
|
||||||
|
},
|
||||||
|
// 导出预约列表
|
||||||
|
exportOrderList() {
|
||||||
|
let chooseDate = this.queryParam.chooseDate
|
||||||
|
let filterDate = ''
|
||||||
|
if (chooseDate) {
|
||||||
|
filterDate = chooseDate.format('YYYY-MM-DD')
|
||||||
|
} else {
|
||||||
|
filterDate = ''
|
||||||
|
}
|
||||||
|
if (filterDate == '') {
|
||||||
|
this.$message.error('请选择会议预约时间')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
expMRByDate({
|
||||||
|
'filterDate': filterDate,
|
||||||
|
'userOrg': this.queryParam.userOrg,
|
||||||
|
'title': this.queryParam.title,
|
||||||
|
'status': this.queryParam.status
|
||||||
|
}).then(res => {
|
||||||
|
this.exportExcel(chooseDate.format('YYYYMMDD') + '会议室预约记录', res)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
exportMonthOrder() {
|
||||||
|
let chooseDate = this.queryParam.chooseDate
|
||||||
|
let filterDate = ''
|
||||||
|
if (chooseDate) {
|
||||||
|
filterDate = chooseDate.format('YYYY-MM')
|
||||||
|
} else {
|
||||||
|
filterDate = ''
|
||||||
|
}
|
||||||
|
if (filterDate == '') {
|
||||||
|
this.$message.error('请选择会议预约时间')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
expMRByMonth({
|
||||||
|
'month': filterDate
|
||||||
|
}).then(res => {
|
||||||
|
this.exportExcel(chooseDate.format('YYYYMM') + '月度会议汇总', res)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
exportExcel(filename, res) {
|
||||||
|
const link = document.createElement('a')
|
||||||
|
let blob = new Blob([res], { type: 'application/vnd.ms-excel;charset=UTF-8' })
|
||||||
|
link.style.display = 'none'
|
||||||
|
link.href = URL.createObjectURL(blob)
|
||||||
|
let num = ''
|
||||||
|
for (let i = 0; i < 10; i++) {
|
||||||
|
num += Math.ceil(Math.random() * 10)
|
||||||
|
}
|
||||||
|
link.setAttribute('download', filename + '.xls')
|
||||||
|
document.body.appendChild(link)
|
||||||
|
link.click()
|
||||||
|
document.body.removeChild(link)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user