Browse Source

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper

zhouyy 6 tháng trước cách đây
mục cha
commit
6437999d18
20 tập tin đã thay đổi với 124 bổ sung57 xóa
  1. 3 3
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/components/common/formForm/formItem.vue
  2. 20 2
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/components/common/pullDownSelector.vue
  3. 10 4
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/moduleList/moduleList.vue
  4. 2 2
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/product/addEditor.vue
  5. 4 4
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/tasks/addEditor.vue
  6. 3 1
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/tabbar/home/component/workbench.vue
  7. 2 1
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/visitorProgram/addEditorVisitor.vue
  8. 4 4
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/utility/defaultData.js
  9. 1 1
      fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/utility/generalVariables.js
  10. 5 4
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/TaskController.java
  11. 6 6
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/Task.java
  12. 3 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskFilesController.java
  13. 13 13
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCorpwxTimeController.java
  14. 24 6
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  15. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java
  16. 3 3
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserCorpwxTimeMapper.xml
  17. 3 0
      fhKeeper/formulahousekeeper/octopus/src/views/customer/list.vue
  18. 13 1
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/entity/TimeType.java
  19. 3 1
      fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/TimeTypeMapper.xml
  20. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/task/list.vue

+ 3 - 3
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/components/common/formForm/formItem.vue

@@ -1,7 +1,7 @@
 <template>
   <template v-if="element.type === 'input'">
     <van-field
-      v-model="element.options.defaultValue"
+      v-model.trim="element.options.defaultValue"
       :label="element.label"
       :name="element.model"
       :maxlength="element.options?.maxlength"
@@ -18,7 +18,7 @@
   </template>
   <template v-if="element.type === 'number'">
     <van-field
-      v-model="element.options.defaultValue"
+      v-model.trim="element.options.defaultValue"
       type="number"
       :label="element.label"
       :name="element.model"
@@ -95,7 +95,7 @@
   </template>
   <template v-if="element.type === 'textarea'">
     <van-field
-      v-model="element.options.defaultValue"
+      v-model.trim="element.options.defaultValue"
       type="textarea"
       :label="element.label"
       :name="element.model"

+ 20 - 2
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/components/common/pullDownSelector.vue

