Sfoglia il codice sorgente

user history salary

seyason 4 anni fa
parent
commit
31f1a74b6c
24 ha cambiato i file con 675 aggiunte e 86 eliminazioni
  1. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectUserSalaryController.java
  2. 4 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserController.java
  3. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserSalaryController.java
  4. 73 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProjectUserSalary.java
  5. 86 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/UserSalary.java
  6. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectUserSalaryMapper.java
  7. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/UserSalaryMapper.java
  8. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectUserSalaryService.java
  9. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserSalaryService.java
  10. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserService.java
  11. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectUserSalaryServiceImpl.java
  12. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserSalaryServiceImpl.java
  13. 25 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  14. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectUserSalaryMapper.xml
  15. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserSalaryMapper.xml
  16. 26 3
      fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/demo_index.html
  17. 7 3
      fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.css
  18. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.js
  19. 7 0
      fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.json
  20. BIN
      fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.ttf
  21. BIN
      fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.woff
  22. BIN
      fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.woff2
  23. 204 76
      fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue
  24. 52 1
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectUserSalaryController.java

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-19
+ */
+@RestController
+@RequestMapping("/project-user-salary")
+public class ProjectUserSalaryController {
+
+}
+

+ 4 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserController.java

@@ -143,6 +143,9 @@ public class UserController {
         return userService.switchPermission(id, request);
     }
 
-
+    @RequestMapping("/getUserSalaryList")
+    public HttpRespMsg getUserSalaryList(String id) {
+        return userService.getUserSalaryList(id);
+    }
 }
 

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserSalaryController.java

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-19
+ */
+@RestController
+@RequestMapping("/user-salary")
+public class UserSalaryController {
+
+}
+

+ 73 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProjectUserSalary.java

@@ -0,0 +1,73 @@
+package com.management.platform.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ProjectUserSalary extends Model<ProjectUserSalary> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 项目id
+     */
+    @TableField("project_id")
+    private Integer projectId;
+
+    /**
+     * 用户id
+     */
+    @TableField("user_id")
+    private String userId;
+
+    /**
+     * 用户姓名
+     */
+    @TableField("user_name")
+    private String userName;
+
+    /**
+     * 月薪
+     */
+    @TableField("month_cost")
+    private BigDecimal monthCost;
+
+    /**
+     * 时薪
+     */
+    @TableField("cost")
+    private BigDecimal cost;
+
+    /**
+     * 薪资类型
+     */
+    @TableField("salary_type")
+    private Integer salaryType;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 86 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/UserSalary.java

@@ -0,0 +1,86 @@
+package com.management.platform.entity;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class UserSalary extends Model<UserSalary> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 用户id
+     */
+    @TableField("user_id")
+    private String userId;
+
+    /**
+     * 用户姓名
+     */
+    @TableField("user_name")
+    private String userName;
+
+    /**
+     * 月薪
+     */
+    @TableField("month_cost")
+    private BigDecimal monthCost;
+
+    /**
+     * 时薪
+     */
+    @TableField("cost")
+    private BigDecimal cost;
+
+    /**
+     * 薪资类型
+     */
+    @TableField("salary_type")
+    private Integer salaryType;
+
+    /**
+     * 更新时间
+     */
+    @TableField("indate")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+    private LocalDateTime indate;
+
+    public static UserSalary copyFromUser(User user) {
+        UserSalary userSalary = new UserSalary();
+        userSalary.setUserId(user.getId());
+        userSalary.setSalaryType(user.getSalaryType());
+        userSalary.setMonthCost(user.getMonthCost());
+        userSalary.setCost(user.getCost());
+        userSalary.setUserName(user.getName());
+        return  userSalary;
+    }
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectUserSalaryMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.ProjectUserSalary;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-19
+ */
+public interface ProjectUserSalaryMapper extends BaseMapper<ProjectUserSalary> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/UserSalaryMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.UserSalary;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-19
+ */
+public interface UserSalaryMapper extends BaseMapper<UserSalary> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectUserSalaryService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.ProjectUserSalary;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-19
+ */
+public interface ProjectUserSalaryService extends IService<ProjectUserSalary> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserSalaryService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.UserSalary;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-19
+ */
+public interface UserSalaryService extends IService<UserSalary> {
+
+}

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserService.java

