From 8cbd2425dc7e21e9dfb56f3f68f13ec82142655b Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 07 九月 2023 15:41:01 +0800
Subject: [PATCH] #dashboard

---
 src/main/resources/mapper/OrderMapper.xml                                   |   27 
 src/main/java/com/zy/crm/manager/controller/DashboardController.java        |  112 +++
 src/main/resources/mapper/UserMapper.xml                                    |    1 
 src/main/java/com/zy/crm/manager/service/CompanyPostService.java            |    8 
 src/main/webapp/static/js/companyPost/companyPost.js                        |  262 +++++++
 src/main/java/com/zy/crm/manager/service/impl/OrderServiceImpl.java         |   39 +
 src/main/webapp/static/js/companyTarget/companyTarget.js                    |  427 +++++++++++
 src/main/webapp/views/companyTarget/companyTarget.html                      |   98 ++
 src/main/java/com/zy/crm/manager/mapper/CompanyPostMapper.java              |   12 
 src/main/java/com/zy/crm/manager/service/CompanyTargetService.java          |   10 
 src/main/java/com/zy/crm/manager/service/impl/CompanyPostServiceImpl.java   |   12 
 src/main/java/com/zy/crm/manager/utils/WordUtils.java                       |    3 
 src/main/java/com/zy/crm/manager/entity/CompanyPost.java                    |   92 ++
 src/main/java/com/zy/crm/system/entity/User.java                            |   11 
 src/main/java/com/zy/crm/manager/mapper/OrderMapper.java                    |    9 
 src/main/webapp/views/detail.html                                           |    6 
 src/main/java/com/zy/crm/manager/controller/CompanyPostController.java      |  139 +++
 src/main/resources/mapper/CompanyPostMapper.xml                             |   17 
 src/main/java/com/zy/crm/manager/service/impl/CompanyTargetServiceImpl.java |   16 
 src/main/webapp/views/companyPost/companyPost.html                          |   98 ++
 src/main/java/com/zy/crm/manager/mapper/CompanyTargetMapper.java            |   14 
 src/main/resources/mapper/CompanyTargetMapper.xml                           |   22 
 src/main/java/com/zy/crm/manager/controller/CompanyTargetController.java    |  148 ++++
 src/main/java/com/zy/crm/manager/service/OrderService.java                  |   12 
 src/main/webapp/views/home/dashboard.html                                   |  409 +++++-----
 src/main/java/com/zy/crm/manager/entity/CompanyTarget.java                  |  100 ++
 26 files changed, 1,902 insertions(+), 202 deletions(-)