@@ -68,6 +68,10 @@ const props = defineProps({
     type: Array,
     default: () => [],
   },
+  showElement: {
+    type: Boolean,
+    default: () => false,
+  },
   value: {
     type: [String, Array],
     default: () => [],
@@ -106,7 +110,21 @@ watch(() => props.options, (newValue) => {
 })
 
 watch(() => props.value, (newValue) => {
-  selectChecked.value = newValue
+  if(!newValue) {
+    selectChecked.value = []
+  }
+  selectChecked.value = Array.isArray(newValue) ? newValue : [newValue]
+})
+
+watch(() => props.showElement, (newValue) => {
+  if(!newValue) {
+    setTimeout(() => {
+      searchForValue.value = ''
+      searchOptions('')
+      const val = (props.value && Array.isArray(props.value) && props.value.length > 0)
+      selectChecked.value = val ? selectChecked.value : []
+    }, 500)
+  }
 })
 
 function searchOptions(val) {
@@ -120,7 +138,7 @@ function searchOptions(val) {
       return;
     }
     const list = manualCopying(allOptions.value);
-    renderingOptions.value = list.filter((item) => item.label.indexOf(val) > -1);
+    renderingOptions.value = list.filter((item) => (item.label || '').indexOf(val) > -1);
     return
   }
 

+ 10 - 4
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/moduleList/moduleList.vue

@@ -87,7 +87,7 @@
                           <div>
                             <div class="flex items-center flex-row">
                               <div class="flex-1 truncate mr-8 titles relative">{{ item.taskName }}</div>
-                              <div class="text-[#B9B9B9]">
+                              <div :style="`color: ${fixedFieldTaskStatus.find(subItem => subItem.value == item.status)?.color}`">
                                 {{ fixedFieldTaskStatus.find(subItem => subItem.value == item.status)?.label || '' }}
                               </div>
                             </div>
@@ -190,7 +190,12 @@
             </van-pull-refresh>
           </template>
           <template v-else>
-            <van-skeleton title :row="20" class="w-full h-full" />
+            <template v-if="!isLoading && listData?.records && !listData.records.length">
+              <van-empty description="暂无数据" />
+            </template>
+            <template v-else>
+              <van-skeleton title :row="20" class="w-full h-full" />
+            </template>
           </template>
         </div>
       </div>
@@ -215,7 +220,7 @@
 
       <!-- select 选择器 -->
       <van-popup v-model:show="showSelect" destroy-on-close position="bottom" :style="{ height: '80%' }">
-        <PullDownSelector @change="selectChange" />
+        <PullDownSelector :showElement="showSelect" @change="selectChange" />
       </van-popup>
     </template>
   </Page>
@@ -346,11 +351,12 @@ function claimAndClaim(item) {
 // 删除事件
 function deleteRow(row) {
   const { name = '', searchFiled = {}, deteleFiled = '' } = queryParameters.value
+  const foemVal = { [queryParameters.value.key == 'tasks' ? 'taskIds' : 'ids']: row.id }
   showConfirmDialog({
     title: `删除${name}`,
     message: `确定删除【${row[searchFiled?.search]}】${name}吗?`,
   }).then(() => {
-    requests.post(deteleFiled, { ids: row.id }).then((res) => {
+    requests.post(deteleFiled, { ...foemVal }).then((res) => {
       toastSuccess('删除成功')
       onRefresh(true)
     }).catch((err) => {

+ 2 - 2
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/product/addEditor.vue

@@ -46,8 +46,8 @@ function onSubmit() {
           }
         })
       }, 2000)
-    }).catch(() => {
-      toastFail('保存失败')
+    }).catch((err) => {
+      toastFail(err.msg)
     })
   })
 }

+ 4 - 4
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/pageComponents/tasks/addEditor.vue

@@ -129,7 +129,7 @@
                     <div class="flex items-center justify-end">
                       <van-stepper v-model="item.value" :min="0" button-size="1.2rem" theme="round" integer
                         class="mr-2" />
-                      
+                      
                       <van-icon name="delete-o" class="ml-2 text-[red]" size="1.3rem"
                         @click="deleteCustomeDateItem(index)" />
                     </div>
@@ -167,11 +167,11 @@
     <div>
       <!-- 下拉框选择 -->
       <van-popup v-model:show="showSelectionFlag" destroy-on-close position="bottom" :style="{ height: '80%' }">
-        <PullDownSelector :options="showSelectionArray" :doYouNeedTranslation="false" @change="selectChange" />
+        <PullDownSelector :show-element="showSelectionFlag" :options="showSelectionArray" :doYouNeedTranslation="false" @change="selectChange" />
       </van-popup>
 
       <van-popup v-model:show="showSelectionToFlag" destroy-on-close position="bottom" :style="{ height: '80%' }">
-        <PullDownSelector :value="showSelectionToValue" @change="selectChange" :multiple-choice="true" />
+        <PullDownSelector :show-element="showSelectionToFlag" :value="showSelectionToValue" @change="selectChange" :multiple-choice="true" />
       </van-popup>
 
       <!-- 选择日期 -->
@@ -440,7 +440,7 @@ function initializeData() {
     businessOpportunityIdName: businessOpportunityName,
     priorityName: fixedFieldPriority.find(item => item.value == priority)?.label || '',
     taskTypeName: fixedFieldTaskType.find(item => item.value == taskType)?.label || '',
-    repeatTypenName: fixedFieldRepetitiveType.find(item => item.value == repeatType)?.label || ''
+    repeatTypeName: fixedFieldRepetitiveType.find(item => item.value == repeatType)?.label || ''
   }
 
   const list = repeatDesignDay && repeatDesignDay.split(',') || []

+ 3 - 1
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/tabbar/home/component/workbench.vue

@@ -316,7 +316,9 @@ function processForms() {
 }
 
 function getVisitorPlan() {
-  requests.post(GET_VISITOR_PLAN, { calenderDate: dateConditions.value }).then((res) => {
+  requests.post(GET_VISITOR_PLAN, { 
+    calenderDate: dayjs(dateConditions.value).format('YYYY-MM') 
+  }).then((res) => {
     visitorProgramList.value = res.data || []
   })
 }

+ 2 - 1
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/pages/visitorProgram/addEditorVisitor.vue

@@ -157,6 +157,7 @@
         :style="{ height: '80%' }"
       >
         <PullDownSelector
+          :showElement="customerShowPicker"
           :options="customerAllList"
           :doYouNeedTranslation="false"
           @change="customerSelectChange"
@@ -169,7 +170,7 @@
         position="bottom"
         :style="{ height: '80%' }"
       >
-        <PullDownSelector @change="personnelSelectChange" />
+        <PullDownSelector :showElement="personnelShowPicker" @change="personnelSelectChange" />
       </van-popup>
       <!-- 拜访目的 -->
       <van-popup

+ 4 - 4
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/utility/defaultData.js

@@ -30,10 +30,10 @@ export const fixedFieldTaskType = [
 
 //任务状态
 export const fixedFieldTaskStatus = [
-  { label: "未开始", value: "0", type: "info" },
-  { label: "进行中", value: "1", type: "primary" },
-  { label: "已完成", value: "2", type: "success" },
-  { label: "已超时", value: "3", type: "danger" },
+  { label: "未开始", value: "0", type: "info", color: '#B9B9B9' },
+  { label: "进行中", value: "1", type: "primary", color: '#075985' },
+  { label: "已完成", value: "2", type: "success", color: '#07C160' },
+  { label: "已超时", value: "3", type: "danger", color: '#EE0A24' },
 ];
 
 // 合同状态

+ 1 - 1
fhKeeper/formulahousekeeper/customerBuler-crm-h5/src/utility/generalVariables.js

@@ -28,7 +28,7 @@ export const routingInfos = {
     icon: 'icon-shangpin',
     // listUrl: GET_A_LIST_OF_CLUES,
     listUrl: TOP_DATA_OF_CLUE_LIST,
-    deteleUrl: DELETE_CLUES,
+    deteleFiled: DELETE_CLUES,
     transferInterface: TRANSFER_CLUES,
     addEditingInterface: NEW_CLUE_EDITING,
     topMountedInterface: TOP_OF_CLUES,

+ 5 - 4
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/TaskController.java

@@ -24,6 +24,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
@@ -180,7 +181,7 @@ public class TaskController {
                         saveInformationListWithCount(task, taskInformation, between, executorIdList);
                     }else if (task.getRepeatEndDate()!=null){
                         TaskInformation taskInformation = selectTaskInformation(task);
-                        if (LocalDateTime.now().isAfter(task.getRepeatEndDate())){
+                        if (LocalDate.now().isAfter(task.getRepeatEndDate())){
                             continue;
                         }
                         int between = (int) ChronoUnit.DAYS.between(LocalDateTime.now(), task.getRepeatEndDate());
@@ -200,7 +201,7 @@ public class TaskController {
                             saveInformationListWithCount(task, taskInformation, between, executorIdList);
                         }else if (task.getRepeatEndDate()!=null){
                             TaskInformation taskInformation = selectTaskInformation(task);
-                            if (LocalDateTime.now().isAfter(task.getRepeatEndDate())){
+                            if (LocalDate.now().isAfter(task.getRepeatEndDate())){
                                 continue;
                             }
                             int between = (int) ChronoUnit.DAYS.between(LocalDateTime.now(), task.getRepeatEndDate());
@@ -224,7 +225,7 @@ public class TaskController {
                             saveInformationListWithCount(task, taskInformation, between, executorIdList);
                         }else if (task.getRepeatEndDate()!=null){
                             TaskInformation taskInformation = selectTaskInformation(task);
-                            if (LocalDateTime.now().isAfter(task.getRepeatEndDate())){
+                            if (LocalDate.now().isAfter(task.getRepeatEndDate())){
                                 continue;
                             }
                             int between = (int) ChronoUnit.DAYS.between(LocalDateTime.now(), task.getRepeatEndDate());
@@ -249,7 +250,7 @@ public class TaskController {
                             saveInformationListWithCount(task, taskInformation, between, executorIdList);
                         }else if (task.getRepeatEndDate()!=null){
                             TaskInformation taskInformation = selectTaskInformation(task);
-                            if (LocalDateTime.now().isAfter(task.getRepeatEndDate())){
+                            if (LocalDate.now().isAfter(task.getRepeatEndDate())){
                                 continue;
                             }
                             int between = (int) ChronoUnit.DAYS.between(LocalDateTime.now(), task.getRepeatEndDate());

+ 6 - 6
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/Task.java

@@ -135,10 +135,10 @@ public class Task extends Model<Task> {
     /**
      * 重复结束 在  ? 日期YYYY-MM-DD之后
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     @TableField("repeat_end_date")
-    private LocalDateTime repeatEndDate;
+    private LocalDate repeatEndDate;
 
     /**
      * 自定义日期: 每 ? 天一次,保存为 x1,x2,x3,x4
@@ -197,10 +197,10 @@ public class Task extends Model<Task> {
     /**
      * 完成日期
      */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     @TableField("finish_date")
-    private LocalDateTime finishDate;
+    private LocalDate finishDate;
 
 
     /**

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskFilesController.java

@@ -494,6 +494,9 @@ public class TaskFilesController {
             } else if (2 == task.getChargeStage()) {
                 //重置阶段二的时间、状态、理由
                 taskMapper.update(null,new LambdaUpdateWrapper<Task>()
+                        .set(Task::getChargeStage,1)
+                        .set(Task::getChargeOneStatus,0)
+                        .set(Task::getChargeOneTime,null)
                         .set(Task::getChargeTwoStatus,0)
                         .set(Task::getChargeTwoTime,null)
                         .set(Task::getFileRejectReason,null)

+ 13 - 13
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCorpwxTimeController.java

@@ -114,7 +114,7 @@ public class UserCorpwxTimeController {
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
         List<Map> list = new ArrayList<Map>();
-        int onlyWorkDays = 1;//只要工作日
+//        int onlyWorkDays = 0;//只要工作日
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "全部企微考勤");
         if (functionList.size() > 0) {
             //查看全部人员的
@@ -135,17 +135,17 @@ public class UserCorpwxTimeController {
         }
 
         //工作日处理,排除常规周末和法定节假日
-        if (onlyWorkDays == 1) {
-            DateTimeFormatter dtf =  DateTimeFormatter.ofPattern("yyyy/MM/dd");
-            list = list.stream().filter(time->{
-                String date = (String)time.get("createDate");
-                if (WorkDayCalculateUtils.isWorkDay(LocalDate.parse(date, dtf))) {
-                    return true;
-                } else {
-                    return false;
-                }
-            }).collect(Collectors.toList());
-        }
+//        if (onlyWorkDays == 1) {
+//            DateTimeFormatter dtf =  DateTimeFormatter.ofPattern("yyyy/MM/dd");
+//            list = list.stream().filter(time->{
+//                String date = (String)time.get("createDate");
+//                if (WorkDayCalculateUtils.isWorkDay(LocalDate.parse(date, dtf))) {
+//                    return true;
+//                } else {
+//                    return false;
+//                }
+//            }).collect(Collectors.toList());
+//        }
         DateTimeFormatter standFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         HashMap item = new HashMap();
         item.put("list", list);
@@ -465,7 +465,7 @@ public class UserCorpwxTimeController {
         CompanyDingding dingding = companyDingdingMapper.selectOne(new QueryWrapper<CompanyDingding>().eq("company_id", companyId));
         Integer manageDeptId = user.getManageDeptId();
 
-        List<Map> list = new ArrayList<Map>();
+        List<Map> list;
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "全部企微考勤");
         //只取当月中工作日的数据
         DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");

+ 24 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -5207,9 +5207,19 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     Optional<User> any;
                     if((wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1)||(dingding!=null&&dingding.getContactNeedTranslate()==1)){
                         Optional<User> optional = targetUserList.stream().filter(tl -> tl.getName().equals(username)).findFirst();
-                        any = allUserList.stream().filter(u -> u.getName().equals(username)||(u.getJobNumber()!=null&&u.getJobNumber().equals(username))||(optional.isPresent()&&((u.getCorpwxUserid()!=null&&u.getCorpwxUserid().equals(optional.get().getCorpwxUserid()))||(u.getDingdingUserid()!=null&&u.getDingdingUserid().equals(optional.get().getCorpwxUserid()))))).findAny();
+                        any = allUserList.stream().filter(u -> u.getName().equals(username)||(u.getJobNumber()!=null&&u.getJobNumber().equals(username))||(optional.isPresent()&&((u.getCorpwxUserid()!=null&&u.getCorpwxUserid().equals(optional.get().getCorpwxUserid()))||(u.getDingdingUserid()!=null&&u.getDingdingUserid().equals(optional.get().getCorpwxUserid()))))).sorted(new Comparator<User>() {
+                            @Override
+                            public int compare(User o1, User o2) {
+                                return o1.getIsActive() > o2.getIsActive() ? -1 : 1;
+                            }
+                        }).findAny();
                     }else {
-                        any = allUserList.stream().filter(u -> u.getName().equals(username)||(u.getJobNumber()!=null&&u.getJobNumber().equals(username))).findAny();
+                        any = allUserList.stream().filter(u -> u.getName().equals(username)||(u.getJobNumber()!=null&&u.getJobNumber().equals(username))).sorted(new Comparator<User>() {
+                            @Override
+                            public int compare(User o1, User o2) {
+                                return o1.getIsActive() > o2.getIsActive() ? -1 : 1;
+                            }
+                        }).findAny();
                     }
                     if (!any.isPresent()) {
                         //msg.setError("人员["+username+"]不存在,请先在组织结构中添加或者通过钉钉同步导入");
@@ -5568,9 +5578,19 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     Optional<User> any;
                     if((wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1)||(dingding!=null&&dingding.getContactNeedTranslate()==1)){
                         Optional<User> optional = targetUserList.stream().filter(tl -> tl.getName().equals(username)).findFirst();
-                        any = allUserList.stream().filter(u -> u.getName().equals(username)||(u.getJobNumber()!=null&&u.getJobNumber().equals(username))||(optional.isPresent()&&((u.getCorpwxUserid()!=null&&u.getCorpwxUserid().equals(optional.get().getCorpwxUserid()))||(u.getDingdingUserid()!=null&&u.getDingdingUserid().equals(optional.get().getCorpwxUserid()))))).findAny();
+                        any = allUserList.stream().filter(u -> u.getName().equals(username)||(u.getJobNumber()!=null&&u.getJobNumber().equals(username))||(optional.isPresent()&&((u.getCorpwxUserid()!=null&&u.getCorpwxUserid().equals(optional.get().getCorpwxUserid()))||(u.getDingdingUserid()!=null&&u.getDingdingUserid().equals(optional.get().getCorpwxUserid()))))).sorted(new Comparator<User>() {
+                            @Override
+                            public int compare(User o1, User o2) {
+                                return o1.getIsActive() > o2.getIsActive() ? -1 : 1;
+                            }
+                        }).findAny();
                     }else {
-                        any = allUserList.stream().filter(u -> u.getName().equals(username)||(u.getJobNumber()!=null&&u.getJobNumber().equals(username))).findAny();
+                        any = allUserList.stream().filter(u -> u.getName().equals(username)||(u.getJobNumber()!=null&&u.getJobNumber().equals(username))).sorted(new Comparator<User>() {
+                            @Override
+                            public int compare(User o1, User o2) {
+                                return o1.getIsActive() > o2.getIsActive() ? -1 : 1;
+                            }
+                        }).findAny();
                     }
                     if (!any.isPresent()) {
                         //msg.setError("人员["+username+"]不存在,请先在组织结构中添加或者通过钉钉同步导入");
@@ -5578,8 +5598,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         return msg;
                     }
                     User reportCreator = any.get();
-
-
                     String pCode = row.getCell(3)==null?null:row.getCell(3).getStringCellValue();
                     String pName = row.getCell(4)==null?null:row.getCell(4).getStringCellValue();
                     Project project = null;

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -1350,6 +1350,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                     ct.setOutdoorTime(0.0);
                     if (isCrossDay) {
                         //直接用cardTime作为工作时长
+                        ct.setName(name);
                         ct.setWorkHours(DateTimeUtil.getHoursFromDouble(ct.getCardTime()));
                     }
                     //工作日或者非工作日有打卡,需要校正请假,外出的时长数据

+ 3 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserCorpwxTimeMapper.xml

@@ -50,14 +50,14 @@
         user left join department on department.department_id = user.department_id
         LEFT JOIN
         (SELECT a.corpwx_userid,a.name, SUM(a.work_hours) AS workHours FROM user_corpwx_time a, user b WHERE a.company_id = #{companyId}
-        AND (a.`corpwx_userid` = b.`corpwx_userid` OR (a.corpwx_userid IS NULL AND a.name = b.name))
+        AND ((b.`corpwx_userid` is not null and a.`corpwx_userid` = b.`corpwx_userid`) OR (b.corpwx_userid IS NULL AND a.name = b.name))
         AND (a.`create_date` &gt;= b.`induction_date` OR b.`induction_date` IS NULL)
         AND  a.create_date in
         <foreach collection="dateList" item="date" open="(" separator="," close=")">
             #{date}
         </foreach>
-        GROUP BY a.`corpwx_userid`,a.name ) card_time
-        ON user.name = card_time.name
+        GROUP BY a.`corpwx_userid`,IFNULL(a.`corpwx_userid`,a.name)) card_time
+        ON ((user.corpwx_userid is not null and user.corpwx_userid=card_time.corpwx_userid) or (user.corpwx_userid is null and  user.name = card_time.name))
         LEFT JOIN (SELECT r.creator_id, SUM(r.working_time) AS projectTime FROM report r WHERE r.company_id = #{companyId} and r.state &lt;= 1 AND  r.create_date in
         <foreach collection="dateList" item="date" open="(" separator="," close=")">
             #{date}

+ 3 - 0
fhKeeper/formulahousekeeper/octopus/src/views/customer/list.vue

@@ -261,6 +261,7 @@
                     <el-form-item><el-checkbox v-model="dialogData.userWithMultiDept">是否开启人员设置可填报部门</el-checkbox></el-form-item>
                     <el-form-item><el-checkbox v-model="dialogData.importReportAuditNormal">导入的日报正常审批</el-checkbox></el-form-item>
                     <el-form-item><el-checkbox v-model="dialogData.onlyShowPercent">工时报告页面,工时仅显示比例</el-checkbox></el-form-item>
+                    <el-form-item><el-checkbox v-model="dialogData.taskFileCharge">任务文件支持审核</el-checkbox></el-form-item>
                     
                 </el-form>
             </div>
@@ -488,6 +489,7 @@ import App from '../../App.vue';
                             this.$set(this.dialogData,'enableNewWeeklyfill',res.data.enableNewWeeklyfill ? true : false)
                             this.$set(this.dialogData,'hideSubproject',res.data.hideSubproject ? true : false)
                             this.$set(this.dialogData,'userWithMultiDept',res.data.userWithMultiDept ? true : false)
+                            this.$set(this.dialogData,'taskFileCharge',res.data.taskFileCharge ? true : false)
                         }else{
                             this.$message({
                                 message: res.msg,
@@ -832,6 +834,7 @@ import App from '../../App.vue';
                     enableNewWeeklyfill: this.dialogData.enableNewWeeklyfill ? 1 : 0,
                     hideSubproject:this.dialogData.hideSubproject ? 1: 0, 
                     userWithMultiDept:this.dialogData.userWithMultiDept ? 1: 0, 
+                    taskFileCharge:this.dialogData.taskFileCharge ? 1: 0, 
                 },res => {
                     if(res.code == 'ok'){
                         this.editDialogG = false

+ 13 - 1
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2024-09-28
+ * @since 2025-01-02
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -612,6 +612,18 @@ public class TimeType extends Model<TimeType> {
     @TableField("verify_card_overtime")
     private Integer verifyCardOvertime;
 
+    /**
+     * 驳回日报原因是否必填
+     */
+    @TableField("force_reject_reason")
+    private Integer forceRejectReason;
+
+    /**
+     * 任务文件审核 0不启用 1启用
+     */
+    @TableField("task_file_charge")
+    private Integer taskFileCharge;
+
 
     @Override
     protected Serializable pkVal() {

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 3 - 1
fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/TimeTypeMapper.xml


+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/task/list.vue

@@ -422,7 +422,7 @@
             </div>
         </el-dialog>
         <el-dialog title="文件驳回" :visible.sync="viewFilesAndReviewThemRejectVisable" width="800px">
-            <el-input type="textarea" :rows="5" placeholder="请输入驳回原因" v-model.trim="viewFilesAndReviewThemRejectVal">
+            <el-input type="textarea" :rows="5" placeholder="请输入驳回原因" v-model.trim="viewFilesAndReviewThemRejectVal" :maxlength="50">
             </el-input>
             <div slot="footer" class="dialog-footer">
                 <el-button type="primary" size="small" @click="viewFilesAndReviewThemRejectCli(2)" :loading="viewFilesAndReviewThemRejectValLoading">确定</el-button>