You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

169 lines
4.1 KiB

3 years ago
<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>
3 years ago
<el-date-picker
size="small"
v-model="date"
type="month"
placeholder="选择月"
style="width: 180px;"
@change="datePick">
</el-date-picker>
3 years ago
<Button style="margin-left: 10px" type="primary" @click="total = 0,select.page = 1,getList()">查询</Button>
3 years ago
</div>
</slot>
</lx-header>
</div>
<xy-table
3 years ago
ref="xyTable"
3 years ago
:default-expand-all="false"
3 years ago
row-key="name"
3 years ago
:total="total"
:list="list"
3 years ago
:table-item="table"
@pageSizeChange="e => select.page_size = e"
@pageIndexChange="e => {select.page = e;getList()}">
3 years ago
<template v-slot:btns>
<div></div>
</template>
</xy-table>
3 years ago
</div>
</template>
<script>
import {salaryList as getList} from '@/api/worker'
import {parseTime} from "@/utils"
export default {
data() {
return {
3 years ago
date:'',
3 years ago
select:{
page:1,
page_size:10,
3 years ago
keyword:'',
start_date:'',
end_date:''
3 years ago
},
types:[],
total:0,
list:[],
3 years ago
tableArr:[],
dataTable:[
3 years ago
{
3 years ago
prop:'date',
label:'日期'
3 years ago
},
{
3 years ago
prop:'money',
label:'金额(元)',
align:'right'
}
],
3 years ago
table:[],
baseTable:[
3 years ago
{
3 years ago
label:'姓名',
3 years ago
fixed: 'left',
width:140,
3 years ago
prop:'name'
},
{
label:'小计',
3 years ago
width: 80,
3 years ago
align:'right',
3 years ago
fixed:'right',
3 years ago
customFn:(row)=>{
let total = 0;
row.data.map(item => {
total += item.money
})
return (
<div>
{total}
</div>
)
}
}
]
3 years ago
}
},
methods: {
3 years ago
getDate(year,month){
let d = new Date(year,month,0)
return d.getDate()
},
datePick(e){
if(!e){
return
}
let start = parseTime(e,'{y}-{m}-{d}')
let end = parseTime(new Date(e.getFullYear(),e.getMonth()+1,0),'{y}-{m}-{d}')
this.select.start_date = start
this.select.end_date = end
},
3 years ago
async getList(){
const res = await getList(this.select)
3 years ago
this.tableArr = res.map((item,index) => {
return item.name
})
3 years ago
this.total = res.length ?? 0
this.list = res
3 years ago
this.table = []
let date = this.getDate(new Date(this.select.start_date).getFullYear(),new Date(this.select.start_date).getMonth()+1)
let header = []
const getHeader = (h) => {
header = []
for(let i = 1;i <= date;i ++){
header.push(h('div',{style:{width:'100px',flex:'none',borderRight:'2px solid #EBEEF5'}},`${i}`))
}
return header
}
let temp = {
minWidth:date*100 + 10,
renderHeader:(h)=>{
return h('div',{style:{display:'flex',width:'100%'}},getHeader(h))
},
customFn:(row)=>{
return (
<div style={{display:'flex'}}>
{
row.data.map(item => {
return (
<div style={{width:'100px',flex:'none',borderRight:'2px solid #EBEEF5',textAlign:'right',padding:'0 4px'}}>{item.money}</div>
)
})
}
</div>
)
}
}
this.table.push(temp)
this.table.push(...this.baseTable)
this.$nextTick(()=>{
this.$refs['xyTable'].doLayout()
})
3 years ago
},
},
mounted() {
3 years ago
this.date = new Date()
this.select.start_date = parseTime(new Date(new Date().getFullYear(),new Date().getMonth(),1),'{y}-{m}-{d}')
this.select.end_date = parseTime(new Date(new Date().getFullYear(),new Date().getMonth()+1,0),'{y}-{m}-{d}')
3 years ago
this.getList()
}
}
</script>
<style scoped lang="scss">
</style>