Browse Source

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

Min 2 years ago
parent
commit
3df4ca54ec
21 changed files with 884 additions and 774 deletions
  1. 1 1
      fhKeeper/formulahousekeeper/inva_4_tivo/index.html
  2. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectDocumentTemplateController.java
  3. 37 78
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  4. 4 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/UserMapper.java
  5. 3 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  6. 27 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  7. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ExpenseItemMapper.xml
  8. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json
  9. 5 2
      fhKeeper/formulahousekeeper/timesheet/src/views/Register.vue
  10. 8 1
      fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue
  11. 10 11
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  12. 5 4
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue
  13. 4 2
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list.vue
  14. BIN
      fhKeeper/formulahousekeeper/timesheet_h5/src/assets/img/null.png
  15. 2 2
      fhKeeper/formulahousekeeper/timesheet_h5/src/main.js
  16. 33 18
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/expense/details.vue
  17. 488 448
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/expense/index.vue
  18. 6 7
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/index/index.vue
  19. 3 0
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/login/index.vue
  20. 243 195
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/view/index.vue
  21. 2 1
      fhKeeper/formulahousekeeper/timesheet_h5/vue.config.js

+ 1 - 1
fhKeeper/formulahousekeeper/inva_4_tivo/index.html

@@ -772,7 +772,7 @@
         function check(){
             let str = window.location.href
             if(str.indexOf('360') > 1) {
-                $('#tilA').attr('href', 'http://worktime.ttkuaiban.com/#/register?form=360')
+                $('#tilA').attr('href', 'http://worktime.ttkuaiban.com/#/register?from=360')
             } else {
                 $('#tilA').attr('href', 'http://worktime.ttkuaiban.com/#/register')
             }

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectDocumentTemplateController.java

@@ -64,6 +64,7 @@ public class ProjectDocumentTemplateController {
             dl.setProDocumentTemDetailList(rootDirectory);
         });
         httpRespMsg.setData(documentTemplateList);
+        System.out.println(documentTemplateList);
         return httpRespMsg;
     }
 

+ 37 - 78
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -907,71 +907,6 @@ public class ReportController {
             }
         }
 