@@ -39,4 +39,6 @@ public interface UserService extends IService<User> {
     HttpRespMsg switchPermission(String id, HttpServletRequest request);
 
     HttpRespMsg resetPwd(String userId);
+
+    HttpRespMsg getUserSalaryList(String id);
 }

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectUserSalaryServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.ProjectUserSalary;
+import com.management.platform.mapper.ProjectUserSalaryMapper;
+import com.management.platform.service.ProjectUserSalaryService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-19
+ */
+@Service
+public class ProjectUserSalaryServiceImpl extends ServiceImpl<ProjectUserSalaryMapper, ProjectUserSalary> implements ProjectUserSalaryService {
+
+}

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserSalaryServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.UserSalary;
+import com.management.platform.mapper.UserSalaryMapper;
+import com.management.platform.service.UserSalaryService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2021-05-19
+ */
+@Service
+public class UserSalaryServiceImpl extends ServiceImpl<UserSalaryMapper, UserSalary> implements UserSalaryService {
+
+}

+ 25 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -50,6 +50,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     private TimeTypeMapper timeTypeMapper;
     @Resource
     private ProjectMapper projectMapper;
+    @Resource
+    private UserSalaryMapper userSalaryMapper;
     //登录网页端
     @Override
     public HttpRespMsg loginAdmin(String username, String password) {
@@ -236,6 +238,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                     httpRespMsg.setError("只有负责人可以删除管理员账号");
                 } else {
                     userMapper.deleteById(userId);
+                    userSalaryMapper.delete(new QueryWrapper<UserSalary>().eq("user_id", userId));
                 }
             }
         } catch (NullPointerException e) {
@@ -350,13 +353,22 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                                             convertDepartmentIdToCascade(departmentId));
                             if (userMapper.insert(user) == 0) {
                                 httpRespMsg.setError("操作失败");
+                            } else {
+                                //插入人员历史成本表
+                                UserSalary userSalary = UserSalary.copyFromUser(user);
+                                userSalaryMapper.insert(userSalary);
                             }
                         }
                     }
                 }
             } else {
                 //修改
-                userMapper.updateById(userMapper.selectById(targetId)
+                User oldUser = userMapper.selectById(targetId);
+                boolean salaryChange = false;
+                if (oldUser.getMonthCost().compareTo(monthCostValue) != 0 || oldUser.getCost().compareTo(costValue) != 0) {
+                    salaryChange = true;
+                }
+                userMapper.updateById(oldUser
                         .setName(name)
                         .setPhone(phone)
                         .setRole(role)
@@ -367,6 +379,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                         .setDepartmentCascade(departmentId == null ?
                                 convertDepartmentIdToCascade(0) :
                                 convertDepartmentIdToCascade(departmentId)));
+                if (salaryChange) {
+                    UserSalary userSalary = UserSalary.copyFromUser(oldUser);
+                    userSalaryMapper.insert(userSalary);
+                }
             }
         } catch (NullPointerException e) {
             httpRespMsg.setError("数据有误 验证失败");
@@ -560,4 +576,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
         return new HttpRespMsg();
     }
