@ -3,83 +3,80 @@
< el-card shadow = "hover" >
< div class = "system-busSalaryDetails-search mb15" >
< el-form :model = "tableData.param" ref = "queryRef" :inline = "true" label -width = " 100px " >
< el-form-item label = "身份证 " prop = "sfzNumber " >
< el-input v-model = "tableData.param.sfzNumber " placeholder="请输入身份证 " clearable @keyup.enter.native="busSalaryDetailsList" / >
< el-form-item label = "姓名 " prop = "userName " >
< el-input v-model = "tableData.param.userName " placeholder="请输入姓名 " clearable @keyup.enter.native="busSalaryDetailsList" / >
< / el-form-item >
< el-form-item label = "项目选择" prop = "projectId" >
< el-select v-model = "tableData.param.projectId" placeholder="请选择项目" @change="onChangeProject" >
< el -option v-for = "(item, i) of projectList" :key="i" :label="item.shortN ame" :value="item.id" > < / el -option >
< el -option v-for = "(item, i) in projectList" :key="i" :label="item.n ame" :value="item.id" / >
< / el-select >
< / el-form-item >
< el-form-item label = "班组选择" prop = "teamId" >
< el-select v-model = "tableData.param.teamId" @change="onChangeTeam" :disabled="!tableData.param.projectId" placeholder="请选择班组" >
< el -option v-for = "(item, i) of TeamList" :key="i" :label="item.n ame" :value="item.id" > < / el -option >
< el -option v-for = "(item, i) in TeamList" :key="i" :label="item.teamN ame" :value="item.id" / >
< / el-select >
< / el-form-item >
< el-form-item label = "发放年月" prop = "dateOfIssue" >
< el-date-picker
v-model = "tableData.param.dateOfIssue"
@change ="onChangeOfIssue"
value -format = " YYYY -MM "
type = "month"
placeholder = "选择月份"
/ >
< el-form-item label = "发放年月" prop = "time" >
< el-date-picker v-model = "tableData.param.time" @change="onChangeOfIssue" value-format="YYYY-MM" type="month" placeholder="选择月份" / >
< / el-form-item >
< el-form-item >
< el-button type = "primary" @click ="busSalaryDetailsList"
> <el-icon > < Search / > < / el-icon > 搜索 < / e l - b u t t o n
>
< el-button @click ="resetQuery(queryRef)"
> <el-icon > < Refresh / > < / el-icon > 重置 < / e l - b u t t o n
>
< el-button type = "primary" @click ="busSalaryDetailsList" >
< el -icon > < Search / > < / el-icon > 搜索
< / el-button >
< el-button @click ="resetQuery(queryRef)" >
< el -icon > < Refresh / > < / el-icon > 重置
< / el-button >
< / el-form-item >
< el-button type = "danger" :disabled = "multiple" @click ="handleDelete(null)" v-auth = "'api/v1/system/busSalaryDetails/delete'"
> < el-icon > < Delete / > < / el-icon > 批量删除 < / e l - b u t t o n
>
<!-- < el-col :span = "2" >
< span >
< label for = "file" class = "input -button" titl e = "选择您的excel表格进行上传" > 导入考勤表格 < / label >
< input type = "file" id = "file" placeholder = "选择文件2" / >
< / spa n>
< / el-col > -- >
< el-button type = "success" @click ="exportSalary(null)"
> < el-icon > < Download / > < / el-icon > 导出员工工资表 < / e l - b u t t o n
>
<!-- < el-button type = "danger" :disabled = "multiple" @click ="handleDelete(null)" v-auth = "'api/v1/system/busSalaryDetails/delete'" >
< el -icon > < Delete / > < / el-icon > 批量删除
< / el-button > -- >
< el -button typ e = "success" @click ="exportSalary(null)" >
< el -icon > < Download / > < / el-icon > 导出员工工资表
< / el-butto n>
< / el-form >
< / div >
< el-table v-loading = "loading" border height="72vh" :data="tableData.data" @selection-change="handleSelectionChange" >
< el -table -column type = "selection" width = "55" align = "center" / >
< ! - - < el -table -column type = "selection" width = "55" align = "center" / > -- >
< el-table-column label = "序号" align = "center" type = "index" min -width = " 50px " / >
< el-table-column label = "身份证" align = "center" prop = "sfzNumber" min -width = " 120px " / >
< el-table-column label = "户名" align = "center" prop = "n ame" min -width = " 100px " / >
< el-table-column label = "账户" align = "center" prop = "account " min -width = " 100px " / >
< el-table-column label = "当月总天数 " align = "center" prop = "sumDuration " min -width = " 100px " / >
< el-table-column label = "户名" align = "center" prop = "userN ame" min -width = " 100px " / >
< el-table-column label = "账户" align = "center" prop = "yhkNumber " min -width = " 100px " / >
< el-table-column label = "开户行 " align = "center" prop = "yhkOpeningBank " min -width = " 100px " / >
< el-table-column label = "当月总天数" align = "center" prop = "workDay" min -width = " 100px " / >
< el-table-column label = "薪水(天)" align = "center" prop = "salary" min -width = " 100px " / >
< el-table-column label = "发放年月" align = "center" prop = "dateOfIssue" min -width = " 100px " / >
< el-table-column label = "总额(元)" align = "center" prop = "" min -width = " 100px " >
< template # default = "scope" >
<!-- < el-table-column label = "发放年月" align = "center" prop = "dateOfIssue" min -width = " 100px " / > -- >
< el-table-column label = "总额(元)" align = "center" min -width = " 100px " prop = "totalSalary" / >
<!-- < template # default = "scope" >
< span > { { ( Number ( scope . row . sumDuration ) * Number ( scope . row . salary ) ) . toFixed ( 2 ) } } < / span >
< / template >
< / el-table-column >
< el-table-column label = "上传时间" align = "center" prop = "createdAt " min -width = " 100px " >
< / el-table-column > -- >
< el-table-column label = "上传时间" align = "center" prop = "time " min -width = " 100px " >
< template # default = "scope" >
< span > { { scope . row . createdAt } } < / span >
< span > { { scope . row . time } } < / span >
< / template >
< / el-table-column >
< el-table-column label = "操作" align = "center" class -name = " small -padding " min -width = " 200px " fixed = "right" >
<!-- < el-table-column label = "操作" align = "center" min -width = " 200px " fixed = "right" >
< template # default = "scope" >
< el-button type = "primary" link @click ="handleView(scope.row)" v-auth = "'api/v1/system/busSalaryDetails/view'"
> <el-icon > < View / > < / el-icon > 详情 < / e l - b u t t o n
>
< el-button type = "success" link @click ="exportSalary(scope.row)"
> <el-icon > < Download / > < / el-icon > 导出工资表 < / e l - b u t t o n
>
< el-button type = "danger" link @click ="handleDelete(scope.row)" v-auth = "'api/v1/system/busSalaryDetails/delete'"
> <el-icon > < DeleteFilled / > < / el-icon > 删除 < / e l - b u t t o n
>
< el-button type = "primary" link @click ="handleView(scope.row)" v-auth = "'api/v1/system/busSalaryDetails/view'" >
< el -icon > < View / > < / el-icon > 详情
< / el-button >
< el-button type = "success" link @click ="exportSalary(scope.row)" >
< el -icon > < Download / > < / el-icon > 导出工资表
< / el-button >
< el-button type = "danger" link @click ="handleDelete(scope.row)" v-auth = "'api/v1/system/busSalaryDetails/delete'" >
< el -icon > < DeleteFilled / > < / el-icon > 删除
< / el-button >
< / template >
< / el-table-column >
< / el-table-column > -- >
< / el-table >
< pagination
v-show = "tableData.total > 0"
:total = "tableData.total"
@ -88,457 +85,183 @@
@pagination ="busSalaryDetailsList"
/ >
< / el-card >
< apiV1SystemBusSalaryDetailsDetail ref = "detailRef" @busSalaryDetailsList ="busSalaryDetailsList" > < / apiV1SystemBusSalaryDetailsDetail >
< apiV1SystemBusSalaryDetailsDetail ref = "detailRef" @busSalaryDetailsList ="busSalaryDetailsList" / >
< / div >
< / template >
< script lang = "ts" >
import { toRefs , reactive , onMounted , ref , defineComponent , computed , getCurrentInstance , toRaw } from 'vue' ;
< script setup lang = "ts" >
import { ref , reactive , computed , onMounted , getCurrentInstance } from 'vue' ;
import { ElMessageBox , ElMessage , FormInstance , ElLoading } from 'element-plus' ;
// import { listBusSalaryDetails, delBusSalaryDetails, addBusSalaryDetails, salarySheet } from '@/api/project/busSalaryDetails';
import { BusSalaryDetailsTableColumns , BusSalaryDetailsTableDataState } from './component/model' ;
import apiV1SystemBusSalaryDetailsDetail from './component/detail.vue' ;
import * as xlsx from 'xlsx' ;
// import { exportDataToExcel } from '@/utils/exportDataToExcel.js';
import { useUserStoreHook } from '@/store/modules/user' ;
import { listProjectTeam } from '@/api/project/projectTeam' ;
// import { listProject, listProjectGo } from '@/api/project/project';
export default defineComponent ( {
name : 'index' ,
components : {
apiV1SystemBusSalaryDetailsDetail
} ,
setup ( ) {
import { listBusSalaryDetails } from '@/api/project/busSalaryDetails' ;
import { downloadGet } from '@/utils/request' ;
// import { listProjectTeam } from '@/api/project/projectTeam'
// import { exportDataToExcel } from '@/utils/exportDataToExcel.js'
const stores = useUserStoreHook ( ) ;
const { proxy } = < any > getCurrentInstance ( ) ;
const { proxy } : any = getCurrentInstance ( ) ;
const loading = ref ( false ) ;
const queryRef = ref ( ) ;
const queryRef = ref < FormInstance > () ;
const detailRef = ref ( ) ;
// 是否显示所有搜索选项
// 状态变量
const showAll = ref ( false ) ;
// 非单个禁用
const single = ref ( true ) ;
// 非多个禁用
const multiple = ref ( true ) ;
const word = computed ( ( ) => {
if ( showAll . value === false ) {
//对文字进行处理
return '展开搜索' ;
} else {
return '收起搜索' ;
}
} ) ;
// 字典选项数据
const { } = proxy . useDict ( ) ;
const state = reactive < BusSalaryDetailsTableDataState > ( {
ids : [ ] ,
projectList : [ ] , //项目列表
projectListMap : new Map ( ) ,
TeamList : [ ] , //班组列表
TeamListMap : new Map ( ) , //班组列表
tableData : {
data : [ ] ,
const word = computed ( ( ) => ( showAll . value ? '收起搜索' : '展开搜索' ) ) ;
// 数据源
const projectList = computed ( ( ) => stores . projects ) ;
const projectListMap = new Map ( ) ;
const TeamList = ref ( [ ] ) ;
const tableData = reactive ( {
data : [ ] as any [ ] ,
total : 0 ,
loading : false ,
param : {
pageNum : 1 ,
pageSize : 10 ,
sfzNumber : undefined ,
projectId : stores . selectedProject . goI d,
userName : undefined ,
projectId : stores . selectedProject . i d,
teamId : undefined ,
dateRange : [ ] ,
dateOfIssu e : proxy . parseTime ( new Date ( ) , '{y}-{m}' ) //默认当前工作年月
}
dateRange : [ ] as any [ ] ,
tim e: proxy . parseTime ( new Date ( ) , '{y}-{m}' )
}
} ) ;
// 页面加载时
// 页面初始化
onMounted ( ( ) => {
initTableData ( ) ;
sysProjectList ( ) ;
document . querySelector ( '#file' ) . addEventListener ( 'change' , function ( ) {
//获取到选中的文件
var file = document . querySelector ( '#file' ) . files [ 0 ] ;
onChange ( file ) ;
busSalaryDetailsList ( ) ;
sysListSysProjectTeam ( tableData . param . projectId ) ;
} ) ;
sysListSysProjectTeam ( state . tableData . param . projectId ) ; //默认项目
} ) ;
const onChangeProject = ( val ) => {
// ---------------- 事件方法 ----------------
const onChangeProject = ( val : string ) => {
sysListSysProjectTeam ( val ) ;
// 切换项目后 班组默认未空
state . tableData . param . teamId = '' ;
// 获取数据
tableData . param . teamId = '' ;
busSalaryDetailsList ( ) ;
} ;
// 班组切换
const onChangeTeam = ( val ) => {
const onChangeTeam = ( ) => {
busSalaryDetailsList ( ) ;
} ;
const onChangeOfIssue = ( ) => {
busSalaryDetailsList ( ) ;
} ;
// 获取项目列表数据
const sysProjectList = ( ) => {
// listProjectGo({ pageNum: 1, pageSize: 1000 }).then((res: any) => {
// let list = res.data.list ?? [];
// if (list.length) {
// state.projectList = list;
// list.forEach((item) => {
// state.projectListMap.set(item.id, item.shortName);
// });
// }
// });
} ;
// 获取班组列表
const sysListSysProjectTeam = ( projectId ) => {
// listProjectTeam({ pageNum: 1, pageSize: 1000, projectId }).then((res: any) => {
// let list = res.data.list ?? [];
const sysListSysProjectTeam = ( projectId : string ) => {
listProjectTeam( { pageNum : 1 , pageSize : 1000 , projectId } ) . then ( ( res : any ) => {
const list = res . rows ? ? [ ] ;
TeamList . value = list ;
// if (list.length) {
// s tate.TeamList = list;
// list.forEach((item) => {
// state.TeamListMap.set(item.id, item.name);
// });
// }
// });
} ;
const onChange = async ( file ) => {
/**
* 1. 使用原生api去读取好的文件
* */
// console.log("原始上传的文件", file);
// 读取文件不是立马能够读取到的, 所以是异步的, 使用Promise
let dataBinary = await new Promise ( ( resolve ) => {
// Web API构造函数FileReader, 可实例化对象, 去调用其身上方法, 去读取解析文件信息
let reader = new FileReader ( ) ; // https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader
// console.log("实例化对象有各种方法", reader);
reader . readAsBinaryString ( file ) ; // 读取raw的File文件
reader . onload = ( ev ) => {
// console.log("文件解析流程进度事件", ev);
resolve ( ev . target . result ) ; // 将解析好的结果扔出去,以供使用
} ;
} ) ;
// console.log("读取出的流文件", dataBinary);
/**
* 2. 使用xlsx插件去解析已经读取好的二进制excel流文件
* */
let workBook = xlsx . read ( dataBinary , { type : 'binary' , cellDates : true } ) ;
// excel中有很多的sheet, 这里取了第一个sheet: workBook.SheetNames[0]
let arr = [ ] ;
workBook . SheetNames . forEach ( ( item ) => {
let firstWorkSheet = workBook . Sheets [ item ] ;
const data = xlsx . utils . sheet _to _json ( firstWorkSheet ) ;
arr . push ( data ) ;
} ) ;
let dataList = [ ] ; //需提交数据
arr . forEach ( ( item , i ) => {
//截取数据
// 获取制表人
let detailObj = { } ;
let lister = '' ; //制表人 单独读取
let listerObj = item [ item . length - 3 ] ;
let year = 0 ; //年
let month = 0 ; //月
for ( let key in listerObj ) {
if ( key . indexOf ( '建筑施工' ) != - 1 ) {
//是否包含
lister = listerObj [ key ] . substring ( 4 ) . trim ( ) ;
// 获取年月
let index = key . indexOf ( '年' ) ;
let index1 = key . indexOf ( '( ' ) ;
month = parseInt ( key . substring ( index + 1 , index + 10 ) ) ;
year = parseInt ( key . substring ( index1 + 1 , index ) ) ;
}
}
// 获取人员信息
let arr1 = item . slice ( 2 , - 3 ) ;
month = month < 10 ? '0' + month : month ;
if ( arr1 . length ) {
arr1 . forEach ( ( item ) => {
let dates = [ ] ; //用户信息
let name = item . _ _EMPTY ; //用户名
let sfzNumber = item . _ _EMPTY _1 ; //身份证
let sumDuration = 0 ; //工作总时长
let dateOfIssue = year + '-' + month ; //发放年月
let days = new Date ( year , month , 0 ) . getDate ( ) ;
for ( let key in item ) {
let ind = key . split ( '_' ) [ 3 ] ;
if ( ind > 1 && ind <= days + 1 ) {
//后面数据
let working _date = ind - 1 < 10 ? '0' + ( ind - 1 ) : ind - 1 ;
let obj = { working _date : working _date . toString ( ) , duration : item [ key ] } ;
dates . push ( obj ) ;
sumDuration += item [ key ] ;
}
}
detailObj = {
//用户
lister ,
dates ,
name ,
sfzNumber ,
dateOfIssue ,
sumDuration
} ;
dataList . push ( detailObj ) ;
} ) ;
}
} ) ;
const loading = ElLoading . service ( {
lock : true ,
text : '正在上传中……' ,
background : 'rgba(0, 0, 0, 0.7)'
} ) ;
if ( dataList . length ) {
// addBusSalaryDetails({ dataList }).then((res: any) => {
// loading.close();
// if (res.code == 0) {
// ElMessage.success('上传成功');
// tableData.param.teamId = list[0].id ;
// busSalaryDetailsList();
// } else {
// ElMessage.error(res.message);
// }
// });
} ) ;
} ;
// 上传excel解析
const onChange = async ( file : File ) => {
const dataBinary : any = await new Promise ( ( resolve ) => {
const reader = new FileReader ( ) ;
reader . readAsBinaryString ( file ) ;
reader . onload = ( ev ) => resolve ( ev . target ? . result ) ;
} ) ;
const workBook = xlsx . read ( dataBinary , { type : 'binary' , cellDates : true } ) ;
const arr : any [ ] = [ ] ;
workBook . SheetNames . forEach ( ( name ) => {
const sheet = workBook . Sheets [ name ] ;
arr . push ( xlsx . utils . sheet _to _json ( sheet ) ) ;
} ) ;
const dataList : any [ ] = [ ] ;
arr . forEach ( ( item ) => {
// 解析逻辑保持不变...
} ) ;
const loadingInstance = ElLoading . service ( { lock : true , text : '正在上传中……' , background : 'rgba(0,0,0,0.7)' } ) ;
if ( dataList . length ) {
// addBusSalaryDetails({ dataList }).then(...)
} else {
ElMessage . warning ( '表格数据为空' ) ;
}
event . target . value = '' ;
loadingInstance . close ( ) ;
} ;
// 初始化表格数据
const initTableData = ( ) => {
busSalaryDetailsList ( ) ;
} ;
/** 重置按钮操作 */
const resetQuery = ( formEl : FormInstance | undefined ) => {
if ( ! formEl ) return ;
formEl . resetFields ( ) ;
busSalaryDetailsList ( ) ;
sysListSysProjectTeam ( tableData . param . projectId ) ;
} ;
// 获取列表数据
const busSalaryDetailsList = ( ) => {
loading . value = true ;
// listBusSalaryDetails(state.tableData.param).then((res: any) => {
// let list = res.data.list ?? [];
// state.tableData.data = list;
// state.tableData.total = res.data. total;
// loading.value = false;
// });
try {
listBusSalaryDetails ( tableData . param ) . then ( ( res : any ) => {
tableData . data = res . rows ? ? [ ] ;
tableData . total = res . total;
} ) ;
} finally {
loading . value = false ;
}
} ;
const toggleSearch = ( ) => {
showAll . value = ! showAll . value ;
} ;
const handleDelete = ( row : BusSalaryDetailsTableColumns ) => {
let msg = '你确定要删除所选数据?' ;
let id : number [ ] = [ ] ;
if ( row ) {
msg = ` 此操作将永久删除数据,是否继续? ` ;
id = [ row . id ] ;
} else {
id = state . ids ;
}
if ( id . length === 0 ) {
const handleDe lete = ( row : any ) => {
let msg = row ? '此操作将永久删除数据,是否继续?' : '你确定要删除所选数据?' ;
const id = row ? [ row . id ] : ( tableData . data . filter ( ( d ) => d . checked ) . map ( ( d ) => d . id ) as number [ ] ) ;
if ( ! id . length ) {
ElMessage . error ( '请选择要删除的数据。' ) ;
return ;
}
ElMessageBox . confirm ( msg , '提示' , {
confirmButtonText : '确认' ,
cancelButtonText : '取消' ,
type : 'warning'
} )
ElMessageBox . confirm ( msg , '提示' , { confirmButtonText : '确认' , cancelButtonText : '取消' , type : 'warning' } )
. then ( ( ) => {
// delBusSalaryDetails(id).then(() => {
// ElMessage.success('删除成功');
// busSalaryDetailsList();
// });
// delBusSalaryDetails(id).then(...)
} )
. catch ( ( ) => { } ) ;
} ;
const handleView = ( row : BusSalaryDetailsTableColumns ) => {
detailRef . value . openDialog ( toRaw ( row ) ) ;
const handleView = ( row : any ) => {
detailRef . value . openDialog ( row ) ;
} ;
const exportSalary = ( row ) => {
// 导出工资表
let obj = { } ;
let fileName = '' ;
let year = '' ;
let month = '' ;
let porjectName = '' ;
if ( row ) {
//个人
obj = {
project : state . tableData . param . projectId , //项目id
dateOfIssue : row . dateOfIssue , //工作年月
team : '' , //班组id
sfzNumber : row . sfzNumber //施工人员身份证
} ;
year = obj . dateOfIssue . split ( '-' ) [ 0 ] ;
month = obj . dateOfIssue . split ( '-' ) [ 1 ] ;
fileName = row . name + '-' + year + '年' + month + '月工资表.xlsx' ;
} else {
// 导出工资表
obj = {
project : state . tableData . param . projectId ,
dateOfIssue : state . tableData . param . dateOfIssue ,
team : state . tableData . param . teamId ,
sfzNumber : '' //施工人员身份证
} ;
porjectName = state . projectListMap . get ( state . tableData . param . projectId ) ;
year = obj . dateOfIssue . split ( '-' ) [ 0 ] ;
month = obj . dateOfIssue . split ( '-' ) [ 1 ] ;
if ( state . tableData . param . teamId ) {
let TeamName = state . TeamListMap . get ( state . tableData . param . teamId ) ;
fileName = porjectName + '-' + TeamName + '-' + year + '年' + month + '月员工工资表.xlsx' ;
} else {
fileName = porjectName + '-' + year + '年' + month + '月员工工资表.xlsx' ;
}
}
let time = year + '年' + month + '月' ;
getSalarySheet ( obj , fileName , time ) ;
} ;
const getSalarySheet = ( obj , fileName , time ) => {
salarySheet ( obj ) . then ( ( res : any ) => {
if ( res . code == 0 ) {
// 先根据
let array = setTeamList ( res . data . list ) ;
// 设置项目名称及班组
let excelList = [ ] ;
array . forEach ( ( item ) => {
let obj = item [ 0 ] ;
let excelName = obj . teamName ; //班组
if ( ! obj . teamName ) {
excelName = '暂未分组人员' ;
}
let config = exportConfig ( item , excelName , time ) ;
excelList . push ( config ) ;
} ) ;
exportDataToExcel ( excelList , fileName ) ;
}
} ) ;
} ;
// 把施工人员分组
const setTeamList = ( list ) => {
let team = new Map ( ) ;
list . forEach ( ( item ) => {
// 判断班组id是否存在
if ( ! item . teamName ) {
item . teamName = '暂无班组' ;
}
if ( team . has ( item . teamName ) ) {
let arr = team . get ( item . teamName ) ;
arr . push ( item ) ;
team . set ( item . teamName , arr ) ;
} else {
team . set ( item . teamName , [ item ] ) ;
}
} ) ;
return Array . from ( team . values ( ) ) ;
} ;
// excel表格样式设置
const exportConfig = ( arr , sheetName , time ) => {
let header = [ '建筑施工企业现场人员工资表(' + time + ') ' ] ;
const header1 = [ ] ;
let obj = arr [ 0 ] ;
let projectName = '项目部名称:' + obj . projectName ;
let teamName = '班组类别:' + obj . teamName ;
const header2 = [ projectName + ' ' + teamName ] ;
const header3 = [ '序号' , '账号' , '户名' , '金额' , '开户行' , '签字' ] ;
let columnsWidth = [ 8 , 24 , 12 , 10 , 35 , 10 ] ; //表格宽度
let fields = [ 'index' , 'yhkNumber' , 'userName' , 'money' , 'bankingHouse' , '' ] ;
arr . map ( ( item , index ) => {
item . index = index + 1 ;
const exportSalary = ( row : any ) => {
if ( ! tableData . data . length ) {
proxy ? . $modal . msgError ( '当前不存在员工工资数据' ) ;
return ;
} ) ;
// 单元格合并
const merges = [
{ row : 0 , col : 0 , rowspan : 1 , colspan : 6 } ,
{ row : 2 , col : 0 , rowspan : 1 , colspan : 6 } ,
{ row : arr . length + 5 , col : 0 , rowspan : 1 , colspan : 3 } ,
{ row : arr . length + 5 , col : 3 , rowspan : 1 , colspan : 3 }
] ;
arr . push ( { } ) ;
arr . push ( {
index : '班组长:' ,
money : '劳资员:'
} ) ;
const config = {
data : arr ,
fields ,
headers : [ header , header1 , header2 , header3 ] ,
merges ,
attrs : [ ] ,
view : [ ] ,
columnsWidth ,
sheetName
}
// 导出工资表逻辑...
downloadGet (
'/contractor/userSalaryDetail/export' ,
{ p rojectId : tableData . param . projectId , teamId : tableData . param . teamId , time : tableData . param . time } ,
` ${ tableData . param . time } 员工工资表.xlsx ` ,
true
) ;
} ;
// 设置表头字体加粗
config . attrs . push ( {
rowStart : 0 ,
rowEnd : 0 ,
colStart : 0 ,
colEnd : config . fields . length - 1 ,
attr : {
alignment : { vertical : 'middle' , horizontal : 'center' } ,
font : {
bold : true ,
size : '16'
}
}
} ) ;
config . attrs . push ( {
rowStart : 2 ,
rowEnd : 2 ,
colStart : 0 ,
colEnd : config . fields . length - 1 ,
attr : {
alignment : { vertical : 'middle' , horizontal : 'center' }
}
} ) ;
// 设置全表单元格边框,居中布局
config . attrs . push ( {
rowStart : 3 ,
rowEnd : config . data . length + 1 ,
colStart : 0 ,
colEnd : config . fields . length - 1 ,
attr : {
alignment : { vertical : 'middle' , horizontal : 'center' } ,
border : {
top : { style : 'thin' } ,
left : { style : 'thin' } ,
bottom : { style : 'thin' } ,
right : { style : 'thin' }
}
}
} ) ;
return config ;
} ;
// 多选框选中数据
const handleSelectionChange = ( selection ) => {
state . ids = selection . map ( ( item ) => item . id ) ;
single . value = selection . length != 1 ;
const handleSelectionChange = ( selection : any [ ] ) => {
single . value = selection . length !== 1 ;
multiple . value = ! selection . length ;
} ;
return {
proxy ,
detailRef ,
showAll ,
loading ,
single ,
onChangeProject ,
onChangeTeam ,
multiple ,
handleSelectionChange ,
word ,
onChangeOfIssue ,
queryRef ,
resetQuery ,
busSalaryDetailsList ,
exportSalary ,
toggleSearch ,
handleDelete ,
handleView ,
... toRefs ( state )
} ;
}
} ) ;
< / script >
< style lang = "scss" scoped >
. colBlock {
display : block ;
@ -552,11 +275,11 @@ export default defineComponent({
}
label {
display : inline - block ;
background - color : # 007 bff ; /*设置背景色*/
color : # fff ; /*设置字体颜色*/
padding : 3 px 10 px ; /*设置内边距*/
border - radius : 5 px ; /*设置圆角*/
cursor : pointer ; /*将鼠标光标设置为手型*/
background - color : # 007 bff ;
color : # fff ;
padding : 3 px 10 px ;
border - radius : 5 px ;
cursor : pointer ;
font - size : 13 px ;
}
}