From 082b572b91abd0d5ae8e409714553130448aa6d1 Mon Sep 17 00:00:00 2001 From: 张涛 <“2538313560@qq.com”> Date: 星期五, 30 八月 2024 17:25:44 +0800 Subject: [PATCH] fix:薪资调整 --- src/views/employeeSalary/payroll/index.vue | 400 +++++++++++++++++++++++++++++--------------------------- 1 files changed, 209 insertions(+), 191 deletions(-) diff --git a/src/views/employeeSalary/payroll/index.vue b/src/views/employeeSalary/payroll/index.vue index 0570499..d7f187d 100644 --- a/src/views/employeeSalary/payroll/index.vue +++ b/src/views/employeeSalary/payroll/index.vue @@ -2,29 +2,20 @@ <div class="silkRegister-form"> <div class="filter"> <div class="filter-card"> - <CommonSearch - :show-add="false" - :show-download="false" - :amount-view="false" - :show-action-btn="false" - placeholder="璇疯緭鍏ュ叧閿瘝" - @searchClick="onFilterSearch" - > + <CommonSearch :show-add="false" :show-download="false" :amount-view="false" :show-action-btn="false" + placeholder="璇疯緭鍏ュ叧閿瘝" @searchClick="onFilterSearch"> <template slot="leftButton"> <div class="margin_right_20px" style="width:200px;"> - <el-date-picker v-model="object.cycle" style="width:100%" - @change="changeDate" - :clearable="false" type="month" placeholder="閫夋嫨鏃ユ湡" - :picker-options="pickerOptions" - value-format="yyyy-MM"> + <el-date-picker v-model="object.cycle" style="width:100%" @change="changeDate" + :clearable="false" type="month" placeholder="閫夋嫨鏃ユ湡" :picker-options="pickerOptions" + value-format="yyyy-MM"> </el-date-picker> </div> <div> <el-select placeholder="璇烽�夋嫨宸ョ" v-model="object.workTypeCode" filterable - @change="changeWorkTypeCode" - clearable - > - <el-option v-for="workTypeCode in workTypeCodeList" :label="workTypeCode.label" :value="workTypeCode.value" /> + @change="changeWorkTypeCode" clearable> + <el-option v-for="workTypeCode in workTypeCodeList" :label="workTypeCode.label" + :value="workTypeCode.value" :key="workTypeCode.value" /> </el-select> </div> </template> @@ -35,16 +26,12 @@ <div class="body"> <div class="body-card"> <div class="list-view"> - <TableCommonView - ref="tableListRef" - v-loading="loading" - :table-list="tableList" - @selTableCol="selTableCol" - > + <TableCommonView ref="tableListRef" v-loading="loading" :table-list="tableList" + @selTableCol="selTableCol" @inputContent="tableInputHandle"> </TableCommonView> </div> - <div class="btn-pager"> - <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + <div class="btn-pager"> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> </div> </div> </div> @@ -53,194 +40,225 @@ </template> <script> - import { getPayrollSalaryPlanListApi } from "@/api/employeeSalary/payroll.js" - import pageMixin from "@/components/makepager/pager/mixin/pageMixin" - import NewDate from "@/api/date"; - const { getPreviousMonth } = NewDate; - export default { - name: "attendanceStatistics", - props: { - }, - mixins: [pageMixin], - components: {}, - data() { - return { - tableList: {}, - loading: false, - searchOptions:[], - pickerOptions: { - disabledDate(time) { - return time.getTime() > new Date().getTime() - 86400000; - }, +import { getPayrollConstituteListApi, savePayrollConstituteApi } from "@/api/employeeSalary/payroll.js" +import pageMixin from "@/components/makepager/pager/mixin/pageMixin" +import NewDate from "@/api/date"; +const { getPreviousMonth } = NewDate; +export default { + name: "attendanceStatistics", + props: { + }, + mixins: [pageMixin], + components: {}, + data() { + return { + tableList: {}, + loading: false, + searchOptions: [], + pickerOptions: { + disabledDate(time) { + return time.getTime() > new Date().getTime() - 86400000; }, - object:{ - cycle:getPreviousMonth(), - workTypeCode:'' - }, - workTypeCodeList:[], - keyword: "", - tableColumn: [], - showCol: [], + }, + object: { + cycle: getPreviousMonth(), + workTypeCode: '' + }, + workTypeCodeList: [], + keyword: "", + tableColumn: [], + showCol: [], + } + }, + created() { + this.initData(); + }, + methods: { + initData() { + this.workTypeCodeList = [ + { label: '鎸¤溅宸�', value: 'weavers' }, + { label: '杞﹀ご宸�', value: 'car_head' }, + { label: '淇濆叏宸�', value: 'maintenance' }, + { label: '鐓導宸�', value: 'boiled' }, + { label: '鑸�鑼у伐', value: 'scoop' }, + { label: '閫佽導宸�', value: 'transport' }, + { label: '娓呮磥宸�', value: 'cleaner' }, + { label: '鎰熺煡鍣ㄦ竻娲楀伐', value: 'machine_cleaner' }, + { label: '鍏ㄨ兘鏈哄姩', value: 'all-powerful' }, + { label: '鐝暱', value: 'monitor' } + ]; + this.getData(); + }, + changeWorkTypeCode() { + this.pagerOptions.currPage = 1; + this.getData() + }, + setTable() { + this.tableList = { + selectIndex: true, + isFixed: true, + tableInfomation: [], + allcol: [], + showcol: this.showcol, + headerHeight: '47px', + tableColumn: this.setColumnVisible(this.showcol) + } + this.tableList.allcol = this.tableList.tableColumn.filter(item => !item.fixed).map((ele) => ele.label) + this.searchOptions = []; + for (let i = 0; i < this.tableList.tableColumn.length; i++) { + const label = this.tableList.tableColumn[i].label + const value = this.tableList.tableColumn[i].prop + this.searchOptions.push({ value: value, label: label }) } }, - created() { - this.setTable(); - this.initData(); - }, - computed: { - }, - methods: { - initTable(){ - this.showcol=[ '宸ョ','濮撳悕','鐢熶骇宸ヨ祫','婊″嫟', - '瓒呮椂宸ヨ祫','鍔犵彮宸ヨ祫','浜ら�氳ˉ璐�', - '甯﹀緬琛ヨ创','宀椾綅琛ヨ创','绀句繚琛ヨ创' ,'宸ラ緞琛ヨ创', - '涓嶈揪淇濆簳','璐ㄩ噺濂�','濂栫綒1','濂栫綒2/娓呭噳琛ヨ创', - '鏃ュ父妫�鏌�/濂栫綒3','鍋滄満琛ヨ创','搴斿彂宸ヨ祫','澶囨敞' - ]; - this.tableColumn=[ - { label: "宸ョ", prop: "workTypeName",default:true,fixed:true}, - { label: "濮撳悕", prop: "workerName",default:true,fixed:true}, - { label: "搴斿彂宸ヨ祫", prop: "amount",default:true,fixed:true}, - { label: "鐢熶骇宸ヨ祫", prop: "productionAmount" ,default:true}, - { label: "瓒呮椂宸ヨ祫", prop: "timeoutAmount",default:true}, - { label: "鍔犵彮宸ヨ祫", prop: "overtimeAmount",default:true}, - { label: "浜ら�氳ˉ璐�", prop: "trafficAmount" ,default:true}, - { label: "甯﹀緬琛ヨ创", prop: "masterApprenticeAmount",default:true }, - { label: "宀椾綅琛ヨ创", prop: "positionAmount",default:true}, - { label: "绀句繚琛ヨ创", prop: "socialSecurityAmount",default:true}, - { label: "宸ラ緞琛ヨ创", prop: "seniorityAmount",default:true }, - { label: "涓嶈揪淇濆簳", prop: "baseSalaryAmount",default:true}, - { label: "璐ㄩ噺濂�", prop: "qualityStandardsAmount" ,default:true}, - { label: "濂栫綒1", prop: "substandardQualityAmount",default:true}, - { label: "濂栫綒2/娓呭噳琛ヨ创", prop: "heatAmount",default:true}, - { label: "鏃ュ父妫�鏌�/濂栫綒3", prop: "dailyInspectionAmount",default:true}, - { label: "鍋滄満琛ヨ创", prop: "downtimeAmount",default:true}, - { label: "澶囨敞", prop: "remark",default:true}, - ] - }, - initData(){ - this.workTypeCodeList=[ - {label:'鎸¤溅宸�',value:'weavers'}, - {label:'杞﹀ご宸�',value:'car_head'}, - {label:'淇濆叏宸�',value:'maintenance'}, - {label:'鐓導宸�',value:'boiled'}, - {label:'鑸�鑼у伐',value:'scoop'}, - {label:'閫佽導宸�',value:'transport'}, - {label:'娓呮磥宸�',value:'cleaner'}, - {label:'鎰熺煡鍣ㄦ竻娲楀伐',value:'machine_cleaner'}, - {label:'鍏ㄨ兘鏈哄姩',value:'all-powerful'}, - {label:'鐝暱',value:'monitor'} - ]; - this.getData(); - }, - changeWorkTypeCode(){ - this.pagerOptions.currPage = 1; - this.getData() - }, - setTable() { - this.initTable(); - this.tableList = { - selectIndex: true, - isFixed:true, - tableInfomation: [], - allcol: [], - showcol: this.showcol, - headerHeight:'47px', - tableColumn: this.setColumnVisible(this.showcol) + setColumnVisible(showCol) { + return this.tableColumn.map((ele) => { + return { + ...ele, + isShowColumn: showCol.includes(ele.label) } - this.tableList.allcol = this.tableList.tableColumn.filter(item=>!item.fixed).map((ele) => ele.label) - this.searchOptions = []; - for (let i = 0; i < this.tableList.tableColumn.length; i++) { - const label = this.tableList.tableColumn[i].label - const value = this.tableList.tableColumn[i].prop - this.searchOptions.push({ value: value, label: label }) - } - }, - setColumnVisible(showCol) { - return this.tableColumn.map((ele) => { + }) + }, + selTableCol(val) { + this.showcol = val; + this.tableList.tableColumn = this.setColumnVisible(val); + }, + async tableInputHandle(prop, row) { + const data = { + amount: row[prop], + cycle: this.object.cycle, + salaryPlanId: parseInt(prop), + workerId: row.workerId, + } + const { code } = await savePayrollConstituteApi(data) + if (code == 200) { + this.$message.success("钖祫淇濆瓨鎴愬姛"); + } else { + this.$message.error("钖祫淇濆瓨澶辫触"); + } + this.getData() + }, + + // 璇锋眰鏁版嵁 + async getData() { + this.loading = true + const { code, data, total } = await getPayrollConstituteListApi({ + ...this.object, + page: this.pagerOptions.currPage, + pageSize: this.pagerOptions.pageSize, + keyword: this.keyword + }); + if (code === 200) { + const tableData = [] + // 澶勭悊琛ㄥご + const dynamicColumn = data[0].list.map(item => { return { - ...ele, - isShowColumn:showCol.includes(ele.label) + label: item.salaryPlan.name, + prop: item.salaryPlan.ID.toString(), + isEditTd: true, + default: true, } }) - }, - selTableCol(val) { - this.showcol = val; - this.tableList.tableColumn = this.setColumnVisible(val); - }, - // 璇锋眰鏁版嵁 - async getData() { - this.loading = true - const {code,data,total}=await getPayrollSalaryPlanListApi({ - ...this.object, - page: this.pagerOptions.currPage, - pageSize: this.pagerOptions.pageSize, - keyword:this.keyword - }); - if(code===200){ - this.tableList.tableInfomation=data; - this.pagerOptions.totalCount=total; - } - this.loading=false; - }, - changeDate(){ - this.pagerOptions.currPage = 1 - this.getData() - }, - // 鎼滅储 - onFilterSearch(searchText) { - this.keyword = searchText ?? "" - this.pagerOptions.currPage = 1 - this.getData() + + // 澶勭悊鏁版嵁 + data.forEach(item => { + const dataObj = {} + dataObj.workTypeName = item.worker.workType + dataObj.workerName = item.worker.name + dataObj.workerId = item.worker.id + dataObj.amount = item.amount + dataObj.remark = item.remark + if (item.list.length > 0) { + item.list.forEach(subItem => { + dataObj[subItem.salaryPlan.ID.toString()] = subItem.amount + }) + } + tableData.push(dataObj) + }) + // 澶勭悊鏁版嵁 + + const col = dynamicColumn.map(item => item.label) + + this.showcol = ['宸ョ', '濮撳悕', '搴斿彂宸ヨ祫', ...col, '澶囨敞']; + this.tableColumn = [ + { label: "宸ョ", prop: "workTypeName", default: true, fixed: true }, + { label: "濮撳悕", prop: "workerName", default: true, fixed: true }, + { label: "搴斿彂宸ヨ祫", prop: "amount", default: true, fixed: true }, + ...dynamicColumn, + { label: "澶囨敞", prop: "remark", default: true }, + ] + this.setTable(); + + this.tableList.tableInfomation = tableData; + this.pagerOptions.totalCount = total; } + this.loading = false; + }, + changeDate() { + this.pagerOptions.currPage = 1 + this.getData() + }, + // 鎼滅储 + onFilterSearch(searchText) { + this.keyword = searchText ?? "" + this.pagerOptions.currPage = 1 + this.getData() } } +} </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> - .silkRegister-form { - height: 100%; - overflow: hidden; - .filter { +.silkRegister-form { + height: 100%; + overflow: hidden; + + .filter { + height: 80px; + display: flex; + align-items: center; + padding: 12px 20px 0 20px; + + &-card { height: 80px; display: flex; align-items: center; - padding: 12px 20px 0 20px; - &-card { - height: 80px; - display: flex; - align-items: center; - box-sizing: border-box; - padding: 10px 20px; - flex: 1; - border-radius: 12px; - background-color: #fff; - } - } - .body { box-sizing: border-box; padding: 10px 20px; + flex: 1; border-radius: 12px; - height: calc(100% - 92px); - .body-card { - background-color: #fff; - border-radius: 12px; - height: 100%; - overflow: hidden; - } - .list-view { - height: calc(100% - 100px); - overflow: hidden; - } - .btn-pager { - display: flex; - margin-top: 10px; - .page { - margin-left: auto; - } + background-color: #fff; + } + } + + .body { + box-sizing: border-box; + padding: 10px 20px; + border-radius: 12px; + height: calc(100% - 92px); + + .body-card { + background-color: #fff; + border-radius: 12px; + height: 100%; + overflow: hidden; + } + + .list-view { + height: calc(100% - 100px); + overflow: hidden; + } + + .btn-pager { + display: flex; + margin-top: 10px; + + .page { + margin-left: auto; } } } +} </style> -- Gitblit v1.8.0