Przeglądaj źródła

考勤明细增加删除按钮

zhonghuizhen 5 dni temu
rodzic
commit
0c8a1b2eea

+ 13 - 0
src/api/business/attendance.js

@@ -156,3 +156,16 @@ export function gdClockIn (data) {
       data
   })
 }
+
+/**
+ * 考勤明细-删除
+ * @param {*} params
+ 
+export function removeAttendanceDetail (data) {
+  return request({
+      url: BUSINESS_BASE_URL() + '/employee/attendanceDetail/remove',
+      method: 'post',
+      data
+  })
+}*/
+

+ 129 - 142
src/views/business/attendance/attendanceDetails.vue

@@ -13,6 +13,8 @@
       :pagination="pagination"
       :loading="loading"
       :index-row="false"
+      :show-checkbox="true"
+      :row-key="pkKey"
       @action-event="handleAction"
       @sort-change="handleSortChange"
       @pagination-change="handlePaginationChange"
@@ -81,22 +83,21 @@
           <el-table-column
             key="paiBanMingChen"
             prop="paiBanMingChen"
-            label="配置名称"
+            label="排班名称"
             min-width="140"
           />
           <el-table-column
             key="banCiMing"
             prop="banCiMing"
-            label="排班类型"
-            width="140"
+            label="班次名称"
+            width="100"
           />
-          <!--
           <el-table-column
             key="banCiBieMing"
             prop="banCiBieMing"
             label="班次别名"
             width="100"
-          />-->
+          />
         </el-table-column>
         <el-table-column key="riQi" prop="riQi" label="日期" width="100" />
         <!-- 上班分组 -->
@@ -127,7 +128,7 @@
               >
                 {{
                   (!row.daKaShiJian1 && row.banCiMing != '休息')
-                    ? '未打卡'
+                    ? '缺勤'
                     : row.zhuangTai1 === '异常'
                       ? '迟到'
                       : row.zhuangTai1
@@ -164,9 +165,9 @@
               >
                 {{
                   (!row.daKaShiJian2 && row.banCiMing != '休息')
-                    ? '未打卡'
+                    ? '缺勤'
                     : row.zhuangTai2 === '异常'
-                      ? '早退'
+                      ? '迟到'
                       : row.zhuangTai2
                 }}
               </span>
@@ -201,62 +202,13 @@
             </span>
           </template>
         </el-table-column>
-
-        <!-- 操作列:仅质量负责人可见 -->
-        <el-table-column
-          v-if="isQualityManager"
-          label="操作"
-          width="90"
-          fixed="right"
-        >
-          <template #default="{ row }">
-            <el-button type="text" size="small" @click="openEditDialog(row)">
-              编辑
-            </el-button>
-          </template>
-        </el-table-column>
       </template>
     </ibps-crud>
-
-    <!-- 编辑上下班时间的弹窗 -->
-    <el-dialog
-      title="修改上下班时间"
-      :visible.sync="editDialogVisible"
-      width="500px"
-      @close="closeEditDialog"
-    >
-      <el-form :model="editForm" label-width="120px" size="small">
-        <el-form-item label="上班打卡时间">
-          <el-date-picker
-            v-model="editForm.daKaShiJian1"
-            type="datetime"
-            placeholder="选择上班打卡时间"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            style="width: 100%"
-          />
-        </el-form-item>
-        <el-form-item label="下班打卡时间">
-          <el-date-picker
-            v-model="editForm.daKaShiJian2"
-            type="datetime"
-            placeholder="选择下班打卡时间"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            style="width: 100%"
-          />
-        </el-form-item>
-      </el-form>
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="editDialogVisible = false">取消</el-button>
-        <el-button type="primary" :loading="saveLoading" @click="saveEditTime">
-          确认
-        </el-button>
-      </span>
-    </el-dialog>
   </div>
 </template>
 
 <script>
-import { queryAttendanceDetail, gdUpdateAttendce } from '@/api/business/attendance'
+import { queryAttendanceDetail, removeAttendanceDetail } from '@/api/business/attendance'
 import ibpsUserSelector from '@/business/platform/org/selector'
 import FixHeight from '@/mixins/height'
 import IbpsExport from '@/plugins/export'
@@ -281,7 +233,7 @@ export default {
       userOption,
       deptOption,
       title: '考勤明细',
-      pkKey: 'id_', // 主键对应数据库字段
+      pkKey: 'id', // 主键对应数据库字段
       loading: true,
       height: document.clientHeight,
       listData: [],
@@ -302,9 +254,7 @@ export default {
           userType: 'position'
         }
       ],
-      sorts:{
-            "ri_qi_": "DESC"
-        },
+      sorts: {},
       daterRange: [],
       searchXinMing: '',
       pickerOptions: {
@@ -312,7 +262,7 @@ export default {
           const today = new Date()
           today.setHours(0, 0, 0, 0)
           // 禁用今天及未来的日期
-          return time.getTime() > today.getTime()
+          return time.getTime() >= today.getTime()
         }
       },
       listConfig: {
@@ -328,6 +278,12 @@ export default {
             icon: 'ibps-icon-download',
             label: '导出',
             type: 'primary'
+          },
+          {
+            key: 'remove',
+            icon: 'ibps-icon-remove',
+            label: '删除',
+            type: 'danger'
           }
         ],
         searchForm: {
@@ -356,9 +312,9 @@ export default {
               fieldType: 'select',
               options: deptOption
             },
-            { prop: 'Q^pai_ban_ming_chen^SL', label: '配置名称' },
-            { prop: 'Q^ban_ci_ming_^SL', label: '排班类型' },
-            //{ prop: 'Q^ban_ci_bie_ming_^SL', label: '班次别名' },
+            { prop: 'Q^pai_ban_ming_chen^SL', label: '排班名称' },
+            { prop: 'Q^ban_ci_ming_^SL', label: '班次名称' },
+            { prop: 'Q^ban_ci_bie_ming_^SL', label: '班次别名' },
             {
               prop: '',
               label: '日期范围',
@@ -368,19 +324,10 @@ export default {
           ]
         },
         columns: []
-      },
-      // 编辑弹窗相关
-      editDialogVisible: false,
-      currentEditRow: null,      // 当前正在编辑的行数据
-      editForm: {
-        id: '',
-        daKaShiJian1: '',
-        daKaShiJian2: ''
-      },
-      saveLoading: false
+      }
     }
   },