diff --git a/src/main/java/com/zy/crm/manager/controller/CompanyPostController.java b/src/main/java/com/zy/crm/manager/controller/CompanyPostController.java
new file mode 100644
index 0000000..e6cd8d8
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/controller/CompanyPostController.java
@@ -0,0 +1,139 @@
+package com.zy.crm.manager.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.common.DateUtils;
+import com.zy.crm.manager.entity.CompanyPost;
+import com.zy.crm.manager.service.CompanyPostService;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.core.domain.KeyValueVo;
+import com.zy.crm.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+@RestController
+public class CompanyPostController extends BaseController {
+
+    @Autowired
+    private CompanyPostService companyPostService;
+
+    @RequestMapping(value = "/companyPost/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(companyPostService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/companyPost/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<CompanyPost> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        allLike(CompanyPost.class, param.keySet(), wrapper, condition);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(companyPostService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/companyPost/add/auth")
+    @ManagerAuth(memo = "娣诲姞鍏憡")
+    public R add(CompanyPost companyPost) {
+        companyPost.setCreateTime(new Date());
+        companyPost.setUserId(getUserId());
+        companyPostService.insert(companyPost);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/companyPost/update/auth")
+	@ManagerAuth(memo = "鏇存柊鍏憡")
+    public R update(CompanyPost companyPost){
+        if (Cools.isEmpty(companyPost) || null==companyPost.getId()){
+            return R.error();
+        }
+        companyPost.setUpdateTime(new Date());
+        companyPost.setUpdateUserId(getUserId());
+        companyPostService.updateById(companyPost);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/companyPost/delete/auth")
+    @ManagerAuth(memo = "鍒犻櫎鍏憡")
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+            companyPostService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/companyPost/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<CompanyPost> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("companyPost"));
+        convert(map, wrapper);
+        List<CompanyPost> list = companyPostService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/companyPostQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<CompanyPost> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<CompanyPost> page = companyPostService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (CompanyPost companyPost : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", companyPost.getId());
+            map.put("value", companyPost.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/companyPost/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<CompanyPost> wrapper = new EntityWrapper<CompanyPost>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != companyPostService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(CompanyPost.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping("/companyPost/all/get/kv")
+    @ManagerAuth
+    public R getDataKV(@RequestParam(required = false) String condition) {
+        List<KeyValueVo> vos = new ArrayList<>();
+        Wrapper<CompanyPost> wrapper = new EntityWrapper<CompanyPost>().andNew().like("id", condition).orderBy("create_time", false);
+        companyPostService.selectPage(new Page<>(1, 30), wrapper).getRecords().forEach(item -> vos.add(new KeyValueVo(String.valueOf(item.getId()), item.getId())));
+        return R.ok().add(vos);
+    }
+
+}
diff --git a/src/main/java/com/zy/crm/manager/controller/CompanyTargetController.java b/src/main/java/com/zy/crm/manager/controller/CompanyTargetController.java
new file mode 100644
index 0000000..fdbbeec
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/controller/CompanyTargetController.java
@@ -0,0 +1,148 @@
+package com.zy.crm.manager.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.core.common.DateUtils;
+import com.zy.crm.manager.entity.CompanyTarget;
+import com.zy.crm.manager.service.CompanyTargetService;
+import com.core.annotations.ManagerAuth;
+import com.core.common.BaseRes;
+import com.core.common.Cools;
+import com.core.common.R;
+import com.core.domain.KeyValueVo;
+import com.zy.crm.common.web.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@RestController
+public class CompanyTargetController extends BaseController {
+
+    @Autowired
+    private CompanyTargetService companyTargetService;
+
+    @RequestMapping(value = "/companyTarget/current/auth")
+    @ManagerAuth
+    public R getCurrent() {
+        Date date = new Date();
+        SimpleDateFormat format = new SimpleDateFormat("yyyy");
+        String year = format.format(date);
+        return R.ok(companyTargetService.selectByYear(year));
+    }
+
+    @RequestMapping(value = "/companyTarget/{id}/auth")
+    @ManagerAuth
+    public R get(@PathVariable("id") String id) {
+        return R.ok(companyTargetService.selectById(String.valueOf(id)));
+    }
+
+    @RequestMapping(value = "/companyTarget/list/auth")
+    @ManagerAuth
+    public R list(@RequestParam(defaultValue = "1")Integer curr,
+                  @RequestParam(defaultValue = "10")Integer limit,
+                  @RequestParam(required = false)String orderByField,
+                  @RequestParam(required = false)String orderByType,
+                  @RequestParam(required = false)String condition,
+                  @RequestParam Map<String, Object> param){
+        EntityWrapper<CompanyTarget> wrapper = new EntityWrapper<>();
+        excludeTrash(param);
+        convert(param, wrapper);
+        allLike(CompanyTarget.class, param.keySet(), wrapper, condition);
+        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
+        return R.ok(companyTargetService.selectPage(new Page<>(curr, limit), wrapper));
+    }
+
+    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
+        for (Map.Entry<String, Object> entry : map.entrySet()){
+            String val = String.valueOf(entry.getValue());
+            if (val.contains(RANGE_TIME_LINK)){
+                String[] dates = val.split(RANGE_TIME_LINK);
+                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
+                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
+            } else {
+                wrapper.like(entry.getKey(), val);
+            }
+        }
+    }
+
+    @RequestMapping(value = "/companyTarget/add/auth")
+    @ManagerAuth(memo = "娣诲姞骞村害鐩爣")
+    public R add(CompanyTarget companyTarget) {
+        companyTarget.setCreateTime(new Date());
+        companyTarget.setUserId(getUserId());
+        companyTargetService.insert(companyTarget);
+        return R.ok();
+    }
+
+	@RequestMapping(value = "/companyTarget/update/auth")
+	@ManagerAuth(memo = "鏇存柊骞村害鐩爣")
+    public R update(CompanyTarget companyTarget){
+        if (Cools.isEmpty(companyTarget) || null==companyTarget.getId()){
+            return R.error();
+        }
+        companyTarget.setUpdateTime(new Date());
+        companyTarget.setUpdateUserId(getUserId());
+        companyTargetService.updateById(companyTarget);
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/companyTarget/delete/auth")
+    @ManagerAuth(memo = "鍒犻櫎骞村害鐩爣")
+    public R delete(@RequestParam(value="ids[]") Long[] ids){
+         for (Long id : ids){
+            companyTargetService.deleteById(id);
+        }
+        return R.ok();
+    }
+
+    @RequestMapping(value = "/companyTarget/export/auth")
+    @ManagerAuth
+    public R export(@RequestBody JSONObject param){
+        EntityWrapper<CompanyTarget> wrapper = new EntityWrapper<>();
+        List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class);
+        Map<String, Object> map = excludeTrash(param.getJSONObject("companyTarget"));
+        convert(map, wrapper);
+        List<CompanyTarget> list = companyTargetService.selectList(wrapper);
+        return R.ok(exportSupport(list, fields));
+    }
+
+    @RequestMapping(value = "/companyTargetQuery/auth")
+    @ManagerAuth
+    public R query(String condition) {
+        EntityWrapper<CompanyTarget> wrapper = new EntityWrapper<>();
+        wrapper.like("id", condition);
+        Page<CompanyTarget> page = companyTargetService.selectPage(new Page<>(0, 10), wrapper);
+        List<Map<String, Object>> result = new ArrayList<>();
+        for (CompanyTarget companyTarget : page.getRecords()){
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", companyTarget.getId());
+            map.put("value", companyTarget.getId());
+            result.add(map);
+        }
+        return R.ok(result);
+    }
+
+    @RequestMapping(value = "/companyTarget/check/column/auth")
+    @ManagerAuth
+    public R query(@RequestBody JSONObject param) {
+        Wrapper<CompanyTarget> wrapper = new EntityWrapper<CompanyTarget>().eq(humpToLine(String.valueOf(param.get("key"))), param.get("val"));
+        if (null != companyTargetService.selectOne(wrapper)){
+            return R.parse(BaseRes.REPEAT).add(getComment(CompanyTarget.class, String.valueOf(param.get("key"))));
+        }
+        return R.ok();
+    }
+
+    @RequestMapping("/companyTarget/all/get/kv")
+    @ManagerAuth
+    public R getDataKV(@RequestParam(required = false) String condition) {
+        List<KeyValueVo> vos = new ArrayList<>();
+        Wrapper<CompanyTarget> wrapper = new EntityWrapper<CompanyTarget>().andNew().like("id", condition).orderBy("create_time", false);
+        companyTargetService.selectPage(new Page<>(1, 30), wrapper).getRecords().forEach(item -> vos.add(new KeyValueVo(String.valueOf(item.getId()), item.getId())));
+        return R.ok().add(vos);
+    }
+
+}
diff --git a/src/main/java/com/zy/crm/manager/controller/DashboardController.java b/src/main/java/com/zy/crm/manager/controller/DashboardController.java
new file mode 100644
index 0000000..099330c
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/controller/DashboardController.java
@@ -0,0 +1,112 @@
+package com.zy.crm.manager.controller;
+
+import com.core.annotations.ManagerAuth;
+import com.core.common.R;
+import com.zy.crm.common.web.BaseController;
+import com.zy.crm.manager.entity.CompanyTarget;
+import com.zy.crm.manager.entity.Order;
+import com.zy.crm.manager.service.CompanyTargetService;
+import com.zy.crm.manager.service.OrderService;
+import com.zy.crm.manager.utils.WordUtils;
+import com.zy.crm.system.entity.User;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+@RestController
+public class DashboardController extends BaseController {
+
+    @Autowired
+    private CompanyTargetService companyTargetService;
+    @Autowired
+    private OrderService orderService;
+
+    //鑾峰彇鍥㈤槦鏁版嵁
+    @RequestMapping(value = "/dashboard/companyData/auth")
+    @ManagerAuth
+    public R getCompanyData() {
+        HashMap<String, Object> map = new HashMap<>();
+
+        Date date = new Date();
+        SimpleDateFormat format = new SimpleDateFormat("yyyy");
+        String year = format.format(date);
+        CompanyTarget companyTarget = companyTargetService.selectByYear(year);//鑾峰彇鍏徃鍏ㄥ勾鐩爣鏁版嵁
+        if (companyTarget == null) {
+            return R.error();
+        }
+        map.put("yearTarget", companyTarget.getTarget$());//鍏ㄥ勾浜ゆ槗鐩爣
+
+        //鑾峰彇鍏ㄥ勾浜ゆ槗鎴愬姛閲戦
+        Double successMoney = orderService.selectMoneyByYearAndStatus(year, 1);
+        //鑾峰彇鍏ㄥ勾鏈氦鏄撴垚鍔熼噾棰�
+        Double progressMoney = orderService.selectMoneyByYearAndStatus(year, 0);
+        //鑾峰彇鍏ㄥ勾浜ゆ槗澶辫触閲戦
+        Double failedMoney = orderService.selectMoneyByYearAndStatus(year, 2);
+        //鍏ㄥ勾浜ゆ槗鐜�
+        double yearTransactionRate = (successMoney / (successMoney + progressMoney + failedMoney)) * 100;
+        map.put("successMoney", WordUtils.formatNumberForAccounting(successMoney));//鍏ㄥ勾浜ゆ槗鎴愬姛閲戦
+        map.put("progressMoney", WordUtils.formatNumberForAccounting(progressMoney));//鍏ㄥ勾鏈氦鏄撴垚鍔熼噾棰�
+        map.put("yearTransactionRate", String.format("%.2f", yearTransactionRate));//鍏ㄥ勾浜ゆ槗鐜�
+        return R.ok().add(map);
+    }
+
+    //鑾峰彇鍛樺伐涓汉鏁版嵁
+    @RequestMapping(value = "/dashboard/personData/auth")
+    @ManagerAuth
+    public R getPersonData() {
+        HashMap<String, Object> map = new HashMap<>();
+
+        Date date = new Date();
+        SimpleDateFormat format = new SimpleDateFormat("yyyy");
+        String year = format.format(date);
+
+        User user = getUser();
+        String yearTarget = "0.00";//鑾峰彇涓汉鍏ㄥ勾鐩爣鏁版嵁
+        if (user.getTarget() != null) {
+            yearTarget = WordUtils.formatNumberForAccounting(Double.parseDouble(user.getTarget()));;
+        }
+        map.put("yearTarget", yearTarget);//鍏ㄥ勾浜ゆ槗鐩爣
+
+        //鑾峰彇鍏ㄥ勾浜ゆ槗鎴愬姛閲戦
+        Double successMoney = orderService.selectMoneyByUserAndYearAndStatus(user.getId(), year, 1);
+        //鑾峰彇鍏ㄥ勾鏈氦鏄撴垚鍔熼噾棰�
+        Double progressMoney = orderService.selectMoneyByUserAndYearAndStatus(user.getId(), year, 0);
+        //鑾峰彇鍏ㄥ勾浜ゆ槗澶辫触閲戦
+        Double failedMoney = orderService.selectMoneyByUserAndYearAndStatus(user.getId(), year, 2);
+        //鍏ㄥ勾浜ゆ槗鐜�
+        double yearTransactionRate = (successMoney / (successMoney + progressMoney + failedMoney)) * 100;
+        map.put("successMoney", WordUtils.formatNumberForAccounting(successMoney));//鍏ㄥ勾浜ゆ槗鎴愬姛閲戦
+        map.put("progressMoney", WordUtils.formatNumberForAccounting(progressMoney));//鍏ㄥ勾鏈氦鏄撴垚鍔熼噾棰�
+        map.put("yearTransactionRate", String.format("%.2f", yearTransactionRate));//鍏ㄥ勾浜ゆ槗鐜�
+        return R.ok().add(map);
+    }
+
+    //鑾峰彇鍛樺伐鎺掕姒�
+    @RequestMapping(value = "/dashboard/staffRank/auth")
+    @ManagerAuth
+    public R getStaffRank() {
+        ArrayList<HashMap<String, Object>> list = new ArrayList<>();
+        for (Order order : orderService.selectTopMoney()) {
+            HashMap<String, Object> map = new HashMap<>();
+            map.put("username", order.getUserId$());
+            map.put("money", WordUtils.formatNumberForAccounting(order.getMoney()));
+            list.add(map);
+        }
+        return R.ok().add(list);
+    }
+
+    //鑾峰彇褰撳墠骞村害12涓湀鐨勪氦鏄撴垚鍔熸暟鎹�
+    @RequestMapping(value = "/dashboard/currentMonthData/auth")
+    @ManagerAuth
+    public R getCurrentMonthData() {
+        List<Double> list = orderService.selectCurrentYearMonthSuccess();
+        return R.ok().add(list);
+    }
+
+}
diff --git a/src/main/java/com/zy/crm/manager/entity/CompanyPost.java b/src/main/java/com/zy/crm/manager/entity/CompanyPost.java
new file mode 100644
index 0000000..82e0caa
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/entity/CompanyPost.java
@@ -0,0 +1,92 @@
+package com.zy.crm.manager.entity;
+
+import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotations.TableField;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("man_company_post")
+public class CompanyPost implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value= "")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鍏憡鏍囬
+     */
+    @ApiModelProperty(value= "鍏憡鏍囬")
+    private String title;
+
+    /**
+     * 鍏憡鍐呭
+     */
+    @ApiModelProperty(value= "鍏憡鍐呭")
+    private String content;
+
+    @ApiModelProperty(value= "")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("user_id")
+    private Long userId;
+
+    @ApiModelProperty(value= "")
+    @TableField("update_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("update_user_id")
+    private Long updateUserId;
+
+    public CompanyPost() {}
+
+    public CompanyPost(String title,String content,Date createTime,Long userId,Date updateTime,Long updateUserId) {
+        this.title = title;
+        this.content = content;
+        this.createTime = createTime;
+        this.userId = userId;
+        this.updateTime = updateTime;
+        this.updateUserId = updateUserId;
+    }
+
+//    CompanyPost companyPost = new CompanyPost(
+//            null,    // 鍏憡鏍囬
+//            null,    // 鍏憡鍐呭
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null    // 
+//    );
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+
+}
diff --git a/src/main/java/com/zy/crm/manager/entity/CompanyTarget.java b/src/main/java/com/zy/crm/manager/entity/CompanyTarget.java
new file mode 100644
index 0000000..aaec960
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/entity/CompanyTarget.java
@@ -0,0 +1,100 @@
+package com.zy.crm.manager.entity;
+
+import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.enums.IdType;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.zy.crm.manager.utils.WordUtils;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+@Data
+@TableName("man_company_target")
+public class CompanyTarget implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value= "")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 骞村害
+     */
+    @ApiModelProperty(value= "骞村害")
+    private String year;
+
+    /**
+     * 鐩爣浜ゆ槗棰�
+     */
+    @ApiModelProperty(value= "鐩爣浜ゆ槗棰�")
+    private String target;
+
+    @ApiModelProperty(value= "")
+    @TableField("create_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("user_id")
+    private Long userId;
+
+    @ApiModelProperty(value= "")
+    @TableField("update_time")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    @ApiModelProperty(value= "")
+    @TableField("update_user_id")
+    private Long updateUserId;
+
+    public CompanyTarget() {}
+
+    public CompanyTarget(String year,String target,Date createTime,Long userId,Date updateTime,Long updateUserId) {
+        this.year = year;
+        this.target = target;
+        this.createTime = createTime;
+        this.userId = userId;
+        this.updateTime = updateTime;
+        this.updateUserId = updateUserId;
+    }
+
+//    CompanyTarget companyTarget = new CompanyTarget(
+//            null,    // 骞村害
+//            null,    // 鐩爣浜ゆ槗棰�
+//            null,    // 
+//            null,    // 
+//            null,    // 
+//            null    // 
+//    );
+
+    public String getCreateTime$(){
+        if (Cools.isEmpty(this.createTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
+    }
+
+    public String getUpdateTime$(){
+        if (Cools.isEmpty(this.updateTime)){
+            return "";
+        }
+        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
+    }
+
+    public String getTarget$() {
+        if (Cools.isEmpty(this.target)){
+            return "";
+        }
+        return WordUtils.formatNumberForAccounting(Double.parseDouble(this.target));
+    }
+
+
+}
diff --git a/src/main/java/com/zy/crm/manager/mapper/CompanyPostMapper.java b/src/main/java/com/zy/crm/manager/mapper/CompanyPostMapper.java
new file mode 100644
index 0000000..c1d11d4
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/mapper/CompanyPostMapper.java
@@ -0,0 +1,12 @@
+package com.zy.crm.manager.mapper;
+
+import com.zy.crm.manager.entity.CompanyPost;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface CompanyPostMapper extends BaseMapper<CompanyPost> {
+
+}
diff --git a/src/main/java/com/zy/crm/manager/mapper/CompanyTargetMapper.java b/src/main/java/com/zy/crm/manager/mapper/CompanyTargetMapper.java
new file mode 100644
index 0000000..e7dc1bc
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/mapper/CompanyTargetMapper.java
@@ -0,0 +1,14 @@
+package com.zy.crm.manager.mapper;
+
+import com.zy.crm.manager.entity.CompanyTarget;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface CompanyTargetMapper extends BaseMapper<CompanyTarget> {
+
+    CompanyTarget selectByYear(String year);
+
+}
diff --git a/src/main/java/com/zy/crm/manager/mapper/OrderMapper.java b/src/main/java/com/zy/crm/manager/mapper/OrderMapper.java
index 9903b1f..489b728 100644
--- a/src/main/java/com/zy/crm/manager/mapper/OrderMapper.java
+++ b/src/main/java/com/zy/crm/manager/mapper/OrderMapper.java
@@ -7,6 +7,7 @@
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.util.HashMap;
 import java.util.List;
 
 @Mapper
@@ -19,4 +20,12 @@
 
     List<Order> listByPage(Page<Order> page, @Param("hostId")Long hostId, @Param("deptId") String deptId, @Param("userId") Long userId , @Param("condition") String condition);
 
+    Double selectMoneyByYearAndStatus(String year, Integer status);//鑾峰彇鎸囧畾骞翠唤鍜岃鍗曠姸鎬佹�讳氦鏄撻噾棰�
+
+    Double selectMoneyByUserAndYearAndStatus(Long userId, String year, Integer status);//鑾峰彇鎸囧畾鐢ㄦ埛銆佸勾浠藉拰璁㈠崟鐘舵�佹�讳氦鏄撻噾棰�
+
+    List<Order> selectTopMoney();//鏌ヨ浜ゆ槗棰濆墠7鍚嶅憳宸�
+
+    List<HashMap<String, Object>> selectCurrentYearMonthSuccess();//鑾峰彇褰撳墠骞村害12涓湀鐨勪氦鏄撴垚鍔熼噾棰濇暟鎹�
+
 }
diff --git a/src/main/java/com/zy/crm/manager/service/CompanyPostService.java b/src/main/java/com/zy/crm/manager/service/CompanyPostService.java
new file mode 100644
index 0000000..a39315a
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/service/CompanyPostService.java
@@ -0,0 +1,8 @@
+package com.zy.crm.manager.service;
+
+import com.zy.crm.manager.entity.CompanyPost;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface CompanyPostService extends IService<CompanyPost> {
+
+}
diff --git a/src/main/java/com/zy/crm/manager/service/CompanyTargetService.java b/src/main/java/com/zy/crm/manager/service/CompanyTargetService.java
new file mode 100644
index 0000000..dc63c2b
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/service/CompanyTargetService.java
@@ -0,0 +1,10 @@
+package com.zy.crm.manager.service;
+
+import com.zy.crm.manager.entity.CompanyTarget;
+import com.baomidou.mybatisplus.service.IService;
+
+public interface CompanyTargetService extends IService<CompanyTarget> {
+
+    CompanyTarget selectByYear(String year);
+
+}
diff --git a/src/main/java/com/zy/crm/manager/service/OrderService.java b/src/main/java/com/zy/crm/manager/service/OrderService.java
index f84ab81..a1c20f8 100644
--- a/src/main/java/com/zy/crm/manager/service/OrderService.java
+++ b/src/main/java/com/zy/crm/manager/service/OrderService.java
@@ -4,6 +4,10 @@
 import com.baomidou.mybatisplus.service.IService;
 import com.zy.crm.manager.entity.Order;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 public interface OrderService extends IService<Order> {
 
     Order selectByUuid(Long hostId, String uuid);
@@ -12,4 +16,12 @@
 
     Page<Order> getPage(Page<Order> page, Long hostId, String deptId, Long userId, String condition);
 
+    Double selectMoneyByYearAndStatus(String year, Integer status);//鑾峰彇鎸囧畾骞翠唤鍜岃鍗曠姸鎬佹�讳氦鏄撻噾棰�
+
+    Double selectMoneyByUserAndYearAndStatus(Long userId, String year, Integer status);//鑾峰彇鎸囧畾鐢ㄦ埛銆佸勾浠藉拰璁㈠崟鐘舵�佹�讳氦鏄撻噾棰�
+
+    List<Order> selectTopMoney();//鏌ヨ浜ゆ槗棰濆墠7鍚嶅憳宸�
+
+    List<Double> selectCurrentYearMonthSuccess();//鑾峰彇褰撳墠骞村害12涓湀鐨勪氦鏄撴垚鍔熼噾棰濇暟鎹�
+
 }
diff --git a/src/main/java/com/zy/crm/manager/service/impl/CompanyPostServiceImpl.java b/src/main/java/com/zy/crm/manager/service/impl/CompanyPostServiceImpl.java
new file mode 100644
index 0000000..1ef63b3
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/service/impl/CompanyPostServiceImpl.java
@@ -0,0 +1,12 @@
+package com.zy.crm.manager.service.impl;
+
+import com.zy.crm.manager.mapper.CompanyPostMapper;
+import com.zy.crm.manager.entity.CompanyPost;
+import com.zy.crm.manager.service.CompanyPostService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("companyPostService")
+public class CompanyPostServiceImpl extends ServiceImpl<CompanyPostMapper, CompanyPost> implements CompanyPostService {
+
+}
diff --git a/src/main/java/com/zy/crm/manager/service/impl/CompanyTargetServiceImpl.java b/src/main/java/com/zy/crm/manager/service/impl/CompanyTargetServiceImpl.java
new file mode 100644
index 0000000..ed744ac
--- /dev/null
+++ b/src/main/java/com/zy/crm/manager/service/impl/CompanyTargetServiceImpl.java
@@ -0,0 +1,16 @@
+package com.zy.crm.manager.service.impl;
+
+import com.zy.crm.manager.mapper.CompanyTargetMapper;
+import com.zy.crm.manager.entity.CompanyTarget;
+import com.zy.crm.manager.service.CompanyTargetService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service("companyTargetService")
+public class CompanyTargetServiceImpl extends ServiceImpl<CompanyTargetMapper, CompanyTarget> implements CompanyTargetService {
+
+    @Override
+    public CompanyTarget selectByYear(String year) {
+        return this.baseMapper.selectByYear(year);
+    }
+}
diff --git a/src/main/java/com/zy/crm/manager/service/impl/OrderServiceImpl.java b/src/main/java/com/zy/crm/manager/service/impl/OrderServiceImpl.java
index 58bdc61..149c7f9 100644
--- a/src/main/java/com/zy/crm/manager/service/impl/OrderServiceImpl.java
+++ b/src/main/java/com/zy/crm/manager/service/impl/OrderServiceImpl.java
@@ -8,6 +8,10 @@
 import com.zy.crm.manager.service.OrderService;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
 @Service("orderService")
 public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
 
@@ -58,4 +62,39 @@
         }
     }
 
