王震
2023-10-25 d8a21fe8f4a9897e6296b60d59aed6de1ef9bed6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
<template>
    <el-dialog width="60%" title="员工" top="5vh"
               :visible.sync="innerVisible" append-to-body @close="$emit('update:currshowlist', false)"
               :show="currshowlist" class="staff-dialog">
        <ttable
            :table="table"
            @handleSelectionChange="handleSelectionChange"
            @currentChange="handleCurrentChange"
            :uploadInfo="uploadInfo"
            :prelang="prelang"
            :options="options"
            :selColValArr="selColValArr"
            :selCol="selCol"
            :bottomOffset="350"
            :ajaxFun="ajaxFun"
            ref="commonStaffTable"
        >
            <template #toolbar></template>
        </ttable>
 
        <div slot="footer" class="dialog-footer">
            <el-button @click="innerVisible=false">取 消</el-button>
            <el-button type="primary" @click="saveSelectRow">确 定</el-button>
            <el-button type="primary" plain @click="saveSelectRowBatch"  v-if="this.isBatch && this.permissions.product_add_staff_batch">批量新增</el-button>
        </div>
    </el-dialog>
</template>
<script>
    import ttable from '@/views/common/ztt-table'
    import {fetchList} from '@/api/basic/staff'
import { checkPersonHaveToWork } from '@/api/product/personboard'
    import { mapGetters } from 'vuex'
 
    export default {
        props: {
            dutyRecord: {
                type: Object,
                default: null
            },
            currshowlist: {
                type: Boolean,
                default: false
            },
            multiSelect: {
                type: Boolean,
                default: false
            },
            selColValArr: {
                type: Array,
                default: () => {
                    return []
                }
            },
            //默认选中字段
            selCol: {
                type: String,
                default: null
            },
            isBatch: {
                type: Boolean,
                default: false
            }
        },
        data() {
            return {
                ajaxFun: fetchList,
                innerVisible: false,
                currentRow: null,
                multipleSelection: [],
                uploadInfo: {//是否展示上传EXCEL以及对应的url
                    isShow: false,
                    url: ''
                },
                prelang: "operation",
                options: {
                    height: 300,//默认高度-为了表头固定
                    stripe: true, // 是否为斑马纹 table
                    highlightCurrentRow: false, // 是否要高亮当前行
                    border: true,//是否有纵向边框
                    lazy: false,//是否需要懒加载
                    fit: true,//列的宽度是否自撑开
                    multiSelect: this.multiSelect,//
                    seqNo: true,
                    isRefresh: true,//是否显示刷新按钮
                    isShowHide: true,//是否显示显影按钮
                    isSearch: false,//高级查询按钮
                    defaultOrderBy: {column: 'id', direction: 'desc'}
                },
                table: {
                    total: 0,
                    currentPage: 1,
                    pageSize: 20,
                    data: [],
                    // 标题
                    column: [
                        {
                            minWidth: '100',
                            prop: "staffNo",
                            label: "人员编号",
                            sort: true,
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text'
                        },
                        {
                            minWidth: '100',
                            prop: "staffName",
                            label: "人员名称",
                            sort: true,
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text'
                        },
                        {
                            minWidth: '100',
                            prop: "divisionName",
                            label: "部门",
                            sort: true,
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text'
                        },
                        {
                            minWidth: '100',
                            prop: "phone",
                            label: "电话",
                            sort: true,
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text'
                        },
                        {
                            minWidth: '100',
                            prop: "email",
                            label: "邮箱",
                            sort: true,
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text'
                        },
                        {
                            minWidth: '100',
                            prop: "post",
                            label: "岗位",
                            sort: true,
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'text'
                        },
                        {
                            minWidth: '100',
                            prop: "createTime",
                            label: "创建时间",
                            sort: true,
                            isTrue: true,
                            isSearch: true,
                            searchInfoType: 'datetimerange'
                        },
                    ]
                },
                addOrUpdateVisible: false
            }
        },
        components: {
            ttable
        },
        methods: {
            saveSelectRow() {
                if (this.multiSelect) {
                    // 新增提示:人员是否在当天其他班次里面出勤了
                    let workStaff = []
                    let dutyRecordId = 0
                    if (this.dutyRecord && this.dutyRecord.id) {
                        dutyRecordId = this.dutyRecord.id
                    }
                    for (var i = 0; i < this.multipleSelection.length; i++) {
                        workStaff.push(Object.assign({
                            staffId: this.multipleSelection[i].id,
                            dutyRecordId: dutyRecordId
                        }))
                    }
                    checkPersonHaveToWork(workStaff).then(response => {
                        if (response.data.data) {
                            this.$confirm(response.data.data + '是否继续添加', '提示', {
                                confirmButtonText: '确定',
                                cancelButtonText: '取消',
                                closeOnClickModal: false,
                                type: 'warning'
                            }).then(() => {
                                this.$emit('handleSelectionChange', this.multipleSelection)
                                this.innerVisible = false
                            }).catch(() => {
                            })
                        }else{
                            this.$emit('handleSelectionChange', this.multipleSelection)
                            this.innerVisible = false
                        }
                    })
                } else {
                    this.$emit("listenToStaffEvent", this.currentRow)
                    this.innerVisible = false
                }
            },
            handleCurrentChange(row) {
                this.currentRow = row;
            },
            handleSelectionChange(val) {// 多行选中
                this.multipleSelection = val;
            },
            getData() {
                if (this.$refs.commonStaffTable !== undefined) {
                    this.$refs.commonStaffTable.getDataList();
                }
            },
            saveSelectRowBatch() { 
                if (this.multiSelect) {
                    // 新增提示:人员是否在当天其他班次里面出勤了
                    let workStaff = []
                    let dutyRecordId = 0
                    if (this.dutyRecord && this.dutyRecord.id) {
                        dutyRecordId = this.dutyRecord.id
                    }
                    for (var i = 0; i < this.multipleSelection.length; i++) {
                        workStaff.push(Object.assign({
                            staffId: this.multipleSelection[i].id,
                            dutyRecordId: dutyRecordId
                        }))
                    }
                    checkPersonHaveToWork(workStaff).then(response => {
                        if (response.data.data) {
                            this.$confirm(response.data.data + '是否继续添加', '提示', {
                                confirmButtonText: '确定',
                                cancelButtonText: '取消',
                                closeOnClickModal: false,
                                type: 'warning'
                            }).then(() => {
                                this.$emit('handleSelectionChangeBacth', this.multipleSelection)
                                this.innerVisible = false
                            }).catch(() => {
                            })
                        }else{
                            this.$emit('handleSelectionChangeBacth', this.multipleSelection)
                            this.innerVisible = false
                        }
                    })
                } else {
                    this.$emit("listenToStaffEvent", this.currentRow)
                    this.innerVisible = false
                }
            }
        },
        watch: {
            currshowlist() {
                this.innerVisible = this.currshowlist;
                if (this.currshowlist) {
                    this.$nextTick(() => {
                        this.getData();
                    })
                }
            }
        },
        computed: {
            ...mapGetters(['permissions'])
        }
    }
</script>
<style>
    .staff-dialog .el-dialog__header {
        padding: 10px 20px 10px;
    }
 
    .staff-dialog .el-dialog__header .el-dialog__headerbtn {
        top: 10px;
    }
 
    .staff-dialog .el-dialog__body {
        padding: 5px 20px;
    }
 
    .staff-dialog .el-dialog__footer {
        padding: 5px 20px 10px;
    }
 
    .staff-dialog .el-dialog__body .avue-crud__pagination {
        margin-top: 0px;
        margin-bottom: 5px;
    }
 
</style>