Bläddra i källkod

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

QuYueTing 10 månader sedan
förälder
incheckning
43e9c2f61d
19 ändrade filer med 303 tillägg och 183 borttagningar
  1. 33 3
      fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/analysis/index.vue
  2. 1 1
      fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/order/api.ts
  3. 5 5
      fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/order/component/information.vue
  4. 1 1
      fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/order/index.vue
  5. 1 1
      fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/product/index.vue
  6. 38 9
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/SalesOrderController.java
  7. 2 2
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/SalesOrderService.java
  8. 0 6
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ClueServiceImpl.java
  9. 2 6
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/SalesOrderServiceImpl.java
  10. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/DepartmentMapper.java
  11. 86 75
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java
  12. 22 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/DepartmentMapper.xml
  13. 22 19
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  14. 13 4
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/statistic/index.vue
  15. 11 10
      fhKeeper/formulahousekeeper/timesheet/.vscode/settings.json
  16. 18 6
      fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json
  17. 13 5
      fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json
  18. 17 17
      fhKeeper/formulahousekeeper/timesheet/src/views/awayOffice/awayOffice.vue
  19. 16 13
      fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue

+ 33 - 3
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/analysis/index.vue

@@ -199,7 +199,17 @@ watchEffect(() => {
                   start-placeholder="开始日期"
                   end-placeholder="结束日期"
                 />
-                <el-button size="small" type="primary" @click="select1?.blur">确认</el-button>
+                <el-button
+                  size="small"
+                  type="primary"
+                  @click="
+                    () => {
+                      select1?.blur();
+                      bulletinPrompt.date = 'ignore';
+                    }
+                  "
+                  >确认</el-button
+                >
               </div>
             </el-option>
           </el-select>
@@ -294,7 +304,17 @@ watchEffect(() => {
                       start-placeholder="开始日期"
                       end-placeholder="结束日期"
                     />
-                    <el-button size="small" type="primary" @click="select2?.blur">确认</el-button>
+                    <el-button
+                      size="small"
+                      type="primary"
+                      @click="
+                        () => {
+                          select2?.blur();
+                          summaryPrompt.date = 'ignore';
+                        }
+                      "
+                      >确认</el-button
+                    >
                   </div>
                 </el-option>
               </el-select>
@@ -387,7 +407,17 @@ watchEffect(() => {
                       start-placeholder="开始日期"
                       end-placeholder="结束日期"
                     />
-                    <el-button size="small" type="primary" @click="select3?.blur">确认</el-button>
+                    <el-button
+                      size="small"
+                      type="primary"
+                      @click="
+                        () => {
+                          select3?.blur();
+                          stagePrompt.date = 'ignore';
+                        }
+                      "
+                      >确认</el-button
+                    >
                   </div>
                 </el-option>
               </el-select>

+ 1 - 1
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/order/api.ts

@@ -45,5 +45,5 @@ export const tableColumns: TableColumn[] = [
 export const paymentStatus = [
     { value: 0, label: '未回款' },
     { value: 1, label: '已回款' },
-    { value: 2, label: '完全回款' },
+    { value: 2, label: '完全回款' },
 ]

+ 5 - 5
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/order/component/information.vue

@@ -190,7 +190,7 @@ const formItems = reactive([
     { label: '客户名称', key: 'customName', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '商机名称', key: 'businessOpportunityName', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '订单金额', key: 'price', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
-    { label: '回款状态', key: 'statusValue', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
+    { label: '回款状态', key: 'receivedStatus', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '已回款金额', key: 'receivedPayment', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '未回款', key: 'unReceivedPayment', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '订单类型', key: 'type', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
@@ -200,8 +200,8 @@ const formItems = reactive([
     { label: '负责人', key: 'inchargerName', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '创建人', key: 'creatorName', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '创建时间', key: 'createTime', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
-    { label: '客户签约人', key: 'customSigner', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
-    { label: '公司签约人', key: 'companySigner', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
+    { label: '客户签约人', key: 'customSignerName', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
+    { label: '公司签约人', key: 'companySignerName', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '48%' },
     { label: '备注', key: 'remark', value: '', labelClass: 'w-[115px] text-right text-gray-500', width: '100%' },
 ])
 
@@ -209,8 +209,8 @@ watchEffect(() => {
     const { data } = props
     info.value = data
     formItems.forEach(item => {
-        if (item.key === 'statusValue') {
-            const status = info.value['status'];
+        if (item.key === 'receivedStatus') {
+            const status = info.value['receivedStatus'];
             item.value = status !== '' && status !== null ? (paymentStatus.find(p => p.value === status)?.label || '') : '';
         } else {
             item.value = info.value[item.key] || '';

+ 1 - 1
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/order/index.vue

@@ -166,7 +166,7 @@ const selectData = reactive({ // 下拉数据
   Personnel: [] as personnelInterface[],
   Customer: [] as any[], // 客户名称
   OrderType: [] as any[], // 订单类型
-  RemittanceStatus: [{ id: 0, name: '已回款' }, { id: 1, name: '未回款' }, { id: 2, name: '已完全回款' }] as any[], // 回款状态
+  RemittanceStatus: [{ id: 0, name: '未回款' }, { id: 1, name: '已回款' }, { id: 2, name: '已完全回款' }] as any[], // 回款状态
   AllProduct: [] as any[] // 所有产品
 })
 const formTablePaging = reactive({ // 分页条件

+ 1 - 1
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/product/index.vue

@@ -247,7 +247,7 @@ function editProduct(item: any) {
   dialogVisible.editProductVisible = true
   allLoading.generateFormLading = true
   if (item) {
-    genereditForm.value = item
+    genereditForm.value = { ...item, status: String(item.status) }
     allText.editClueText = '编辑产品'
   }
   if (!item) {

+ 38 - 9
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/SalesOrderController.java

@@ -100,6 +100,9 @@ public class SalesOrderController {
             order.setUnReceivedPayment(price.subtract(order.getReceivedPayment()));
         }else {
             order.setUnReceivedPayment(order.getPrice());
+            order.setReceivedStatus(0);
+            //修改已退回金额为0 是否要删除所有回款数据
+            salesOrderPaymentService.remove(new LambdaQueryWrapper<SalesOrderPayment>().eq(SalesOrderPayment::getOrderId,order.getId()));
         }
         int countCode;
         int countName;
@@ -387,8 +390,8 @@ public class SalesOrderController {
     * @Date: 2024/5/16
     */
     @RequestMapping("/dataSummary")
-    public HttpRespMsg dataSummary(Integer queryType,Integer dateType){
-        return salesOrderService.dataSummary(queryType,dateType);
+    public HttpRespMsg dataSummary(Integer queryType,Integer dateType,String startDate,String endDate){
+        return salesOrderService.dataSummary(queryType,dateType,startDate,endDate);
     }
 
     /**
@@ -406,8 +409,12 @@ public class SalesOrderController {
         SalesOrderPayment salesOrderPayment=new SalesOrderPayment();
         salesOrderPayment.setMoney(new BigDecimal(money));
         salesOrderPayment.setOrderId(orderId);
-        if(money>salesOrder.getUnReceivedPayment().doubleValue()){
-            msg.setError("回款金额不能大于当前未回款金额");
+        if(salesOrder.getReceivedStatus()==2){
+            msg.setError("当前订单已完全回款");
+            return msg;
+        }
+        if(money>salesOrder.getPrice().doubleValue()){
+            msg.setError("回款金额不能大于订单金额");
             return msg;
         }
         List<SalesOrderPayment> list = salesOrderPaymentService.list(new LambdaQueryWrapper<SalesOrderPayment>().eq(SalesOrderPayment::getOrderId, orderId));
@@ -449,8 +456,8 @@ public class SalesOrderController {
     * @Date: 2024/5/21
     */
     @RequestMapping("/businessOpportunityStage")
-    public HttpRespMsg businessOpportunityStage(Integer queryType,Integer dateType){
-        return salesOrderService.businessOpportunityStage(queryType,dateType);
+    public HttpRespMsg businessOpportunityStage(Integer queryType,Integer dateType,String startDate,String endDate){
+        return salesOrderService.businessOpportunityStage(queryType,dateType,startDate,endDate);
     }
 
     /**
@@ -489,22 +496,44 @@ public class SalesOrderController {
         HttpRespMsg msg=new HttpRespMsg();
         SalesOrderPayment payment = salesOrderPaymentService.getById(paymentId);
         SalesOrder salesOrder = salesOrderService.getById(payment.getOrderId());
-        List<SalesOrderPayment> list = salesOrderPaymentService.list(new LambdaQueryWrapper<SalesOrderPayment>().eq(SalesOrderPayment::getOrderId, salesOrder.getId()).orderByDesc(SalesOrderPayment::getCreateTime));
+        List<SalesOrderPayment> list = salesOrderPaymentService.list(new LambdaQueryWrapper<SalesOrderPayment>().eq(SalesOrderPayment::getOrderId, salesOrder.getId()).orderByAsc(SalesOrderPayment::getCreateTime));
         int i = list.indexOf(payment);
         if(money!=null){
+            if(salesOrder.getReceivedStatus()==2){
+                msg.setError("当前订单已完全回款");
+                return msg;
+            }
+            if(money>salesOrder.getPrice().doubleValue()){
+                msg.setError("回款金额不能大于订单金额");
+                return msg;
+            }
+            double sum = list.stream().mapToDouble(s -> s.getMoney().doubleValue()).sum();
+            if((sum)>salesOrder.getPrice().doubleValue()){
+                msg.setError("总回款金额不能大于订单金额");
+                return msg;
+            }
             //找到原回款数据
             BigDecimal nowMoney = new BigDecimal(money);
             BigDecimal oldMoney = payment.getMoney();
             //离当前回款数据最近一次回款的未回款数据作为依据
-            SalesOrderPayment salesOrderPayment =list.size()>1?list.get(i+1):list.get(i);
+            SalesOrderPayment salesOrderPayment =list.size()>1?list.get(i-1):list.get(i);
             BigDecimal unReceivedPayment = salesOrderPayment.getUnReceivedPayment();
-            unReceivedPayment=unReceivedPayment.subtract(nowMoney);
+            unReceivedPayment=unReceivedPayment.add(oldMoney).subtract(nowMoney);
             payment.setMoney(new BigDecimal(money));
             payment.setUnReceivedPayment(unReceivedPayment);
             if(!salesOrderPaymentService.updateById(payment)){
                 msg.setError("验证失败");
                 return msg;
             }
+            if(money>0){
+                //回款金额大于0的情况下才能算一次回款
+                if(unReceivedPayment.doubleValue()<=0){
+                    //未回款金额小于等于0 说明完全回款修改状态
+                    salesOrder.setReceivedStatus(2);
+                }else {
+                    salesOrder.setReceivedStatus(1);
+                }
+            }
             //订单上的已回款金额
             BigDecimal receivedPayment = salesOrder.getReceivedPayment();
             receivedPayment=receivedPayment.subtract(oldMoney).add(nowMoney);

+ 2 - 2
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/SalesOrderService.java

@@ -25,9 +25,9 @@ public interface SalesOrderService extends IService<SalesOrder> {
 
     HttpRespMsg salesKit(Integer queryType,Integer dateType, String startDate, String endDate);
 
-    HttpRespMsg dataSummary(Integer queryType, Integer dateType);
+    HttpRespMsg dataSummary(Integer queryType, Integer dateType,String startDate,String endDate);
 
-    HttpRespMsg businessOpportunityStage(Integer queryType, Integer dateType);
+    HttpRespMsg businessOpportunityStage(Integer queryType, Integer dateType,String startDate,String endDate);
 
     HttpRespMsg productWithOrder(Integer id);
 

+ 0 - 6
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ClueServiceImpl.java

@@ -278,7 +278,6 @@ public class ClueServiceImpl extends ServiceImpl<ClueMapper, Clue> implements Cl
 
         updateWrapper.set("incharger_id", inchargerId);
         clueMapper.update(null, updateWrapper);
-
     }
 
     @Override
@@ -289,15 +288,10 @@ public class ClueServiceImpl extends ServiceImpl<ClueMapper, Clue> implements Cl
     @Override
     public int getTotal2(Clue clue, User user) {
         return clueMapper.getTotal2(clue, user.getId());
-
     }
 
-
-
-
     @Value(value = "${upload.path}")
     private String filePath;
-
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Object uploadFile(Clue clue, HttpServletRequest request, MultipartFile file) {

+ 2 - 6
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/SalesOrderServiceImpl.java

@@ -891,7 +891,7 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
     }
 
     @Override
-    public HttpRespMsg dataSummary(Integer queryType, Integer dateType) {
+    public HttpRespMsg dataSummary(Integer queryType, Integer dateType,String startDate,String endDate) {
         HttpRespMsg msg=new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("token"));
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
@@ -899,8 +899,6 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
         List<Department> allDeptList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, companyId));
         String userId=null;
         List<String> targetUserIds=new ArrayList<>();
-        String startDate=null;
-        String endDate=null;
         if(dateType!=null){
             switch (dateType){
                 case 0:
@@ -1008,7 +1006,7 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
     }
 
     @Override
-    public HttpRespMsg businessOpportunityStage(Integer queryType, Integer dateType) {
+    public HttpRespMsg businessOpportunityStage(Integer queryType, Integer dateType,String startDate,String endDate) {
         HttpRespMsg msg=new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("token"));
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
@@ -1016,8 +1014,6 @@ public class SalesOrderServiceImpl extends ServiceImpl<SalesOrderMapper, SalesOr
         List<Department> allDeptList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, companyId));
         String userId=null;
         List<String> targetUserIds=new ArrayList<>();
-        String startDate=null;
-        String endDate=null;
         if(dateType!=null){
             switch (dateType){
                 case 0:

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/DepartmentMapper.java

@@ -21,6 +21,8 @@ public interface DepartmentMapper extends BaseMapper<Department> {
 
     List<Map<String, Object>> getCostByUser(@Param("departmentIds") List departmentIds, String startDate, String endDate, Integer companyId, List<String> userIds);
 
+    List<Map<String, Object>> getCostByUserSum(@Param("departmentIds") List departmentIds, String startDate, String endDate, Integer companyId);
+
     List<Map<String, Object>> getCustomDataByUser(@Param("departmentIds") List departmentIds, String startDate, String endDate, Integer companyId, List<String> userIds);
     @Update("update department set manager_id = null where department_id = #{departmentId}")
     void updateNullManager(Integer departmentId);

+ 86 - 75
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java

@@ -452,90 +452,101 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
     @Override
     public HttpRespMsg getDepartmentStatistics(Integer parentDeptId, String startDate, String endDate, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
-        try {
-            User targetUser = userMapper.selectById(request.getHeader("Token"));
-            Integer companyId =targetUser.getCompanyId();
-            //当前用户管理部门
-            List<Integer> deptIds=null;
-            List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id", companyId));
-            List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", targetUser.getId()));
-            List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看全公司");
-            List<SysRichFunction> functionDpartList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看负责部门");
-            List<SysRichFunction> functionTimeList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看工时统计");
-            List<SysRichFunction> functionCostList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看成本统计");
-            //判断查看权限
-            if(functionAllList.size()==0){
-                deptIds=new ArrayList<>();
-                //是不是要加
-                deptIds.add(-1);
-                if(functionDpartList.size()>0){
-                    if(functionTimeList.size()>0||functionCostList.size()>0){
-                        List<Integer> collect = departmentList.stream().map(dp -> dp.getDepartmentId()).distinct().collect(Collectors.toList());
-                        List<Integer> otherCollect = departmentOtherManagerList.stream().map(dom -> dom.getDepartmentId()).distinct().collect(Collectors.toList());
-                        collect.addAll(otherCollect);
-                        deptIds.addAll(collect);
-                    }
+        User targetUser = userMapper.selectById(request.getHeader("Token"));
+        Integer companyId =targetUser.getCompanyId();
+        //当前用户管理部门
+        List<Integer> deptIds=null;
+        List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id", companyId));
+        List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", targetUser.getId()));
+        List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看全公司");
+        List<SysRichFunction> functionDpartList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看负责部门");
+        List<SysRichFunction> functionTimeList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看工时统计");
+        List<SysRichFunction> functionCostList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看成本统计");
+        //判断查看权限
+        if(functionAllList.size()==0){
+            deptIds=new ArrayList<>();
+            //是不是要加
+            deptIds.add(-1);
+            if(functionDpartList.size()>0){
+                if(functionTimeList.size()>0||functionCostList.size()>0){
+                    List<Integer> collect = departmentList.stream().map(dp -> dp.getDepartmentId()).distinct().collect(Collectors.toList());
+                    List<Integer> otherCollect = departmentOtherManagerList.stream().map(dom -> dom.getDepartmentId()).distinct().collect(Collectors.toList());
+                    collect.addAll(otherCollect);
+                    deptIds.addAll(collect);
                 }
             }
-            QueryWrapper<Department> queryWrapper = new QueryWrapper<Department>()
-                    .eq("company_id", companyId);
-            if (parentDeptId == null) {
-                if (deptIds == null) {
-                    //查看全公司的
-                    queryWrapper.isNull("superior_id");
-                }else {
-                    queryWrapper.in("department_id",deptIds);
-                }
-            } else {
-                queryWrapper.eq("superior_id", parentDeptId);
+        }
+        QueryWrapper<Department> queryWrapper = new QueryWrapper<Department>()
+                .eq("company_id", companyId);
+        if (parentDeptId == null) {
+            if (deptIds == null) {
+                //查看全公司的
+                queryWrapper.isNull("superior_id");
+            }else {
+                queryWrapper.in("department_id",deptIds);
             }
-            //获取第一级部门
-            System.out.println(deptIds);
-            List<Department> masterList = departmentMapper.selectList(queryWrapper);
-            System.out.println(masterList);
-            Map<String, Object> resultMap = new HashMap<>();
-            List<DepartmentMasterVO> list = new ArrayList<>();
-            BigDecimal totalCostMoney = new BigDecimal(0);
-            List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
-
-            for (Department department : masterList) {
+        } else {
+            queryWrapper.eq("superior_id", parentDeptId);
+        }
+        //获取第一级部门
+        System.out.println(deptIds);
+        List<Department> masterList = departmentMapper.selectList(queryWrapper);
+        Map<String, Object> resultMap = new HashMap<>();
+        List<DepartmentMasterVO> list = new ArrayList<>();
+        BigDecimal totalCostMoney = new BigDecimal(0);
+        List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+
+        for (Department department : masterList) {
+            DepartmentMasterVO departmentMasterVO = new DepartmentMasterVO();
+            BeanUtils.copyProperties(department, departmentMasterVO);
+            Map<String, Object> map = departmentMapper.getCostByDepartment(
+                    getBranchDepartment(department.getDepartmentId(), allDeptList), startDate, endDate);
+            Double time = map == null ? new Double(0) : (Double) map.get("time");
+            BigDecimal money = map == null ? new BigDecimal(0) : (BigDecimal) map.get("money");
+            totalCostMoney = totalCostMoney.add(money);
+            departmentMasterVO.setCostTime(time);
+            departmentMasterVO.setCostMoney(money);
+            departmentMasterVO.setType("departmentName");
+            //检查是否有子部门
+            if (allDeptList.stream().anyMatch(dept->department.getDepartmentId().equals(dept.getSuperiorId()))) {
+                departmentMasterVO.setHasSubDept(true);
+            }
+            list.add(departmentMasterVO);
+        }
+        //当前部门下的直属人员工时统计
+        if (parentDeptId != null) {
+            List<Integer> curDeptIds = new ArrayList<>();
+            curDeptIds.add(parentDeptId);
+            List<Map<String, Object>> userTimeList = departmentMapper.getCostByUserSum(curDeptIds, startDate, endDate, companyId);
+            for (Map<String, Object> map : userTimeList) {
                 DepartmentMasterVO departmentMasterVO = new DepartmentMasterVO();
-                BeanUtils.copyProperties(department, departmentMasterVO);
-                Map<String, Object> map = departmentMapper.getCostByDepartment(
-                        getBranchDepartment(department.getDepartmentId(), allDeptList), startDate, endDate);
-                Double time = map == null ? new Double(0) : (Double) map.get("time");
+                departmentMasterVO.setSeq(0);
+                departmentMasterVO.setDepartmentName((String)map.get("user"));
+                departmentMasterVO.setCostTime((Double)map.get("time"));
                 BigDecimal money = map == null ? new BigDecimal(0) : (BigDecimal) map.get("money");
-                totalCostMoney = totalCostMoney.add(money);
-                departmentMasterVO.setCostTime(time);
                 departmentMasterVO.setCostMoney(money);
-                departmentMasterVO.setType("departmentName");
-                //检查是否有子部门
-                if (allDeptList.stream().anyMatch(dept->department.getDepartmentId().equals(dept.getSuperiorId()))) {
-                    departmentMasterVO.setHasSubDept(true);
-                }
+                departmentMasterVO.setType("userName");
+                departmentMasterVO.setHasSubDept(false);
                 list.add(departmentMasterVO);
+                totalCostMoney = totalCostMoney.add(money);
             }
-            //对部门排序
-            list.sort(Comparator.comparing(l->l.getSeq()));
-            resultMap.put("totalCostMoney", totalCostMoney);
-            resultMap.put("costList", list);
-            if(functionCostList.size()==0){
-                resultMap.put("totalCostMoney",new BigDecimal(0));
-                list.forEach(li->{
-                    li.setCostMoney(new BigDecimal(0));
-                });
-            }
-            if(functionTimeList.size()==0){
-                list.forEach(li->{
-                    li.setCostTime(0.0);
-                });
-            }
-            httpRespMsg.data = resultMap;
-        } catch (NullPointerException e) {
-            //httpRespMsg.setError("验证失败");
-            httpRespMsg.setError(MessageUtils.message("access.verificationError"));
-            return httpRespMsg;
         }
+        //对部门排序
+        list.sort(Comparator.comparing(l->l.getSeq()));
+        resultMap.put("totalCostMoney", totalCostMoney);
+        resultMap.put("costList", list);
+        if(functionCostList.size()==0){
+            resultMap.put("totalCostMoney",new BigDecimal(0));
+            list.forEach(li->{
+                li.setCostMoney(new BigDecimal(0));
+            });
+        }
+        if(functionTimeList.size()==0){
+            list.forEach(li->{
+                li.setCostTime(0.0);
+            });
+        }
+        httpRespMsg.data = resultMap;
         return httpRespMsg;
     }
 

+ 22 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/DepartmentMapper.xml

@@ -68,6 +68,28 @@
         GROUP BY b.project_id, a.id order by a.department_id
     </select>
 
+    <!--根据人员获取成本-->
+    <select id="getCostByUserSum" resultType="java.util.Map">
+        SELECT a.id as id, a.name AS user,a.corpwx_userid as corpwxUserId, a.job_number as jobNumber, ifnull(SUM(b.working_time),0) AS time, ifnull(SUM(b.cost),0) AS
+        money
+        FROM user AS a
+        LEFT JOIN report AS b ON a.id = b.creator_id
+        WHERE b.state = 1
+        <if test="departmentIds != null and departmentIds.size()>0">
+            AND b.dept_id IN
+            <foreach collection="departmentIds" item="departmentId" index="index" open="(" close=")" separator=",">
+                #{departmentId}
+            </foreach>
+        </if>
+        <if test="companyId != null">
+            AND a.company_id = #{companyId}
+        </if>
+        <if test="startDate != null and endDate != null">
+            AND b.create_date between #{startDate} and #{endDate}
+        </if>
+        GROUP BY a.id order by a.department_id
+    </select>
+
     <!-- 根据人员获取自定义的日报数值 -->
     <select id="getCustomDataByUser" resultType="java.util.Map">
         SELECT a.id as id, a.name AS user,a.corpwx_userid as corpwxUserid, a.job_number as jobNumber,c.project_name AS project, IFNULL(SUM(b.custom_data),0) AS cost

+ 22 - 19
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -4297,10 +4297,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             double tempWorkTime = mapList.stream().filter(mt -> mt.get("tempWorkTime") != null).mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("tempWorkTime")))).sum();
             BigDecimal tempBigDecimal = new BigDecimal(tempWorkTime);
             double tempCost = mapList.stream().filter(mt -> mt.get("tempCost") != null).mapToDouble(mt -> Double.valueOf(String.valueOf(mt.get("tempCost")))).sum();
-            u.setTotalResult(String.valueOf(bigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", cost) + "元");
-            u.setTotalPlanResult(String.valueOf(planBigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", planCost) + "元");
-            u.setTotalSurplusResult(String.valueOf(surplusBigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", surplusCost) + "元");
-            u.setTotalTempResult(String.valueOf(tempBigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", tempCost) + "元");
+            u.setTotalResult(String.format("%.2f",bigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", cost) + "元");
+            u.setTotalPlanResult(String.format("%.2f",planBigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", planCost) + "元");
+            u.setTotalSurplusResult(String.format("%.2f",surplusBigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", surplusCost) + "元");
+            u.setTotalTempResult(String.format("%.2f",tempBigDecimal.doubleValue()) + "分钟 " + String.format("%.2f", tempCost) + "元");
         }
         resultMap.put("total",userIPage.getTotal());
         resultMap.put("records",userList);
@@ -5004,13 +5004,16 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             item.add(map.get("productOrderNum")==null?"":String.valueOf(map.get("productOrderNum")));
             item.add(String.valueOf(map.get("procedureName")));
             item.add(map.get("steelNumArray")==null?"":String.valueOf(map.get("steelNumArray")));
-            item.add("");
+            item.add(String.valueOf(map.get("productName")));
             item.add("");
 //            item.add(String.valueOf(map.get("progress"))+"%");
             item.add(String.valueOf(map.get("finishNum")));
             item.add(String.valueOf(map.get("workingTime")));
             item.add(String.valueOf(map.get("unitPrice")));
             String cost = String.valueOf(map.get("cost"));
+            BigDecimal finishNum = new BigDecimal(map.get("finishNum")==null?String.valueOf(0):String.valueOf(map.get("finishNum")));
+            finishNum=finishNum.multiply(new BigDecimal(map.get("unitPrice")==null?String.valueOf(0):String.valueOf(map.get("unitPrice")))).setScale(2,RoundingMode.HALF_UP);
+            item.add(String.valueOf(finishNum.doubleValue()));
 //            item.add(cost);
             item.add(String.valueOf(map.get("userName")));
             item.add(String.valueOf(map.get("createDate")));
@@ -5018,20 +5021,20 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 //            item.add(String.valueOf(map.get("checkType")));
 //            item.add(map.get("checkerName")==null?"":String.valueOf(map.get("checkerName")));
             dataList.add(item);
-            if (lastJobNum == null || !lastJobNum.equals(curJobBNum)) {
-                //换新的人了
-                sumLine = item;
-                sumLine.add(sumCostIndex, cost);
-                lastJobNum = curJobBNum;
-            } else {
-                //当前这行的该列设置为空
-                item.add(sumCostIndex, "");
-                //更新第一行的数据
-                BigDecimal sumCost = new BigDecimal(sumLine.get(sumCostIndex));
-                sumCost = sumCost.add(new BigDecimal(cost));
-                sumLine.remove(sumCostIndex);
-                sumLine.add(sumCostIndex, sumCost.toString());
-            }
+//            if (lastJobNum == null || !lastJobNum.equals(curJobBNum)) {
+//                //换新的人了
+//                sumLine = item;
+//                sumLine.add(sumCostIndex, cost);
+//                lastJobNum = curJobBNum;
+//            } else {
+//                //当前这行的该列设置为空
+//                item.add(sumCostIndex, "");
+//                //更新第一行的数据
+//                BigDecimal sumCost = new BigDecimal(sumLine.get(sumCostIndex));
+//                sumCost = sumCost.add(new BigDecimal(cost));
+//                sumLine.remove(sumCostIndex);
+//                sumLine.add(sumCostIndex, sumCost.toString());
+//            }
         }
         Company company = companyMapper.selectById(companyId);
         String fileName=("日报统计导出_")+company.getCompanyName()+System.currentTimeMillis();

+ 13 - 4
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/statistic/index.vue

@@ -100,10 +100,10 @@
                 </el-table-column>
                 <el-table-column align="center" prop="totalResult" label="合计" min-width="180">
                    <template slot-scope="scope" >
-                    <div style="color: black;">平均 {{scope.row.totalPlanResult}}</div>
-                      <div style="color: #02a7f0;"  @click="showReportDetail(scope.row,item,1)">已填 {{scope.row.totalResult}}</div> 
-                      <div style="color: green;"  @click="showTempReportDetail(scope.row,item,1)">临时报工 {{scope.row.totalTempResult}}</div> 
-                      <div style="color: red;">剩余 {{scope.row.totalSurplusResult}}</div>
+                    <div style="color: black;">{{scope.row.totalPlanResult | formatStr('平均') }}</div>
+                      <div style="color: #02a7f0;"  @click="showReportDetail(scope.row,item,1)"> {{scope.row.totalResult | formatStr('已填')}}</div> 
+                      <div style="color: green;"  @click="showTempReportDetail(scope.row,item,1)">{{scope.row.totalTempResult | formatStr('临时报工')}}</div> 
+                      <div style="color: red;">{{scope.row.totalSurplusResult | formatStr('剩余') }}</div>
                   </template>
                 </el-table-column>
             </el-table>
@@ -742,6 +742,13 @@ export default {
       personWorkHoursWorkTime(value) {
         let val = +((value ? value : 0) * 60).toFixed(2) + 0
         return val
+      },
+      formatStr(val, str) {
+        if(!val) {
+          return ''
+        }
+        let relut = val.replace(/\b0\.\d+\S*\s*/g, '')
+        return`${relut ? str : ''} ${relut}`
       }
   },
   methods: {
@@ -1583,6 +1590,8 @@ export default {
     }else{
       this.getUserList()
     }
+    this.page=1
+    this.size=20
     console.log(this.userId,'==============')
     this.getList(true)
     },

+ 11 - 10
fhKeeper/formulahousekeeper/timesheet/.vscode/settings.json

@@ -1,11 +1,12 @@
 {
-    // Vue: i18n-ally 插件如下须要本身配置
-    "i18n-ally.localesPaths": ["src/i18n"], // 翻译的语言路径
-    "i18n-ally.enabledParsers": ["json", "js"], // 翻译支持的语言文件格式
-    "i18n-ally.encoding": "utf-8", // 翻译文件的编码
-    "i18n-ally.sourceLanguage": "zh", // 根据此 cn 语言文件翻译其他语言文件的 变量和内容
-    "i18n-ally.displayLanguage": "zh", // 组件中显示的语言
-    "i18n-ally.keystyle": "flat",
-    "vue-i18n.i18nPaths": "src\\i18n", // 翻译后变量的格式, flat(扁平式即对象属性路径变成一个长字符串), nested(嵌套式即对象属性变量可以进行相互之间的嵌套)
-    // 注意: 如果 i18n-ally 检测不出来框架, 或 提示错误, 可能是版本太高的缘故
-}
+  // Vue: i18n-ally 插件如下须要本身配置
+  "i18n-ally.localesPaths": ["src/i18n"], // 翻译的语言路径
+  "i18n-ally.enabledParsers": ["json", "js"], // 翻译支持的语言文件格式
+  "i18n-ally.encoding": "utf-8", // 翻译文件的编码
+  "i18n-ally.sourceLanguage": "zh", // 根据此 cn 语言文件翻译其他语言文件的 变量和内容
+  "i18n-ally.displayLanguage": "zh", // 组件中显示的语言
+  "i18n-ally.keystyle": "flat",
+  "i18n-ally.enabledFrameworks": ["vue"],
+  "vue-i18n.i18nPaths": "src\\i18n" // 翻译后变量的格式, flat(扁平式即对象属性路径变成一个长字符串), nested(嵌套式即对象属性变量可以进行相互之间的嵌套)
+  // 注意: 如果 i18n-ally 检测不出来框架, 或 提示错误, 可能是版本太高的缘故
+}

+ 18 - 6
fhKeeper/formulahousekeeper/timesheet/src/i18n/en.json

@@ -23,11 +23,13 @@
     "supplierManagement": "Supplier Management",
     "organizationalStructure": "Organizational structure",
     "approvalFlowSettings": "Approval flow Settings",
-    "basicDataManagemen": "Basic Data Managemen",
     "basicSystemSettings": "Basic System Settings",
     "roleRightsManagement": "Role Rights Management",
-    "gongshitongji":"工时统计表",
-    "caiwushenhe":"财务审核"
+    "gongshitongji": "Work hour statistics table",
+    "caiwushenhe": "Financial review",
+    "basicDataManagement": "Basic data management",
+    "budgetReview": "Estimated working hours review",
+    "projectFormSettings": "Project Form Settings"
   },
   "role": {
     "ordinaryEmployees": "Ordinary employees",
@@ -525,7 +527,7 @@
   "todaytask": "today's task",
   "jin-ji": "urgent",
   "yi-ban": "generally",
-  "AuditProcess":"AuditProcessSet",
+  "AuditProcess": "AuditProcessSet",
   "zhong-yao": "important",
   "makesuretodeletethesubproject": "Are you sure you want to delete the subproject",
   "ma": "?",
@@ -1092,7 +1094,6 @@
   "pleaseenterthedepartmentname": "Please enter department name",
   "pleaseinputcost": "Please enter cost",
   "pleaseselectroles": "Please select a role",
-  "areyousuretosynchronize ": "Are you sure to sync address book from Dingding? \n(It may take some time to load, please be patient)",
   "booksecret": "Please enter address book secret",
   "synchronizingtheassociation": "Syncing associations, please wait...",
   "synchronoussuccesss": "Sync complete",
@@ -1521,5 +1522,16 @@
   "que-ding-yao-shan-chu-gai-he-tong-ma": "Are you sure you want to delete this contract ?",
   "que-ding-yao-shan-chu-gai-wen-jian-ma": "Are you sure you want to delete this file ?",
   "he-tong-guan-li-dao-ru-mo-ban": "Contract Management Template",
-  "minMaxCheck": "report time min value should not be greater than the max value"
+  "minMaxCheck": "report time min value should not be greater than the max value",
+  "budget": "general budget",
+  "areyousuretosynchronize": "Are you sure to synchronize your contacts from DingTalk? (It may take some loading time, please be patient.)",
+  "expenses": "Expense reporting",
+  "chu-cha-shen-he": "Business trip review",
+  "bo-hui-le-qing-jia-shen-qing": "Rejected leave application",
+  "que-ding-yao-che-hui-gai-chu-cha-shen-qing-ma": "Are you sure you want to withdraw this business trip application",
+  "yi-cun-zai-zhong-fu-bu-men": "Duplicate department already exists",
+  "yi-cun-zai-zhong-fu-ren-yuan": "There are already duplicate personnel present",
+  "zhi-shao-xuan-ze-yi-ge-bu-men-huo-zhe-ren-yuan-zuo-wei-shen-he-ren": "Select at least one department or personnel as the reviewer",
+  "zhong-xin-ti-jiao": "Resubmit",
+  "zhu-yao-fu-ze-ren": "(Main person in charge)"
 }

+ 13 - 5
fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.json

@@ -27,9 +27,9 @@
     "basicSystemSettings": "系统基础设置",
     "roleRightsManagement": "角色权限管理",
     "projectFormSettings": "项目表单设置",
-    "budgetReview":"预估工时审核",
-    "gongshitongji":"工时统计表",
-    "caiwushenhe":"财务审核"
+    "budgetReview": "预估工时审核",
+    "gongshitongji": "工时统计表",
+    "caiwushenhe": "财务审核"
   },
   "role": {
     "ordinaryEmployees": "普通员工",
@@ -527,7 +527,7 @@
   "taskthatisoverdue": "已超期的任务",
   "yi-ban": "一般",
   "zhong-yao": "重要",
-  "AuditProcess":"审核流程设置",
+  "AuditProcess": "审核流程设置",
   "jin-ji": "紧急",
   "makesuretodeletethesubproject": "确定要删除子项目",
   "ma": "吗?",
@@ -1525,5 +1525,13 @@
   "que-ding-yao-shan-chu-gai-he-tong-ma": "确定要删除该合同吗?",
   "que-ding-yao-shan-chu-gai-wen-jian-ma": "确定要删除该文件吗?",
   "he-tong-guan-li-dao-ru-mo-ban": "合同管理导入模板",
-  "minMaxCheck": "工时下限不得大于上限"
+  "minMaxCheck": "工时下限不得大于上限",
+  "chu-cha-shen-he": "出差审核",
+  "zhu-yao-fu-ze-ren": "(主要负责人)",
+  "zhong-xin-ti-jiao": "重新提交",
+  "bo-hui-le-qing-jia-shen-qing": "驳回了请假申请",
+  "que-ding-yao-che-hui-gai-chu-cha-shen-qing-ma": "确定要撤回该出差申请吗",
+  "zhi-shao-xuan-ze-yi-ge-bu-men-huo-zhe-ren-yuan-zuo-wei-shen-he-ren": "至少选择一个部门或者人员做为审核人",
+  "yi-cun-zai-zhong-fu-bu-men": "已存在重复部门",
+  "yi-cun-zai-zhong-fu-ren-yuan": "已存在重复人员"
 }

+ 17 - 17
fhKeeper/formulahousekeeper/timesheet/src/views/awayOffice/awayOffice.vue

@@ -11,7 +11,7 @@
                 </el-menu-item>
                 <el-menu-item index="2" @select="bills" @click="auditList()" v-if="permissions.awayOfficeAudit">
                 <i class="iconfont firerock-iconshenhe"></i>
-                <span slot="title">出差审核</span>
+                <span slot="title">{{ $t('chu-cha-shen-he') }}</span>
                 </el-menu-item>
                 <el-menu-item index="3" @select="bills" @click="bills(false, 2)" >
                 <i class="iconfont firerock-iconbaoxiaodan"></i>
@@ -141,16 +141,16 @@
                             <el-input type="textarea" v-model="addform.remark" :rows="3" style="width: 100%" maxlength="100" show-word-limit></el-input>
                         </el-form-item>
                         <!--流程显示-->
-                        <el-form-item label="审批流程" style="width: 100%;color:#606266" >
+                        <el-form-item :label="$t('other.approvalProcess')" style="width: 100%;color:#606266" >
                         <span v-for="(item, index) in curWorkflowList" :key="item.id" >
                             <span v-if="index>0"><i class="el-icon-right"></i></span>
                             <span><i class="el-icon-s-custom"></i></span>
                             <span v-if="user.userNameNeedTranslate == 1">
-                            <span v-if="item.auditorType == 1"><TranslationOpenDataText type='departmentName' :openid='item.auditDeptName' ></TranslationOpenDataText>(主要负责人)</span>
+                            <span v-if="item.auditorType == 1"><TranslationOpenDataText type='departmentName' :openid='item.auditDeptName' ></TranslationOpenDataText>{{ $t('zhu-yao-fu-ze-ren') }}</span>
                             <TranslationOpenDataText type='userName' :openid='item.userName' v-if="item.auditorType == 2"></TranslationOpenDataText>
                             </span>
                             <span v-if="user.userNameNeedTranslate == 0">
-                            {{item.auditorType == 1?(item.auditDeptName+'(主要负责人)'):item.userName}}
+                            {{item.auditorType == 1?(item.auditDeptName+$t('zhu-yao-fu-ze-ren')):item.userName}}
                             </span>
                         </span>
                         </el-form-item>
@@ -295,9 +295,9 @@
                             <el-button icon="el-icon-close" circle size="mini"  @click.stop.native="deny(scope.row)"></el-button>
                         </div>
                         <div v-if="!isAuditList && ((scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.awayOfficeAll)">
-                            <el-button size="mini" v-if="scope.row.status == 3 ||scope.row.status == 2" @click.stop.native="deletes(scope.row)" >删除</el-button>
-                            <el-button size="mini" v-if="scope.row.status == 1" @click.stop.native="cancel(scope.row)">撤回</el-button>
-                            <el-button size="mini" v-if="scope.row.status == 3 ||scope.row.status == 2 " type="primary" @click.stop.native="editor(scope.row)">重新提交</el-button>
+                            <el-button size="mini" v-if="scope.row.status == 3 ||scope.row.status == 2" @click.stop.native="deletes(scope.row)" >{{ $t('btn.delete') }}</el-button>
+                            <el-button size="mini" v-if="scope.row.status == 1" @click.stop.native="cancel(scope.row)">{{ $t('btn.withdraw') }}</el-button>
+                            <el-button size="mini" v-if="scope.row.status == 3 ||scope.row.status == 2 " type="primary" @click.stop.native="editor(scope.row)">{{ $t('zhong-xin-ti-jiao') }}</el-button>
                         </div>
                         </template>
                     </el-table-column>
@@ -735,8 +735,8 @@
                 <el-timeline-item v-for="item in auditLogList" :key="item.id" :timestamp="item.indate">
                   <span v-if="user.userNameNeedTranslate == 1"><TranslationOpenDataText type='userName' :openid='item.auditorName'></TranslationOpenDataText> </span>
                   <span v-if="user.userNameNeedTranslate == 0">{{item.auditorName}}</span>
-                  <span> {{item.isPass==0?"驳回了请假申请。":"审核通过。"}}</span>
-                  <span v-if="item.isPass == 0">原因:{{item.denyReason}}</span>
+                  <span> {{item.isPass==0?`${$t('bo-hui-le-qing-jia-shen-qing')}`:`${$t('state.approved')}`}}</span>
+                  <span v-if="item.isPass == 0">{{ $t('other.reason') }}:{{item.denyReason}}</span>
                   </el-timeline-item>
             </el-timeline>
         </div>
@@ -1503,7 +1503,7 @@ export default {
                 if (res.code == "ok") {
                     this.auditList();
                     this.$message({
-                        message: '操作成功',
+                        message: this.$t('operationissuccessful'),
                         type: "success"
                         });
                 } else {
@@ -1533,7 +1533,7 @@ export default {
                     this.auditList();
                     this.denyDialogV = false;
                     this.$message({
-                        message: '操作成功',
+                        message: this.$t('operationissuccessful'),
                         type: "success"
                         });
                 } else {
@@ -1551,7 +1551,7 @@ export default {
             });
         },
         cancel(e) {
-            this.$confirm('确定要撤回该出差申请吗', this.$t('other.prompts'), {
+            this.$confirm(this.$t('que-ding-yao-che-hui-gai-chu-cha-shen-qing-ma'), this.$t('other.prompts'), {
                 //type: 'warning'
             }).then(() => {
                 this.http.post('/business-trip/cancel', {id:e.id},
@@ -1559,7 +1559,7 @@ export default {
                     if (res.code == "ok") {
                         this.bills();
                         this.$message({
-                            message: '操作成功',
+                            message: this.$t('operationissuccessful'),
                             type: "success"
                         });
                     } else {
@@ -1889,7 +1889,7 @@ export default {
                 });
             } else {
                 this.$message({
-                    message: '至少选择一个部门或者人员做为审核人',
+                    message: this.$t('zhi-shao-xuan-ze-yi-ge-bu-men-huo-zhe-ren-yuan-zuo-wei-shen-he-ren'),
                     type: "error"
                 });
             }
@@ -1926,12 +1926,12 @@ export default {
               if(!flgUserRadio) {
                 if(node.type == 'dep') {
                   this.$message({
-                      message: '已存在重复部门',
+                      message: this.$t('yi-cun-zai-zhong-fu-bu-men'),
                       type: "error"
                   });
                 } else {
                   this.$message({
-                      message: '已存在重复人员',
+                      message: this.$t('yi-cun-zai-zhong-fu-ren-yuan'),
                       type: "error"
                   });
                 }
@@ -2018,7 +2018,7 @@ export default {
                 res => {
                     if (res.code == "ok") {
                         this.projectList = res.data;
-                        console.log("项目列表",this.projectList);
+                        console.log(this.$t('listofitems'),this.projectList);
                     } else {
                         this.$message({
                             message: res.msg,

+ 16 - 13
fhKeeper/formulahousekeeper/timesheet/src/views/project/cost.vue

@@ -1082,7 +1082,8 @@
                                         // "value": this.yAxisValue==0 ? list[i].costMoney.toFixed(2) || list[i].costMoney: list[i].costTime.toFixed(1),
                                         "value": this.yAxisValue==0 ? (list[i].costMoney ? list[i].costMoney.toFixed(2) : 0) || list[i].costMoney: (list[i].costTime ? list[i].costTime.toFixed(1) : 0),
                                         "id": list[i].departmentId,
-                                        "hasSubDept": list[i].hasSubDept
+                                        "hasSubDept": list[i].hasSubDept,
+                                        "type": list[i].type
                                     }
                                     if(this.permissions.countCost){
                                         // item.money = list[i].costMoney.toFixed(2)
@@ -1313,19 +1314,21 @@
                                         _this.$router.push("/cost/" + _this.params[0].data.id + "/" + _this.params[0].name);
                                     }
                                 } else if (_this.radio==this.$t('lable.department')) {
-                                    if (_this.params[0].data.hasSubDept) {
-                                        if (_this.parentDeptId != _this.params[0].data.id) {
-                                            _this.parentDeptId = _this.params[0].data.id;
-                                            _this.parentDeptStack.push(_this.parentDeptId);
-                                            _this.jieliu();
-                                        }
-                                        // _this.jieliu();
-                                    } else {
-                                        if (_this.dateRange != null) {
-                                            _this.$router.push("/costDep/" + _this.params[0].data.id + "/" + _this.params[0].name
-                                                +"?startDate="+_this.dateRange[0]+"&endDate="+_this.dateRange[1]);
+                                    if (_this.params[0].data.type == 'departmentName') {
+                                        if (_this.params[0].data.hasSubDept) {
+                                            if (_this.parentDeptId != _this.params[0].data.id) {
+                                                _this.parentDeptId = _this.params[0].data.id;
+                                                _this.parentDeptStack.push(_this.parentDeptId);
+                                                _this.jieliu();
+                                            }
+                                            // _this.jieliu();
                                         } else {
-                                            _this.$router.push("/costDep/" + _this.params[0].data.id + "/" + _this.params[0].name);
+                                            if (_this.dateRange != null) {
+                                                _this.$router.push("/costDep/" + _this.params[0].data.id + "/" + _this.params[0].name
+                                                    +"?startDate="+_this.dateRange[0]+"&endDate="+_this.dateRange[1]);
+                                            } else {
+                                                _this.$router.push("/costDep/" + _this.params[0].data.id + "/" + _this.params[0].name);
+                                            }
                                         }
                                     }
                                 }