+    @Override
+    public Double selectMoneyByYearAndStatus(String year, Integer status) {
+        Double data = this.baseMapper.selectMoneyByYearAndStatus(year, status);
+        if (data == null) {
+            return 0D;
+        }
+        return data;
+    }
+
+    @Override
+    public Double selectMoneyByUserAndYearAndStatus(Long userId, String year, Integer status) {
+        Double data = this.baseMapper.selectMoneyByUserAndYearAndStatus(userId, year, status);
+        if (data == null) {
+            return 0D;
+        }
+        return data;
+    }
+
+    @Override
+    public List<Order> selectTopMoney() {
+        return this.baseMapper.selectTopMoney();
+    }
+
+    @Override
+    public List<Double> selectCurrentYearMonthSuccess() {
+        ArrayList<Double> list = new ArrayList<Double>(){{
+            add(0D);add(0D);add(0D);add(0D);
+            add(0D);add(0D);add(0D);add(0D);
+            add(0D);add(0D);add(0D);add(0D);
+        }};
+        for (HashMap<String, Object> map : this.baseMapper.selectCurrentYearMonthSuccess()) {
+            list.set(Integer.parseInt(map.get("mon").toString()) - 1, Double.parseDouble(map.get("money").toString()));
+        }
+        return list;
+    }
 }