-  computed: {
+  computed: { 
     computedDateRange: {
       get() {
         return this.daterRange;
@@ -388,11 +335,6 @@ export default {
       set(newValue) {
         this.daterRange = newValue || [];
       }
-    },
-    // 判断当前用户是否为质量负责人
-    isQualityManager() {      
-      const userInfo = this.$store.getters.userInfo
-      return userInfo.role.some(role => role.alias === 'zlfzr') || userInfo.role.some(role => role.alias === 'xtgljs')
     }
   },
   created() {
@@ -406,9 +348,11 @@ export default {
         .then((res) => {
           this.listData = res.data.dataResult
           if (this.listData.length > 0) {
+            // 做部门和姓名处理
             this.listData.forEach((item) => {
               item.userName = this.getUserLabel(item.yongHuId)
               item.deptName = this.getDeptLabel(item.buMen)
+              // 考勤状态-缺勤
               if (item.kaoQinZhuangTa === '') {
                 if(item.banCiMing == '休息'){
                   item.kaoQinZhuangTa = '无需打卡'
@@ -441,7 +385,7 @@ export default {
         ? this.$refs['crud'].getSearcFormData()
         : {}
       searchParam['Q^di_dian_^S'] = second || first
-      searchParam['Q^ri_qi_^DG'] = this.getToday()
+      searchParam['Q^ri_qi_^DG'] = this.getYesterday()
       if (this.daterRange.length > 0) {
         searchParam['Q^ri_qi_^DL'] = this.getPrevDateString(this.daterRange[0])
         searchParam['Q^ri_qi_^DG'] = this.daterRange[1]
@@ -471,40 +415,125 @@ export default {
         case 'export':
           this.exportData()
           break
+        case 'remove':
+          this.handleRemove(selection)
+          break
       }
     },
+    // 删除记录
+    handleRemove(selection) {
+      if (!selection || selection.length === 0) {
+        ActionUtils.warning('请至少选择一条记录')
+        return
+      }
+      //const ids = selection.map(item => item[this.pkKey])
+      const ids = selection
+      this.$confirm(`确定要删除选中的 ${selection.length} 条考勤明细吗?`, '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.loading = true
+        console.log('删除传参数据:',ids)
+        removeAttendanceDetail( {'ids':ids}).then(() => {
+          ActionUtils.success('删除成功')
+          // 刷新列表
+          this.loadData()
+          // 清空选中
+          if (this.$refs.crud && this.$refs.crud.clearSelection) {
+            this.$refs.crud.clearSelection()
+          }
+        }).catch(() => {
+          ActionUtils.error('删除失败,请稍后重试')
+        }).finally(() => {
+          this.loading = false
+        })
+      }).catch(() => {})
+    },
     // 导出数据
     exportData() {
       const exportColumns = [
-        { field_name: 'userName', label: '姓名', name: 'userName' },
-        { field_name: 'deptName', label: '部门', name: 'deptName' },
-        { field_name: 'gongHao', label: '工号', name: 'gongHao' },
+        {
+          field_name: 'userName',
+          label: '姓名',
+          name: 'userName'
+        },
+        {
+          field_name: 'deptName',
+          label: '部门',
+          name: 'deptName'
+        },
+        {
+          field_name: 'gongHao',
+          label: '工号',
+          name: 'gongHao'
+        },
         {
           field_name: 'paiBanMingChen',
-          label: '配置名称',
+          label: '排班名称',
           name: 'paiBanMingChen'
         },
-        { field_name: 'banCiMing', label: '排班类型', name: 'banCiMing' },
-        //{ field_name: 'banCiBieMing', label: '班次别名', name: 'banCiBieMing' },
-        { field_name: 'riQi', label: '日期', name: 'riQi' },
-        { field_name: 'daKaShiJian1', label: '上班打卡时间', name: 'daKaShiJian1' },
-        { field_name: 'zhuangTai1', label: '上班打卡状态', name: 'zhuangTai1' },
-        { field_name: 'daKaShiJian2', label: '下班打卡时间', name: 'daKaShiJian2' },
-        { field_name: 'zhuangTai2', label: '下班打卡状态', name: 'zhuangTai2' },
-        { field_name: 'chiDaoShiChang', label: '迟到时长(分钟)', name: 'chiDaoShiChang' },
-        { field_name: 'daKaCiShu', label: '打卡次数', name: 'daKaCiShu' },
-        { field_name: 'kaoQinZhuangTa', label: '考勤状态', name: 'kaoQinZhuangTa' }
+        {
+          field_name: 'banCiMing',
+          label: '班次名称',
+          name: 'banCiMing'
+        },
+        {
+          field_name: 'banCiBieMing',
+          label: '班次别名',
+          name: 'banCiBieMing'
+        },
+        {
+          field_name: 'riQi',
+          label: '日期',
+          name: 'riQi'
+        },
+        {
+          field_name: 'daKaShiJian1',
+          label: '上班打卡时间',
+          name: 'daKaShiJian1'
+        },
+        {
+          field_name: 'zhuangTai1',
+          label: '上班打卡状态',
+          name: 'zhuangTai1'
+        },
+        {
+          field_name: 'daKaShiJian2',
+          label: '下班打卡时间',
+          name: 'daKaShiJian2'
+        },
+        {
+          field_name: 'zhuangTai2',
+          label: '下班打卡状态',
+          name: 'zhuangTai2'
+        },
+        {
+          field_name: 'chiDaoShiChang',
+          label: '迟到时长(分钟)',
+          name: 'chiDaoShiChang'
+        },
+        {
+          field_name: 'daKaCiShu',
+          label: '打卡次数',
+          name: 'daKaCiShu'
+        },
+        {
+          field_name: 'kaoQinZhuangTa',
+          label: '考勤状态',
+          name: 'kaoQinZhuangTa'
+        }
       ]
       this.handleExport(exportColumns, this.listData, `考勤明细统计数据`)
     },
-    getToday(){
+    getYesterday(){
       const date = new Date(this.$common.getDateNow())
-      date.setDate(date.getDate())
+      date.setDate(date.getDate() - 1)
       return date.toISOString().split('T')[0]
     },
     getPrevDateString(riqi) {
       const previousDay = new Date(riqi)
-      previousDay.setDate(previousDay.getDate() - 1);
+      previousDay.setDate(previousDay.getDate() - 1); // 减去1天
       return [previousDay.getFullYear(),
                 String(previousDay.getMonth() + 1).padStart(2, '0'),
                 String(previousDay.getDate()).padStart(2, '0')
@@ -524,48 +553,6 @@ export default {
         const msg = message || '导出成功'
         ActionUtils.success(msg)
       })
-    },
-
-    // ========= 编辑上下班时间相关方法 =========
-    openEditDialog(row) {
-      this.currentEditRow = row
-      this.editForm = {
-        id: row.id,
-        daKaShiJian1: row.daKaShiJian1 || '',
-        daKaShiJian2: row.daKaShiJian2 || ''
-      }
-      this.editDialogVisible = true
-    },
-    closeEditDialog() {
-      this.editDialogVisible = false
-      this.currentEditRow = null
-      this.editForm = { id:'',daKaShiJian1: '', daKaShiJian2: '' }
-    },
-    saveEditTime() {
-      if (!this.currentEditRow) return
-      this.saveLoading = true
-      // 调用 gdUpdateAttendce 接口,传递需要更新的字段
-      const postData = {
-        id: this.editForm.id,        // 主键字段名 id_
-        daKaShiJian1: this.editForm.daKaShiJian1,
-        daKaShiJian2: this.editForm.daKaShiJian2
-      }
-      gdUpdateAttendce(postData)
-        .then(() => {
-          this.$message.success('修改成功')
-          this.editDialogVisible = false
-          // 刷新列表以显示最新数据
-          this.loadData()
-        })
-        .catch((err) => {
-          console.error(err)
-          if(!err.cause){
-            this.$message.error('修改异常')
-          }
-        })
-        .finally(() => {
-          this.saveLoading = false
-        })
     }
   }
 }