-/*        if(company.getId()==862){
-            Collection<Integer> projectIds = reportList.stream().map(Report::getProjectId).distinct().collect(Collectors.toList());
-            List<Project> targetProjectList = projectList.stream().filter(pl -> projectIds.contains(pl.getId())).collect(Collectors.toList());
-            String creatorId = reportList.get(0).getCreatorId();
-            User reportUser = userMapper.selectById(creatorId);
-            DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
-            LocalDateTime time = LocalDateTime.now();
-            String format = time.format(df);
-            String tokenOfYiWei = getTokenOfYiWei();
-            String url = "http://183.194.0.98:3202/api/web-server/controlCenter/billApply";
-            HttpHeaders headers = new HttpHeaders();
-            headers.setContentType(MediaType.APPLICATION_JSON);
-            headers.add("token",tokenOfYiWei);
-            headers.add("Accept-Language","zh-CN");
-            JSONObject body=new JSONObject();
-            body.put("dataSource","工时管家");
-            body.put("type","EXPENSE");
-            body.put("applicant",reportUser.getName());
-            body.put("applyTime",format);
-            body.put("billNo","GS"+ reportUser.getId()+reportList.get(0).getCreateDate());
-            JSONArray expenseDetails=new JSONArray();
-            for (Report report : reportList) {
-                Optional<Project> first = targetProjectList.stream().filter(tl -> tl.getId().equals(report.getProjectId())).findFirst();
-                if(first.isPresent()){
-                    JSONObject expenseDetail =new JSONObject();
-                    expenseDetail.put("company","FONE");
-                    expenseDetail.put("department","DEFAULT");
-                    expenseDetail.put("project",first.get().getProjectCode());
-                    expenseDetail.put("expenseItem","DEFAULT");
-                    expenseDetail.put("amount",report.getWorkingTime());
-                    expenseDetails.add(expenseDetail);
-                }
-
-            }
-            body.put("expenseDetails",expenseDetails);
-            HttpEntity<String> requestEntity = new HttpEntity<String>(body.toJSONString(), headers);
-            ResponseEntity<String> responseEntity = this.restTemplate.exchange(url,
-                    HttpMethod.POST, requestEntity, String.class);
-            if (responseEntity.getStatusCode() == HttpStatus.OK) {
-                String resp = responseEntity.getBody();
-                JSONObject json = JSONObject.parseObject(resp);
-                if(json.getIntValue("status")==0){
-                    JSONArray data = json.getJSONArray("data");
-                    JSONObject jsonObject = data.getJSONObject(0);
-                    Integer availableBudgetAmount = jsonObject.getInteger("availableBudgetAmount");
-                    Integer occurredBudgetAmount = jsonObject.getInteger("occurredBudgetAmount");
-                    BigDecimal divide = new BigDecimal(occurredBudgetAmount).add(new BigDecimal(jsonObject.getInteger("amount"))).divide(new BigDecimal(availableBudgetAmount), 3, RoundingMode.HALF_UP);
-                    if(divide.doubleValue()>0.85){
-                        HttpRespMsg httpRespMsg=new HttpRespMsg();
-                        httpRespMsg.setError("当前预算占用已到85%");
-                    }
-                } else if(json.getIntValue("status")==14001){
-                    HttpRespMsg httpRespMsg=new HttpRespMsg();
-                    httpRespMsg.setError("当前项目预算不足,无法填报");
-                    return httpRespMsg;
-                }else if(json.getIntValue("status")==14002){
-                    HttpRespMsg httpRespMsg=new HttpRespMsg();
-                    httpRespMsg.setError("未找到预算控制单元:"+json.getString("message"));
-                    return httpRespMsg;
-                }
-            }
-        }*/
-
-
-
         //如果锁定工作时长上限的话,需要校验每日的合计工作时长
         if (comTimeType.getLockWorktime() == 1) {
             for (Report report : reportList) {
@@ -1067,22 +1002,46 @@ public class ReportController {
 
         if(comTimeType.getReportAuditType()==5){
             List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id",user.getCompanyId()));
+            List<User> tempAuditorUserList = new ArrayList<>();
+            List<String> creatorIdList = reportList.stream().map(Report::getCreatorId).collect(Collectors.toList());
+            List<User> creatorList = userMapper.selectList(new QueryWrapper<User>().in("id", creatorIdList));
+            //查询creatorList的直属审核人
+            for (User creator : creatorList) {
+                if (!StringUtils.isEmpty(creator.getSuperiorId())) {
+                    User superior = userMapper.selectById(creator.getSuperiorId());
+                    if (!tempAuditorUserList.stream().anyMatch(item -> item.getId().equals(superior.getId()))) {
+                        tempAuditorUserList.add(superior);
+                    }
+                }
+            }
             for (Report report : reportList) {
                 report.setDepartmentAuditState(0);
-                Optional<Department> first = departmentList.stream().filter(dl -> dl.getDepartmentId().equals(report.getDeptId())).findFirst();
-                if(first.isPresent()){
-                    if(StringUtils.isEmpty(first.get().getManagerId())){
-                        HttpRespMsg httpRespMsg=new HttpRespMsg();
-                        httpRespMsg.setError("当前所在部门["+first.get().getDepartmentName()+"]不存在负责人,请联系管理员设置");
-                        return httpRespMsg;
-                    }
-                    report.setAuditDeptid(first.get().getDepartmentId());
-                    report.setProjectAuditorId(null);
+                //优先按照当前日报填写人的直属审核人审核
+                User reportOwner = creatorList.stream().filter(c->c.getId().equals(report.getCreatorId())).findFirst().get();
+                if (!StringUtils.isEmpty(reportOwner.getSuperiorId())) {
+                    User auditor = tempAuditorUserList.stream().filter(t -> t.getId().equals(reportOwner.getSuperiorId())).findFirst().get();
+                    report.setProjectAuditorId(auditor.getId());
+                    report.setProjectAuditorName(auditor.getName());
                     report.setProjectAuditState(0);
-                    report.setAuditDeptManagerid(first.get().getManagerId());
-                    report.setIsDeptAudit(1);
-                    if(report.getCreatorId().equals(first.get().getManagerId())){
-                        report.setState(0);
+                    if (report.getCreatorId().equals(auditor.getId())) {
+                        report.setState(1);
+                    }
+                } else {
+                    Optional<Department> first = departmentList.stream().filter(dl -> dl.getDepartmentId().equals(report.getDeptId())).findFirst();
+                    if(first.isPresent()){
+                        if(StringUtils.isEmpty(first.get().getManagerId())){
+                            HttpRespMsg httpRespMsg=new HttpRespMsg();
+                            httpRespMsg.setError("当前所在部门["+first.get().getDepartmentName()+"]不存在负责人,请联系管理员设置");
+                            return httpRespMsg;
+                        }
+                        report.setAuditDeptid(first.get().getDepartmentId());
+                        report.setProjectAuditorId(null);
+                        report.setProjectAuditState(0);
+                        report.setAuditDeptManagerid(first.get().getManagerId());
+                        report.setIsDeptAudit(1);
+                        if(report.getCreatorId().equals(first.get().getManagerId())){
+                            report.setState(1);
+                        }
                     }
                 }
             }

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/UserMapper.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.management.platform.entity.User;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
 
 import java.util.List;
 import java.util.Map;
@@ -36,4 +37,7 @@ public interface UserMapper extends BaseMapper<User> {
     List<Map<String, Object>> getSimpleNameList(@Param(Constants.WRAPPER) QueryWrapper<User> queryWrapper);
 
     List<User> getUserWithDept(@Param(Constants.WRAPPER) QueryWrapper<User> queryWrapper);
+
+    @Update("update user set superior_id = null where id = #{userId}")
+    void setSuperiorNull(String userId);
 }

+ 3 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -2209,6 +2209,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 List<Integer> collect = sheetList.stream().map(ExpenseSheet::getId).distinct().collect(Collectors.toList());
                 collect.add(-1);
                 double sum = expenseItemList.stream().filter(el -> collect.contains(el.getExpenseId())&&el.getProjectId()!=null&&el.getProjectId().equals(map.get("id"))).mapToDouble(el -> el.getAmount()==null?0:el.getAmount()).sum();
+                sum = Double.parseDouble(df.format(sum));
                 item.put("amount",sum);
                 itemList.add(item);
                 map.put(expenseMainType.getName(),sum);
@@ -2285,6 +2286,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 List<Integer> collect = sheetList.stream().map(ExpenseSheet::getId).distinct().collect(Collectors.toList());
                 collect.add(-1);
                 double sum = expenseItemList.stream().filter(el -> collect.contains(el.getExpenseId())&&el.getProjectId()!=null&&el.getProjectId().equals(item.get("id"))).mapToDouble(el -> el.getAmount()==null?0:el.getAmount()).sum();
+                sum = Double.parseDouble(df.format(sum));
                 it.put("amount",sum);
                 data.add(String.valueOf(sum));
                 bigDecimal=bigDecimal.add(new BigDecimal(sum));
@@ -7348,8 +7350,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         Integer integer = array.get(0);
         //校验项目归属
         Integer companyId = projectMapper.selectById(integer).getCompanyId();
-        if (companyId.intValue() != user.getCompanyId().intValue()) {
-            //httpRespMsg.setError("无权操作");
+        if (companyId.intValue() != user.getCompanyId().intValue() || !user.getRoleName().equals("超级管理员")) {
             httpRespMsg.setError(MessageUtils.message("access.operationError"));
         } else {
             for (Integer id : array) {

+ 27 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -1336,6 +1336,13 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 if(inductionDate!=null&&inductionDate!=""){
                     oldUser.setInductionDate(LocalDate.parse(inductionDate,dtf));
                 }
+                //检查直属审核人是否发生变化
+                boolean superiorChange = false;
+                String oldSuperiorId = oldUser.getSuperiorId();
+                if (!StringUtils.isEmpty(oldSuperiorId) && !StringUtils.isEmpty(superiorId) && !oldUser.getSuperiorId().equals(superiorId)) {
+                    superiorChange = true;
+                }
+
                 userMapper.updateById(oldUser
                         .setName(name)
                         .setPhone(phone)
@@ -1357,11 +1364,31 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                         .setPlate4(plate4)
                         .setPlate5(plate5)
                         .setJobNumber(jobNumber));
+                if (oldSuperiorId != null && superiorId == null) {
+                    //清空直属审核人
+                    userMapper.setSuperiorNull(oldUser.getId());
+                }
 
                 if (salaryChange) {
                     UserSalary userSalary = UserSalary.copyFromUser(oldUser);
                     userSalaryMapper.insert(userSalary);
                 }
+                if (superiorChange) {
+                    //检查是否有审核中的日报
+                    if (timeTypeMapper.selectById(oldUser.getCompanyId()).getReportAuditType() == 5) {
+                        QueryWrapper<Report> queryWrapper = new QueryWrapper<>();
+                        queryWrapper.eq("company_id", oldUser.getCompanyId())
+                                .eq("creator_id", oldUser.getId())
+                                .eq("state", 0)
+                                .eq("project_auditor_id", oldSuperiorId);
+                        Integer count = reportMapper.selectCount(queryWrapper);
+                        if (count > 0) {
+                            //更新日报审核人为新的superiorId
+                            Report updateReport = new Report().setProjectAuditorId(superiorId).setProjectAuditorName(userMapper.selectById(superiorId).getName());
+                            reportMapper.update(updateReport, queryWrapper);
+                        }
+                    }
+                }
                 //更新人员专业证书表
                 List<UserCert> oldCertList = userCertMapper.selectList(new QueryWrapper<UserCert>().eq("user_id", targetId));
                 List<Integer> removeCertList = new ArrayList<>();

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ExpenseItemMapper.xml

@@ -46,7 +46,7 @@
         from expense_item a left join expense_sheet b on a.expense_id = b.id
         left join user on user.id = b.owner_id
         left join department on department.department_id = user.department_id
-        where a.project_id = #{projectId}
+        where a.project_id = #{projectId} order by a.happen_date desc
     </select>
 
     <select id="selectExpenseByProject" resultType="java.lang.Double">

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json

@@ -1024,7 +1024,7 @@
   "modifyworkinghours": "修改工作时长",
   "yuechengbenxiaoshi": "请输入成本 单位:元/小时",
   "effectivedate": "生效日期",
-  "immediatesuperior": "直属上级",
+  "immediatesuperior": "直属审核人",
   "entrytime": "入职时间",
   "postrank": "岗位职级",
   "joblevel": "请输入岗位职级别",

+ 5 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/Register.vue

@@ -139,8 +139,11 @@
                             return;
                         }
                         let formObj = this.ruleForm
-                        if(window.location.href.indexOf('360') > 1) {
-                            formObj.from = '360'
+                        if(this.$route.query != {}) {
+                            formObj = {
+                                ...this.$route.query,
+                                ...formObj
+                            }
                         }
                         var _this = this;
                         this.logining = true;

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

@@ -978,7 +978,7 @@
                 <el-table-column prop="expenseType" :label="$t('costtype')"></el-table-column>
                 <el-table-column prop="invoiceType" :label="$t('ppertype')">
                   <template slot-scope="scope">
-                    {{scope.row.invoiceType == 0 ? '增值税专用发票' : '增值税普通发票'}}
+                    {{scope.row.invoiceType == null?'':(scope.row.invoiceType == 0 ? '增值税专用发票' : '增值税普通发票')}}
                   </template>
                 </el-table-column>
                 <el-table-column prop="amount" :label="$t('amountof')+'('+ $t('tax') +')'"   align="right">
@@ -996,6 +996,13 @@
                         {{(scope.row.amount-scope.row.taxValue).toFixed(2)}}
                     </template>
                 </el-table-column>
+                <el-table-column prop="remark" label="备注"   align="right">
+                  <template slot-scope="scope">
+                    <el-tooltip popper-class="tipclass" :content=scope.row.remark placement="top-start">
+                      <div class="cloStyleFour">{{scope.row.remark==null?"":scope.row.remark.length > 6?scope.row.remark.substring(0,5) + "...": scope.row.remark}}</div>
+                    </el-tooltip>
+                    </template>
+                </el-table-column>
                 <!-- <el-table-column prop="pic" label="凭证"  >
                   <template slot-scope="scope">
                         <span v-if="scope.row.pic">

+ 10 - 11
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -396,7 +396,7 @@
             <template v-if="(showColumnWidth != '0' || permissions.projectManagement)">
                 <el-button size="small" type="primary" @click="addProPreson()">{{ $t('projectparticipantsinbatches') }}</el-button>
                 <el-button size="small" type="primary" v-if="permissions.projectManagement" @click="batchIncharger()">{{ $t('projectmanagersinbatches') }}</el-button>
-                <!-- <el-button size="small" type="primary" @click="batchDelete()">批量删除</el-button> -->
+                <el-button size="small" type="primary" v-if="user.roleName='超级管理员'" @click="batchDelete()" :loading="isDeleting">批量删除</el-button>
             </template>
             
             <el-pagination
@@ -819,11 +819,6 @@
         <!-- 子项目列表 -->
         <el-dialog :title="$t('listofsubitems')" show-header="false" v-if="subProjectVisible" :visible.sync="subProjectVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <el-table :data="subProjectList" highlight-current-row  height="400" style="width: 100%;">
-            <!-- <el-table-column type="index" width="60" label="序号">
-                <template slot-scope="scope" >
-                        {{scope.$index+1+(page-1)*size}}
-                    </template>
-            </el-table-column> -->
             <el-table-column width="120" :label="$t('subprojectno')" prop="code"></el-table-column>
             <el-table-column prop="name" :label="$t('names')" ></el-table-column>
             <el-table-column :label="$t('operation')" width="220">
@@ -1392,6 +1387,7 @@ a {
         },
         data() {
             return {
+                isDeleting: false,
                 forSubProjectlist:[],
                 copySubPListVisible: false,
                 projectManagerEdit: false,
@@ -2316,10 +2312,12 @@ a {
                     proArr.push(this.checkedProjectArr[i].id)
                     // proArr += this.checkedProjectArr[i].id + ','
                 }
+                this.isDeleting = true;
                 // proArr = proArr.substring(0,proArr.length - 1)
                 this.http.post('/project/batchDeleteProject',{
                     projectIdArray: JSON.stringify(proArr)
                 },res => {
+                    this.isDeleting = false;
                     if(res.code == 'ok'){
                         this.$message({
                             message: this.$t('message.successfullyDeleted'),
@@ -3646,8 +3644,9 @@ a {
                 if (subProject == null) {
                     this.temaddForm = {projectId: this.currentProject.id, level:1}
                 } else {
-                    subProject.status=subProject.status==true?1:0
-                    this.temaddForm = JSON.parse(JSON.stringify(subProject));
+                    let aac = JSON.parse(JSON.stringify(subProject))
+                    aac.status=aac.status==true?1:0
+                    this.temaddForm = JSON.parse(JSON.stringify(aac));
                 }
                 this.addSubProject = true;
             },
@@ -3660,10 +3659,10 @@ a {
                 },
                 res => {
                     if (res.code == "ok") {
-                        this.subProjectList = res.data;
-                        for(let i = 0; i < this.subProjectList.length; i++){
-                            this.subProjectList[i].status=this.subProjectList[i].status==1?true:false
+                        for(let i = 0; i < res.data.length; i++){
+                            res.data[i].status=res.data[i].status==1?true:false
                         }
+                        this.subProjectList = res.data
                     } else {
                         this.$message({
                         message: res.msg,

+ 5 - 4
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -384,7 +384,7 @@
         <!-- 新增/编辑人员的Dialog -->
         <el-dialog :title="title" :visible.sync="dialogVisible" width="580px" :top="'7.5vh'">
             <div style="height: 62vh;overflow: auto;">
-              <el-form ref="form12" :model="insertForm" :rules="rules" label-width="80px">
+              <el-form ref="form12" :model="insertForm" :rules="rules" label-width="90px">
                   <el-form-item :label="$t('lable.name')" prop="name" v-if="user.userNameNeedTranslate != '1'">
                       <el-input v-model="insertForm.name" :placeholder="$t('peaseenterthe')" clearable :disabled="user.userNameNeedTranslate == '1'"></el-input>
                   </el-form-item>
@@ -423,14 +423,15 @@
                       <vueCascader :size="'medium'" :widthStr="'430'" :clearable="true && user.userNameNeedTranslate != 1" :subject="option" :subjectId="insertForm.departmentId" :radios="true" :distinction="'2'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" :disabled="user.userNameNeedTranslate == 1"></vueCascader>
 
                   </el-form-item>
-                  <!-- <el-form-item :label="$t('immediatesuperior')">
-                      <el-select v-model="insertForm.superiorId" :placeholder="$t('defaultText.pleaseChoose')" style="width: 100%" filterable clearable>
+                  <el-form-item :label="$t('immediatesuperior')" v-if="user.timeType.reportAuditType == 5">
+                      <el-select v-model="insertForm.superiorId" :placeholder="$t('defaultText.pleaseChoose')" style="width: 100%" filterable clearable v-if="user.userNameNeedTranslate != 1">
                           <el-option v-for="item in users" :label="item.name" :value="item.id" :key="item.id" :disabled="item.id == insertForm.id">
                               <span style="float: left">{{item.name}}</span>
                               <span style="float: right; color: #8492a6; font-size: 13px">{{item.departmentName}}</span>
                           </el-option>
                       </el-select>
-                  </el-form-item> -->
+                      <selectCat :size="'medium'" :widthStr="'360'" v-if="user.userNameNeedTranslate == '1'" :subject="users" :subjectId="depForm.managerId" :distinction="'3'" @selectCal="selectCal"></selectCat>
+                  </el-form-item>
                   <el-form-item :label="$t('jiao-se')" prop="roleId" v-if="roleNameFlg != $t('role.superAdministrator')">
                       <el-select v-model="insertForm.roleId" :placeholder="$t('defaultText.pleaseChoose')" style="width: 100%">
                           <el-option v-for="item in acquireRoleList" :label="item.rolename" :value="item.id" :key="item.name">

+ 4 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/list.vue

@@ -120,7 +120,7 @@
                                         <el-tooltip v-if="progressItem.auditState == 2" :content="$t('state.notThrough')" effect="light" placement="top">
                                         <i  class="iconfont firerock-iconshenhebohui"></i>
                                         </el-tooltip>
-                                        </span>
+                                        </span> 
                                 </p>
                                 <p v-if="item.taskId != null">{{$t('other.task')}}:{{item.taskName}}</p>
                                 <p v-if="item.groupId">
@@ -128,7 +128,9 @@
                                     <!-- 阶段 -->
                                     <span v-if="item.stage != null" style="margin-left:10px;"> {{$t('other.inputStage')}}:{{item.stage}}</span>
                                 </p>
-                                <p><span v-if="item.multiWorktime==1">{{ $t('other.project') }}</span>{{$t('time.duration')}}:{{item.time.toFixed(1)}}h <span class="propsbtn" v-if="item.isOvertime === 1">
+                                <p><span v-if="item.multiWorktime==1">{{ $t('other.project') }}</span>{{$t('time.duration')}}:
+                                    <span v-if="item.startTime">{{ item.startTime + '-' + item.endTime }}</span>
+                                    {{item.time.toFixed(1)}}h <span class="propsbtn" v-if="item.isOvertime === 1">
                                     <el-tag type="danger" size="mini" style="margin-left: 65px">{{ $t('other.WorkOvertime') }}<span v-if="item.overtimeHours">{{item.overtimeHours.toFixed(1)}}{{$t('time.hour')}}</span></el-tag></span>
                                 </p>
                                 <div v-if="item.multiWorktime==0">

BIN
fhKeeper/formulahousekeeper/timesheet_h5/src/assets/img/null.png


+ 2 - 2
fhKeeper/formulahousekeeper/timesheet_h5/src/main.js

@@ -19,14 +19,14 @@ Picker , Dialog , NumberKeyboard , Sticky , Skeleton ,
 Panel , Divider , List , pullRefresh , SwipeCell, Checkbox, 
 Search, Slider,Stepper,Tag, Calendar, Row, Col, RadioGroup, Radio, 
 Loading ,DropdownMenu, DropdownItem, Button, ActionSheet, PullRefresh,Tabbar,
-TabbarItem,Uploader,Collapse, CollapseItem} from 'vant';
+TabbarItem,Uploader,Collapse, CollapseItem,Empty} from 'vant';
 
 Vue.use(Form).use(Toast).use(Grid).use(GridItem).use(DatetimePicker)
 .use(Picker).use(Dialog).use(NumberKeyboard).use(Sticky).use(Skeleton)
 .use(Panel).use(Divider).use(List).use(pullRefresh).use(SwipeCell)
 .use(Checkbox).use(Search).use(Slider).use(Stepper).use(Tag).use(Calendar).use(RadioGroup).use(Radio)
 .use(Row).use(Col).use(Loading).use(DropdownMenu).use(DropdownItem).use(Button).use(ActionSheet)
-.use(PullRefresh).use(Tabbar).use(TabbarItem).use(Popover).use(Uploader).use(Collapse).use(CollapseItem);
+.use(PullRefresh).use(Tabbar).use(TabbarItem).use(Popover).use(Uploader).use(Collapse).use(CollapseItem).use(Empty);
 
 // rem
 import "amfe-flexible";

+ 33 - 18
fhKeeper/formulahousekeeper/timesheet_h5/src/views/expense/details.vue

@@ -57,26 +57,16 @@
                 </template>
             </van-field>
             <!-- 费用类型 -->
-            <van-field
-                v-model="editForm.type"
-                label="费用类型"
-                @click="typeShow = true"
-                readonly
-                clickable
-            >
-                <template #input>{{ typeList[editForm.type] }}</template>
-            </van-field>
-            <van-popup v-model="typeShow" position="bottom" v-if="canEdit">
-                <van-picker
+            <van-field v-model="editForm.type" label="费用主类型" @click="typeShow = true" readonly clickable>
+                    <template #input>{{expenseMainType.text}}</template>
+                </van-field>
+                <van-popup v-model="typeShow" position="bottom" v-if="canEdit">
+                    <van-picker
                     show-toolbar
                     :columns="typeList"
                     @confirm="typeChange"
-                    @cancel="
-                        typeShow = false;
-                        $forceUpdate();
-                    "
-                />
-            </van-popup>
+                    @cancel="typeShow = false;$forceUpdate();"/>
+                </van-popup>
             <!-- 备注 -->
             <van-field v-model="editForm.remark" label="备注" :readonly="!canEdit" type="textarea"></van-field>
             <!-- 发票 -->
@@ -295,6 +285,9 @@ export default {
             allexTypeList: [],
             inexTypeList: [],
             uploader: [[]],
+             expenseMainType:{
+                text:''
+            }
         }
     },
     computed: {
@@ -336,6 +329,7 @@ export default {
             // }
             this.getProjectList()
         }
+        this.getExpensMainTypes()
     },
     methods: {
         back(){
@@ -368,8 +362,13 @@ export default {
             this.createDateShow = false
         },
         typeChange(value,key){
-            this.editForm.type = key
+            this.editForm.type = value.id
+            this.expenseMainType.text=value.name
             this.typeShow = false
+            for(let i in this.invoiceList){
+                    this.invoiceList[i].expenseType=''
+                }
+                console.log(this.editForm.type)
             this.inexTypeList = this.allexTypeList.filter(a=>a.mainType == this.editForm.type)
         },
         ticNumChange(value){
@@ -390,6 +389,22 @@ export default {
                 this.invoiceList.pop()
             }
         },
+        getExpensMainTypes(){
+            this.$axios.post("/expense-main-type/list", {})
+            .then(res => {
+                if(res.code == "ok") {
+                    for(var i in res.data) {
+                        res.data[i].text = res.data[i].name
+                    }
+                    this.typeList=res.data
+                    this.expenseMainType.text=res.data[0].name
+                    this.editForm.type=res.data[0].id
+                    this.getExTypeList
+                } else {
+                    this.$toast.fail('获取失败');
+                }
+            }).catch(err=> {this.$toast.clear();console.log(err)});
+        },
         addInvoice(){
             this.invoiceList.push({
                 projectId: '',

File diff suppressed because it is too large
+ 488 - 448
fhKeeper/formulahousekeeper/timesheet_h5/src/views/expense/index.vue


+ 6 - 7
fhKeeper/formulahousekeeper/timesheet_h5/src/views/index/index.vue

@@ -50,7 +50,7 @@
                 this.user = JSON.parse(localStorage.userInfo)
                 // 是否为钉钉同步
                 this.isSyncData = this.user.timeType.syncDingding || this.user.timeType.syncFanwei;
-            }
+            } 
         },
         mounted() {
             //有错误信息,优先跳转到登录页面去
@@ -84,22 +84,21 @@
                 }
             } else {
                 //其他情况,刷新用户信息
-                if (localStorage.userInfo != null) {
+                if (localStorage.userInfo != null && localStorage.userInfo != 'undefined') {
                     that.user = JSON.parse(localStorage.userInfo);
                     that.getAccountInfo(that.user.id);
+                } else{
+                    //无用户信息,跳到登录页面去
+                    this.$router.push("/login");
                 }
             }
             if (this.user) {
                 let userss = this.user;
-                if(userss.companyId == '3454') {
-                    alert(`isMobFirstLogin = ${userss.isMobFirstLogin} $ userss.createTime = ${userss.createTime[0]} $ userss.roleName = ${userss.roleName}`)
-                }
                 if(userss.isMobFirstLogin == 1 && userss.createTime[0] > '2022' && userss.roleName == '超级管理员') {
                     // 第一次登陆显示
                     this.previewPicture()
                 }
-            }
-            
+            } 
         },
         components: {
             Footer

+ 3 - 0
fhKeeper/formulahousekeeper/timesheet_h5/src/views/login/index.vue

@@ -220,6 +220,7 @@
             }
         },
         created() {
+            if (localStorage.userInfo == 'undefined') localStorage.removeItem('userInfo');
             if (localStorage.userInfo != null) {
                 this.$router.push("/index").catch(err => { console.log(err, '错误4')});
             }
@@ -273,6 +274,7 @@
                         
                     } else {
                         //检查环境,如果是钉钉有$CORPID$
+                        
                         var key = '?corpid=';
                         var jumpkey = '&jumpto=';
                         var url = location.href;
@@ -284,6 +286,7 @@
                             }else{
                                 corpId = url.substring(url.indexOf(key)+key.length,url.indexOf('#'));
                             }
+                            alert('钉钉登录==='+corpId);
                             this.isDingding = true
                             dd.ready(function() {
                                 dd.runtime.permission.requestAuthCode({

+ 243 - 195
fhKeeper/formulahousekeeper/timesheet_h5/src/views/view/index.vue

@@ -1,201 +1,229 @@
 <template>
     <div>
-        <van-nav-bar title="查看日报" left-text="返回" @click-left="back" fixed left-arrow/>
-        
+        <van-nav-bar title="查看日报" left-text="返回" @click-left="back" fixed left-arrow />
+
         <div class="login_form">
             <van-sticky :offset-top="46">
-            <van-field readonly clickable name="datetimePicker" :value="nowTime" label="时间选择" placeholder="点击选择时间" @click="showPicker = true"/>
+                <van-field readonly clickable name="datetimePicker" :value="nowTime" label="时间选择" placeholder="点击选择时间"
+                    @click="showPicker = true" />
             </van-sticky>
             <van-popup v-model="showPicker" position="bottom">
-                <van-datetime-picker v-model="currentDate" type="date" :min-date="minDate" :max-date="maxDate" @confirm="changeTime" @cancel="showPicker = false"/>
+                <van-datetime-picker v-model="currentDate" type="date" :min-date="minDate" :max-date="maxDate"
+                    @confirm="changeTime" @cancel="showPicker = false" />
             </van-popup>
-            <van-skeleton  :v-if="report.length!=0" v-for="(item,index) in report" title avatar :row="3" :loading="false" :key="index">
+            <van-skeleton :v-if="report.length != 0" v-for="(item, index) in report" title avatar :row="3" :loading="false"
+                :key="index">
                 <van-panel class="one_report" :title="item.name" :status="statusTxt[item.state]">
                     <template #header>
                         <div class="van-cell van-panel__header">
                             <div class="van-cell__title">
-                                <span v-if="user.userNameNeedTranslate == '1'"><ww-open-data type='userName' :openid='item.name'></ww-open-data></span>
-                                <span v-else>{{item.name}}</span>
+                                <span v-if="user.userNameNeedTranslate == '1'"><ww-open-data type='userName'
+                                        :openid='item.name'></ww-open-data></span>
+                                <span v-else>{{ item.name }}</span>
                             </div>
                             <div class="van-cell__value van-panel__header-value">
-                                <span>{{statusTxt[item.state]}}</span>
+                                <span>{{ statusTxt[item.state] }}</span>
                             </div>
                         </div>
                     </template>
                     <div class="form_text">
                         <span style="margin-right:20px;margin-left:5px;font-size:14px;">
                             总填报:
-                            <span>{{parseFloat(item.reportTime).toFixed(1)}}h</span>
+                            <span>{{ parseFloat(item.reportTime).toFixed(1) }}h</span>
                         </span>
                     </div>
-                    <div v-for="(item1,index1) in item.data" class="one_report_data" :key="index1">
-                        <div class="project_title" style="font-weight:bold;">项目:{{item1.project}} <span :style="'color:'+statusColor[item1.state]">[
-                            <span v-if="item1.state==0">
-                            <span v-if="item1.isDeptAudit==0">
-                                <span v-if="item1.projectAuditState==0">
-                                    待项目审核人<span v-if="item1.projectAuditorName != null">(
-                                        <span v-if="user.userNameNeedTranslate == '1'"><ww-open-data type='userName' :openid='item1.projectAuditorName'></ww-open-data></span>
-                                        <span v-else>{{item1.projectAuditorName}}</span>
-                                    )</span>审核
+                    <div v-for="(item1, index1) in item.data" class="one_report_data" :key="index1">
+                        <div class="project_title" style="font-weight:bold;">项目:{{ item1.project }} <span
+                                :style="'color:' + statusColor[item1.state]">[
+                                <span v-if="item1.state == 0">
+                                    <span v-if="item1.isDeptAudit == 0">
+                                        <span v-if="item1.projectAuditState == 0">
+                                            待项目审核人<span v-if="item1.projectAuditorName != null">(
+                                                <span v-if="user.userNameNeedTranslate == '1'"><ww-open-data type='userName'
+                                                        :openid='item1.projectAuditorName'></ww-open-data></span>
+                                                <span v-else>{{ item1.projectAuditorName }}</span>
+                                                )</span>审核
+                                        </span>
+                                        <span style="color:#32CD32;" v-else-if="item1.projectAuditState == 1">
+                                            项目审核人<span v-if="item1.projectAuditorName != null">(
+                                                <span v-if="user.userNameNeedTranslate == '1'"><ww-open-data type='userName'
+                                                        :openid='item1.projectAuditorName'></ww-open-data></span>
+                                                <span v-else>{{ item1.projectAuditorName }}</span>
+                                                )</span>审核通过
+                                        </span>
+                                    </span>
+                                    <span v-else-if="item1.isDeptAudit == 1">
+                                        待
+                                        <span v-if="user.userNameNeedTranslate == '1'"><ww-open-data type='departmentName'
+                                                :openid='item1.auditDeptName'></ww-open-data></span>
+                                        <span v-else>{{ item1.auditDeptName }}</span>
+                                        审核
+                                    </span>
                                 </span>
-                                <span style="color:#32CD32;" v-else-if="item1.projectAuditState==1">
-                                    项目审核人<span v-if="item1.projectAuditorName != null">(
-                                        <span v-if="user.userNameNeedTranslate == '1'"><ww-open-data type='userName' :openid='item1.projectAuditorName'></ww-open-data></span>
-                                        <span v-else>{{item1.projectAuditorName}}</span>
-                                    )</span>审核通过
+                                <span v-else>
+                                    {{ statusTxt[item1.state] }}
                                 </span>
-                            </span>
-                            <span v-else-if="item1.isDeptAudit==1">
-                                待
-                                <span v-if="user.userNameNeedTranslate == '1'"><ww-open-data type='departmentName' :openid='item1.auditDeptName'></ww-open-data></span>
-                                <span v-else>{{item1.auditDeptName}}</span>
-                                审核
-                            </span>
-                            </span>
-                            <span v-else>
-                                {{statusTxt[item1.state]}}
-                            </span>
-                            <!-- {{statusTxt[item1.state]}} -->
+                                <!-- {{statusTxt[item1.state]}} -->
 
-                            ] </span></div>
-                        <div style="color:red;" v-if="item1.state ==2&&item1.rejectReason!=null">原因:{{item1.rejectReason}}</div>
-                        <div class="project_title" v-if="item1.subProjectName != null" >子项目:{{item1.subProjectName}}</div>
-                        <div class="project_title" v-if="user.company.packageProject==1&&item1.groupName != null" >任务分组:{{item1.groupName}}</div>
-                        <div class="project_title" v-if="user.company.packageProject==1&&item1.stage != '-'" >投入阶段:{{item1.stage}}</div>
+                                ] </span></div>
+                        <div style="color:red;" v-if="item1.state == 2 && item1.rejectReason != null">原因:{{
+                            item1.rejectReason }}
+                        </div>
+                        <div class="project_title" v-if="item1.subProjectName != null">子项目:{{ item1.subProjectName }}</div>
+                        <div class="project_title" v-if="user.company.packageProject == 1 && item1.groupName != null">
+                            任务分组:{{ item1.groupName }}</div>
+                        <div class="project_title" v-if="user.company.packageProject == 1 && item1.stage != '-'">
+                            投入阶段:{{ item1.stage }}</div>
                         <!--自定义维度 -->
-                        <div class="project_title" v-if="user.timeType.customDegreeActive == 1" >{{user.timeType.customDegreeName}}:{{item1.degreeName}}</div>
-                        <div class="project_title" v-if="user.timeType.customDataActive == 1" >{{user.timeType.customDataName}}:{{item1.customData}}</div>
-                        <div class="project_title" v-if="user.timeType.customTextActive == 1" >{{user.timeType.customTextName}}:{{item1.customText}}</div>
+                        <div class="project_title" v-if="user.timeType.customDegreeActive == 1">
+                            {{ user.timeType.customDegreeName }}:{{ item1.degreeName }}</div>
+                        <div class="project_title" v-if="user.timeType.customDataActive == 1">
+                            {{ user.timeType.customDataName }}:{{ item1.customData }}</div>
+                        <div class="project_title" v-if="user.timeType.customTextActive == 1">
+                            {{ user.timeType.customTextName }}:{{ item1.customText }}</div>
                         <div class="project_title" v-if="user.company.packageEngineering == 1">
                             专业进度:
-                            <span style="margin-right:10px;" v-for="progressItem in item1.professionProgress" :key="progressItem.id">{{progressItem.professionName}}({{progressItem.progress}}%) 
+                            <span style="margin-right:10px;" v-for="progressItem in item1.professionProgress"
+                                :key="progressItem.id">{{ progressItem.professionName }}({{ progressItem.progress }}%)
                             </span>
                         </div>
-                        
-                        <div class="project_title" v-if="item1.taskId" >任务:{{item1.taskName}}</div>
+
+                        <div class="project_title" v-if="item1.taskId">任务:{{ item1.taskName }}</div>
                         <!--根据类型选择使用的模板 -->
                         <div v-if="item1.multiWorktime == 0">
                             <div class="project_time">时长:
-                                <span v-if="item1.reportTimeType == 0" style="margin-right:10px;">{{fullDayTxt[item1.timeType]}}</span>
-                                <span v-if="item1.reportTimeType == 2" style="margin-right:10px;">{{item1.startTime+'-'+item1.endTime}}</span>{{item1.time.toFixed(1)}}h
-                                <div class="button" v-if="item1.isOvertime == 1">加班<span v-if="item1.overtimeHours">{{item1.overtimeHours.toFixed(1)}}h</span></div>
+                                <span v-if="item1.reportTimeType == 0" style="margin-right:10px;">{{
+                                    fullDayTxt[item1.timeType] }}</span>
+                                <span v-if="item1.reportTimeType == 2" style="margin-right:10px;">{{ item1.startTime + '-' +
+                                    item1.endTime }}</span>{{ item1.time.toFixed(1) }}h
+                                <div class="button" v-if="item1.isOvertime == 1">加班<span v-if="item1.overtimeHours">{{
+                                    item1.overtimeHours.toFixed(1) }}h</span></div>
                             </div>
                             <div class="project_content">事项:<span v-html="item1.content"></span></div>
-                            
+
                         </div>
                         <div v-if="item1.multiWorktime == 1">
-                            <div>项目时长:<span style="margin-right:10px;">{{item1.time.toFixed(1)}}h</span> <div class="button" v-if="item1.isOvertime == 1">加班<span v-if="item1.overtimeHours">{{item1.overtimeHours.toFixed(1)}}h</span></div></div>
-                            <div style="position:relative;border:#ccc 0.5px solid;padding:3px;margin:5px 0px;" v-for="(timeItem, index) in item1.worktimeList" :key="index" >
+                            <div>项目时长:<span style="margin-right:10px;">{{ item1.time.toFixed(1) }}h</span>
+                                <div class="button" v-if="item1.isOvertime == 1">加班<span v-if="item1.overtimeHours">{{
+                                    item1.overtimeHours.toFixed(1) }}h</span></div>
+                            </div>
+                            <div style="position:relative;border:#ccc 0.5px solid;padding:3px;margin:5px 0px;"
+                                v-for="(timeItem, index) in item1.worktimeList" :key="index">
                                 <div class="project_time">时长:
                                     <!-- <span v-if="timeItem.reportTimeType == 0" style="margin-right:10px;">{{fullDayTxt[item1.timeType]}}</span> -->
-                                    <span style="margin-right:10px;">{{timeItem.startTime+'-'+timeItem.endTime}}</span>{{timeItem.time.toFixed(1)}}h
+                                    <span style="margin-right:10px;">{{ timeItem.startTime + '-' + timeItem.endTime
+                                    }}</span>{{ timeItem.time.toFixed(1) }}h
                                 </div>
                                 <div class="project_content">事项:<span v-html="timeItem.content"></span></div>
                             </div>
                         </div>
                         <div style="padding:5px;text-align:center;" v-if="item1.pics != null && item1.pics.length > 0">
-                            <span v-for="(p, index) in item1.pics"  :key="p" style="margin-right:10px;">
-                            <img  :src="p" style="width:80px; height:80px;" @click="showLargeImg(item1.pics, index)"/>
+                            <span v-for="(p, index) in item1.pics" :key="p" style="margin-right:10px;">
+                                <img :src="p" style="width:80px; height:80px;" @click="showLargeImg(item1.pics, index)" />
                             </span>
                         </div>
                         <van-divider />
                     </div>
-                    <van-popup v-model="imgShow" position="bottom" closeable >
-                        <van-swipe class="my-swipe"  indicator-color="white">
-                        <van-swipe-item v-for="(picItem, index) in tmpPics" :key="index">
-                            <img :src="picItem" style="width:100%;" />
-                        </van-swipe-item>
+                    <van-popup v-model="imgShow" position="bottom" closeable>
+                        <van-swipe class="my-swipe" indicator-color="white">
+                            <van-swipe-item v-for="(picItem, index) in tmpPics" :key="index">
+                                <img :src="picItem" style="width:100%;" />
+                            </van-swipe-item>
                         </van-swipe>
                     </van-popup>
 
                     <!-- 编辑 -->
                     <div slot="footer" class="foot">
-                        <van-button size="small" type="primary" @click="editor(item)" v-if="item.id == user.id && (item.state == 2 || item.state == 3)">编辑日报</van-button>
+                        <van-button size="small" type="primary" @click="editor(item)"
+                            v-if="item.id == user.id && (item.state == 2 || item.state == 3)">编辑日报</van-button>
                     </div>
                 </van-panel>
             </van-skeleton>
+            <van-empty v-if="report.length == 0" description="暂无日报">
+                <van-button round type="primary" class="bottom-button" @click="toWriteReport()">去填写</van-button>
+            </van-empty>
         </div>
     </div>
 </template>
 
 <script>
-    export default {
-        data() {
-            return {
-                tmpPics:[],
-                imgShow: false,
-                hasWaiting: false,
-                state: 0,
-                statusColor:['orange','green','red'],
-                user: JSON.parse(localStorage.userInfo),
-                minDate: new Date(2010, 0, 1),
-                maxDate: new Date(new Date().getFullYear(),new Date().getMonth(),new Date().getDate()),
-                currentDate: new Date(),
-                nowTime: this.format(new Date(new Date()),"yyyy-MM-dd"),
-                showPicker: false,
-                report: [],
-                fullDayTxt:['全天','上午','下午'],
-                statusTxt:["待审核", "已通过", "已驳回", "待提交"],
-            };
+export default {
+    data() {
+        return {
+            tmpPics: [],
+            imgShow: false,
+            hasWaiting: false,
+            state: 0,
+            statusColor: ['orange', 'green', 'red'],
+            user: JSON.parse(localStorage.userInfo),
+            minDate: new Date(2010, 0, 1),
+            maxDate: new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()),
+            currentDate: new Date(),
+            nowTime: this.format(new Date(new Date()), "yyyy-MM-dd"),
+            showPicker: false,
+            report: [],
+            fullDayTxt: ['全天', '上午', '下午'],
+            statusTxt: ["待审核", "已通过", "已驳回", "待提交"],
+        };
+    },
+    created() {
+    },
+    methods: {
+        showLargeImg(item, index) {
+            this.imgShow = true;
+            this.tmpPics = item;
         },
-        created() {
-        },
-        methods: {
-            showLargeImg(item, index) {
-                this.imgShow = true;
-                this.tmpPics = item;
-            },
 
-            // 返回
-            back() {
-                history.back();
-            },
+        // 返回
+        back() {
+            history.back();
+        },
 
-             // 时间转换
-            format(date, pattern) {
-                pattern = pattern || "yyyy-MM-dd";
-                var _this = this;
-                return pattern.replace(/([yMdhsm])(\1*)/g, function ($0) {
-                    switch ($0.charAt(0)) {
-                        case 'y': return _this.padding(date.getFullYear(), $0.length);
-                        case 'M': return _this.padding(date.getMonth() + 1, $0.length);
-                        case 'd': return _this.padding(date.getDate(), $0.length);
-                        case 'w': return date.getDay() + 1;
-                        case 'h': return _this.padding(date.getHours(), $0.length);
-                        case 'm': return _this.padding(date.getMinutes(), $0.length);
-                        case 's': return _this.padding(date.getSeconds(), $0.length);
-                    }
-                });
-            },
+        // 时间转换
+        format(date, pattern) {
+            pattern = pattern || "yyyy-MM-dd";
+            var _this = this;
+            return pattern.replace(/([yMdhsm])(\1*)/g, function ($0) {
+                switch ($0.charAt(0)) {
+                    case 'y': return _this.padding(date.getFullYear(), $0.length);
+                    case 'M': return _this.padding(date.getMonth() + 1, $0.length);
+                    case 'd': return _this.padding(date.getDate(), $0.length);
+                    case 'w': return date.getDay() + 1;
+                    case 'h': return _this.padding(date.getHours(), $0.length);
+                    case 'm': return _this.padding(date.getMinutes(), $0.length);
+                    case 's': return _this.padding(date.getSeconds(), $0.length);
+                }
+            });
+        },
 
-            padding(s, len) {
-                var len = len - (s + '').length;
-                for (var i = 0; i < len; i++) { s = '0' + s; }
-                return s;
-            },
+        padding(s, len) {
+            var len = len - (s + '').length;
+            for (var i = 0; i < len; i++) { s = '0' + s; }
+            return s;
+        },
 
-            // 改变时间
-            changeTime(time) {
-                this.nowTime = this.format(new Date(time),"yyyy-MM-dd");
-                this.currentDate = time;
-                this.showPicker = false;
-                this.getReport();
-            },
+        // 改变时间
+        changeTime(time) {
+            this.nowTime = this.format(new Date(time), "yyyy-MM-dd");
+            this.currentDate = time;
+            this.showPicker = false;
+            this.getReport();
+        },
 
-            // 获取日报
-            getReport() {
-                this.hasWaiting = false;
-                const toast = this.$toast.loading({
-                    forbidClick: true,
-                    duration: 0
-                });
-                this.$axios.post("/report/getReportList", {date: this.nowTime})
+        // 获取日报
+        getReport() {
+            this.hasWaiting = false;
+            const toast = this.$toast.loading({
+                forbidClick: true,
+                duration: 0
+            });
+            this.$axios.post("/report/getReportList", { date: this.nowTime })
                 .then(res => {
-                    if(res.code == "ok") {
+                    if (res.code == "ok") {
                         this.$toast.clear();
                         this.report = res.data;
                         //计算状态
-                        for (var i=0;i<this.report.length; i++) {
+                        for (var i = 0; i < this.report.length; i++) {
                             var item = this.report[i];
                             if (item.state == 0) {
                                 this.hasWaiting = true;
@@ -203,84 +231,104 @@
                         }
                     } else {
                         this.$toast.clear();
-                        this.$toast.fail('获取失败:'+res.msg);
+                        this.$toast.fail('获取失败:' + res.msg);
                     }
-                }).catch(err=> {this.$toast.clear();});
-            },
-            // 点击编辑
-            editor(item) {
-                console.log(item, '编辑')
-                this.$router.push({
-                    path:'/edit',
-                    query: {
-                        date: this.nowTime
-                    }
-                });
-            }
+                }).catch(err => { this.$toast.clear(); });
         },
-        mounted() {
-            if (sessionStorage.targetDate != null) {
-                this.nowTime = sessionStorage.targetDate;
-                sessionStorage.removeItem('targetDate');
-            }
-            this.getReport();
+        // 点击编辑
+        editor(item) {
+            console.log(item, '编辑')
+            this.$router.push({
+                path: '/edit',
+                query: {
+                    date: this.nowTime
+                }
+            });
+        },
+        // 去填写日报
+        toWriteReport() {
+            this.$router.push({
+                path: '/edit',
+                query: {
+                    date: this.nowTime
+                }
+            });
+        }
+    },
+    mounted() {
+        if (sessionStorage.targetDate != null) {
+            this.nowTime = sessionStorage.targetDate;
+            sessionStorage.removeItem('targetDate');
         }
-    };
+        this.getReport();
+    }
+};
 </script>
 
 <style lang="less" scoped>
-    .login_form {
-        margin-top: 46px;
-    }
+.login_form {
+    margin-top: 46px;
+}
 
-    .one_report {
-        margin-bottom: 15px;
-        font-size:14px;
-    }
+.one_report {
+    margin-bottom: 15px;
+    font-size: 14px;
+}
 
-    .form_text {
-        margin: 15px 0 15px;
-        padding: 0 12px;
-    }
-    
-    .form_btn {
-        text-align: right;
-    }
+.form_text {
+    margin: 15px 0 15px;
+    padding: 0 12px;
+}
 
-    .form_btn button {
-        margin-left: 10px;
-    }
+.form_btn {
+    text-align: right;
+}
 
-    .one_report_data {
-        margin-bottom: 10px;
-        padding: 0 22px;
-        div {
-            line-height: 30px;
-        }
+.form_btn button {
+    margin-left: 10px;
+}
+
+.one_report_data {
+    margin-bottom: 10px;
+    padding: 0 22px;
+
+    div {
+        line-height: 30px;
     }
+}
 </style>
 <style lang="less">
-    .van-nav-bar .van-icon , .van-nav-bar__text {
-        color: #20a0ff;
-    }
-    .button {
-        float: right;
-        width: 80px;
-        height: 25px;
-        line-height: 25px;
-        text-align: center;
-        border: 1px solid red;
-        color: red;
-        box-sizing: border-box;
-        border-radius: 10px;
-        font-size: 14px;
-        display: flex;
-        justify-content: center;
-        align-items: center;
-    }
-    .foot {
-        width: 100%;
-        display: flex;
-        justify-content: end;
-    }
+.van-nav-bar .van-icon,
+.van-nav-bar__text {
+    color: #20a0ff;
+}
+
+.button {
+    float: right;
+    width: 80px;
+    height: 25px;
+    line-height: 25px;
+    text-align: center;
+    border: 1px solid red;
+    color: red;
+    box-sizing: border-box;
+    border-radius: 10px;
+    font-size: 14px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+
+.foot {
+    width: 100%;
+    display: flex;
+    justify-content: end;
+}
+
+.bottom-button {
+    width: 160px;
+    height: 40px;
+    background-color: rgb(53, 130, 245);
+    border-color: rgb(53, 130, 245);
+}
 </style>

+ 2 - 1
fhKeeper/formulahousekeeper/timesheet_h5/vue.config.js

@@ -4,7 +4,8 @@ const path = require('path');
 const themePath = path.resolve(__dirname,'src/assets/style/theme.less');
 const Timestamp = new Date().getTime();
 
-var ip = '47.101.180.183'
+// var ip = '47.101.180.183'
+var ip = '47.100.37.243'
 // var ip = '192.168.2.7'
 // var ip = '127.0.0.1'