diff --git a/src/main/java/com/zy/crm/manager/utils/WordUtils.java b/src/main/java/com/zy/crm/manager/utils/WordUtils.java
index c633862..74b58ac 100644
--- a/src/main/java/com/zy/crm/manager/utils/WordUtils.java
+++ b/src/main/java/com/zy/crm/manager/utils/WordUtils.java
@@ -168,6 +168,9 @@
     }
 
     public static String formatNumberForAccounting(double number) {
+        if (number == 0) {
+            return "0.00";
+        }
         NumberFormat formatter = new DecimalFormat("#,###.00");
         return formatter.format(number);
     }
diff --git a/src/main/java/com/zy/crm/system/entity/User.java b/src/main/java/com/zy/crm/system/entity/User.java
index 9ddf617..fd53a51 100644
--- a/src/main/java/com/zy/crm/system/entity/User.java
+++ b/src/main/java/com/zy/crm/system/entity/User.java
@@ -92,6 +92,11 @@
      */
     private Integer status;
 
+    /**
+     * 涓汉鍏ㄥ勾鐩爣
+     */
+    private String target;
+
     public Long getId() {
         return id;
     }
@@ -265,5 +270,11 @@
         this.status = status;
     }
 
+    public String getTarget() {
+        return target;
+    }
 
+    public void setTarget(String target) {
+        this.target = target;
+    }
 }
diff --git a/src/main/resources/mapper/CompanyPostMapper.xml b/src/main/resources/mapper/CompanyPostMapper.xml
new file mode 100644
index 0000000..879da56
--- /dev/null
+++ b/src/main/resources/mapper/CompanyPostMapper.xml
@@ -0,0 +1,17 @@
+<?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.zy.crm.manager.mapper.CompanyPostMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.crm.manager.entity.CompanyPost">
+        <id column="id" property="id" />
+        <result column="title" property="title" />
+        <result column="content" property="content" />
+        <result column="create_time" property="createTime" />
+        <result column="user_id" property="userId" />
+        <result column="update_time" property="updateTime" />
+        <result column="update_user_id" property="updateUserId" />
+
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/CompanyTargetMapper.xml b/src/main/resources/mapper/CompanyTargetMapper.xml
new file mode 100644
index 0000000..0788f04
--- /dev/null
+++ b/src/main/resources/mapper/CompanyTargetMapper.xml
@@ -0,0 +1,22 @@
+<?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.zy.crm.manager.mapper.CompanyTargetMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.zy.crm.manager.entity.CompanyTarget">
+        <id column="id" property="id" />
+        <result column="year" property="year" />
+        <result column="target" property="target" />
+        <result column="create_time" property="createTime" />
+        <result column="user_id" property="userId" />
+        <result column="update_time" property="updateTime" />
+        <result column="update_user_id" property="updateUserId" />
+
+    </resultMap>
+
+    <select id="selectByYear" resultMap="BaseResultMap">
+        select * from man_company_target
+        where year = #{year}
+    </select>
+
+</mapper>
diff --git a/src/main/resources/mapper/OrderMapper.xml b/src/main/resources/mapper/OrderMapper.xml
index e4c3ef7..0349cbd 100644
--- a/src/main/resources/mapper/OrderMapper.xml
+++ b/src/main/resources/mapper/OrderMapper.xml
@@ -102,4 +102,31 @@
         ORDER BY mo.create_time DESC
     </select>
 
+    <select id="selectMoneyByYearAndStatus" resultType="java.lang.Double">
+        select sum(money) money from man_order
+        where year(create_time) = #{year}
+        and status = #{status}
+    </select>
+
+    <select id="selectMoneyByUserAndYearAndStatus" resultType="java.lang.Double">
+        select sum(money) money from man_order
+        where year(create_time) = #{year}
+        and status = #{status}
+        and user_id = #{userId}
+    </select>
+
+    <select id="selectTopMoney" resultMap="BaseResultMap">
+        select top 7 user_id,sum(money) money from man_order
+        where status = 1
+        group by user_id
+        order by money desc
+    </select>
+
+    <select id="selectCurrentYearMonthSuccess" resultType="java.util.HashMap">
+        select month(create_time) mon,sum(money) money from man_order
+        where year(create_time) = year(GETDATE())
+        and status = 1
+        group by month(create_time)
+    </select>
+
 </mapper>
diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml
index 1b95192..e002837 100644
--- a/src/main/resources/mapper/UserMapper.xml
+++ b/src/main/resources/mapper/UserMapper.xml
@@ -16,6 +16,7 @@
         <result column="sex" property="sex" />
         <result column="create_time" property="createTime" />
         <result column="status" property="status" />
+        <result column="target" property="target" />
 
     </resultMap>
 
