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