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

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

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

@ -9,13 +9,15 @@
:form="form"
:rules="rules"
@submit="submit">
<template v-slot:pay_name>
<template v-slot:account_id >
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>付款方
</div>
<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>
</template>
@ -25,7 +27,7 @@
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>金额
</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>
</div>
</div>
@ -75,23 +77,35 @@
<template v-slot:schedule_links >
<div class="xy-table-item">
<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 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>
<template v-else>
请选择排班
</template>
</div>
<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">
排班选择
</Button>
<div style="width: 500px">
<xy-table :height="300" :is-page="false" :list="form.schedule_links" :table-item="scheduleTable">
<template v-slot:btns>
<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>
</template>
</xy-dialog>
<scheduleList ref="scheduleList"></scheduleList>
<scheduleList :accounts="accounts" ref="scheduleList" @submit="setSchedule"></scheduleList>
</div>
</template>
@ -99,18 +113,32 @@
import {save,getForm} from '@/api/collectMoney'
import scheduleList from "@/views/finance/component/scheduleList";
import {parseTime} from "@/utils";
export default {
props:{
accounts:{
type:Array,
default:()=>[]
}
},
components:{
scheduleList
},
data() {
let validatorSchedule = (rule, value, callback) => {
if(value.length > 0){
callback()
}else{
callback(new Error('请选择结算排班'))
}
}
return {
isShow:false,
id:'',
type:'',
form:{
pay_name:'',
account_id :'',
money:'',
invoice_type:'',
date:'',
@ -118,10 +146,89 @@ export default {
schedule_links:[],
},
rules:{
pay_name:[
{required:true,message:'请填写付款方'}
account_id:[
{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: {
@ -131,6 +238,14 @@ export default {
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(){
if(this.type === 'editor'){
Object.defineProperty(this.form,'id',{
@ -168,19 +283,5 @@ export default {
::v-deep .el-input__inner{
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>

@ -1,11 +1,52 @@
<template>
<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
:height="400"
ref="xyTable"
:total="total"
:height="380"
:list="list"
:table-item="table"
:showSizer="false"
:page-size="select.page_size"
@select="colSelect"
@select-all="allSelect"
@pageSizeChange="e => select.page_size = e"
@pageIndexChange="e => {select.page = e;getList()}">
<template v-slot:btns>
@ -18,40 +59,63 @@
<script>
import {scheduleList} from '@/api/collectMoney'
import {getparameter} from '@/api/system/dictionary'
import {parseTime} from '@/utils'
export default {
props:{
accounts:{
type:Array,
default:()=>[]
}
},
data() {
return {
isShow:false,
select:{
page:1,
page_size:10
page_size:10,
area_id:'',
account_id:'',
start_date:'',
end_date:'',
},
areas:[],
date:'',
form:[],
list:[],
total:0,
table:[
{
type:'index',
width: 40
},
{
type:'selection',
width:46
},
{
label:'第三方结算对象',
prop:'orders.account_id',
minWidth: 160
prop:'orders.account.name',
minWidth: 160,
sortable:false
},
{
label:'护工',
prop:'nurse.name',
width: 160
width: 160,
sortable:false
},
{
label:'服务日期',
prop:'date',
width: 200
width: 200,
sortable:false
},
{
label:'时间段',
width: 180,
sortable:false,
customFn:(row)=>{
return (
<div>{parseTime(row.start_time,'{h}:{i}')}~{parseTime(row.end_time,'{h}:{i}')}</div>
@ -61,17 +125,20 @@ export default {
{
label:'订单编号',
prop:'orders.no',
width: 220
width: 220,
sortable:false
},
{
label:'服务对象',
prop:'customer.name',
width: 200
width: 200,
sortable:false
},
{
label:'服务状态',
prop:'status',
width: 160,
sortable:false,
formatter:(cell,data,value) => {
switch (value){
case 0:
@ -90,28 +157,64 @@ export default {
},
{
label:'结算单',
width: 160
width: 160,
sortable:false
}
]
}
},
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(){
const res = await scheduleList(this.select)
this.list = res.data
console.log(this.list)
},
this.total = res.total
colSelect(selection, row){
console.log(selection, row)
this.form = selection.map(item => {
return {
schedule_id:item.id,
order_id:item.orders.id
let ids = this.form.map(item => {
return item.id
})
this.list.forEach(row => {
if(ids.indexOf(row.id) !== -1){
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:{
isShow(val){
@ -121,6 +224,9 @@ export default {
this.form = []
}
}
},
mounted() {
this.getAreas()
}
}
</script>

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

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

Loading…
Cancel
Save