diff --git a/src/main/webapp/static/js/companyPost/companyPost.js b/src/main/webapp/static/js/companyPost/companyPost.js
new file mode 100644
index 0000000..91dadaa
--- /dev/null
+++ b/src/main/webapp/static/js/companyPost/companyPost.js
@@ -0,0 +1,262 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table', 'laydate', 'form', 'admin', 'tree', 'dropdown'], function () {
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+    var dropdown = layui.dropdown;
+    var tree = layui.tree;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#companyPost',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl + '/companyPost/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            {type: 'checkbox'}
+            // ,{field: 'id', align: 'center',title: '#ID'}
+            , {field: 'title', align: 'center', title: '鏍囬'}
+            , {field: 'content', align: 'center', title: '鍐呭'}
+            , {field: 'createTime$', align: 'center', title: '鍒涘缓鏃堕棿'}
+            , {field: 'updateTime$', align: 'center', title: '鏇存柊鏃堕棿'}
+
+            , {fixed: 'right', title: '鎿嶄綔', align: 'center', toolbar: '#operate', width: 400}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl + "/";
+            }
+            pageCurr = curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(companyPost)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function () {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(companyPost)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch (obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+                if (checkStatus.length === 0) {
+                    layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                    return;
+                }
+                del(checkStatus.map(function (d) {
+                    return d.id;
+                }));
+                break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function () {
+                    var titles = [];
+                    var fields = [];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function () {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'companyPost': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl + "/companyPost/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType: 'json',
+                        contentType: 'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles, res.data, 'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl + "/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(companyPost)', function (obj) {
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.id]);
+                break;
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '800px',
+            title: (mData ? '淇敼' : '娣诲姞') + '鍏憡',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl + "/companyPost/" + (mData ? 'update' : 'add') + "/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200) {
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl + "/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl + "/companyPost/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200) {
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403) {
+                        top.location.href = baseUrl + "/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                , type: 'datetime'
+                , range: true
+            });
+            layDate.render({
+                elem: '#createTime\\$',
+                type: 'datetime',
+                value: data !== undefined ? data['createTime\\$'] : null
+            });
+            layDate.render({
+                elem: '#updateTime\\$',
+                type: 'datetime',
+                value: data !== undefined ? data['updateTime\\$'] : null
+            });
+
+        }, 300);
+    }
+
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+    });
+}
diff --git a/src/main/webapp/static/js/companyTarget/companyTarget.js b/src/main/webapp/static/js/companyTarget/companyTarget.js
new file mode 100644
index 0000000..a4bdb5a
--- /dev/null
+++ b/src/main/webapp/static/js/companyTarget/companyTarget.js
@@ -0,0 +1,427 @@
+var pageCurr;
+layui.config({
+    base: baseUrl + "/static/layui/lay/modules/"
+}).use(['table', 'laydate', 'form', 'admin', 'tree', 'dropdown'], function () {
+    var table = layui.table;
+    var $ = layui.jquery;
+    var layer = layui.layer;
+    var layDate = layui.laydate;
+    var form = layui.form;
+    var admin = layui.admin;
+    var dropdown = layui.dropdown;
+    var tree = layui.tree;
+
+    // 鏁版嵁娓叉煋
+    tableIns = table.render({
+        elem: '#companyTarget',
+        headers: {token: localStorage.getItem('token')},
+        url: baseUrl + '/companyTarget/list/auth',
+        page: true,
+        limit: 15,
+        limits: [15, 30, 50, 100, 200, 500],
+        toolbar: '#toolbar',
+        cellMinWidth: 50,
+        height: 'full-120',
+        cols: [[
+            {type: 'checkbox'}
+            // ,{field: 'id', align: 'center',title: '#ID'}
+            , {field: 'year', align: 'center', title: '骞村害'}
+            , {field: 'target', align: 'center', title: '鐩爣'}
+
+            , {fixed: 'right', title: '鎿嶄綔', align: 'center', toolbar: '#operate', width: 400}
+        ]],
+        request: {
+            pageName: 'curr',
+            pageSize: 'limit'
+        },
+        parseData: function (res) {
+            return {
+                'code': res.code,
+                'msg': res.msg,
+                'count': res.data.total,
+                'data': res.data.records
+            }
+        },
+        response: {
+            statusCode: 200
+        },
+        done: function (res, curr, count) {
+            if (res.code === 403) {
+                top.location.href = baseUrl + "/";
+            }
+            pageCurr = curr;
+            limit();
+        }
+    });
+
+    // 鐩戝惉鎺掑簭浜嬩欢
+    table.on('sort(companyTarget)', function (obj) {
+        var searchData = {};
+        $.each($('#search-box [name]').serializeArray(), function () {
+            searchData[this.name] = this.value;
+        });
+        searchData['orderByField'] = obj.field;
+        searchData['orderByType'] = obj.type;
+        tableIns.reload({
+            where: searchData,
+            page: {curr: 1}
+        });
+    });
+
+    // 鐩戝惉澶村伐鍏锋爮浜嬩欢
+    table.on('toolbar(companyTarget)', function (obj) {
+        var checkStatus = table.checkStatus(obj.config.id).data;
+        switch (obj.event) {
+            case 'addData':
+                showEditModel();
+                break;
+            case 'deleteData':
+                if (checkStatus.length === 0) {
+                    layer.msg('璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁', {icon: 2});
+                    return;
+                }
+                del(checkStatus.map(function (d) {
+                    return d.id;
+                }));
+                break;
+            case 'exportData':
+                admin.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function () {
+                    var titles = [];
+                    var fields = [];
+                    obj.config.cols[0].map(function (col) {
+                        if (col.type === 'normal' && col.hide === false && col.toolbar == null) {
+                            titles.push(col.title);
+                            fields.push(col.field);
+                        }
+                    });
+                    var exportData = {};
+                    $.each($('#search-box [name]').serializeArray(), function () {
+                        exportData[this.name] = this.value;
+                    });
+                    var param = {
+                        'companyTarget': exportData,
+                        'fields': fields
+                    };
+                    $.ajax({
+                        url: baseUrl + "/companyTarget/export/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: JSON.stringify(param),
+                        dataType: 'json',
+                        contentType: 'application/json;charset=UTF-8',
+                        method: 'POST',
+                        success: function (res) {
+                            layer.closeAll();
+                            if (res.code === 200) {
+                                table.exportFile(titles, res.data, 'xls');
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl + "/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2})
+                            }
+                        }
+                    });
+                });
+                break;
+        }
+    });
+
+    // 鐩戝惉琛屽伐鍏蜂簨浠�
+    table.on('tool(companyTarget)', function (obj) {
+        var data = obj.data;
+        switch (obj.event) {
+            case 'edit':
+                showEditModel(data);
+                break;
+            case "del":
+                del([data.id]);
+                break;
+            case "generate":
+                //鐢熸垚鍚堝悓
+                generate(data)
+                break
+            case "sales":
+                //鍚堝悓鏄庣粏
+                sales(data);
+                break
+            case "upload":
+                //涓婁紶鍚堝悓
+                upload(data)
+                break
+            case "download":
+                //涓嬭浇鍚堝悓
+                download(data)
+                break
+        }
+    });
+
+    /* 寮圭獥 - 鏂板銆佷慨鏀� */
+    function showEditModel(mData) {
+        admin.open({
+            type: 1,
+            area: '800px',
+            title: (mData ? '淇敼' : '娣诲姞') + '鍚堝悓',
+            content: $('#editDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(editSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl + "/companyTarget/" + (mData ? 'update' : 'add') + "/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'POST',
+                        success: function (res) {
+                            layer.close(loadIndex);
+                            if (res.code === 200) {
+                                layer.close(dIndex);
+                                layer.msg(res.msg, {icon: 1});
+                                tableReload();
+                            } else if (res.code === 403) {
+                                top.location.href = baseUrl + "/";
+                            } else {
+                                layer.msg(res.msg, {icon: 2});
+                            }
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鐢熸垚鍚堝悓 */
+    function generate(mData) {
+        admin.open({
+            type: 1,
+            area: '600px',
+            title: '鐢熸垚鍚堝悓',
+            content: $('#generateDialog').html(),
+            success: function (layero, dIndex) {
+                layDateRender(mData);
+                form.val('detail', mData);
+                form.on('submit(generateSubmit)', function (data) {
+                    var loadIndex = layer.load(2);
+                    $.ajax({
+                        url: baseUrl + "/companyTarget/generate/auth",
+                        headers: {'token': localStorage.getItem('token')},
+                        data: data.field,
+                        method: 'GET',
+                        xhrFields: {
+                            responseType: "blob" // 璁剧疆鍝嶅簲绫诲瀷涓轰簩杩涘埗鏁版嵁
+                        },
+                        success: function (res) {
+                            // 鍒涘缓涓�涓复鏃剁殑涓嬭浇閾炬帴
+                            const url = window.URL.createObjectURL(res);
+                            // 鍒涘缓涓�涓殣钘忕殑 <a> 鍏冪礌骞惰缃笅杞介摼鎺�
+                            const a = document.createElement("a");
+                            a.style.display = "none";
+                            a.href = url;
+                            a.download = data.field.name + ".docx"; // 鎸囧畾涓嬭浇鐨勬枃浠跺悕
+                            document.body.appendChild(a);
+
+                            // 瑙﹀彂鐐瑰嚮浜嬩欢浠ュ紑濮嬩笅杞�
+                            a.click();
+
+                            // 娓呯悊涓存椂璧勬簮
+                            setTimeout(function () {
+                                window.URL.revokeObjectURL(url);
+                                document.body.removeChild(a);
+                            }, 100);
+
+                            layer.close(loadIndex);
+                            layer.close(dIndex);
+                        }
+                    })
+                    return false;
+                });
+                $(layero).children('.layui-layer-content').css('overflow', 'visible');
+                layui.form.render('select');
+            }
+        });
+    }
+
+    /* 鍚堝悓鏄庣粏 */
+    function sales(mData) {
+        layer.open({
+            type: 2,
+            title: '鍚堝悓鏄庣粏',
+            maxmin: true,
+            area: [top.detailWidth, top.detailHeight],
+            shadeClose: false,
+            content: '../companyTargetSales/companyTargetSales.html?companyTargetId=' + mData.id,
+            success: function (layero, index) {
+            }
+        });
+    }
+
+    //涓婁紶鍚堝悓
+    function upload(data) {
+        if (data.filepath == '' || data.filepath == null) {
+            layer.confirm('鏄惁涓婁紶鍚堝悓?', function () {
+                $("#uploadQuote").click()
+            });
+        } else {
+            layer.confirm('宸蹭笂浼犲悎鍚岋紝鏄惁缁х画瑕嗙洊涓婁紶?', function () {
+                $("#uploadQuote").click()
+            });
+        }
+
+        $("#uploadQuote").on("change", (evt) => {
+            var files = evt.target.files;
+            if (files == null || files.length == 0) {
+                alert("No files wait for import");
+                return;
+            }
+
+            let name = files[0].name;
+            let suffixArr = name.split("."), suffix = suffixArr[suffixArr.length - 1];
+            // if(suffix!="xlsx"){
+            //     alert("Currently only supports the import of xlsx files");
+            //     return;
+            // }
+
+            let formData = new FormData($("#uploadFile")[0]);
+            formData.append("id", data.id);
+            $.ajax({
+                url: baseUrl + "/companyTarget/upload/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: formData,
+                method: 'POST',
+                cache: false,
+                processData: false,
+                contentType: false,
+                success: function (res) {
+                    if (res.code == 200) {
+                        layer.msg('涓婁紶鎴愬姛', {time: 1000}, () => {
+                            parent.location.reload()
+                        })
+                    } else {
+                        layer.msg(res.msg, {time: 1000}, () => {
+                            parent.location.reload()
+                        })
+                    }
+                }
+            })
+        })
+    }
+
+    //涓嬭浇鍚堝悓
+    function download(data) {
+        $.ajax({
+            url: baseUrl + "/companyTarget/download/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: data,
+            method: 'GET',
+            xhrFields: {
+                responseType: "blob" // 璁剧疆鍝嶅簲绫诲瀷涓轰簩杩涘埗鏁版嵁
+            },
+            success: function (res) {
+                // 鍒涘缓涓�涓复鏃剁殑涓嬭浇閾炬帴
+                const url = window.URL.createObjectURL(res);
+                // 鍒涘缓涓�涓殣钘忕殑 <a> 鍏冪礌骞惰缃笅杞介摼鎺�
+                const a = document.createElement("a");
+                a.style.display = "none";
+                a.href = url;
+
+                let list = data.filepath.split(".")
+                let suffix = "." + list[list.length - 1]//鑾峰彇鍚庣紑鍚�
+                a.download = data.name + suffix; // 鎸囧畾涓嬭浇鐨勬枃浠跺悕
+                document.body.appendChild(a);
+
+                // 瑙﹀彂鐐瑰嚮浜嬩欢浠ュ紑濮嬩笅杞�
+                a.click();
+
+                // 娓呯悊涓存椂璧勬簮
+                setTimeout(function () {
+                    window.URL.revokeObjectURL(url);
+                    document.body.removeChild(a);
+                }, 100);
+            }
+        });
+    }
+
+    /* 鍒犻櫎 */
+    function del(ids) {
+        layer.confirm('纭畾瑕佸垹闄ら�変腑鏁版嵁鍚楋紵', {
+            skin: 'layui-layer-admin',
+            shade: .1
+        }, function (i) {
+            layer.close(i);
+            var loadIndex = layer.load(2);
+            $.ajax({
+                url: baseUrl + "/companyTarget/delete/auth",
+                headers: {'token': localStorage.getItem('token')},
+                data: {ids: ids},
+                method: 'POST',
+                success: function (res) {
+                    layer.close(loadIndex);
+                    if (res.code === 200) {
+                        layer.msg(res.msg, {icon: 1});
+                        tableReload();
+                    } else if (res.code === 403) {
+                        top.location.href = baseUrl + "/";
+                    } else {
+                        layer.msg(res.msg, {icon: 2});
+                    }
+                }
+            })
+        });
+    }
+
+    // 鎼滅储
+    form.on('submit(search)', function (data) {
+        pageCurr = 1;
+        tableReload(false);
+    });
+
+    // 閲嶇疆
+    form.on('submit(reset)', function (data) {
+        pageCurr = 1;
+        clearFormVal($('#search-box'));
+        tableReload(false);
+    });
+
+    // 鏃堕棿閫夋嫨鍣�
+    function layDateRender(data) {
+        setTimeout(function () {
+            layDate.render({
+                elem: '.layui-laydate-range'
+                , type: 'datetime'
+                , range: true
+            });
+            layDate.render({
+                elem: '#createTime\\$',
+                type: 'datetime',
+                value: data !== undefined ? data['createTime\\$'] : null
+            });
+            layDate.render({
+                elem: '#updateTime\\$',
+                type: 'datetime',
+                value: data !== undefined ? data['updateTime\\$'] : null
+            });
+
+        }, 300);
+    }
+
+    layDateRender();
+
+});
+
+// 鍏抽棴鍔ㄤ綔
+$(document).on('click','#data-detail-close', function () {
+    parent.layer.closeAll();
+});
+
+function tableReload(child) {
+    var searchData = {};
+    $.each($('#search-box [name]').serializeArray(), function() {
+        searchData[this.name] = this.value;
+    });
+    tableIns.reload({
+        where: searchData,
+        page: {curr: pageCurr}
+    });
+}
diff --git a/src/main/webapp/views/companyPost/companyPost.html b/src/main/webapp/views/companyPost/companyPost.html
new file mode 100644
index 0000000..a9115af
--- /dev/null
+++ b/src/main/webapp/views/companyPost/companyPost.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div class="layui-form toolbar" id="search-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+                        </div>
+                    </div>
+                     <div class="layui-inline" style="width: 300px">
+                        <div class="layui-input-inline">
+                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="companyPost" lay-filter="companyPost"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/companyPost/companyPost.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <div id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍏憡鏍囬: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="title" placeholder="璇疯緭鍏ュ叕鍛婃爣棰�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鍏憡鍐呭: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="content" placeholder="璇疯緭鍏ュ叕鍛婂唴瀹�">
+                    </div>
+                </div>
+
+             </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </div>
+</script>
+</html>
+
diff --git a/src/main/webapp/views/companyTarget/companyTarget.html b/src/main/webapp/views/companyTarget/companyTarget.html
new file mode 100644
index 0000000..891e7eb
--- /dev/null
+++ b/src/main/webapp/views/companyTarget/companyTarget.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title></title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
+    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
+</head>
+<body>
+
+<div class="layui-fluid">
+    <div class="layui-card">
+        <div class="layui-card-body">
+            <div class="layui-form toolbar" id="search-box">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="id" placeholder="缂栧彿" autocomplete="off">
+                        </div>
+                    </div>
+                     <div class="layui-inline" style="width: 300px">
+                        <div class="layui-input-inline">
+                            <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px">
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <div class="layui-input-inline">
+                            <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off">
+                        </div>
+                    </div>
+                    <div class="layui-inline">&emsp;
+                        <button class="layui-btn icon-btn" lay-filter="search" lay-submit>
+                            <i class="layui-icon">&#xe615;</i>鎼滅储
+                        </button>
+                        <button class="layui-btn icon-btn" lay-filter="reset" lay-submit>
+                            <i class="layui-icon">&#xe666;</i>閲嶇疆
+                        </button>
+                    </div>
+                </div>
+            </div>
+            <table class="layui-hide" id="companyTarget" lay-filter="companyTarget"></table>
+        </div>
+    </div>
+</div>
+
+<script type="text/html" id="toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-add" lay-event="addData">鏂板</button>
+        <button class="layui-btn layui-btn-sm layui-btn-danger" id="btn-delete" lay-event="deleteData">鍒犻櫎</button>
+        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right">瀵煎嚭</button>
+    </div>
+</script>
+
+<script type="text/html" id="operate">
+    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">淇敼</a>
+    <a class="layui-btn layui-btn-danger layui-btn-xs btn-edit" lay-event="del">鍒犻櫎</a>
+</script>
+
+<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
+<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/companyTarget/companyTarget.js" charset="utf-8"></script>
+</body>
+<!-- 琛ㄥ崟寮圭獥 -->
+<script type="text/html" id="editDialog">
+    <div id="detail" lay-filter="detail" class="layui-form admin-form model-form">
+        <input name="id" type="hidden">
+        <div class="layui-row">
+            <div class="layui-col-md12">
+                <div class="layui-form-item">
+                    <label class="layui-form-label">骞村害: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="year" placeholder="璇疯緭鍏ュ勾搴�">
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <label class="layui-form-label">鐩爣浜ゆ槗棰�: </label>
+                    <div class="layui-input-block">
+                        <input class="layui-input" name="target" placeholder="璇疯緭鍏ョ洰鏍囦氦鏄撻">
+                    </div>
+                </div>
+
+             </div>
+        </div>
+        <hr class="layui-bg-gray">
+        <div class="layui-form-item text-right">
+            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">淇濆瓨</button>
+            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">鍙栨秷</button>
+        </div>
+    </div>
+</script>
+</html>
+
diff --git a/src/main/webapp/views/detail.html b/src/main/webapp/views/detail.html
index ece6eb1..c781f0a 100644
--- a/src/main/webapp/views/detail.html
+++ b/src/main/webapp/views/detail.html
@@ -76,6 +76,12 @@
                     </div>
                 </div>
                 <div class="layui-form-item">
+                    <label class="layui-form-label">涓汉鍏ㄥ勾鐩爣</label>
+                    <div class="layui-input-inline">
+                        <input name="target" class="layui-input" type="text" placeholder="璇疯緭鍏�" autocomplete="off">
+                    </div>
+                </div>
+                <div class="layui-form-item">
                     <label class="layui-form-label">鑱旂郴鏂瑰紡</label>
                     <div class="layui-input-inline">
                         <input name="mobile" class="layui-input" type="text" placeholder="璇疯緭鍏�" autocomplete="off">
diff --git a/src/main/webapp/views/home/dashboard.html b/src/main/webapp/views/home/dashboard.html
index 2229b61..9c8d6e5 100644
--- a/src/main/webapp/views/home/dashboard.html
+++ b/src/main/webapp/views/home/dashboard.html
@@ -46,50 +46,68 @@
         <div class="layui-col-xs12 layui-col-md8">
             <div class="layui-card" style="">
                 <div class="layui-card-header">娲诲姩瀹炴椂浜ゆ槗鎯呭喌</div>
-                <div class="layui-card-body">
+                <div class="layui-card-body" style="padding-bottom: 20px;">
                     <div class="layui-row">
+                        <div>鍥㈤槦鏁版嵁</div>
                         <div class="layui-col-xs12 layui-col-sm6 layui-col-lg3 text-center">
-                            <div class="numberInfoSubTitle">浠婃棩浜ゆ槗鎬婚</div>
+                            <div class="numberInfoSubTitle">鍏ㄥ勾鐩爣</div>
                             <div class="numberInfoValue">
-                                124,543,233<em class="numberInfoSuffix">鍏�</em>
+                                <span id="companyYearTarget">124,543,233</span><em class="numberInfoSuffix">鍏�</em>
                             </div>
                         </div>
                         <div class="layui-col-xs12 layui-col-sm6 layui-col-lg3 text-center">
-                            <div class="numberInfoSubTitle">閿�鍞洰鏍囧畬鎴愮巼</div>
-                            <div class="numberInfoValue">92%</div>
-                        </div>
-                        <div class="layui-col-xs12 layui-col-sm6 layui-col-lg3 text-center">
-                            <div class="numberInfoSubTitle">娲诲姩鍓╀綑鏃堕棿</div>
-                            <div class="numberInfoValue">00:57:10</div>
-                        </div>
-                        <div class="layui-col-xs12 layui-col-sm6 layui-col-lg3 text-center">
-                            <div class="numberInfoSubTitle">姣忕浜ゆ槗鎬婚</div>
+                            <div class="numberInfoSubTitle">宸插畬鎴愪氦鏄�</div>
                             <div class="numberInfoValue">
-                                234<em class="numberInfoSuffix">鍏�</em>
+                                <span id="companySuccess">124,543,233</span><em class="numberInfoSuffix">鍏�</em>
                             </div>
+                        </div>
+                        <div class="layui-col-xs12 layui-col-sm6 layui-col-lg3 text-center">
+                            <div class="numberInfoSubTitle">鏈畬鎴愪氦鏄�</div>
+                            <div class="numberInfoValue">
+                                <span id="companyProgress">124,543,233</span><em class="numberInfoSuffix">鍏�</em>
+                            </div>
+                        </div>
+                        <div class="layui-col-xs12 layui-col-sm6 layui-col-lg3 text-center">
+                            <div class="numberInfoSubTitle">浜ゆ槗鐜�</div>
+                            <div class="numberInfoValue"><span id="companyRate">92</span>%</div>
                         </div>
                     </div>
-                    <div style="text-align: center;padding: 30px 0 10px 0;">
-                        <img src="https://gw.alipayobjects.com/zos/rmsportal/HBWnDEUXCnGnGrRfrpKa.png"
-                             style="max-height: 437px; max-width: 100%;" alt="map">
+                    <div class="layui-row" style="margin-top: 50px;">
+                        <div>涓汉鏁版嵁</div>
+                        <div class="layui-col-xs12 layui-col-sm6 layui-col-lg3 text-center">
+                            <div class="numberInfoSubTitle">鍏ㄥ勾鐩爣</div>
+                            <div class="numberInfoValue">
+                                <span id="personYearTarget">124,543,233</span><em class="numberInfoSuffix">鍏�</em>
+                            </div>
+                        </div>
+                        <div class="layui-col-xs12 layui-col-sm6 layui-col-lg3 text-center">
+                            <div class="numberInfoSubTitle">宸插畬鎴愪氦鏄�</div>
+                            <div class="numberInfoValue">
+                                <span id="personSuccess">124,543,233</span><em class="numberInfoSuffix">鍏�</em>
+                            </div>
+                        </div>
+                        <div class="layui-col-xs12 layui-col-sm6 layui-col-lg3 text-center">
+                            <div class="numberInfoSubTitle">鏈畬鎴愪氦鏄�</div>
+                            <div class="numberInfoValue">
+                                <span id="personProgress">124,543,233</span><em class="numberInfoSuffix">鍏�</em>
+                            </div>
+                        </div>
+                        <div class="layui-col-xs12 layui-col-sm6 layui-col-lg3 text-center">
+                            <div class="numberInfoSubTitle">浜ゆ槗鐜�</div>
+                            <div class="numberInfoValue"><span id="personRate">92</span>%</div>
+                        </div>
                     </div>
                 </div>
             </div>
         </div>
 
         <div class="layui-col-xs12 layui-col-md4">
-            <div class="layui-card">
-                <div class="layui-card-header">娲诲姩鎯呭喌</div>
-                <div class="layui-card-body" style="height: 240px;overflow: hidden;">
-                    <div id="hdqkyc" style="width: 100%;height: 260px;"></div>
+            <div class="layui-card" style="height: 299px;overflow: hidden;">
+                <div class="layui-card-header">鍏徃鍏憡</div>
+                <div class="layui-card-body" id="companyPostId">
                 </div>
             </div>
-            <div class="layui-card">
-                <div class="layui-card-header">涓氱哗鏁堢巼</div>
-                <div class="layui-card-body" style="height: 222px;overflow: hidden;">
-                    <div id="hjxl" style="width: 100%;height: 280px;margin-top: -20px;"></div>
-                </div>
-            </div>
+
         </div>
 
         <div class="layui-col-xs12">
@@ -97,8 +115,8 @@
                 <div class="layui-card-body">
                     <div class="layui-tab layui-tab-brief" lay-filter="tabZZT">
                         <ul class="layui-tab-title">
-                            <li class="layui-this">閿�鍞</li>
-                            <li>璁块棶閲�</li>
+                            <li class="layui-this">浜ゆ槗棰�</li>
+<!--                            <li>璁块棶閲�</li>-->
                         </ul>
                         <div class="layui-tab-content">
                             <div class="layui-tab-item layui-show">
@@ -115,45 +133,11 @@
                                             </colgroup>
                                             <thead>
                                             <tr style="background: none;color: #333;">
-                                                <th colspan="3">鍛樺伐閿�鍞鎺掕</th>
+                                                <th colspan="3">鍛樺伐浜ゆ槗棰濇帓琛�</th>
                                             </tr>
                                             </thead>
-                                            <tbody>
-                                            <tr>
-                                                <td><span class="layui-badge layui-bg-cyan">1</span></td>
-                                                <td>aaa</td>
-                                                <td>323,234</td>
-                                            </tr>
-                                            <tr>
-                                                <td><span class="layui-badge layui-bg-cyan">2</span></td>
-                                                <td>bbb</td>
-                                                <td>323,234</td>
-                                            </tr>
-                                            <tr>
-                                                <td><span class="layui-badge layui-bg-cyan">3</span></td>
-                                                <td>ccc</td>
-                                                <td>323,234</td>
-                                            </tr>
-                                            <tr>
-                                                <td><span class="layui-badge layui-bg-gray">4</span></td>
-                                                <td>ddd</td>
-                                                <td>323,234</td>
-                                            </tr>
-                                            <tr>
-                                                <td><span class="layui-badge layui-bg-gray">5</span></td>
-                                                <td>eee</td>
-                                                <td>323,234</td>
-                                            </tr>
-                                            <tr>
-                                                <td><span class="layui-badge layui-bg-gray">6</span></td>
-                                                <td>fff</td>
-                                                <td>323,234</td>
-                                            </tr>
-                                            <tr>
-                                                <td><span class="layui-badge layui-bg-gray">7</span></td>
-                                                <td>ggg</td>
-                                                <td>323,234</td>
-                                            </tr>
+                                            <tbody id="staffRankId">
+
                                             </tbody>
                                         </table>
                                     </div>
@@ -231,6 +215,7 @@
 <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
 <script type="text/javascript" src="../../static/js/echarts/echarts.min.js" charset="utf-8"></script>
 <script type="text/javascript" src="../../static/js/echarts/echartsTheme.js" charset="utf-8"></script>
+<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
 
 <script>
     layui.use(['layer', 'element'], function () {
@@ -238,149 +223,169 @@
         var layer = layui.layer;
         var element = layui.element;
 
-        // 娓叉煋娲诲姩鎯呭喌棰勬祴
-        var myCharts = echarts.init(document.getElementById('hdqkyc'), myEchartsTheme);
-        var mData = [50, 100, 150, 80, 120, 150, 200, 250, 220, 250, 300, 350, 400, 380, 440, 450, 500, 550, 500];
-        var option = {
-            title: {
-                text: '鏈夋湜杈惧埌棰勬湡',
-                subtext: '鐩爣璇勪及',
-                textStyle: {
-                    color: '#000'
-                }
-            },
-            tooltip: {
-                trigger: "axis"
-            },
-            xAxis: [{
-                type: "category",
-                boundaryGap: !1,
-                data: ["06:00", "06:30", "07:00", "07:30", "08:00", "08:30", "09:00", "09:30", "10:00", "11:30", "12:00", "12:30", "13:00", "13:30", "14:00", "14:30", "15:00", "15:30", "16:00"]
-            }],
-            yAxis: [{
-                type: "value"
-            }],
-            series: [{
-                name: "閲戦",
-                type: "line",
-                smooth: !0,
-                itemStyle: {
-                    normal: {
-                        areaStyle: {
-                            type: "default"
-                        }
-                    }
-                },
-                data: mData
-            }]
-        };
-        myCharts.setOption(option);
-
-        // 鍔ㄦ�佹敼鍙樺浘琛�1鏁版嵁
-        setInterval(function () {
-            for (var i = 0; i < mData.length; i++) {
-                mData[i] += (Math.random() * 50 - 25);
-                if (mData[i] < 0) {
-                    mData[i] = 0;
-                }
-            }
-            myCharts.setOption({
-                series: [{
-                    data: mData
-                }]
-            });
-        }, 1000);
-
-        // 娓叉煋鍒告牳鏁堢巼鍥捐〃
-        var myCharts2 = echarts.init(document.getElementById('hjxl'), myEchartsTheme);
-        var option2 = {
-            tooltip: {
-                formatter: "{a} <br/>{b} : {c}%"
-            },
-            series: [
-                {
-                    name: '涓氱哗鏁堢巼',
-                    type: 'gauge',
-                    detail: {formatter: '{value}%'},
-                    data: [{value: 80, name: '鍛戒腑鐜�'}]
-                }
-            ]
-        };
-        myCharts2.setOption(option2);
-
-        // 娓叉煋閿�鍞鍥捐〃
-        var myCharts3 = echarts.init(document.getElementById('xse'), myEchartsTheme);
-        var option3 = {
-            title: {
-                text: '閿�鍞秼鍔�',
-                textStyle: {
-                    color: '#000',
-                    fontSize: 14
-                }
-            },
-            tooltip: {},
-            grid: {
-                left: '0',
-                right: '0',
-                bottom: '0',
-                containLabel: true
-            },
-            xAxis: {
-                data: ['1鏈�', '2鏈�', '3鏈�', '4鏈�', '6鏈�', '6鏈�', '7鏈�', '8鏈�', '9鏈�', '10鏈�', '11鏈�', '12鏈�']
-            },
-            yAxis: {},
-            series: [{
-                type: 'bar',
-                data: [726, 1013, 690, 892, 982, 570, 536, 546, 988, 1002, 206, 506],
-                barMaxWidth: 45
-            }]
-        };
-        myCharts3.setOption(option3);
-
-        // 娓叉煋璁块棶閲忓浘琛�
-        var myCharts4 = echarts.init(document.getElementById('fwl'), myEchartsTheme);
-        var option4 = {
-            title: {
-                text: '璁块棶閲忚秼鍔�',
-                textStyle: {
-                    color: '#000',
-                    fontSize: 14
-                }
-            },
-            tooltip: {},
-            grid: {
-                left: '0',
-                right: '0',
-                bottom: '0',
-                containLabel: true
-            },
-            xAxis: {
-                data: ['1鏈�', '2鏈�', '3鏈�', '4鏈�', '6鏈�', '6鏈�', '7鏈�', '8鏈�', '9鏈�', '10鏈�', '11鏈�', '12鏈�']
-            },
-            yAxis: {},
-            series: [{
-                type: 'bar',
-                data: [558, 856, 880, 1325, 982, 856, 655, 546, 988, 985, 568, 302],
-                barMaxWidth: 45
-            }]
-        };
-        myCharts4.setOption(option4);
-
-        // 鍒囨崲閫夐」鍗¢噸鏂版覆鏌�
-        element.on('tab(tabZZT)', function (data) {
-            if (data.index == 0) {
-                myCharts3.resize();
-            } else {
-                myCharts4.resize();
+        //鑾峰彇鍥㈤槦鏁版嵁
+        $.ajax({
+            url: baseUrl + "/dashboard/companyData/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: {},
+            dataType: 'json',
+            contentType: 'application/json;charset=UTF-8',
+            method: 'POST',
+            success: function (res) {
+                $("#companyYearTarget").text(res.data.yearTarget)
+                $("#companySuccess").text(res.data.successMoney)
+                $("#companyProgress").text(res.data.progressMoney)
+                $("#companyRate").text(res.data.yearTransactionRate)
             }
         });
 
+        //鑾峰彇涓汉鏁版嵁
+        $.ajax({
+            url: baseUrl + "/dashboard/personData/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: {},
+            dataType: 'json',
+            contentType: 'application/json;charset=UTF-8',
+            method: 'POST',
+            success: function (res) {
+                $("#personYearTarget").text(res.data.yearTarget)
+                $("#personSuccess").text(res.data.successMoney)
+                $("#personProgress").text(res.data.progressMoney)
+                $("#personRate").text(res.data.yearTransactionRate)
+            }
+        });
+
+        //鑾峰彇鍛樺伐浜ゆ槗棰濇帓琛�
+        $.ajax({
+            url: baseUrl + "/dashboard/staffRank/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: {},
+            dataType: 'json',
+            contentType: 'application/json;charset=UTF-8',
+            method: 'POST',
+            success: function (res) {
+                let data = res.data
+                for (var i = 0; i < data.length; i++) {
+                    let div = "<tr>";
+                    if (i < 3) {
+                        div += "<td><span class='layui-badge layui-bg-cyan'>" + (i+1) + "</span></td>"
+                    }else {
+                        div += "<td><span class='layui-badge layui-bg-gray'>" + (i+1) + "</span></td>"
+                    }
+
+                    div += "<td>" + data[i].username + "</td>"
+                    div += "<td>" + data[i].money + "</td>"
+                    div += "</tr>"
+
+                    $("#staffRankId").append(div)
+                }
+            }
+        });
+
+        //鑾峰彇鍏徃鍏憡
+        $.ajax({
+            url: baseUrl + "/companyPost/list/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: {},
+            dataType: 'json',
+            contentType: 'application/json;charset=UTF-8',
+            method: 'POST',
+            success: function (res) {
+                let data = res.data.records
+                for (var i = 0; i < data.length; i++) {
+                    let div = "<div style='margin-top: 10px;'>";
+                    div += '<span class="layui-badge-dot layui-bg-green" style="margin-right: 10px;"></span>'
+                    div += data[i].content
+                    div += "</div>"
+
+                    $("#companyPostId").append(div)
+                }
+            }
+        });
+
+        // 娓叉煋浜ゆ槗瓒嬪娍鍥捐〃
+        var myCharts3 = echarts.init(document.getElementById('xse'), myEchartsTheme);
+        //鑾峰彇鑾峰彇褰撳墠骞村害12涓湀鐨勪氦鏄撴垚鍔熸暟鎹�
+        $.ajax({
+            url: baseUrl + "/dashboard/currentMonthData/auth",
+            headers: {'token': localStorage.getItem('token')},
+            data: {},
+            dataType: 'json',
+            contentType: 'application/json;charset=UTF-8',
+            method: 'POST',
+            success: function (res) {
+                let data = res.data
+                var option3 = {
+                    title: {
+                        text: '浜ゆ槗瓒嬪娍',
+                        textStyle: {
+                            color: '#000',
+                            fontSize: 14
+                        }
+                    },
+                    tooltip: {},
+                    grid: {
+                        left: '0',
+                        right: '0',
+                        bottom: '0',
+                        containLabel: true
+                    },
+                    xAxis: {
+                        data: ['1鏈�', '2鏈�', '3鏈�', '4鏈�', '6鏈�', '6鏈�', '7鏈�', '8鏈�', '9鏈�', '10鏈�', '11鏈�', '12鏈�']
+                    },
+                    yAxis: {},
+                    series: [{
+                        type: 'bar',
+                        data: data,
+                        barMaxWidth: 45
+                    }]
+                };
+                myCharts3.setOption(option3);
+            }
+        });
+
+
+        // // 娓叉煋璁块棶閲忓浘琛�
+        // var myCharts4 = echarts.init(document.getElementById('fwl'), myEchartsTheme);
+        // var option4 = {
+        //     title: {
+        //         text: '璁块棶閲忚秼鍔�',
+        //         textStyle: {
+        //             color: '#000',
+        //             fontSize: 14
+        //         }
+        //     },
+        //     tooltip: {},
+        //     grid: {
+        //         left: '0',
+        //         right: '0',
+        //         bottom: '0',
+        //         containLabel: true
+        //     },
+        //     xAxis: {
+        //         data: ['1鏈�', '2鏈�', '3鏈�', '4鏈�', '6鏈�', '6鏈�', '7鏈�', '8鏈�', '9鏈�', '10鏈�', '11鏈�', '12鏈�']
+        //     },
+        //     yAxis: {},
+        //     series: [{
+        //         type: 'bar',
+        //         data: [558, 856, 880, 1325, 982, 856, 655, 546, 988, 985, 568, 302],
+        //         barMaxWidth: 45
+        //     }]
+        // };
+        // myCharts4.setOption(option4);
+        //
+        // // 鍒囨崲閫夐」鍗¢噸鏂版覆鏌�
+        // element.on('tab(tabZZT)', function (data) {
+        //     if (data.index == 0) {
+        //         myCharts3.resize();
+        //     } else {
+        //         myCharts4.resize();
+        //     }
+        // });
+
         // 绐楀彛澶у皬鏀瑰彉浜嬩欢
         window.onresize = function () {
-            myCharts.resize();
-            myCharts2.resize();
             myCharts3.resize();
-            myCharts4.resize();
         };
 
     });

--
Gitblit v1.9.1