+
+    @Override
+    public HttpRespMsg getUserSalaryList(String id) {
+        List<UserSalary> userSalaries = userSalaryMapper.selectList(new QueryWrapper<UserSalary>().eq("user_id", id).orderByDesc("id"));
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.data = userSalaries;
+        return msg;
+    }
 }

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectUserSalaryMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.ProjectUserSalaryMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.ProjectUserSalary">
+        <id column="id" property="id" />
+        <result column="project_id" property="projectId" />
+        <result column="user_id" property="userId" />
+        <result column="user_name" property="userName" />
+        <result column="month_cost" property="monthCost" />
+        <result column="cost" property="cost" />
+        <result column="salary_type" property="salaryType" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, project_id, user_id, user_name, month_cost, cost, salary_type
+    </sql>
+
+</mapper>

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserSalaryMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.UserSalaryMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.UserSalary">
+        <id column="id" property="id" />
+        <result column="user_id" property="userId" />
+        <result column="user_name" property="userName" />
+        <result column="month_cost" property="monthCost" />
+        <result column="cost" property="cost" />
+        <result column="salary_type" property="salaryType" />
+        <result column="indate" property="indate" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, user_id, user_name, month_cost, cost, salary_type, indate
+    </sql>
+
+</mapper>

+ 26 - 3
fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/demo_index.html

@@ -54,6 +54,12 @@
       <div class="content unicode" style="display: block;">
           <ul class="icon_lists dib-box">
           
+            <li class="dib">
+              <span class="icon iconfont">&#xe605;</span>
+                <div class="name">记录</div>
+                <div class="code-name">&amp;#xe605;</div>
+              </li>
+          
             <li class="dib">
               <span class="icon iconfont">&#xe613;</span>
                 <div class="name">导入</div>
@@ -252,9 +258,9 @@
 <pre><code class="language-css"
 >@font-face {
   font-family: 'iconfont';
-  src: url('iconfont.woff2?t=1621300718527') format('woff2'),
-       url('iconfont.woff?t=1621300718527') format('woff'),
-       url('iconfont.ttf?t=1621300718527') format('truetype');
+  src: url('iconfont.woff2?t=1621389362090') format('woff2'),
+       url('iconfont.woff?t=1621389362090') format('woff'),
+       url('iconfont.ttf?t=1621389362090') format('truetype');
 }
 </code></pre>
           <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@@ -280,6 +286,15 @@
       <div class="content font-class">
         <ul class="icon_lists dib-box">
           
+          <li class="dib">
+            <span class="icon iconfont firerock-iconrecord"></span>
+            <div class="name">
+              记录
+            </div>
+            <div class="code-name">.firerock-iconrecord
+            </div>
+          </li>
+          
           <li class="dib">
             <span class="icon iconfont firerock-icondaoru"></span>
             <div class="name">
@@ -577,6 +592,14 @@
       <div class="content symbol">
           <ul class="icon_lists dib-box">
           
+            <li class="dib">
+                <svg class="icon svg-icon" aria-hidden="true">
+                  <use xlink:href="#firerock-iconrecord"></use>
+                </svg>
+                <div class="name">记录</div>
+                <div class="code-name">#firerock-iconrecord</div>
+            </li>
+          
             <li class="dib">
                 <svg class="icon svg-icon" aria-hidden="true">
                   <use xlink:href="#firerock-icondaoru"></use>

+ 7 - 3
fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.css

