zhonghuizhen 15 часов назад
Родитель
Сommit
b95cef6fa8
1 измененных файлов с 143 добавлено и 91 удалено
  1. 143 91
      src/views/business/attendance/attendanceDetails.vue

+ 143 - 91
src/views/business/attendance/attendanceDetails.vue

@@ -13,8 +13,6 @@
       :pagination="pagination"
       :loading="loading"
       :index-row="false"
-      :show-checkbox="true"
-      :row-key="pkKey"
       @action-event="handleAction"
       @sort-change="handleSortChange"
       @pagination-change="handlePaginationChange"
@@ -83,21 +81,22 @@
           <el-table-column
             key="paiBanMingChen"
             prop="paiBanMingChen"
-            label="排班名称"
+            label="配置名称"
             min-width="140"
           />
           <el-table-column
             key="banCiMing"
             prop="banCiMing"
-            label="班次名称"
-            width="100"
+            label="排班类型"
+            width="140"
           />
+          <!--
           <el-table-column
             key="banCiBieMing"
             prop="banCiBieMing"
             label="班次别名"
             width="100"
-          />
+          />-->
         </el-table-column>
         <el-table-column key="riQi" prop="riQi" label="日期" width="100" />
         <!-- 上班分组 -->
@@ -128,7 +127,7 @@
               >
                 {{
                   (!row.daKaShiJian1 && row.banCiMing != '休息')
-                    ? '缺勤'
+                    ? '未打卡'
                     : row.zhuangTai1 === '异常'
                       ? '迟到'
                       : row.zhuangTai1
@@ -165,9 +164,9 @@
               >
                 {{
                   (!row.daKaShiJian2 && row.banCiMing != '休息')
-                    ? '缺勤'
+                    ? '未打卡'
                     : row.zhuangTai2 === '异常'
-                      ? '迟到'
+                      ? '早退'
                       : row.zhuangTai2
                 }}
               </span>
@@ -202,13 +201,62 @@
             </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, removeAttendanceDetail } from '@/api/business/attendance'
+import { queryAttendanceDetail, gdUpdateAttendce,removeAttendanceDetail } from '@/api/business/attendance'
 import ibpsUserSelector from '@/business/platform/org/selector'
 import FixHeight from '@/mixins/height'
 import IbpsExport from '@/plugins/export'
@@ -233,7 +281,7 @@ export default {
       userOption,
       deptOption,
       title: '考勤明细',
-      pkKey: 'id', // 主键对应数据库字段
+      pkKey: 'id_', // 主键对应数据库字段
       loading: true,
       height: document.clientHeight,
       listData: [],
@@ -254,14 +302,16 @@ export default {
           userType: 'position'
         }
       ],
-      sorts: {},
+      sorts:{
+            "ri_qi_": "DESC"
+        },
       daterRange: [],
       searchXinMing: '',
       pickerOptions: {
         disabledDate(time) {
           const today = new Date()
           today.setHours(0, 0, 0, 0)
-          // 禁用未来的日期
+          // 禁用今天及未来的日期
           return time.getTime() > today.getTime()
         }
       },
@@ -312,9 +362,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: '日期范围',
@@ -324,10 +374,19 @@ export default {
           ]
         },
         columns: []
-      }
+      },
+      // 编辑弹窗相关
+      editDialogVisible: false,
+      currentEditRow: null,      // 当前正在编辑的行数据
+      editForm: {
+        id: '',
+        daKaShiJian1: '',
+        daKaShiJian2: ''
+      },
+      saveLoading: false
     }
   },
-  computed: { 
+  computed: {
     computedDateRange: {
       get() {
         return this.daterRange;
@@ -335,6 +394,11 @@ 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() {
@@ -348,11 +412,9 @@ 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 = '无需打卡'
@@ -385,7 +447,7 @@ export default {
         ? this.$refs['crud'].getSearcFormData()
         : {}
       searchParam['Q^di_dian_^S'] = second || first
-      searchParam['Q^ri_qi_^DG'] = this.getYesterday()
+      searchParam['Q^ri_qi_^DG'] = this.getToday()
       if (this.daterRange.length > 0) {
         searchParam['Q^ri_qi_^DL'] = this.getPrevDateString(this.daterRange[0])
         searchParam['Q^ri_qi_^DG'] = this.daterRange[1]
@@ -420,8 +482,8 @@ export default {
           break
       }
     },
-    // 删除记录
-    handleRemove(selection) {
+     // 删除记录
+     handleRemove(selection) {
       if (!selection || selection.length === 0) {
         ActionUtils.warning('请至少选择一条记录')
         return
@@ -453,87 +515,35 @@ export default {
     // 导出数据
     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, `考勤明细统计数据`)
     },
-    getYesterday(){
+    getToday(){
       const date = new Date(this.$common.getDateNow())
       date.setDate(date.getDate())
       return date.toISOString().split('T')[0]
     },
     getPrevDateString(riqi) {
       const previousDay = new Date(riqi)
-      previousDay.setDate(previousDay.getDate() - 1); // 减去1天
+      previousDay.setDate(previousDay.getDate() - 1);
       return [previousDay.getFullYear(),
                 String(previousDay.getMonth() + 1).padStart(2, '0'),
                 String(previousDay.getDate()).padStart(2, '0')
@@ -553,6 +563,48 @@ 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
+        })
     }
   }
 }