master
271556543@qq.com 3 years ago
parent 242657fec6
commit 96f94e85c1

@ -87,6 +87,14 @@ export default {
}, },
pageSize: { pageSize: {
type: Number type: Number
},
pageSizeOpts:{
type:Array,
default:()=>[10, 20, 30, 40]
},
showSizer:{
type:Boolean,
default:true
} }
}, },
data() { data() {
@ -114,6 +122,9 @@ export default {
selectClick(selection, row) { selectClick(selection, row) {
this.$emit('select', selection, row) this.$emit('select', selection, row)
}, },
selectAllClick(selection){
this.$emit('select-all',selection)
},
cellClick(row, column, cell) { cellClick(row, column, cell) {
this.$emit('cellClick', row, column, cell) this.$emit('cellClick', row, column, cell)
}, },
@ -133,13 +144,14 @@ export default {
enter-active-class="slide-in-bottom" enter-active-class="slide-in-bottom"
leave-to-class="slide-out-down"> leave-to-class="slide-out-down">
<Page <Page
page-size-opts={this.pageSizeOpts}
show-total={true} show-total={true}
page-size={this.pageSize} page-size={this.pageSize}
v-show={this.isShowPage} v-show={this.isShowPage}
total={this.total} total={this.total}
size="small" size="small"
show-elevator={true} show-elevator={true}
show-sizer={true} show-sizer={this.showSizer}
class="xy-table-page" class="xy-table-page"
on={{ on={{
['on-page-size-change']: (e) => this.$emit('pageSizeChange', e), ['on-page-size-change']: (e) => this.$emit('pageSizeChange', e),
@ -174,6 +186,7 @@ export default {
cellClick, cellClick,
btnWidth, btnWidth,
selectClick, selectClick,
selectAllClick,
height, height,
createIndexRow, createIndexRow,
tableStyle, tableStyle,
@ -217,7 +230,10 @@ export default {
default-expand-all={defaultExpandAll} default-expand-all={defaultExpandAll}
tree-props={treeProps} tree-props={treeProps}
fit={true} fit={true}
on={{['select']: selectClick, ['cell-click']: cellClick}}> on={{
['select']: selectClick,
['cell-click']: cellClick,
['select-all']: selectAllClick}}>
{ {

@ -20,12 +20,13 @@
@editor="editor" @editor="editor"
@delete="destroy"></xy-table> @delete="destroy"></xy-table>
<add ref="addcollectMoney" @refresh="getList" /> <add ref="addcollectMoney" :accounts="accounts" @refresh="getList" />
</div> </div>
</template> </template>
<script> <script>
import {getList,destroy} from '@/api/collectMoney' import {getList,destroy} from '@/api/collectMoney'
import {getList as unitList} from '@/api/payUnit'
import {parseTime} from "@/utils" import {parseTime} from "@/utils"
import add from "./component/addcollectMoney" import add from "./component/addcollectMoney"
@ -42,6 +43,7 @@ export default {
keyword:'' keyword:''
}, },
types:[], types:[],
accounts:[],
total:0, total:0,
list:[], list:[],
@ -49,6 +51,10 @@ export default {
} }
}, },
methods: { methods: {
async getAccounts(){
const res = await unitList({page:1,page_size:9999},false)
this.accounts = res.data
},
async getList(){ async getList(){
const res = await getList(this.select) const res = await getList(this.select)
@ -71,6 +77,7 @@ export default {
}, },
mounted() { mounted() {
this.getList() this.getList()
this.getAccounts()
} }
} }
</script> </script>

@ -9,13 +9,15 @@
:form="form" :form="form"
:rules="rules" :rules="rules"
@submit="submit"> @submit="submit">
<template v-slot:pay_name> <template v-slot:account_id >
<div class="xy-table-item"> <div class="xy-table-item">
<div class="xy-table-item-label"> <div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>付款方 <span style="color: red;font-weight: 600;padding-right: 4px;">*</span>付款方
</div> </div>
<div class="xy-table-item-content"> <div class="xy-table-item-content">
<el-input v-model="form.pay_name" clearable placeholder="请输入付款方" style="width: 300px;"></el-input> <el-select v-model="form.account_id" placeholder="请选择付款对象" style="width: 300px;">
<el-option v-for="item in accounts" :value="item.id" :label="item.name" :key="item.id"></el-option>
</el-select>
</div> </div>
</div> </div>
</template> </template>
@ -25,7 +27,7 @@
<div class="xy-table-item-label"> <div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>金额 <span style="color: red;font-weight: 600;padding-right: 4px;">*</span>金额
</div> </div>
<div class="xy-table-item-content"> <div class="xy-table-item-content xy-table-item-price">
<el-input-number :controls="false" :precision="2" v-model="form.money" clearable placeholder="请输入金额" style="width: 300px;"></el-input-number> <el-input-number :controls="false" :precision="2" v-model="form.money" clearable placeholder="请输入金额" style="width: 300px;"></el-input-number>
</div> </div>
</div> </div>
@ -75,23 +77,35 @@
<template v-slot:schedule_links > <template v-slot:schedule_links >
<div class="xy-table-item"> <div class="xy-table-item">
<div class="xy-table-item-label"> <div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>排班信息 <span style="color: red;font-weight: 600;padding-right: 4px;">*</span>结算排班
</div> </div>
<div class="xy-table-item-content"> <div class="xy-table-item-content">
<div class="xy-table-item-content-schedule" @click="$refs['scheduleList'].isShow = true"> <template v-if="form.schedule_links.length > 0">
<template v-if="form.schedule_links.length > 0"> <Button type="primary" style="margin-bottom: 10px;" @click="$refs['scheduleList'].form = form.schedule_links,$refs['scheduleList'].isShow = true">
排班选择
</template> </Button>
<template v-else> <div style="width: 500px">
请选择排班 <xy-table :height="300" :is-page="false" :list="form.schedule_links" :table-item="scheduleTable">
</template> <template v-slot:btns>
</div> <el-table-column width="68" align="center" fixed="right">
<template v-slot:default="scope">
<Button size="small" type="primary" ghost @click="removeSchedule(scope)"></Button>
</template>
</el-table-column>
</template>
</xy-table>
</div>
</template>
<template v-else>
<el-input readonly placeholder="请选择结算排班" style="width: 300px;" @focus="$refs['scheduleList'].form = form.schedule_links,$refs['scheduleList'].isShow = true"></el-input>
</template>
</div> </div>
</div> </div>
</template> </template>
</xy-dialog> </xy-dialog>
<scheduleList ref="scheduleList"></scheduleList> <scheduleList :accounts="accounts" ref="scheduleList" @submit="setSchedule"></scheduleList>
</div> </div>
</template> </template>
@ -99,18 +113,32 @@
import {save,getForm} from '@/api/collectMoney' import {save,getForm} from '@/api/collectMoney'
import scheduleList from "@/views/finance/component/scheduleList"; import scheduleList from "@/views/finance/component/scheduleList";
import {parseTime} from "@/utils";
export default { export default {
props:{
accounts:{
type:Array,
default:()=>[]
}
},
components:{ components:{
scheduleList scheduleList
}, },
data() { data() {
let validatorSchedule = (rule, value, callback) => {
if(value.length > 0){
callback()
}else{
callback(new Error('请选择结算排班'))
}
}
return { return {
isShow:false, isShow:false,
id:'', id:'',
type:'', type:'',
form:{ form:{
pay_name:'', account_id :'',
money:'', money:'',
invoice_type:'', invoice_type:'',
date:'', date:'',
@ -118,10 +146,89 @@ export default {
schedule_links:[], schedule_links:[],
}, },
rules:{ rules:{
pay_name:[ account_id:[
{required:true,message:'请填写付款方'} {required:true,message:'请选择付款方'}
],
money:[
{required:true,message:'请填写金额'}
],
invoice_type:[
{required:true,message:'请选择发票类型'}
],
date:[
{required:true,message:'请选择收款单日期'}
],
status:[
{required:true,message:'请选择状态'}
],
schedule_links:[
{validator:validatorSchedule}
] ]
} },
scheduleTable:[
{
label:'第三方结算对象',
prop:'orders.account.name',
minWidth: 160,
sortable:false
},
{
label:'护工',
prop:'nurse.name',
width: 160,
sortable:false
},
{
label:'服务日期',
prop:'date',
width: 200,
sortable:false
},
{
label:'时间段',
width: 150,
sortable:false,
customFn:(row)=>{
return (
<div>{parseTime(row.start_time,'{h}:{i}')}~{parseTime(row.end_time,'{h}:{i}')}</div>
)
}
},
{
label:'订单编号',
prop:'orders.no',
width: 220,
sortable:false
},
{
label:'服务对象',
prop:'customer.name',
width: 200,
sortable:false
},
{
label:'服务状态',
prop:'status',
width: 140,
sortable:false,
formatter:(cell,data,value) => {
switch (value){
case 0:
return '已排班未服务'
break;
case 1:
return '已排班未服务'
break;
case 2:
return '已服务'
break;
default:
return value
}
}
}
]
} }
}, },
methods: { methods: {
@ -131,6 +238,14 @@ export default {
this.$integrateData(this.form,res) this.$integrateData(this.form,res)
}, },
setSchedule(array){
this.form.schedule_links = array
},
removeSchedule(scope){
console.log(scope)
this.form.schedule_links.splice(scope.$index,1)
},
submit(){ submit(){
if(this.type === 'editor'){ if(this.type === 'editor'){
Object.defineProperty(this.form,'id',{ Object.defineProperty(this.form,'id',{
@ -168,19 +283,5 @@ export default {
::v-deep .el-input__inner{ ::v-deep .el-input__inner{
text-align: left; text-align: left;
} }
.xy-table-item-content-schedule{
color: #C0C4CC;;
width: 300px;
height: 40px;
line-height: 40px;
background-color: #FFFFFF;
border-radius: 4px;
border: 1px solid #DCDFE6;
transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
padding: 0 15px;
&:hover{
border: 1px solid #C0C4CC;
transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
}
}
</style> </style>

@ -1,11 +1,52 @@
<template> <template>
<div> <div>
<xy-dialog :width="72" :is-show.sync="isShow" type="normal" title="排班列表"> <xy-dialog :width="72" :is-show.sync="isShow" type="normal" title="排班列表" @on-ok="submit">
<div style="margin-bottom: 10px;">
<el-select placeholder="选择结算对象" size="small" v-model="select.account_id" clearable style="width:160px;">
<el-option v-for="item in accounts" :value="item.id" :key="item.id" :label="item.name"></el-option>
</el-select>
<el-select placeholder="选择区域" size="small" v-model="select.area_id" clearable style="width:160px;margin-left: 6px">
<el-option v-for="item in areas" :value="item.id" :key="item.id" :label="item.value"></el-option>
</el-select>
<el-date-picker
clearable
size="small"
v-model="date"
type="daterange"
value-format="yyyy-MM-dd"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
style="margin-left: 6px;width: 280px"
@change="datePick">
</el-date-picker>
</div>
<div style="margin-bottom: 10px;">
<Button
:ghost="select.page_size !== 9999"
type="primary"
@click="select.page_size === 9999 ? select.page_size = 10 : select.page_size = 9999"
style="margin-left: 6px;">取消分页</Button>
<Button
type="primary"
@click="reset"
style="margin-left: 6px;">重置</Button>
<Button
type="primary"
@click="select.page = 1,getList()"
style="margin-left: 6px;">查询</Button>
</div>
<xy-table <xy-table
:height="400" ref="xyTable"
:total="total"
:height="380"
:list="list" :list="list"
:table-item="table" :table-item="table"
:showSizer="false"
:page-size="select.page_size"
@select="colSelect" @select="colSelect"
@select-all="allSelect"
@pageSizeChange="e => select.page_size = e" @pageSizeChange="e => select.page_size = e"
@pageIndexChange="e => {select.page = e;getList()}"> @pageIndexChange="e => {select.page = e;getList()}">
<template v-slot:btns> <template v-slot:btns>
@ -18,40 +59,63 @@
<script> <script>
import {scheduleList} from '@/api/collectMoney' import {scheduleList} from '@/api/collectMoney'
import {getparameter} from '@/api/system/dictionary'
import {parseTime} from '@/utils' import {parseTime} from '@/utils'
export default { export default {
props:{
accounts:{
type:Array,
default:()=>[]
}
},
data() { data() {
return { return {
isShow:false, isShow:false,
select:{ select:{
page:1, page:1,
page_size:10 page_size:10,
area_id:'',
account_id:'',
start_date:'',
end_date:'',
}, },
areas:[],
date:'',
form:[], form:[],
list:[], list:[],
total:0,
table:[ table:[
{
type:'index',
width: 40
},
{ {
type:'selection', type:'selection',
width:46 width:46
}, },
{ {
label:'第三方结算对象', label:'第三方结算对象',
prop:'orders.account_id', prop:'orders.account.name',
minWidth: 160 minWidth: 160,
sortable:false
}, },
{ {
label:'护工', label:'护工',
prop:'nurse.name', prop:'nurse.name',
width: 160 width: 160,
sortable:false
}, },
{ {
label:'服务日期', label:'服务日期',
prop:'date', prop:'date',
width: 200 width: 200,
sortable:false
}, },
{ {
label:'时间段', label:'时间段',
width: 180, width: 180,
sortable:false,
customFn:(row)=>{ customFn:(row)=>{
return ( return (
<div>{parseTime(row.start_time,'{h}:{i}')}~{parseTime(row.end_time,'{h}:{i}')}</div> <div>{parseTime(row.start_time,'{h}:{i}')}~{parseTime(row.end_time,'{h}:{i}')}</div>
@ -61,17 +125,20 @@ export default {
{ {
label:'订单编号', label:'订单编号',
prop:'orders.no', prop:'orders.no',
width: 220 width: 220,
sortable:false
}, },
{ {
label:'服务对象', label:'服务对象',
prop:'customer.name', prop:'customer.name',
width: 200 width: 200,
sortable:false
}, },
{ {
label:'服务状态', label:'服务状态',
prop:'status', prop:'status',
width: 160, width: 160,
sortable:false,
formatter:(cell,data,value) => { formatter:(cell,data,value) => {
switch (value){ switch (value){
case 0: case 0:
@ -90,28 +157,64 @@ export default {
}, },
{ {
label:'结算单', label:'结算单',
width: 160 width: 160,
sortable:false
} }
] ]
} }
}, },
methods: { methods: {
datePick(e){
this.select.start_date = e[0]
this.select.end_date = e[1]
},
reset(){
this.select = {
page:1,
page_size:10,
area_id:'',
account_id:'',
start_date:'',
end_date:'',
}
},
async getAreas(){
const res = await getparameter({number:'serveArea'},false)
this.areas = res.detail
},
async getList(){ async getList(){
const res = await scheduleList(this.select) const res = await scheduleList(this.select)
this.list = res.data this.list = res.data
console.log(this.list) this.total = res.total
},
colSelect(selection, row){ let ids = this.form.map(item => {
console.log(selection, row) return item.id
this.form = selection.map(item => { })
return { this.list.forEach(row => {
schedule_id:item.id, if(ids.indexOf(row.id) !== -1){
order_id:item.orders.id this.$refs['xyTable'].toggleRowSelection(row)
} }
}) })
console.log(this.form)
}, },
colSelect(selection,row){
let ids = this.form.map(item => item.id)
if(ids.indexOf(row.id) === -1){
this.form.push(row)
}else{
this.form.splice(ids.indexOf(row.id),1)
}
},
allSelect(selection){
this.form = selection
},
submit(){
this.$emit('submit',this.form)
this.isShow = false
}
}, },
watch:{ watch:{
isShow(val){ isShow(val){
@ -121,6 +224,9 @@ export default {
this.form = [] this.form = []
} }
} }
},
mounted() {
this.getAreas()
} }
} }
</script> </script>

@ -104,6 +104,7 @@
:is-show.sync="isShowTime" :is-show.sync="isShowTime"
:nurses="nurses" :nurses="nurses"
:skus="detail.product_type.product_skus" :skus="detail.product_type.product_skus"
:addresses="addresses"
:date="date" :date="date"
:order-id="detail.id" :order-id="detail.id"
:product-id="detail.product.id" :product-id="detail.product.id"

@ -2,7 +2,7 @@
<div> <div>
<Modal :value="isShow" title="排班" width="48" @on-visible-change="e => $emit('update:isShow',e)"> <Modal :value="isShow" title="排班" width="48" @on-visible-change="e => $emit('update:isShow',e)">
<template v-slot:default> <template v-slot:default>
<el-form ref="elForm" :model="form" :rules="rules" label-width="80px"> <el-form ref="elForm" :model="form" :rules="rules" label-width="110px">
<el-form-item label="时间选择" prop="end_time"> <el-form-item label="时间选择" prop="end_time">
<div style="font-weight: 600">{{ date }}</div> <div style="font-weight: 600">{{ date }}</div>
<el-time-picker <el-time-picker
@ -34,6 +34,12 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="上门地址选择" prop="address_id">
<el-select v-model="form.address_id" placeholder="请选择上门地址选择" style="width: 300px;">
<el-option v-for="(item,index) in addresses" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="服务项目" prop="schedule_list_skus"> <el-form-item label="服务项目" prop="schedule_list_skus">
<el-checkbox-group v-model="form.schedule_list_skus"> <el-checkbox-group v-model="form.schedule_list_skus">
<template v-for="(item) in skus"> <template v-for="(item) in skus">
@ -84,6 +90,10 @@ export default {
nurses: { nurses: {
type: Array, type: Array,
default: () => [] default: () => []
},
addresses:{
type:Array,
default:()=>[]
} }
}, },
data() { data() {
@ -96,6 +106,7 @@ export default {
product_id: '', product_id: '',
order_id: '', order_id: '',
nurse_id: '', nurse_id: '',
address_id:'',
start_time: '', start_time: '',
end_time: '', end_time: '',
schedule_list_skus: [] schedule_list_skus: []
@ -110,6 +121,9 @@ export default {
end_time: [ end_time: [
{required: true, message: '请选择结束时间'} {required: true, message: '请选择结束时间'}
], ],
address_id: [
{required: true, message: '请选择护工'}
],
schedule_list_skus: [ schedule_list_skus: [
{required: true, message: '请选择护理项目'} {required: true, message: '请选择护理项目'}
] ]
@ -164,6 +178,9 @@ export default {
watch: { watch: {
isShow(val) { isShow(val) {
if (val) { if (val) {
this.form.address_id = this.addresses.filter(item => {
return item.default === 1
})[0]?.id || ''
} else { } else {
this.$emit('update:date','') this.$emit('update:date','')
this.$refs['elForm'].resetFields() this.$refs['elForm'].resetFields()

Loading…
Cancel
Save