@@ -1,8 +1,8 @@
 @font-face {
   font-family: "iconfont"; /* Project id 2390497 */
-  src: url('iconfont.woff2?t=1621300718527') format('woff2'),
-       url('iconfont.woff?t=1621300718527') format('woff'),
-       url('iconfont.ttf?t=1621300718527') format('truetype');
+  src: url('iconfont.woff2?t=1621389362090') format('woff2'),
+       url('iconfont.woff?t=1621389362090') format('woff'),
+       url('iconfont.ttf?t=1621389362090') format('truetype');
 }
 
 .iconfont {
@@ -13,6 +13,10 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.firerock-iconrecord:before {
+  content: "\e605";
+}
+
 .firerock-icondaoru:before {
   content: "\e613";
 }

File diff suppressed because it is too large
+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.js


+ 7 - 0
fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.json

@@ -5,6 +5,13 @@
   "css_prefix_text": "firerock-icon",
   "description": "",
   "glyphs": [
+    {
+      "icon_id": "12000587",
+      "name": "记录",
+      "font_class": "record",
+      "unicode": "e605",
+      "unicode_decimal": 58885
+    },
     {
       "icon_id": "20147073",
       "name": "导入",

BIN
fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.ttf


BIN
fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.woff


BIN
fhKeeper/formulahousekeeper/timesheet/src/assets/myfont/iconfont.woff2


+ 204 - 76
fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue

@@ -45,78 +45,156 @@
     <div class="staff" style="margin-left: 250px" v-if="!displayTable">
       <!-- 公共 -->
       <div class="public">
-        <el-form :model="form" label-width="80px">
+        <el-form :model="addForm" label-width="80px">
           <!-- <el-form :model="form" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"> -->
           <!-- 填报人 -->
           <el-form-item label="填报人">
-            <el-select v-model="form.region" placeholder="请选择填报人" style="width: 150px">
-              <el-option label="区域一" value="shanghai"></el-option>
-              <el-option label="区域二" value="beijing"></el-option>
+            <el-select v-model="addForm.ownerId" placeholder="请选择填报人" style="width: 150px">
+              <span v-for="(item, index) in users" :key="index">
+                <el-option :label="item.name" :value="item.id"></el-option>
+              </span>
             </el-select>
           </el-form-item>
           <!-- 填报日期 -->
-          <el-form-item label="活动时间" style="position: relative;top: 38px;">
+          <el-form-item label="填报日期" style="position: relative;top: 38px;">
             <el-col :span="11">
-              <el-date-picker type="date" placeholder="选择日期" v-model="form.date1" style="width: 200px;"></el-date-picker>
+              <el-date-picker type="date" placeholder="选择日期" v-model="addForm.createDate" value-format="yyyy-MM-dd" style="width: 200px;"></el-date-picker>
             </el-col>
           </el-form-item>
           <!-- 发票张数 -->
           <el-form-item label="发票张数">
-            <el-input v-model="form.name" style="width: 150px"></el-input>
+            <el-input v-model="addForm.ticketNum" style="width: 150px"></el-input>
           </el-form-item>
           <!-- 费用类型 -->
           <el-form-item label="费用类型">
-            <el-select v-model="form.region" placeholder="请选择费用类型" style="width: 150px">
-              <el-option label="一般" value="shanghai"></el-option>
-              <el-option label="外包" value="beijing"></el-option>
-              <el-option label="差旅" value="beijing"></el-option>
+            <el-select v-model="addForm.type" placeholder="请选择费用类型" style="width: 150px">
+              <el-option label="一般" value="0"></el-option>
+              <el-option label="外包" value="1"></el-option>
+              <el-option label="差旅" value="2"></el-option>
             </el-select>
           </el-form-item>
           
           <!-- 备注 -->
           <el-form-item label="备注" style="display: block; width: 70%; float: left;">
-            <el-input type="textarea" v-model="form.desc"></el-input>
+            <el-input type="textarea" v-model="addForm.remark"></el-input>
           </el-form-item>
           <!-- 总成本 -->
-          <div style="float: left; line-height: 55px;margin-left:20px">总成本 1000 元</div>
+          <div style="float: left; line-height: 55px;margin-left:20px">总成本 <el-link disabled v-model="addForm.totalAmount">{{addForm.totalAmount}}</el-link> 元</div>
         </el-form>
       </div>
       <!-- 按钮 -->
       <div class="pu_button">
-        <el-button type="primary">新增</el-button>
-        <el-button type="success">保存</el-button>
-        <el-button type="warning">提交</el-button>
+        <el-button type="primary" @click="addxz">新增</el-button>
+        <el-button type="warning" @click="submits">提交</el-button>
       </div>
+
+      <!-- 新增页面 -->
+      <el-dialog
+        title="新增"
+        :visible.sync="dialogVisible"
+        width="30%"
+        :before-close="handleClose">
+        
+        <div class="messages">
+          <el-form ref="form" :model="form" label-width="80px">
+            <!-- 项目 -->
+            <el-form-item label="项目">
+              <el-select v-model="form.projectId" placeholder="项目" style="width: 150px">
+                <el-option v-for="(item, index) in projectList" :key="index" :label="item.projectName" :value="item.id" @click="ok(item)"></el-option>
+              </el-select>
+            </el-form-item>
+            <!-- 费用日期 -->
+            <div class="sdat">费用日期:<el-date-picker
+              v-model="form.happenDate"
+              type="date"
+              value-format="yyyy-MM-dd"
+              placeholder="选择日期">
+            </el-date-picker></div>
+            <!-- 发票种类 -->
+            <el-form-item label="发票种类">
+              <el-select v-model="form.invoiceType" default-value="yyyy-MM-dd" placeholder="请选择费用类型" style="width: 150px">
+                <el-option label="增值税专用发票" value="0"></el-option>
+                <el-option label="增值税普通发票" value="1"></el-option>
+              </el-select>
+            </el-form-item>
+          <!-- 费用金额 -->
+          <el-form-item label="费用金额">
+              <el-input v-model.number="form.amount"></el-input>
+            </el-form-item>
+          <!-- 发票号 -->
+            <el-form-item label="发票号">
+              <el-input disabled v-model="form.invoiceNo"></el-input>
+            </el-form-item>
+          <!-- 税率 -->
+            <el-form-item label="税率">
+              <el-input v-model.number="form.taxPercent"></el-input>%
+            </el-form-item>
+          <!-- 税额 -->
+            <el-form-item label="税额">
+              <el-input v-model.number="form.taxValue"></el-input>元
+            </el-form-item>
+            <!-- 备注 -->
+            <el-form-item label="备注">
+              <el-input v-model="form.remark"></el-input>
+            </el-form-item>
+          
+          </el-form>
+        </div>
+
+        <span slot="footer" class="dialog-footer">
+          <el-button @click="dialogVisible = false">取 消</el-button>
+          <el-button type="primary" @click="ensure">确 定</el-button>
+        </span>
+      </el-dialog>
+
       <!-- 表格 -->
       <div class="pu_table">
         <el-table
-          :data="tableData"
+          :data="invoiceList"
           border
           style="width: 100%">
           <el-table-column
-            prop="date"
+            prop="projectName"
             label="项目"
             width="180">
           </el-table-column>
           <el-table-column
-            prop="name"
+            prop="happenDate"
             label="费用日期"
             width="180">
           </el-table-column>
+          <!-- <el-table-column
+            prop="invoiceType"
+            label="发票种类" v-if="invoiceType == '0'">
+            增值税专用发票
+          </el-table-column>
+          <el-table-column
+            prop="invoiceType"
+            label="发票种类" v-if="invoiceType == '1'">
+            增值税普通发票
+          </el-table-column> -->
           <el-table-column
-            prop="address"
+            prop="invoiceType"
             label="发票种类">
           </el-table-column>
           <el-table-column
-            prop="a"
+            prop="amount"
             label="费用金额">
           </el-table-column>
           <el-table-column
-            prop="b"
+            prop="invoiceNo"
             label="发票号">
           </el-table-column>
           <el-table-column
-            prop="c"
+            prop="taxPercent"
+            label="税率%">
+          </el-table-column>
+          <el-table-column
+            prop="taxValue"
+            label="税额">
+          </el-table-column>
+          <el-table-column
+            prop="remark"
             label="备注">
           </el-table-column>
         </el-table>
@@ -210,54 +288,13 @@ export default {
       date:null,
       type:null,
       ownerId: null,
+      users: [], // 人员信息
       displayTable: false,
-      form: {
-          name: '',
-          region: '',
-          date1: '',
-          date2: '',
-          delivery: false,
-          type: [],
-          resource: '',
-          desc: '',
-          kk: ''
-        },
-      tableData: [{
-          date: '测试项目',
-          name: '2021-5-18',
-          address: '测试项目',
-          a: '10000',
-          b: '10086',
-          c: 'abc'
-        },{
-          date: '测试项目',
-          name: '2021-5-18',
-          address: '测试项目',
-          a: '10000',
-          b: '10086',
-          c: 'abc'
-        },{
-          date: '测试项目',
-          name: '2021-5-18',
-          address: '测试项目',
-          a: '10000',
-          b: '10086',
-          c: 'abc'
-        },{
-          date: '测试项目',
-          name: '2021-5-18',
-          address: '测试项目',
-          a: '10000',
-          b: '10086',
-          c: 'abc'
-        },{
-          date: '测试项目',
-          name: '2021-5-18',
-          address: '测试项目',
-          a: '10000',
-          b: '10086',
-          c: 'abc'
-        }],
+      getLists: [],
+      ProjectList: [], // 项目列表
+      companyId: [], // 人员的id
+      dialogVisible: false,
+      code: null,
         options: [{
           value: '选项1',
           label: '黄金糕'
@@ -274,10 +311,14 @@ export default {
           value: '选项5',
           label: '北京烤鸭'
         }],
-      addForm:{code:null,companyId:null,createDate:null, ticketNum:0,type:0,remark:null,totalAmount:0,},
+      addForm:{code:null,ownerId:null,createDate: null, ticketNum:0,type:0,remark:null,totalAmount:0,},
       page: 1,
       size:20,
-
+      form: {happenDate: null,invoiceType:null,amount:null,invoiceNo:null,taxPercent:null,taxValue:null,remark:null},
+      invoiceList: [],
+      kkk: null, // 
+      ddId: null,
+      dldl: []
     };
   },
   computed: {},
@@ -290,18 +331,95 @@ export default {
         that.tableHeight = window.innerHeight - 195;
     };
   },
+
   mounted() {
-    this.getList();
+    this.getUsers() // 获取人员信息
+    this.getList() // 获取单据列表
+    this.getProjectList()
   },
   methods: {
-
     staffs() { // 控制员工费用报表
       this.displayTable = false;
     },
     bills() { // 控制
       this.displayTable = true
     },
-
+    //  获取人员信息
+    getUsers() {
+        this.http.post(this.port.manage.list, {
+            departmentId: -1,
+            pageIndex: 1,
+            pageSize: 99999
+        },
+        res => {
+            if (res.code == "ok") {
+                this.users = res.data.records;
+                console.log(this.users, '得到的数据');
+            } else {
+                this.$message({
+                message: res.msg,
+                type: "error"
+                });
+            }
+        },
+        error => {
+            this.$message({
+                message: error,
+                type: "error"
+            });
+        });
+    },
+    // 提交事件
+    submits() {
+      this.add() // 获取单据编码
+    },
+    // 点击新增
+    addxz() {
+      this.dialogVisible = true
+      this.getNextCode() // 获取到单据编码
+    },
+    // 点击确定
+    ensure() {
+      this.dialogVisible = false
+      this.form.projectName = this.projectList.filter(p=>p.id == this.form.projectId)[0].projectName;
+      this.invoiceList.push(this.form)
+      // this.ok()
+      this.form = {happenDate: null,invoiceType:null,amount:null,invoiceNo:null,taxPercent:null,taxValue:null,remark:null}
+    },
+    // ok(){
+    //   var nadao = this.projectList
+    //   var kk = this.form.projectId
+    //   var c = 0
+    //   console.log(kk, nadao);
+    //   for(var i = 0; i <= nadao.length; i++) {
+    //       c++
+    //       if(nadao[i].projectName == kk){
+    //           this.ddId = nadao[c - 1].id
+    //       }
+    //   }
+    //   console.log(this.ddId);
+    // },
+    //获取项目列表
+    getProjectList() {
+        this.http.post( this.port.project.list, {},
+        res => {
+            if (res.code == "ok") {
+                this.projectList = res.data;
+                console.log(this.projectList, '打印过来的');
+            } else {
+                this.$message({
+                    message: res.msg,
+                    type: "error"
+                });
+            }
+        },
+        error => {
+            this.$message({
+                message: error,
+                type: "error"
+            });
+        });
+    },
     //获取单据列表
     getList() {
       this.http.post('/expense-sheet/list', {pageIndex: this.page,
@@ -354,7 +472,10 @@ export default {
     },
     //创建单据
     add() {
-      this.addForm.items = '';//这里要传发票列表的json转string
+      // happenDate
+      // this.addForm.items = JSON.stringify(this.form);//这里要传发票列表的json转string
+      this.addForm.items = JSON.stringify(this.invoiceList)//这里要传发票列表的json转string
+      console.log(this.addForm, '传过去的数据');
         this.http.post('/expense-sheet/add', this.addForm,
         res => {
             if (res.code == "ok") {
@@ -384,6 +505,8 @@ export default {
         res => {
             if (res.code == "ok") {
                 this.addForm.code = res.data;
+                this.form.invoiceNo = res.data
+                console.log(this.addForm.code, '获取到的单据编码');
             } else {
                 this.$message({
                 message: res.msg,
@@ -477,4 +600,9 @@ export default {
 
 /* 我的单据报销凭证 */
 
+
+/*  */
+.sdat{
+  margin:0 0 20px 10px;
+}
 </style>

+ 52 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -72,7 +72,9 @@
                     <template slot-scope="scope">{{scope.row.monthCost==null?0:scope.row.monthCost}} 元</template>
                 </el-table-column>
                 <el-table-column prop="cost" label="时薪" sortable>
-                    <template slot-scope="scope">{{scope.row.cost==null?0:scope.row.cost}} 元</template>
+                    <template slot-scope="scope">{{scope.row.cost==null?0:scope.row.cost}} 元
+                        <el-link @click.native="showSalaryList(scope.row)"><i class="iconfont firerock-iconrecord"></i></el-link>
+                    </template>
                 </el-table-column>
                 <el-table-column label="操作" width="280">
                     <template slot-scope="scope">
@@ -188,6 +190,30 @@
                 <el-button type="primary" @click="submitInsert1">提交</el-button>
             </span>
         </el-dialog>
+
+        <el-dialog title="人员历史成本" :visible.sync="userSalaryListDialog" width="550px" >
+            <el-table :data="userSalaryList" highlight-current-row v-loading="listLoading" height="300px" style="width: 100%;">
+                <el-table-column prop="userName" label="姓名" ></el-table-column>
+                <el-table-column prop="indate" label="更新时间" width="150px">
+                </el-table-column>
+                <el-table-column prop="salaryType" label="薪酬方式" >
+                    <template slot-scope="scope" >
+                        {{scope.row.salaryType==0?"固定月薪":"计时工资"}}
+                    </template>
+                </el-table-column>
+                <el-table-column prop="monthCost" label="月薪" >
+                    <template slot-scope="scope" >
+                        {{scope.row.monthCost}}元
+                    </template>
+                </el-table-column>
+                <el-table-column prop="cost" label="时薪" >
+                    <template slot-scope="scope" >
+                        {{scope.row.cost}}元
+                    </template>
+                </el-table-column>
+                
+            </el-table>
+        </el-dialog>
     </section>
 </template>
 
@@ -195,6 +221,8 @@
     export default {
         data() {
             return {
+                userSalaryList:[],
+                userSalaryListDialog: false,
                 value:{},
                 user: JSON.parse(sessionStorage.getItem("user")),
                 users:[],
@@ -261,6 +289,29 @@
             };
         },
         methods: {
+            showSalaryList(item) {
+                this.userSalaryListDialog = true;
+                this.userSalaryList = [];
+                this.http.post('/user/getUserSalaryList', {
+                    id: item.id
+                },
+                res => {
+                    if (res.code == "ok") {
+                        this.userSalaryList = res.data;
+                    } else {
+                        this.$message({
+                        message: res.msg,
+                        type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
             getUsers() {
                 this.http.post(this.port.manage.list, {
                     departmentId: -1,