Explorar el Código

日报填报增加对阶段和任务的隐藏配置

seyason hace 1 año
padre
commit
4683a9a3f6

+ 23 - 17
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -17,12 +17,13 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2024-01-26
+ * @since 2024-03-23
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
 public class TimeType extends Model<TimeType> {
+
     private static final long serialVersionUID=1L;
 
     /**
@@ -49,18 +50,6 @@ public class TimeType extends Model<TimeType> {
     @TableField("pm")
     private Float pm;
 
-    /**
-     * 休息时间
-     */
-    @TableField(exist = false)
-    private List<TimeAutoExclude> excludeTimeList;
-
-    /**
-     * 是否自动同步企业微信通讯录
-     */
-    @TableField(exist = false)
-    private Integer saasSyncContact;
-
     /**
      * 每月工作天数
      */
@@ -379,9 +368,6 @@ public class TimeType extends Model<TimeType> {
     @TableField("report_auto_approve_days")
     private Integer reportAutoApproveDays;
 
-    @TableField(exist = false)
-    private List<User> userList;
-
     /**
      * 日报填报时长上限,默认12小时
      */
@@ -442,7 +428,6 @@ public class TimeType extends Model<TimeType> {
     @TableField("restart_task_need_reason")
     private Integer restartTaskNeedReason;
 
-
     /**
      * 0-否 1-是  子项目是否必填
      */
@@ -538,6 +523,7 @@ public class TimeType extends Model<TimeType> {
      */
     @TableField("time_can_overlap")
     private Integer timeCanOverlap;
+
     /**
      * 自定义维度是否填报是可多选
      */
@@ -550,6 +536,26 @@ public class TimeType extends Model<TimeType> {
     @TableField("task_required")
     private Integer taskRequired;
 
+    /**
+     * 日报填报隐藏阶段项
+     */
+    @TableField("hide_stages")
+    private Integer hideStages;
+
+    /**
+     * 日报填报隐藏任务项
+     */
+    @TableField("hide_task")
+    private Integer hideTask;
+
+
+    @TableField(exist = false)
+    private List<User> userList;
+    @TableField(exist = false)
+    private List<TimeAutoExclude> excludeTimeList;
+    @TableField(exist = false)
+    private Integer saasSyncContact;
+
 
     @Override
     protected Serializable pkVal() {

+ 9 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -126,6 +126,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     @Resource
     private TaskMapper taskMapper;
     @Resource
+    private ReportAuditLogMapper reportAuditLogMapper;
+    @Resource
     private EarningSnapshotMapper earningSnapshotMapper;
     @Resource
     private ExpenseItemMapper expenseItemMapper;
@@ -1365,7 +1367,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     }
 
     private void deleteProData(Integer id) {
-        reportMapper.delete(new QueryWrapper<Report>().eq("project_id", id));
+        List<Report> rList = reportMapper.selectList(new QueryWrapper<Report>().select("id").eq("project_id", id));
+        if (rList.size() > 0) {
+            //删除日报的审核日志
+            reportAuditLogMapper.delete(new QueryWrapper<ReportAuditLog>().in("report_id", rList.stream().map(Report::getId).collect(Collectors.toList())));
+            reportMapper.delete(new QueryWrapper<Report>().eq("project_id", id));
+        }
+
         subProjectMapper.delete(new QueryWrapper<SubProject>().eq("project_id", id));
         participationMapper.delete(new QueryWrapper<Participation>().eq("project_id", id));
         taskMapper.delete(new QueryWrapper<Task>().eq("project_id", id));

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml

@@ -15,7 +15,7 @@ spring:
       location: C:/upload/
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://47.101.180.183:17089/man_hour_manager?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
+    url: jdbc:mysql://47.101.180.183:17089/man_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
     username: root
     password: P011430@Huoshi*
 

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml


+ 20 - 22
fhKeeper/formulahousekeeper/timesheet/src/views/settings/timetype.vue

@@ -326,27 +326,6 @@
             <el-switch style="margin-left: 40px" v-model="timeType.notAllowedExpiredProject" active-color="#20a0ff" > </el-switch>
             <span style="margin-left:10px;color:#999;">开启后超过项目计划结束日期的日报将不可填报</span>
         </div>
-        <!-- <p style="margin-left:10px;color:#666;" v-if="user.timeType.pushReportData == 1">推送工时设置</p>
-        <el-row :gutter="20" style="padding-top:10px;width:100%;margin:0 auto;padding-left:10px;padding-right:10px;" v-if="user.timeType.pushReportData == 1">
-            <el-col :span="24" >
-                <div class="panel" style="height:70px;color:#606266">
-                    <el-form :inline="true" style="margin-top:10px;">
-                    <el-form-item :label="'每月'">
-                        <el-select v-model="pushParam.day" style="width:80px">
-                            <el-option v-for="item in pushParam.dayList" :key="item" :label="item" :value="item">
-                            </el-option>
-                        </el-select>
-                        <span>日</span>
-                        <el-select v-model="pushParam.hour" style="width:80px;margin-left:20px">
-                            <el-option v-for="item in pushParam.hourList" :key="item" :label="item" :value="item">
-                            </el-option>
-                        </el-select>
-                        <span>时推送一次工时</span>
-                    </el-form-item>
-                    </el-form>
-                </div>
-            </el-col>
-        </el-row> -->
         <!-- 设置研究中心 -->
         <div class="yanjiu">
             <p style="margin-left:10px;color:#666;">{{ $t('dailyfilling') }}</p>
@@ -424,6 +403,14 @@
             </el-col>
         </el-row>
         <div class="yanjiu" v-if="user.company.packageProject==1">
+            <span style="margin:0px 0 10px 10px;color:#666;">填报日报是否隐藏阶段</span>
+            <el-switch style="margin:0px 0 10px 81px;" v-model="timeType.hideStages" active-color="#20a0ff"></el-switch>
+        </div>
+        <div class="yanjiu" v-if="user.company.packageProject==1">
+            <span style="margin:0px 0 10px 10px;color:#666;">填报日报是否隐藏任务</span>
+            <el-switch style="margin:0px 0 10px 81px;" v-model="timeType.hideTask" active-color="#20a0ff" @change="onHideTask()"></el-switch>
+        </div>
+        <div class="yanjiu" v-if="user.company.packageProject==1 && !timeType.hideTask">
             <span style="margin:0px 0 10px 10px;color:#666;">任务是否必填</span>
             <el-switch style="margin:0px 0 10px 81px;" v-model="timeType.taskRequired" active-color="#20a0ff"></el-switch>
             <span style="margin:0px 0 10px 10px;color:#999;">{{ $t('parametermandatory') }}</span>
@@ -693,6 +680,8 @@
                     includeWeekends: false,
                     workOvertimeNeedCheck: false,
                     maxReportTime: 8,
+                    hideStages: false,
+                    hideTask: false,
                 },
                 customDegreeActive: false,
                 needDeptAudit: false,
@@ -764,6 +753,12 @@
             }, 1000)
         },
          methods: {
+            onHideTask() {
+                if (this.timeType.hideTask) {
+                    //任务必填属性变为false
+                    this.timeType.taskRequired = false;
+                }
+            },
             onNonWorkDaySet() {
                 if (this.timeType.notAllowedOnNonWorkday) {
                     this.timeType.includeWeekends = false;
@@ -1338,7 +1333,8 @@
                         param.customDataMaxStatus = param.customDataMaxStatus && param.customDataActive ? 1 : 0
 
                         param.workContentState = param.workContentState ? 1 : 0
-
+                        param.hideStages = param.hideStages ? 1 : 0
+                        param.hideTask = param.hideTask ? 1 : 0
                         param.taskRequired = param.taskRequired ? 1 : 0
 
                         var oneseet = 0
@@ -1406,6 +1402,8 @@
                             this.timeType.stopReport = this.timeType.stopReport? true: false;
                             this.timeType.notAllowedOnNonWorkday = this.timeType.notAllowedOnNonWorkday? true: false;
                             this.timeType.notAllowedExpiredProject = this.timeType.notAllowedExpiredProject? true: false;
+                            this.timeType.hideStages = this.timeType.hideStages? true: false;
+                            this.timeType.hideTask = this.timeType.hideTask? true: false;
                             this.timeType.taskRequired = this.timeType.taskRequired? true: false;
                             // this.timeType.alertNonWorkday = this.timeType.alertNonWorkday ? true : false
 

+ 13 - 16
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -480,9 +480,9 @@
                             </div>
                         </el-form-item>
                     
-                        <el-form-item :label="user.companyId==781? $t('screening.workTasks') : $t('screening.inputProject')" :prop="'domains.' + index + '.projectId'"
-                            :rules="{ required: true, message: user.companyId==781? $t('defaultText.pleaseSelectaJob'): $t('defaultText.pleaseSelectSnItem'), trigger: ['change','blur'] }">
-                            <el-select v-model="domain.projectId" :placeholder="user.companyId==781?$t('defaultText.pleaseSelectaJob'): $t('defaultText.pleaseSelectSnItem')" style="width:200px;" clearable="true"  filterable="true" value-key="id"
+                        <el-form-item :label="$t('screening.inputProject')" :prop="'domains.' + index + '.projectId'"
+                            :rules="{ required: true, message: $t('defaultText.pleaseSelectSnItem'), trigger: ['change','blur'] }">
+                            <el-select v-model="domain.projectId" :placeholder="$t('defaultText.pleaseSelectSnItem')" style="width:200px;" clearable="true"  filterable="true" value-key="id"
                             @change="selectProject(domain, index)"
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" popper-class="projectSelectPopperClass">
                                 <el-option-group v-for="group in integrationProjectList" :key="group.label" :label="group.label">
@@ -523,7 +523,7 @@
                             <!-- <el-link type="primary" v-if="canEdit"
                                 :underline="false" style="margin-left:10px;" @click="copyProject(index)">复制</el-link> -->
                         </el-form-item>
-                        <el-form-item :label="user.companyId==781? $t('other.describe'):$t('other.projectDescription')" v-if="user.company.packageProject==0&&domain.projectId&&fillProjectList.filter(p=>p.id == domain.projectId).length>0&&fillProjectList.filter(p=>p.id == domain.projectId)[0].projectDesc">
+                        <el-form-item :label="$t('other.projectDescription')" v-if="user.company.packageProject==0&&domain.projectId&&fillProjectList.filter(p=>p.id == domain.projectId).length>0&&fillProjectList.filter(p=>p.id == domain.projectId)[0].projectDesc">
                             <span>{{fillProjectList.filter(p=>p.id == domain.projectId)[0].projectDesc}}</span>
                         </el-form-item>
                         <!--如果设置了工时成本预警的预算成本项-->
@@ -554,7 +554,7 @@
                                     </el-option>
                                 </el-select>
                             </template>
-                            <template v-else><!-- 项目的阶段 -->
+                            <template v-else-if="!user.timeType.hideStages"><!-- 项目的阶段 -->
                                 <span v-if="domain.stages != null && domain.stages.length> 0" style="margin-left:45px;">{{$t('other.inputStage')}}</span>
                                 <el-select v-model="domain.stage" :placeholder="$t('defaultText.pleaseChoose')" style="width:200px;margin-left:10px;" 
                                 clearable="true" v-if="domain.stages != null && domain.stages.length> 0"
@@ -568,7 +568,7 @@
                             <el-form-item v-if="user.timeType.reportAuditType != 3 && user.timeType.reportAuditType != 5 && domain.auditUserList.length > 0">
                                 <template slot="label">
                                     <span style="color:#FF0000;">*</span>
-                                    <span >{{user.companyId==781? $t('other.reviewer') : $t('other.projectAuditor')}}</span>
+                                    <span >{{$t('other.projectAuditor')}}</span>
                                 </template>
                                 
                                 <el-select v-model="domain.projectAuditorId" :disabled="!domain.canEdit" @change="$forceUpdate()" v-if="user.userNameNeedTranslate != '1'" style="width:200px;">
@@ -676,7 +676,7 @@
                             </span>
                         </el-form-item>
                         <!--项目管理专业版模式下,项目下的近期执行的任务 -->
-                        <el-form-item :label="$t('other.task')+' / '+$t('other.milestone')" :prop="'domains.' + index + '.taskId'" v-if="user.company.packageProject==1&& (user.company.nonProjectSimple==0 || (user.company.nonProjectSimple==1&&domain.isPublic!=1))" >
+                        <el-form-item :label="$t('other.task')+' / '+$t('other.milestone')" :prop="'domains.' + index + '.taskId'" v-if="user.company.packageProject==1&& !user.timeType.hideTask && (user.company.nonProjectSimple==0 || (user.company.nonProjectSimple==1&&domain.isPublic!=1))" >
                             <template slot="label" v-if="user.timeType.taskRequired == 1">
                                 <span style="color:#FF0000;">*</span>
                                 <span >任务</span>
@@ -696,8 +696,8 @@
                             </el-select>
                         </el-form-item>
                         <!--工作事项-->
-                        <el-form-item :label="user.companyId==781? $t('other.specificContentAndResults') : $t('other.workMatters') " :prop="'domains.' + index + '.content'" 
-                        :rules="user.timeType.workContentState == 1 ? { required: true, message: user.companyId==781? $t('other.tianspecificContentAndResults'):$t('other.tianworkMatters'), trigger: 'blur' } : null">
+                        <el-form-item :label="$t('other.workMatters') " :prop="'domains.' + index + '.content'" 
+                        :rules="user.timeType.workContentState == 1 ? { required: true, message: $t('other.tianworkMatters'), trigger: 'blur' } : null">
                             <el-input v-model="domain.content" type="textarea" :rows="4" :placeholder="$t('defaultText.pleaseFillOut')" clearable style="width:75%;margin-right:7%"
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)"></el-input>
                         </el-form-item>
@@ -763,7 +763,7 @@
                                 <!-- <el-link type="primary" v-if="canEdit"
                                     :underline="false" style="margin-left:10px;" @click="copyProject(index)">复制</el-link> -->
                             </el-form-item>
-                            <el-form-item :label="user.companyId==781?$t('other.describe'):$t('other.projectDescription')" v-if="user.company.packageProject==0&&domain.projectId&&fillProjectList.filter(p=>p.id == domain.projectId).length>0&&fillProjectList.filter(p=>p.id == domain.projectId)[0].projectDesc">
+                            <el-form-item :label="$t('other.projectDescription')" v-if="user.company.packageProject==0&&domain.projectId&&fillProjectList.filter(p=>p.id == domain.projectId).length>0&&fillProjectList.filter(p=>p.id == domain.projectId)[0].projectDesc">
                                 <span>{{fillProjectList.filter(p=>p.id == domain.projectId)[0].projectDesc}}</span>
                             </el-form-item>
                             <!--如果设置了工时成本预警的预算成本项-->
@@ -1049,7 +1049,7 @@
                         <el-option v-for="item in zhoBao.taskGroups" :key="item.id" :label="item.name" :value="item.id"></el-option>
                     </el-select>
                 </div>
-                <div class="zhoFel" v-if="user.company.packageProject == 1 && zhoBao.stages != null && zhoBao.stages.length> 0">
+                <div class="zhoFel" v-if="user.company.packageProject == 1 && !user.timeType.hideStages && zhoBao.stages != null && zhoBao.stages.length> 0">
                     <p>{{$t('other.inputStage')}}</p>
                     <el-select v-model="zhoBao.stage" :placeholder="$t('defaultText.pleaseChoose')" style="width: 355px" clearable="true" @change="getWeeklyTaskList(zhoBao)">
                             <el-option v-for="item in zhoBao.stages" :key="item.id" :label="item.stagesName" :value="item.stagesName"></el-option>
@@ -1117,7 +1117,7 @@
                     <el-input v-model="zhoBao.customText" type="textarea" :rows="1" style="width:355px;" maxlength="1000" show-word-limit></el-input>
                 </div>
                 <!-- 选择任务 -->
-                <div class="zhoFel" v-if="user.company.packageProject==1 && user.company.nonProjectSimple==0">
+                <div class="zhoFel" v-if="user.company.packageProject==1 && !user.timeType.hideTask && user.company.nonProjectSimple==0">
                     <p>任务 / 里程碑</p>
                     <el-select v-model="zhoBao.taskId" :placeholder="'请选择'" clearable="true" style="width: 355px" filterable @change="$forceUpdate()">
                         <el-option v-for="item in zhoBao.taskList" :key="item.taskId" :label="item.taskName" :value="item.taskId"></el-option>
@@ -1160,11 +1160,8 @@
                     </el-select>
                 </el-form-item>
                 <el-form-item prop="departmentId" :label="$t('other.selectdepartment')" v-if="permissions.reportsCompany">
-
                     <el-cascader v-if="user.userNameNeedTranslate != 1" v-model="exportParam.departmentId" :placeholder="$t('other.allDepartments')" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 350px;"></el-cascader>
-
                     <vueCascader :size="'medium'" :widthStr="'350'" :clearable="true" :subjectId="exportParam.departmentId" :subject="option" :radios="true" :distinction="'1'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" :selectNameChuan="$t('other.allDepartments')"></vueCascader>
-
                 </el-form-item>
                 <el-form-item prop="projectId" :label="$t('time.dateRange')">
                     <el-date-picker
@@ -6089,7 +6086,7 @@
                     errtips += this.user.timeType.customTextName + '、'
                 }
                 if(this.user.timeType.workContentState == 1 && !this.zhoBao.content){
-                    errtips +=  this.user.companyId==781?this.$t('other.specificcontentandresults')+'、': this.$t('other.workMatters') +'、'
+                    errtips +=  this.$t('other.workMatters') +'、'
                 }
                 if(errtips){
                     errtips = errtips.substring(0,errtips.length - 1)

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -130,7 +130,7 @@
                     </van-popup>
                     <!--任务阶段 -->
                     <van-field readonly name="stage"
-                        v-if="user.companyId != yuzhongCompId && user.company.packageProject == 1 && item.stages != null && item.stages.length > 0"
+                        v-if="user.companyId != yuzhongCompId && user.company.packageProject == 1 && !user.timeType.hideStages && item.stages != null && item.stages.length > 0"
                         clickable :value="item.stage" label="投入阶段" placeholder="请选择投入阶段"
                         @click="clickPickStage(index, item)" />
                     <van-popup v-model="item.showPickerStage" position="bottom">
@@ -277,7 +277,7 @@
                             <van-stepper v-model="pItem.progress" integer min="0" max="100" />%
                         </template>
                     </van-field>
-                    <van-field v-if="user.company.packageProject == 1" readonly name="taskId" :value="item.taskName"
+                    <van-field v-if="user.company.packageProject == 1 && !user.timeType.hideTask && (user.company.nonProjectSimple==0 || (user.company.nonProjectSimple==1&&domain.isPublic!=1))" readonly name="taskId" :value="item.taskName"
                         :rules="[{ required: reportTimeType.taskRequired? true : false, message: '请选择任务/里程碑' }]" label="任务/里程碑"
                         placeholder="请选择任务/里程碑" @click="clickPickerTask(index, item)"></van-field>
                     <van-field v-if="user.companyId == 3092" readonly name="sapServiceId" :value="item.sapServiceName"

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue

@@ -93,7 +93,7 @@
                             </div>
                         </van-popup>
                         <!--任务阶段 -->
-                        <van-field  readonly  name="stage" v-if="user.company.packageProject==1&&item.stages != null && item.stages.length > 0 && user.timeType.enableNewWeeklyfill != 1" clickable 
+                        <van-field  readonly  name="stage" v-if="user.company.packageProject==1 && !user.timeType.hideStages &&item.stages != null && item.stages.length > 0 && user.timeType.enableNewWeeklyfill != 1" clickable 
                             :value="item.stage" label="投入阶段" placeholder="请选择投入阶段"  :disabled="item.state<=1"
                         @click="clickPickStage(index, item)" />
                         <van-popup v-model="item.showPickerStage" position="bottom">
@@ -204,7 +204,7 @@
 
                         <!-- 任务里程碑 -->
                         <van-field :label="'任务/里程碑'" :value="item.taskName" :disabled="item.state<=1" readonly 
-                            clickable v-if="user.company.packageProject == 1 && user.company.nonProjectSimple==0" 
+                            clickable v-if="user.company.packageProject == 1 && !user.timeType.hideStages && (user.company.nonProjectSimple==0 || (user.company.nonProjectSimple==1&&domain.isPublic!=1))" 
                             @click="clickTakKer(index, item)"
                         />
                         <van-popup v-model="item.showTaksDegree" position="bottom" @click-overlay="overlayPopup(index, 'showTaksDegree')">