parent
5d978ad53c
commit
b90bd260be
@ -0,0 +1,33 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
export function getList(params){
|
||||
return request({
|
||||
method:'get',
|
||||
url:'/api/admin/schedule-list-callbacks/get-list',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
export function getForm(id,params){
|
||||
return request({
|
||||
method:'get',
|
||||
url:`/api/admin/schedule-list-callbacks/get-form/${id}`,
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
export function save(data){
|
||||
return request({
|
||||
method:'post',
|
||||
url:'/api/admin/schedule-list-callbacks/save',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function destroy(id,data){
|
||||
return request({
|
||||
method:'post',
|
||||
url:`/api/admin/schedule-list-callbacks/delete/${id}`,
|
||||
data
|
||||
})
|
||||
}
|
||||
@ -1,178 +1,184 @@
|
||||
import {
|
||||
login,
|
||||
logout,
|
||||
getInfo
|
||||
} from '@/api/user'
|
||||
import {
|
||||
getToken,
|
||||
setToken,
|
||||
removeToken
|
||||
} from '@/utils/auth'
|
||||
import { getList as areaList } from "@/api/system/adminArea"
|
||||
import { getList as typeList } from "@/api/system/adminProductType"
|
||||
import {
|
||||
resetRouter
|
||||
} from '@/router'
|
||||
|
||||
const getDefaultState = () => {
|
||||
return {
|
||||
token: getToken(),
|
||||
name: '',
|
||||
user_id:'',
|
||||
avatar: '',
|
||||
roles: [],
|
||||
typeAuth: [],
|
||||
areaAuth: []
|
||||
}
|
||||
}
|
||||
|
||||
const state = getDefaultState()
|
||||
|
||||
const mutations = {
|
||||
RESET_STATE: (state) => {
|
||||
Object.assign(state, getDefaultState())
|
||||
},
|
||||
SET_TOKEN: (state, token) => {
|
||||
state.token = token
|
||||
},
|
||||
SET_NAME: (state, name) => {
|
||||
state.name = name
|
||||
},
|
||||
SET_AVATAR: (state, avatar) => {
|
||||
state.avatar = avatar
|
||||
},
|
||||
SET_ROLES: (state, roles) => {
|
||||
state.roles = roles
|
||||
},
|
||||
SET_TYPEAUTH:(state,arr) => {
|
||||
state.typeAuth = arr
|
||||
},
|
||||
SET_AREAAUTH:(state,arr) => {
|
||||
state.areaAuth = arr
|
||||
},
|
||||
SET_USERID:(state,id) => {
|
||||
state.user_id = id
|
||||
}
|
||||
}
|
||||
|
||||
const actions = {
|
||||
// user login
|
||||
login({
|
||||
commit
|
||||
}, userInfo) {
|
||||
const {
|
||||
username,
|
||||
password
|
||||
} = userInfo
|
||||
return new Promise((resolve, reject) => {
|
||||
login({
|
||||
username: username.trim(),
|
||||
password: password
|
||||
}).then(response => {
|
||||
console.log(response)
|
||||
const {
|
||||
data
|
||||
} = response;
|
||||
console.log(response.access_token)
|
||||
commit('SET_TOKEN', response.access_token)
|
||||
setToken(response.access_token)
|
||||
resolve()
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// get user info
|
||||
getInfo({
|
||||
commit,
|
||||
state
|
||||
}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
getInfo(state.token).then(response => {
|
||||
|
||||
if (!response) {
|
||||
reject('身份验证失败请重新登录')
|
||||
}
|
||||
response["roles"] = ["admin"];
|
||||
const {
|
||||
roles,
|
||||
name,
|
||||
avatar,
|
||||
id
|
||||
} = response
|
||||
|
||||
commit('SET_ROLES', roles)
|
||||
commit('SET_NAME', name)
|
||||
commit('SET_AVATAR', avatar)
|
||||
commit('SET_USERID',id)
|
||||
resolve(response)
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// user logout
|
||||
logout({
|
||||
commit,
|
||||
state
|
||||
}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
logout(state.token).then(() => {
|
||||
removeToken() // must remove token first
|
||||
resetRouter()
|
||||
commit('RESET_STATE')
|
||||
resolve()
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// remove token
|
||||
resetToken({
|
||||
commit
|
||||
}) {
|
||||
return new Promise(resolve => {
|
||||
removeToken() // must remove token first
|
||||
commit('RESET_STATE')
|
||||
resolve()
|
||||
})
|
||||
},
|
||||
|
||||
//获取用户板块权限
|
||||
getType({commit,state}){
|
||||
return new Promise((resolve,reject) => {
|
||||
typeList({
|
||||
admin_id:state.user_id
|
||||
}).then(res => {
|
||||
commit('SET_TYPEAUTH',res)
|
||||
resolve(res)
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
//获取用户地区权限
|
||||
getArea({commit,state}){
|
||||
return new Promise((resolve,reject) => {
|
||||
areaList({
|
||||
admin_id:state.user_id
|
||||
}).then(res => {
|
||||
commit('SET_AREAAUTH',res)
|
||||
resolve(res)
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
namespaced: true,
|
||||
state,
|
||||
mutations,
|
||||
actions
|
||||
}
|
||||
import {
|
||||
login,
|
||||
logout,
|
||||
getInfo
|
||||
} from '@/api/user'
|
||||
import {
|
||||
getToken,
|
||||
setToken,
|
||||
removeToken
|
||||
} from '@/utils/auth'
|
||||
import { getList as areaList } from "@/api/system/adminArea"
|
||||
import { getList as typeList } from "@/api/system/adminProductType"
|
||||
import {
|
||||
resetRouter
|
||||
} from '@/router'
|
||||
|
||||
const getDefaultState = () => {
|
||||
return {
|
||||
token: getToken(),
|
||||
name: '',
|
||||
user_id:'',
|
||||
avatar: '',
|
||||
roles: [],
|
||||
typeAuth: [],
|
||||
areaAuth: [],
|
||||
myRoles: [],
|
||||
}
|
||||
}
|
||||
|
||||
const state = getDefaultState()
|
||||
|
||||
const mutations = {
|
||||
SET_MYROLES: (state, roles) => {
|
||||
state.myRoles = roles;
|
||||
},
|
||||
RESET_STATE: (state) => {
|
||||
Object.assign(state, getDefaultState())
|
||||
},
|
||||
SET_TOKEN: (state, token) => {
|
||||
state.token = token
|
||||
},
|
||||
SET_NAME: (state, name) => {
|
||||
state.name = name
|
||||
},
|
||||
SET_AVATAR: (state, avatar) => {
|
||||
state.avatar = avatar
|
||||
},
|
||||
SET_ROLES: (state, roles) => {
|
||||
state.roles = roles
|
||||
},
|
||||
SET_TYPEAUTH:(state,arr) => {
|
||||
state.typeAuth = arr
|
||||
},
|
||||
SET_AREAAUTH:(state,arr) => {
|
||||
state.areaAuth = arr
|
||||
},
|
||||
SET_USERID:(state,id) => {
|
||||
state.user_id = id
|
||||
}
|
||||
}
|
||||
|
||||
const actions = {
|
||||
// user login
|
||||
login({
|
||||
commit
|
||||
}, userInfo) {
|
||||
const {
|
||||
username,
|
||||
password
|
||||
} = userInfo
|
||||
return new Promise((resolve, reject) => {
|
||||
login({
|
||||
username: username.trim(),
|
||||
password: password
|
||||
}).then(response => {
|
||||
console.log(response)
|
||||
const {
|
||||
data
|
||||
} = response;
|
||||
console.log(response.access_token)
|
||||
commit('SET_TOKEN', response.access_token)
|
||||
setToken(response.access_token)
|
||||
resolve()
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// get user info
|
||||
getInfo({
|
||||
commit,
|
||||
state
|
||||
}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
getInfo(state.token).then(response => {
|
||||
|
||||
if (!response) {
|
||||
reject('身份验证失败请重新登录')
|
||||
}
|
||||
response["roles"] = ["admin"];
|
||||
const {
|
||||
roles,
|
||||
name,
|
||||
avatar,
|
||||
id,
|
||||
role
|
||||
} = response
|
||||
|
||||
commit('SET_MYROLES', role)
|
||||
commit('SET_ROLES', roles)
|
||||
commit('SET_NAME', name)
|
||||
commit('SET_AVATAR', avatar)
|
||||
commit('SET_USERID',id)
|
||||
resolve(response)
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// user logout
|
||||
logout({
|
||||
commit,
|
||||
state
|
||||
}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
logout(state.token).then(() => {
|
||||
removeToken() // must remove token first
|
||||
resetRouter()
|
||||
commit('RESET_STATE')
|
||||
resolve()
|
||||
}).catch(error => {
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// remove token
|
||||
resetToken({
|
||||
commit
|
||||
}) {
|
||||
return new Promise(resolve => {
|
||||
removeToken() // must remove token first
|
||||
commit('RESET_STATE')
|
||||
resolve()
|
||||
})
|
||||
},
|
||||
|
||||
//获取用户板块权限
|
||||
getType({commit,state}){
|
||||
return new Promise((resolve,reject) => {
|
||||
typeList({
|
||||
admin_id:state.user_id
|
||||
}).then(res => {
|
||||
commit('SET_TYPEAUTH',res)
|
||||
resolve(res)
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
//获取用户地区权限
|
||||
getArea({commit,state}){
|
||||
return new Promise((resolve,reject) => {
|
||||
areaList({
|
||||
admin_id:state.user_id
|
||||
}).then(res => {
|
||||
commit('SET_AREAAUTH',res)
|
||||
resolve(res)
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
namespaced: true,
|
||||
state,
|
||||
mutations,
|
||||
actions
|
||||
}
|
||||
|
||||
@ -0,0 +1,129 @@
|
||||
<template>
|
||||
<div>
|
||||
<Drawer title="回访明细" :closable="false" :width="54" v-model="isShow">
|
||||
<div class="info">
|
||||
<span class="info-title">工单服务日期</span>
|
||||
<span class="info-content">
|
||||
{{ (row.schedule_list && row.schedule_list.date) ? row.schedule_list.date : '' }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="info">
|
||||
<span class="info-title">护理人</span>
|
||||
<span class="info-content">
|
||||
{{ (row.schedule_list && row.schedule_list.nurse) ? row.schedule_list.nurse.name : '' }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="info">
|
||||
<span class="info-title">被护理人</span>
|
||||
<span class="info-content">
|
||||
{{ (row.schedule_list && row.schedule_list.customer) ? row.schedule_list.customer.name : '' }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="info">
|
||||
<span class="info-title">回访方式</span>
|
||||
<span class="info-content">
|
||||
{{ (row.way && ways.find(i => i.id === row.way)) ? ways.find(i => i.id === row.way).value : '' }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="info">
|
||||
<span class="info-title">是否接通</span>
|
||||
<span class="info-content">{{ row.is_coherent ? '是' : '否' }}</span>
|
||||
</div>
|
||||
|
||||
<div class="info">
|
||||
<span class="info-title">回访时间</span>
|
||||
<span class="info-content">{{ row.visit_time }}</span>
|
||||
</div>
|
||||
|
||||
<div class="info">
|
||||
<span class="info-title">是否服务</span>
|
||||
<span class="info-content">{{ row.is_serve ? '是' : '否' }}</span>
|
||||
</div>
|
||||
|
||||
<div class="info">
|
||||
<span class="info-title">满意度</span>
|
||||
<span class="info-content">
|
||||
{{ (row.satisfy && satisfys.find(i => i.id === row.satisfy)) ? satisfys.find(i => i.id === row.satisfy).value : '' }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="info">
|
||||
<span class="info-title">服务规范</span>
|
||||
<span class="info-content">{{ row.is_standard ? '规范' : '不规范' }}</span>
|
||||
</div>
|
||||
|
||||
<div class="info">
|
||||
<span class="info-title">备注</span>
|
||||
<span class="info-content">{{ row.remark }}</span>
|
||||
</div>
|
||||
|
||||
<div class="info">
|
||||
<span class="info-title">回访图片</span>
|
||||
<div>
|
||||
<el-image
|
||||
:preview-src-list="row.files.map(i => i.url)"
|
||||
v-for="item in row.files"
|
||||
style="max-width: 200px;margin-right: 6px;"
|
||||
:src="item.url"
|
||||
fit="cover"></el-image>
|
||||
</div>
|
||||
</div>
|
||||
</Drawer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { deepCopy } from "@/utils";
|
||||
export default {
|
||||
props: {
|
||||
ways: Array,
|
||||
satisfys: Array
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isShow: false,
|
||||
row: {},
|
||||
key2Name: {
|
||||
schedule_list_id: "",
|
||||
way: "回访方式",
|
||||
is_coherent: "是否接通",
|
||||
visit_time: "回访时间",
|
||||
is_serve: "是否服务",
|
||||
satisfy: "满意度",
|
||||
is_standard: "服务规范",
|
||||
remark: "备注",
|
||||
file_ids: "回访图片",
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
show () {
|
||||
this.isShow = true;
|
||||
},
|
||||
hide () {
|
||||
this.isShow = false;
|
||||
},
|
||||
setRow (row) {
|
||||
this.row = deepCopy(row)
|
||||
}
|
||||
},
|
||||
computed: {},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.info {
|
||||
line-height: 2;
|
||||
}
|
||||
.info-title{
|
||||
font-weight: 600;
|
||||
}
|
||||
.info-content{
|
||||
|
||||
padding-left: 10px;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,368 @@
|
||||
<template>
|
||||
<div>
|
||||
<div ref="lxHeader">
|
||||
<lx-header icon="md-apps" style="margin-bottom: 10px; border: 0px; margin-top: 15px" text="回访明细">
|
||||
<div slot="content"></div>
|
||||
<slot>
|
||||
<div class="select">
|
||||
<div>
|
||||
<span>回访日期</span>
|
||||
<el-date-picker v-model="select.start_visit_time" style="width: 186px;" placeholder="回访开始日期" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" size="small"></el-date-picker>
|
||||
<span style="padding-left: 12px;">至</span>
|
||||
<el-date-picker v-model="select.end_visit_time" style="width: 186px;" placeholder="回访结束日期" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" size="small"></el-date-picker>
|
||||
</div>
|
||||
<div>
|
||||
<span>服务日期</span>
|
||||
<el-date-picker v-model="select.start_date" style="width: 140px;" placeholder="服务开始日期" type="date" value-format="yyyy-MM-dd" size="small"></el-date-picker>
|
||||
<span style="padding-left: 12px;">至</span>
|
||||
<el-date-picker v-model="select.end_date" style="width: 140px;" placeholder="服务结束日期" type="date" value-format="yyyy-MM-dd" size="small"></el-date-picker>
|
||||
</div>
|
||||
<div>
|
||||
<span>护理人</span>
|
||||
<el-select
|
||||
filterable
|
||||
size="small"
|
||||
v-model="select.nurse_id"
|
||||
placeholder="选择护理人姓名"
|
||||
clearable
|
||||
style="width: 160px;"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in nurses"
|
||||
:value="item.id"
|
||||
:label="item.name"
|
||||
:key="item.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div>
|
||||
<span>被护理人</span>
|
||||
<el-select
|
||||
v-load-more="getCustomers"
|
||||
:loading="customerLoading"
|
||||
remote
|
||||
:remote-method="customerRemote"
|
||||
filterable
|
||||
size="small"
|
||||
v-model="select.customer_id"
|
||||
placeholder="选择被护理人"
|
||||
clearable
|
||||
style="width: 160px;"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in customers"
|
||||
:value="item.id"
|
||||
:label="item.name"
|
||||
:key="item.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div>
|
||||
<Button type="primary" @click="total = 0,select.page = 1,getList()">查询</Button>
|
||||
</div>
|
||||
<div>
|
||||
<Button type="primary" @click="exportExcel">导出</Button>
|
||||
</div>
|
||||
<!-- <div>-->
|
||||
<!-- <Button type="primary" @click="$refs['add'].type = 'add',$refs['add'].isShow = true">新建</Button>-->
|
||||
<!-- </div>-->
|
||||
</div>
|
||||
</slot>
|
||||
</lx-header>
|
||||
</div>
|
||||
|
||||
<xy-table
|
||||
:total="total"
|
||||
:list="list"
|
||||
:table-item="table"
|
||||
@editor="editor"
|
||||
@delete="destroy"
|
||||
@pageSizeChange="e => select.page_size = e"
|
||||
@pageIndexChange="e => {select.page = e;getList()}">
|
||||
<template v-slot:btns>
|
||||
<el-table-column label="操作" fixed="right" header-align="center" align="left" width="200">
|
||||
<template v-slot:default="scope">
|
||||
<Button
|
||||
size="small"
|
||||
type="primary"
|
||||
style="margin-right: 6px"
|
||||
@click="_ => {
|
||||
$refs['drawer'].setRow(scope.row)
|
||||
$refs['drawer'].show()
|
||||
}"
|
||||
>查看</Button>
|
||||
<Poptip
|
||||
transfer
|
||||
confirm
|
||||
title="确认要删除?"
|
||||
@on-ok="destroy(scope.row)"
|
||||
>
|
||||
<Button size="small" type="error" ghost style="margin-right: 6px"
|
||||
>删除</Button
|
||||
>
|
||||
</Poptip>
|
||||
<Button size="small"
|
||||
ghost
|
||||
type="primary"
|
||||
@click="editor(scope.row)">编辑</Button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
</xy-table>
|
||||
|
||||
<add ref="add" :ways="ways" :satisfys="satisfys" @refresh="getList"></add>
|
||||
<drawer :ways="ways" :satisfys="satisfys" ref="drawer"></drawer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getList,destroy} from '@/api/callbacks'
|
||||
import {getList as customerIndex} from "@/api/customer";
|
||||
import {getList as nurseList} from "@/api/worker";
|
||||
import add from "@/views/finance/component/addCallbacks.vue";
|
||||
import drawer from "@/views/finance/component/followUpDrawer.vue"
|
||||
import * as XLSX from "xlsx";
|
||||
import { saveAs } from "file-saver";
|
||||
export default {
|
||||
components:{
|
||||
add,
|
||||
drawer
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
nurses: [],
|
||||
ways: [
|
||||
{
|
||||
id: 1,
|
||||
value: "上门"
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
value: "电话"
|
||||
}
|
||||
],
|
||||
satisfys: [
|
||||
{
|
||||
id: 1,
|
||||
value: "非常满意"
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
value: "满意"
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
value: "一般"
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
value: "不满意"
|
||||
}
|
||||
],
|
||||
|
||||
customers:[],
|
||||
customerLoading: false,
|
||||
customerTotal: 0,
|
||||
customerSelect: {
|
||||
page: 1,
|
||||
page_size: 20,
|
||||
keyword: ""
|
||||
},
|
||||
|
||||
|
||||
select:{
|
||||
page:1,
|
||||
page_size:10,
|
||||
customer_id: "",
|
||||
nurse_id: "",
|
||||
start_visit_time: "",
|
||||
end_visit_time: "",
|
||||
start_date: "",
|
||||
end_date: ""
|
||||
},
|
||||
|
||||
total:0,
|
||||
list:[],
|
||||
table:[
|
||||
{
|
||||
type:'index',
|
||||
label:' ',
|
||||
width: 56,
|
||||
},
|
||||
{
|
||||
prop: 'visit_time',
|
||||
label:'回访日期',
|
||||
width: 160
|
||||
},
|
||||
{
|
||||
prop:'schedule_list.customer.name',
|
||||
label: '被护理人',
|
||||
width: 160,
|
||||
},
|
||||
{
|
||||
prop: 'schedule_list.date',
|
||||
label: '工单服务日期',
|
||||
width: 160
|
||||
},
|
||||
{
|
||||
prop: 'schedule_list.nurse.name',
|
||||
label: '护理人',
|
||||
width: 140
|
||||
},
|
||||
{
|
||||
prop: 'is_standard',
|
||||
label: '服务规范',
|
||||
width: 180,
|
||||
formatter: (data, row ,value) => {
|
||||
return value ? '是' : '否'
|
||||
}
|
||||
},
|
||||
{
|
||||
prop: 'way',
|
||||
label: '回访方式',
|
||||
width: 180,
|
||||
formatter: (data, row, value) => {
|
||||
return this.ways.find(i => i.id === value)?.value
|
||||
}
|
||||
},
|
||||
{
|
||||
prop: 'satisfy',
|
||||
label: '满意度',
|
||||
width: 140,
|
||||
formatter: (data, row, value) => {
|
||||
return this.satisfys.find(i => i.id === value)?.value
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async getCustomers(){
|
||||
|
||||
if ((this.customers.length >= this.customerTotal) && this.customers.length !== 0) return;
|
||||
this.customerLoading = true;
|
||||
try {
|
||||
const res = await customerIndex(this.customerSelect,false)
|
||||
this.customers.push(...res.data.data);
|
||||
this.customerTotal = res.data.total;
|
||||
this.customerSelect.page++;
|
||||
this.customerLoading = false;
|
||||
} catch (err) {
|
||||
this.customerLoading = false;
|
||||
}
|
||||
},
|
||||
async getNurses(){
|
||||
const res = await nurseList({
|
||||
page: 1,
|
||||
page_size: 999,
|
||||
is_simple: 1
|
||||
})
|
||||
this.nurses = res.data
|
||||
},
|
||||
customerRemote (query) {
|
||||
let keyword = query ? query.trim() : "";
|
||||
this.customers = [];
|
||||
this.customerTotal = 0;
|
||||
this.customerSelect.page = 1;
|
||||
this.customerSelect.keyword = keyword;
|
||||
|
||||
this.getCustomers();
|
||||
},
|
||||
|
||||
async getList(){
|
||||
const res = await getList(this.select)
|
||||
this.total = res.total
|
||||
this.list = res.data
|
||||
console.log(this.list)
|
||||
},
|
||||
|
||||
editor(row){
|
||||
this.$refs['add'].setId(row.id)
|
||||
this.$refs['add'].setType('editor')
|
||||
this.$refs['add'].show()
|
||||
},
|
||||
destroy(row){
|
||||
destroy(row.id).then(res => {
|
||||
this.$successMessage('destroy','')
|
||||
this.getList()
|
||||
})
|
||||
},
|
||||
|
||||
async exportExcel () {
|
||||
const res = await getList({
|
||||
...this.select,
|
||||
page: 1,
|
||||
page_size: 9999
|
||||
})
|
||||
const handlerValue = (key, obj) => {
|
||||
try {
|
||||
if (key.includes(".")) {
|
||||
let splitKey = key.split(".")
|
||||
let temp = obj;
|
||||
for (let i of splitKey) {
|
||||
if (i && typeof i === 'string' && typeof temp === 'object') {
|
||||
temp = temp[i]
|
||||
}
|
||||
}
|
||||
return temp
|
||||
} else {
|
||||
return obj[key]
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
}
|
||||
}
|
||||
if (res.data) {
|
||||
let header = this.table.slice(1).map(i => i.label)
|
||||
let data = res.data.map(i => {
|
||||
let temp = [];
|
||||
this.table.slice(1).forEach(row => {
|
||||
if (row.hasOwnProperty("formatter")) {
|
||||
temp.push(row.formatter(false, false, handlerValue(row.prop, i)))
|
||||
} else {
|
||||
temp.push(handlerValue(row.prop, i))
|
||||
}
|
||||
})
|
||||
return temp;
|
||||
})
|
||||
data.unshift(header)
|
||||
|
||||
const wb = XLSX.utils.book_new();
|
||||
const ws = XLSX.utils.aoa_to_sheet(data);
|
||||
XLSX.utils.book_append_sheet(wb, ws, "回访明细");
|
||||
const wbout = XLSX.write(wb, {
|
||||
bookType: "xlsx",
|
||||
bookSST: true,
|
||||
type: "array",
|
||||
});
|
||||
saveAs(
|
||||
new Blob([wbout], { type: "application/octet-stream" }),
|
||||
`回访明细${this.$moment().format('YYYY-MM-DD')}.xlsx`
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.getNurses()
|
||||
this.getCustomers()
|
||||
this.getList()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.select {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
|
||||
& > div {
|
||||
margin: 2px 6px;
|
||||
|
||||
& > span {
|
||||
padding-right: 12px;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Loading…
Reference in new issue