From c7f2e2515670435dcba254f7cc5738fafeb9fab2 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Wed, 15 Feb 2023 16:16:36 +0800
Subject: [PATCH] 推销员业绩

---
 src/main/resources/templates/febs/views/modules/mallMember/mallSalesManList.html    |    2 
 src/main/resources/mapper/modules/MallSalesmanMapper.xml                            |   55 +++
 src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java         |   23 +
 src/main/java/cc/mrbird/febs/mall/vo/AdminMemberOrderVo.java                        |   28 ++
 src/main/java/cc/mrbird/febs/mall/vo/AdminSalesmanAchieveVo.java                    |   28 ++
 src/main/resources/templates/febs/views/modules/mallMember/salesmanAchieveList.html |  177 ++++++++++++
 src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java      |   20 +
 src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java          |    9 
 src/main/resources/templates/febs/views/modules/mallMember/salesmanUpdate.html      |  228 ++++++++++++++++
 src/main/java/cc/mrbird/febs/mall/mapper/MallSalesmanMapper.java                    |   10 
 src/main/resources/templates/febs/views/modules/mallMember/addSalesman.html         |  230 ++++++++++++++++
 src/main/java/cc/mrbird/febs/mall/entity/MallSalesman.java                          |    4 
 src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java              |    4 
 13 files changed, 810 insertions(+), 8 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java
index da3bb22..10cf072 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallMemberController.java
@@ -8,10 +8,7 @@
 import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.service.IAdminMallMemberService;
 import cc.mrbird.febs.mall.service.IApiMallMemberService;
-import cc.mrbird.febs.mall.vo.AdminAgentLevelOptionTreeVo;
-import cc.mrbird.febs.mall.vo.AdminMallAddressInfoVo;
-import cc.mrbird.febs.mall.vo.AdminMallGoodsCategoryTreeVo;
-import cc.mrbird.febs.mall.vo.AdminMallSalesmansTreeVo;
+import cc.mrbird.febs.mall.vo.*;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.annotations.Param;
@@ -478,4 +475,22 @@
         return mallMemberService.getAddressTree();
     }
 
+    /**
+     * 销售员业绩列表
+     */
+    @GetMapping("salesmanAchieveList")
+    public FebsResponse salesmanAchieveList(MallSalesman mallSalesman, QueryRequest request) {
+        Map<String, Object> data = getDataTable(mallMemberService.getSalesmanAchieveList(mallSalesman, request));
+        return new FebsResponse().success().data(data);
+    }
+
+    /**
+     * 销售员业绩列表-省
+     */
+    @GetMapping("salesmanAchieve/tree")
+    @ControllerEndpoint(exceptionMessage = "销售员业绩列表")
+    public List<AdminSalesmanAchieveVo> getSalesmanAchieveTree(){
+        return mallMemberService.getSalesmanAchieveTree();
+    }
+
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java
index c02e841..ce589b0 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewMallMemberController.java
@@ -328,5 +328,14 @@
         return FebsUtil.view("modules/mallMember/addressAmountList");
     }
 
+    /**
+     * 地址金额统计列表
+     */
+    @GetMapping("salesmanAchieveList")
+    @RequiresPermissions("salesmanAchieveList:view")
+    public String salesmanAchieveList() {
+        return FebsUtil.view("modules/mallMember/salesmanAchieveList");
+    }
+
 
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallSalesman.java b/src/main/java/cc/mrbird/febs/mall/entity/MallSalesman.java
index 46f0290..2bc6011 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/MallSalesman.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/MallSalesman.java
@@ -13,6 +13,10 @@
 
     private String name;
 
+    private String province;
+
+    private String city;
+
     private String remark;
 
     private Integer state;
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallSalesmanMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallSalesmanMapper.java
index 1983974..d45b04b 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/MallSalesmanMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallSalesmanMapper.java
@@ -2,9 +2,7 @@
 
 import cc.mrbird.febs.mall.entity.MallAddressInfo;
 import cc.mrbird.febs.mall.entity.MallSalesman;
-import cc.mrbird.febs.mall.vo.AdminAgentSelectVo;
-import cc.mrbird.febs.mall.vo.AdminMallAddressInfoVo;
-import cc.mrbird.febs.mall.vo.AdminMallSalesmansTreeVo;
+import cc.mrbird.febs.mall.vo.*;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -28,4 +26,10 @@
     Integer selectSumOrderCntByProvinceAndCity(@Param("province")String province, @Param("city")String city);
 
     List<AdminMallAddressInfoVo> selectProvince();
+
+    IPage<AdminSalesmanAchieveVo> selectSalesmanAchieveListInPage(Page<AdminSalesmanAchieveVo> page, @Param("record")MallSalesman mallSalesman);
+
+    List<AdminSalesmanAchieveVo> selectSalesmanAchieveProvince();
+
+    List<AdminMemberOrderVo> selectAdminMemberOrderVoBySalesmanId(@Param("salesmanId")Long salesmanId);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java b/src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java
index 75d72ad..1654fc0 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IAdminMallMemberService.java
@@ -114,4 +114,8 @@
     IPage<AdminMallAddressInfoVo> getAddressAmountList(MallAddressInfo mallAddressInfo, QueryRequest request);
 
     List<AdminMallAddressInfoVo> getAddressTree();
+
+    IPage<AdminSalesmanAchieveVo> getSalesmanAchieveList(MallSalesman mallSalesman, QueryRequest request);
+
+    List<AdminSalesmanAchieveVo> getSalesmanAchieveTree();
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java
index 2e9cd35..0d6c11c 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallMemberServiceImpl.java
@@ -732,6 +732,26 @@
         return mallSalesmanMapper.selectProvince();
     }
 
+    @Override
+    public IPage<AdminSalesmanAchieveVo> getSalesmanAchieveList(MallSalesman mallSalesman, QueryRequest request) {
+        Page<AdminSalesmanAchieveVo> page = new Page<>(request.getPageNum(), request.getPageSize());
+        IPage<AdminSalesmanAchieveVo> adminSalesmanAchieveVoIPage = mallSalesmanMapper.selectSalesmanAchieveListInPage(page, mallSalesman);
+        List<AdminSalesmanAchieveVo> records = adminSalesmanAchieveVoIPage.getRecords();
+        if(CollUtil.isNotEmpty(records)){
+            for(AdminSalesmanAchieveVo adminSalesmanAchieveVo : records){
+                Long salesmanId = adminSalesmanAchieveVo.getSalesmanId();
+                List<AdminMemberOrderVo> adminMemberOrderVos = mallSalesmanMapper.selectAdminMemberOrderVoBySalesmanId(salesmanId);
+                adminSalesmanAchieveVo.setAdminMemberOrderVos(adminMemberOrderVos);
+            }
+        }
+        return adminSalesmanAchieveVoIPage;
+    }
+
+    @Override
+    public List<AdminSalesmanAchieveVo> getSalesmanAchieveTree() {
+        return mallSalesmanMapper.selectSalesmanAchieveProvince();
+    }
+
     private String refererIds(String parentId) {
         boolean flag = false;
         if (StrUtil.isBlank(parentId)) {
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/AdminMemberOrderVo.java b/src/main/java/cc/mrbird/febs/mall/vo/AdminMemberOrderVo.java
new file mode 100644
index 0000000..fb61242
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/AdminMemberOrderVo.java
@@ -0,0 +1,28 @@
+package cc.mrbird.febs.mall.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel(value = "AdminRankAwardVo", description = "信息返回类")
+public class AdminMemberOrderVo {
+
+    private Long orderId;
+
+    private String memberName;
+
+    private String memberPhone;
+
+    private String memberAddress;
+
+    private String orderNo;
+
+    private String orderAmount;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/AdminSalesmanAchieveVo.java b/src/main/java/cc/mrbird/febs/mall/vo/AdminSalesmanAchieveVo.java
new file mode 100644
index 0000000..b3b8b52
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/AdminSalesmanAchieveVo.java
@@ -0,0 +1,28 @@
+package cc.mrbird.febs.mall.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@ApiModel(value = "AdminRankAwardVo", description = "信息返回类")
+public class AdminSalesmanAchieveVo {
+
+    //省
+    private String province;
+    //市
+    private String city;
+
+    private Long salesmanId;
+
+    private String salesmanName;
+
+    private Integer memberCnt;
+
+    private List<AdminMemberOrderVo> adminMemberOrderVos;
+
+
+
+}
diff --git a/src/main/resources/mapper/modules/MallSalesmanMapper.xml b/src/main/resources/mapper/modules/MallSalesmanMapper.xml
index 70c0859..74f1db7 100644
--- a/src/main/resources/mapper/modules/MallSalesmanMapper.xml
+++ b/src/main/resources/mapper/modules/MallSalesmanMapper.xml
@@ -95,6 +95,59 @@
         a.province
         FROM mall_address_info a
         group by a.province
-</select>
+    </select>
+
+    <select id="selectSalesmanAchieveListInPage" resultType="cc.mrbird.febs.mall.vo.AdminSalesmanAchieveVo">
+        SELECT
+        a.province,
+        a.city,
+        a.name salesmanName,
+        a.id salesmanId,
+        (select count(b.id) from mall_member b where b.salesmans_id = a.id) memberCnt
+        FROM mall_salesman a
+        <where>
+            <if test="record != null" >
+                <if test="record.province != null and record.province != ''">
+                    and a.province = #{record.province}
+                </if>
+                <if test="record.city != null and record.city != ''">
+                    and a.city = #{record.city}
+                </if>
+            </if>
+        </where>
+        ORDER BY
+        memberCnt DESC, a.province ASC
+    </select>
+
+    <select id="selectSalesmanAchieveProvince" resultType="cc.mrbird.febs.mall.vo.AdminSalesmanAchieveVo">
+        SELECT
+            a.province
+        FROM mall_salesman a
+        group by a.province
+    </select>
+
+    <select id="selectAdminMemberOrderVoBySalesmanId" resultType="cc.mrbird.febs.mall.vo.AdminMemberOrderVo">
+        select
+            c.name memberName,
+            c.phone memberPhone,
+            a.address memberAddress,
+            a.id orderId,
+            a.order_no orderNo,
+            a.CREATED_TIME createdTime,
+            a.amount orderAmount
+        from
+            mall_order_info a
+        left join mall_member c on a.member_id = c.id
+        where
+            a.status in (2, 3, 4)
+            and  a.order_type = 1
+            and  a.member_id in (
+                select
+                    b.id
+                from mall_member b
+                where
+                    b.salesmans_id = #{salesmanId}
+            )
+    </select>
 
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/mallMember/addSalesman.html b/src/main/resources/templates/febs/views/modules/mallMember/addSalesman.html
index f3aa517..d3882f8 100644
--- a/src/main/resources/templates/febs/views/modules/mallMember/addSalesman.html
+++ b/src/main/resources/templates/febs/views/modules/mallMember/addSalesman.html
@@ -32,6 +32,22 @@
         </div>
         <div class="layui-form-item">
             <div class="layui-col-lg6">
+                <label class="layui-form-label febs-form-item-require">省:</label>
+                <div class="layui-input-inline" style="padding-right:13px;">
+                    <select name="province" id="selProvince" lay-filter="provinceChange"  lay-verify="required"></select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <div class="layui-col-lg6">
+                <label class="layui-form-label febs-form-item-require">城市:</label>
+                <div class="layui-input-inline" style="padding-right:14px;">
+                    <select name="city" id="selCity" lay-filter="cityChange"  lay-verify="required"></select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <div class="layui-col-lg6">
                 <label class="layui-form-label">备注:</label>
                 <div class="layui-input-block">
                     <input type="text" name="remark" autocomplete="off" class="layui-input" >
@@ -43,6 +59,8 @@
         </div>
     </form>
 </div>
+<script>
+</script>
 
 <script data-th-inline="javascript">
     layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree','dropdown', 'laydate', 'layedit', 'upload', 'element', 'table', 'xmSelect'], function () {
@@ -64,7 +82,219 @@
         form.render();
         formSelects.render();
 
+
+        //定义数组,存储省份信息
+        var province = ["北京", "上海", "天津", "重庆", "浙江", "江苏", "广东", "福建", "湖南", "湖北", "辽宁",
+            "吉林", "黑龙江", "河北", "河南", "山东", "陕西", "甘肃", "新疆", "青海", "山西", "四川",
+            "贵州", "安徽", "江西", "云南", "内蒙古", "西藏", "广西", "宁夏", "海南", "香港", "澳门", "台湾"];
+
+        //定义数组,存储城市信息
+        var beijing = ["东城区", "西城区", "海淀区", "朝阳区", "丰台区", "石景山区", "通州区", "顺义区", "房山区", "大兴区", "昌平区", "怀柔区", "平谷区", "门头沟区", "延庆县", "密云县"];
+        var shanghai = ["浦东新区", "徐汇区", "长宁区", "普陀区", "闸北区", "虹口区", "杨浦区", "黄浦区", "卢湾区", "静安区", "宝山区", "闵行区", "嘉定区", "金山区", "松江区", "青浦区", "南汇区", "奉贤区", "崇明县"];
+        var tianjing = ["河东", "南开", "河西", "河北", "和平", "红桥", "东丽", "津南", "西青", "北辰", "塘沽", "汉沽", "大港", "蓟县", "宝坻", "宁河", "静海", "武清"];
+        var chongqing = ["渝中区", "大渡口区", "江北区", "沙坪坝区", "九龙坡区", "南岸区", "北碚区", "万盛区", "双桥区", "渝北区", "巴南区", "万州区", "涪陵区", "黔江区", "长寿区", "江津区", "合川区", "永川区", "南川区"];
+        var jiangsu = ["南京", "无锡", "常州", "徐州", "苏州", "南通", "连云港", "淮安", "扬州", "盐城", "镇江", "泰州", "宿迁"];
+        var zhejiang = ["杭州", "宁波", "温州", "嘉兴", "湖州", "绍兴", "金华", "衢州", "舟山", "台州", "利水"];
+        var guangdong = ["广州", "韶关", "深圳", "珠海", "汕头", "佛山", "江门", "湛江", "茂名", "肇庆", "惠州", "梅州", "汕尾", "河源", "阳江", "清远", "东莞", "中山", "潮州", "揭阳"];
+        var fujiang = ["福州", "厦门", "莆田", "三明", "泉州", "漳州", "南平", "龙岩", "宁德"];
+        var hunan = ["长沙", "株洲", "湘潭", "衡阳", "邵阳", "岳阳", "常德", "张家界", "益阳", "郴州", "永州", "怀化", "娄底", "湘西土家苗族自治区"];
+        var hubei = ["武汉", "襄阳", "黄石", "十堰", "宜昌", "鄂州", "荆门", "孝感", "荆州", "黄冈", "咸宁", "随州", "恩施土家族苗族自治州"];
+        var liaoning = ["沈阳", "大连", "鞍山", "抚顺", "本溪", "丹东", "锦州", "营口", "阜新", "辽阳", "盘锦", "铁岭", "朝阳", "葫芦岛"];
+        var jilin = ["长春", "吉林", "四平", "辽源", "通化", "白山", "松原", "白城", "延边朝鲜族自治区"];
+        var heilongjiang = ["哈尔滨", "齐齐哈尔", "鸡西", "牡丹江", "佳木斯", "大庆", "伊春", "黑河", "大兴安岭"];
+        var hebei = ["石家庄", "保定", "唐山", "邯郸", "承德", "廊坊", "衡水", "秦皇岛", "张家口"];
+        var henan = ["郑州", "洛阳", "商丘", "安阳", "南阳", "开封", "平顶山", "焦作", "新乡", "鹤壁", "许昌", "漯河", "三门峡", "信阳", "周口", "驻马店", "济源"];
+        var shandong = ["济南", "青岛", "菏泽", "淄博", "枣庄", "东营", "烟台", "潍坊", "济宁", "泰安", "威海", "日照", "滨州", "德州", "聊城", "临沂"];
+        var shangxi = ["西安", "宝鸡", "咸阳", "渭南", "铜川", "延安", "榆林", "汉中", "安康", "商洛"];
+        var gansu = ["兰州", "嘉峪关", "金昌", "金川", "白银", "天水", "武威", "张掖", "酒泉", "平凉", "庆阳", "定西", "陇南", "临夏", "合作"];
+        var qinghai = ["西宁", "海东地区", "海北藏族自治州", "黄南藏族自治州", "海南藏族自治州", "果洛藏族自治州", "玉树藏族自治州", "海西蒙古族藏族自治州"];
+        var xinjiang = ["乌鲁木齐", "奎屯", "石河子", "昌吉", "吐鲁番", "库尔勒", "阿克苏", "喀什", "伊宁", "克拉玛依", "塔城", "哈密", "和田", "阿勒泰", "阿图什", "博乐"];
+        var shanxi = ["太原", "大同", "阳泉", "长治", "晋城", "朔州", "晋中", "运城", "忻州", "临汾", "吕梁"];
+        var sichuan = ["成都", "自贡", "攀枝花", "泸州", "德阳", "绵阳", "广元", "遂宁", "内江", "乐山", "南充", "眉山", "宜宾", "广安", "达州", "雅安", "巴中", "资阳", "阿坝藏族羌族自治州", "甘孜藏族自治州", "凉山彝族自治州"];
+        var guizhou = ["贵阳", "六盘水", "遵义", "安顺", "黔南布依族苗族自治州", "黔西南布依族苗族自治州", "黔东南苗族侗族自治州", "铜仁", "毕节"];
+        var anhui = ["合肥", "芜湖", "安庆", "马鞍山", "阜阳", "六安", "滁州", "宿州", "蚌埠", "巢湖", "淮南", "宣城", "亳州", "淮北", "铜陵", "黄山", "池州"];
+        var jiangxi = ["南昌", "九江", "景德镇", "萍乡", "新余", "鹰潭", "赣州", "宜春", "上饶", "吉安", "抚州"];
+        var yunnan = ["昆明", "曲靖", "玉溪", "保山", "昭通", "丽江", "普洱", "临沧", "楚雄彝族自治州", "大理白族自治州", "红河哈尼族彝族自治州", "文山壮族苗族自治州", "西双版纳傣族自治州", "德宏傣族景颇族自治州", "怒江傈僳族自治州", "迪庆藏族自治州"];
+        var neimenggu = ["呼和浩特", "包头", "乌海", "赤峰", "通辽", "鄂尔多斯", "呼伦贝尔", "巴彦淖尔", "乌兰察布"];
+        var guangxi = ["南宁", "柳州", "桂林", "梧州", "北海", "防城港", "钦州", "贵港", "玉林", "百色", "贺州", "河池", "崇左"];
+        var xizang = ["拉萨", "昌都地区", "林芝地区", "山南地区", "日喀则地区", "那曲地区", "阿里地区"];
+        var ningxia = ["银川", "石嘴山", "吴忠", "固原", "中卫"];
+        var hainan = ["海口", "三亚"];
+        var xianggang = ["中西区", "湾仔区", "东区", "南区", "九龙城区", "油尖旺区", "观塘区", "黄大仙区", "深水埗区", "北区", "大埔区", "沙田区", "西贡区", "元朗区", "屯门区", "荃湾区", "葵青区", "离岛区"];
+        var taiwan = ["台北", "高雄", "基隆", "台中", "台南", "新竹", "嘉义"];
+        var aomeng = ["澳门半岛", "氹仔岛", "路环岛"];
+
+        //页面加载方法
+        $(function () {
+            layui.use('form', function () {
+                form = layui.form;
+
+                //各种基于事件的操作,下面会有进一步介绍
+                //设置省份数据
+                setProvince();
+                //监听下拉事件
+                form.on('select(provinceChange)', function (data) {
+                    setCity(data.value);
+                });
+                //监听下拉事件
+                form.on('select(cityChange)', function (data) {
+                    // alert(data.value);
+                    // $("#selCity").val(data.value)
+                    // data.field.city = data.value;
+                });
+            });
+
+        });
+
+
+        //设置省份数据
+        function setProvince() {
+            //给省份下拉列表赋值
+
+            var $sel = $("#selProvince");
+
+            //获取对应省份城市
+            for (var i = 0, len = province.length; i < len; i++) {
+                modelVal = province[i];
+                var option = $("<option value='" + province[i] + "'>" + province[i] + "</option>");
+
+                //添加到 select 元素中
+                $sel.append(option);
+            }
+            form.render('select');
+            setCity($($sel.get(0)).val());
+
+        }
+
+
+        //根据选中的省份获取对应的城市
+        function setCity(provinec) {
+            var $city = $("#selCity");
+            var proCity, option, modelVal;
+
+            //通过省份名称,获取省份对应城市的数组名
+            switch (provinec) {
+                case "北京":
+                    proCity = beijing;
+                    break;
+                case "上海":
+                    proCity = shanghai;
+                    break;
+                case "天津":
+                    proCity = tianjing;
+                    break;
+                case "重庆":
+                    proCity = chongqing;
+                    break;
+                case "浙江":
+                    proCity = zhejiang;
+                    break;
+                case "江苏":
+                    proCity = jiangsu;
+                    break;
+                case "广东":
+                    proCity = guangdong;
+                    break;
+                case "福建":
+                    proCity = fujiang;
+                    break;
+                case "湖南":
+                    proCity = hunan;
+                    break;
+                case "湖北":
+                    proCity = hubei;
+                    break;
+                case "辽宁":
+                    proCity = liaoning;
+                    break;
+                case "吉林":
+                    proCity = jilin;
+                    break;
+                case "黑龙江":
+                    proCity = heilongjiang;
+                    break;
+                case "河北":
+                    proCity = hebei;
+                    break;
+                case "河南":
+                    proCity = henan;
+                    break;
+                case "山东":
+                    proCity = shandong;
+                    break;
+                case "陕西":
+                    proCity = shangxi;
+                    break;
+                case "甘肃":
+                    proCity = gansu;
+                    break;
+                case "新疆":
+                    proCity = xinjiang;
+                    break;
+                case "青海":
+                    proCity = qinghai;
+                    break;
+                case "山西":
+                    proCity = shanxi;
+                    break;
+                case "四川":
+                    proCity = sichuan;
+                    break;
+                case "贵州":
+                    proCity = guizhou;
+                    break;
+                case "安徽":
+                    proCity = anhui;
+                    break;
+                case "江西":
+                    proCity = jiangxi;
+                    break;
+                case "云南":
+                    proCity = yunnan;
+                    break;
+                case "内蒙古":
+                    proCity = neimenggu;
+                    break;
+                case "西藏":
+                    proCity = xizang;
+                    break;
+                case "广西":
+                    proCity = guangxi;
+                    break;
+                case "宁夏":
+                    proCity = ningxia;
+                    break;
+                case "海南":
+                    proCity = hainan;
+                    break;
+                case "香港":
+                    proCity = xianggang;
+                    break;
+                case "澳门":
+                    proCity = aomeng;
+                    break;
+                case "台湾":
+                    proCity = taiwan;
+                    break;
+            }
+
+            //先清空之前绑定的值
+            $city.empty();
+
+            //设置对应省份的城市
+            for (var i = 0, len = proCity.length; i < len; i++) {
+                modelVal = proCity[i];
+                option = "<option value='" + proCity[i] + "'>" + proCity[i] + "</option>";
+
+                //添加
+                $city.append(option);
+            }
+            form.render('select');
+        }
+
         form.on('submit(salesman-add-form-submit)', function (data) {
+            // data.field.city = $view.find('form').find("select[name='city']").val()
+            // alert(data.field.city);
             febs.post(ctx + 'admin/mallMember/addSalesman', data.field, function () {
                 layer.closeAll();
                 febs.alert.success('操作成功');
diff --git a/src/main/resources/templates/febs/views/modules/mallMember/mallSalesManList.html b/src/main/resources/templates/febs/views/modules/mallMember/mallSalesManList.html
index 4fb8f4d..0c9579c 100644
--- a/src/main/resources/templates/febs/views/modules/mallMember/mallSalesManList.html
+++ b/src/main/resources/templates/febs/views/modules/mallMember/mallSalesManList.html
@@ -146,6 +146,8 @@
                 cols: [[
                     {field: 'id', title: '序号', minWidth: 100,align:'left'},
                     {field: 'name', title: '姓名', minWidth: 100,align:'left'},
+                    {field: 'province', title: '省', minWidth: 100,align:'left'},
+                    {field: 'city', title: '市', minWidth: 100,align:'left'},
                     {field: 'remark', title: '备注', minWidth: 140,align:'left'},
                     {field: 'state', title: '状态',
                         templet: function (d) {
diff --git a/src/main/resources/templates/febs/views/modules/mallMember/salesmanAchieveList.html b/src/main/resources/templates/febs/views/modules/mallMember/salesmanAchieveList.html
new file mode 100644
index 0000000..638ad11
--- /dev/null
+++ b/src/main/resources/templates/febs/views/modules/mallMember/salesmanAchieveList.html
@@ -0,0 +1,177 @@
+<div class="layui-fluid layui-anim febs-anim" id="febs-salesman-achieve-list" lay-title="推销员业绩">
+    <div class="layui-row febs-container">
+        <div class="layui-col-md12">
+            <div class="layui-card">
+                <div class="layui-card-body febs-table-full">
+                    <form class="layui-form layui-table-form" lay-filter="salesman-achieve-table-form">
+                        <div class="layui-row">
+                            <div class="layui-col-md10">
+                                <div class="layui-form-item">
+                                    <label class="layui-form-label">省:</label>
+                                    <div class="layui-input-inline">
+                                        <select name="province" class="province-select-category" id="provinceSelect">
+                                            <option value="">请选择</option>
+                                        </select>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area">
+                                <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query">
+                                    <i class="layui-icon">&#xe848;</i>
+                                </div>
+                                <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
+                                    <i class="layui-icon">&#xe79b;</i>
+                                </div>
+                            </div>
+                        </div>
+                    </form>
+                    <table lay-filter="salesmanAchieveTable" lay-data="{id: 'salesmanAchieveTable'}"></table>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!-- 表格操作栏 start -->
+<script type="text/html" id="user-option">
+    <span shiro:lacksPermission="user:view,user:update,user:delete">
+        <span class="layui-badge-dot febs-bg-orange"></span> 无权限
+    </span>
+    <a lay-event="edit" shiro:hasPermission="user:update"><i
+            class="layui-icon febs-edit-area febs-blue">&#xe7a5;</i></a>
+</script>
+<style>
+    .layui-form-onswitch {
+        background-color: #5FB878 !important;
+    }
+    .thead {background-color: rgba(255, 175, 16,0.2);text-align: center;}
+    .tbody {
+        background-color: rgba(255, 175, 16, 0.1);
+        text-align: center;
+        width:100px;
+    }
+</style>
+<script data-th-inline="none" type="text/javascript">
+    // 引入组件并初始化
+    layui.use([ 'jquery', 'form', 'table', 'febs'], function () {
+        var $ = layui.jquery,
+            febs = layui.febs,
+            form = layui.form,
+            table = layui.table,
+            $view = $('#febs-salesman-achieve-list'),
+            $query = $view.find('#query'),
+            $reset = $view.find('#reset'),
+            $searchForm = $view.find('form'),
+            sortObject = {field: 'phone', type: null},
+            tableIns;
+        //(下拉框)
+        $.get(ctx + 'admin/mallMember/salesmanAchieve/tree', function (data) {
+            for (var k in data)
+            {
+                $(".province-select-category").append("<option value='" + data[k].province + "'>" + data[k].province + "</option>");
+            }
+            layui.use('form', function () {
+                var form = layui.form;
+                form.render();
+            });
+        });
+        form.render();
+
+        // 表格初始化
+        initTable();
+
+        // 初始化表格操作栏各个按钮功能
+        table.on('tool(salesmanAchieveTable)', function (obj) {
+            var data = obj.data,
+                layEvent = obj.event;
+        });
+
+        // 查询按钮
+        $query.on('click', function () {
+            var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type});
+            tableIns.reload({where: params, page: {curr: 1}});
+        });
+
+        // 刷新按钮
+        $reset.on('click', function () {
+            $searchForm[0].reset();
+            sortObject.type = 'null';
+            tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject});
+        });
+
+        function initTable() {
+            tableIns = febs.table.init({
+                elem: $view.find('table'),
+                id: 'salesmanAchieveTable',
+                url: ctx + 'admin/mallMember/salesmanAchieveList',
+                totalRow : true,
+                toolbar: '#tableToolBar',
+                cols: [[
+                    {field: 'province', title: '省', width: 200,align:'center',totalRowText:"合计"},
+                    {field: 'city', title: '市', width: 200,align:'center'},
+                    {field: 'salesmanName', title: '推销员', width: 200,align:'center', totalRow:true},
+                    {field: 'memberCnt', title: '总人数', width: 200,align:'center', totalRow:true},
+                    {width: 200,align:'center'},
+                    {width: 200,align:'center'},
+                    {width: 200,align:'center'},
+                    {width: 200,align:'center'}
+                ]]
+            });
+        }
+
+        // 单击父表表格中的某一行
+        table.on('row(salesmanAchieveTable)',function (obj) {
+            //得到当前行元素数据
+            var data = obj.data;
+            if(true) {
+                // 实现手风琴效果
+                $('.thead').remove();
+                $('.tbody').remove();
+            }
+            // 展示子表数据
+            if(data.adminMemberOrderVos.length > 0) {
+                // 单击行显示出的表格的表体
+                for(var i = data.adminMemberOrderVos.length-1;i >=0;i--) {
+                    var html = '<tr class="tbody">' +
+                        '<td></td>\n' +
+                        '<td>'+data.adminMemberOrderVos[i].orderId+'</td>\n' +
+                        '<td>'+data.adminMemberOrderVos[i].memberName+'</td>\n' +
+                        '<td>'+data.adminMemberOrderVos[i].memberPhone+'</td>\n' +
+                        '<td>'+data.adminMemberOrderVos[i].memberAddress+'</td>\n' +
+                        '<td>'+data.adminMemberOrderVos[i].orderNo+'</td>\n' +
+                        '<td>'+data.adminMemberOrderVos[i].orderAmount+'</td>\n' +
+                        '<td>'+data.adminMemberOrderVos[i].createdTime+'</td>\n' +
+                        '</tr>';
+                    obj.tr.after(html);
+                }
+
+                // 单击行显示出的表格的表头
+                var html = '<tr class="thead">\n' +
+                    '      <td></td>\n' +
+                    '      <td>序号</td>\n' +
+                    '      <td>客户姓名</td>\n' +
+                    '      <td>联系电话</td>\n' +
+                    '      <td>地址</td>\n' +
+                    '      <td>订单编号</td>\n' +
+                    '      <td>下单金额</td>\n' +
+                    '      <td>下单时间</td>\n' +
+                    '      <td></td>\n' +
+                    '    </tr>';
+                obj.tr.after(html);
+
+            }
+
+        });
+
+        // 获取查询参数
+        function getQueryParams() {
+            return {
+                province: $searchForm.find("select[name='province']").val(),
+                // memberName: $searchForm.find('input[name="memberName"]').val().trim(),
+                // name: $searchForm.find('input[name="name"]').val().trim(),
+                // phone: $searchForm.find('input[name="phone"]').val().trim(),
+                // state: $searchForm.find("select[name='state']").val()
+            };
+        }
+
+    })
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/febs/views/modules/mallMember/salesmanUpdate.html b/src/main/resources/templates/febs/views/modules/mallMember/salesmanUpdate.html
index 44b17b3..f6a7018 100644
--- a/src/main/resources/templates/febs/views/modules/mallMember/salesmanUpdate.html
+++ b/src/main/resources/templates/febs/views/modules/mallMember/salesmanUpdate.html
@@ -35,6 +35,22 @@
         </div>
         <div class="layui-form-item">
             <div class="layui-col-lg6">
+                <label class="layui-form-label febs-form-item-require">省:</label>
+                <div class="layui-input-inline" style="padding-right:13px;">
+                    <select name="province" id="selProvince" lay-filter="provinceChange"  lay-verify="required"></select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <div class="layui-col-lg6">
+                <label class="layui-form-label febs-form-item-require">城市:</label>
+                <div class="layui-input-inline" style="padding-right:14px;">
+                    <select name="city" id="selCity" lay-filter="cityChange"  lay-verify="required"></select>
+                </div>
+            </div>
+        </div>
+        <div class="layui-form-item">
+            <div class="layui-col-lg6">
                 <label class="layui-form-label">备注:</label>
                 <div class="layui-input-block">
                     <input type="text" name="remark" autocomplete="off" class="layui-input" >
@@ -55,11 +71,223 @@
             form = layui.form,
             mallSalesman = [[${mallSalesman}]];
         form.render();
+
+
+        //定义数组,存储省份信息
+        var province = ["北京", "上海", "天津", "重庆", "浙江", "江苏", "广东", "福建", "湖南", "湖北", "辽宁",
+            "吉林", "黑龙江", "河北", "河南", "山东", "陕西", "甘肃", "新疆", "青海", "山西", "四川",
+            "贵州", "安徽", "江西", "云南", "内蒙古", "西藏", "广西", "宁夏", "海南", "香港", "澳门", "台湾"];
+
+        //定义数组,存储城市信息
+        var beijing = ["东城区", "西城区", "海淀区", "朝阳区", "丰台区", "石景山区", "通州区", "顺义区", "房山区", "大兴区", "昌平区", "怀柔区", "平谷区", "门头沟区", "延庆县", "密云县"];
+        var shanghai = ["浦东新区", "徐汇区", "长宁区", "普陀区", "闸北区", "虹口区", "杨浦区", "黄浦区", "卢湾区", "静安区", "宝山区", "闵行区", "嘉定区", "金山区", "松江区", "青浦区", "南汇区", "奉贤区", "崇明县"];
+        var tianjing = ["河东", "南开", "河西", "河北", "和平", "红桥", "东丽", "津南", "西青", "北辰", "塘沽", "汉沽", "大港", "蓟县", "宝坻", "宁河", "静海", "武清"];
+        var chongqing = ["渝中区", "大渡口区", "江北区", "沙坪坝区", "九龙坡区", "南岸区", "北碚区", "万盛区", "双桥区", "渝北区", "巴南区", "万州区", "涪陵区", "黔江区", "长寿区", "江津区", "合川区", "永川区", "南川区"];
+        var jiangsu = ["南京", "无锡", "常州", "徐州", "苏州", "南通", "连云港", "淮安", "扬州", "盐城", "镇江", "泰州", "宿迁"];
+        var zhejiang = ["杭州", "宁波", "温州", "嘉兴", "湖州", "绍兴", "金华", "衢州", "舟山", "台州", "利水"];
+        var guangdong = ["广州", "韶关", "深圳", "珠海", "汕头", "佛山", "江门", "湛江", "茂名", "肇庆", "惠州", "梅州", "汕尾", "河源", "阳江", "清远", "东莞", "中山", "潮州", "揭阳"];
+        var fujiang = ["福州", "厦门", "莆田", "三明", "泉州", "漳州", "南平", "龙岩", "宁德"];
+        var hunan = ["长沙", "株洲", "湘潭", "衡阳", "邵阳", "岳阳", "常德", "张家界", "益阳", "郴州", "永州", "怀化", "娄底", "湘西土家苗族自治区"];
+        var hubei = ["武汉", "襄阳", "黄石", "十堰", "宜昌", "鄂州", "荆门", "孝感", "荆州", "黄冈", "咸宁", "随州", "恩施土家族苗族自治州"];
+        var liaoning = ["沈阳", "大连", "鞍山", "抚顺", "本溪", "丹东", "锦州", "营口", "阜新", "辽阳", "盘锦", "铁岭", "朝阳", "葫芦岛"];
+        var jilin = ["长春", "吉林", "四平", "辽源", "通化", "白山", "松原", "白城", "延边朝鲜族自治区"];
+        var heilongjiang = ["哈尔滨", "齐齐哈尔", "鸡西", "牡丹江", "佳木斯", "大庆", "伊春", "黑河", "大兴安岭"];
+        var hebei = ["石家庄", "保定", "唐山", "邯郸", "承德", "廊坊", "衡水", "秦皇岛", "张家口"];
+        var henan = ["郑州", "洛阳", "商丘", "安阳", "南阳", "开封", "平顶山", "焦作", "新乡", "鹤壁", "许昌", "漯河", "三门峡", "信阳", "周口", "驻马店", "济源"];
+        var shandong = ["济南", "青岛", "菏泽", "淄博", "枣庄", "东营", "烟台", "潍坊", "济宁", "泰安", "威海", "日照", "滨州", "德州", "聊城", "临沂"];
+        var shangxi = ["西安", "宝鸡", "咸阳", "渭南", "铜川", "延安", "榆林", "汉中", "安康", "商洛"];
+        var gansu = ["兰州", "嘉峪关", "金昌", "金川", "白银", "天水", "武威", "张掖", "酒泉", "平凉", "庆阳", "定西", "陇南", "临夏", "合作"];
+        var qinghai = ["西宁", "海东地区", "海北藏族自治州", "黄南藏族自治州", "海南藏族自治州", "果洛藏族自治州", "玉树藏族自治州", "海西蒙古族藏族自治州"];
+        var xinjiang = ["乌鲁木齐", "奎屯", "石河子", "昌吉", "吐鲁番", "库尔勒", "阿克苏", "喀什", "伊宁", "克拉玛依", "塔城", "哈密", "和田", "阿勒泰", "阿图什", "博乐"];
+        var shanxi = ["太原", "大同", "阳泉", "长治", "晋城", "朔州", "晋中", "运城", "忻州", "临汾", "吕梁"];
+        var sichuan = ["成都", "自贡", "攀枝花", "泸州", "德阳", "绵阳", "广元", "遂宁", "内江", "乐山", "南充", "眉山", "宜宾", "广安", "达州", "雅安", "巴中", "资阳", "阿坝藏族羌族自治州", "甘孜藏族自治州", "凉山彝族自治州"];
+        var guizhou = ["贵阳", "六盘水", "遵义", "安顺", "黔南布依族苗族自治州", "黔西南布依族苗族自治州", "黔东南苗族侗族自治州", "铜仁", "毕节"];
+        var anhui = ["合肥", "芜湖", "安庆", "马鞍山", "阜阳", "六安", "滁州", "宿州", "蚌埠", "巢湖", "淮南", "宣城", "亳州", "淮北", "铜陵", "黄山", "池州"];
+        var jiangxi = ["南昌", "九江", "景德镇", "萍乡", "新余", "鹰潭", "赣州", "宜春", "上饶", "吉安", "抚州"];
+        var yunnan = ["昆明", "曲靖", "玉溪", "保山", "昭通", "丽江", "普洱", "临沧", "楚雄彝族自治州", "大理白族自治州", "红河哈尼族彝族自治州", "文山壮族苗族自治州", "西双版纳傣族自治州", "德宏傣族景颇族自治州", "怒江傈僳族自治州", "迪庆藏族自治州"];
+        var neimenggu = ["呼和浩特", "包头", "乌海", "赤峰", "通辽", "鄂尔多斯", "呼伦贝尔", "巴彦淖尔", "乌兰察布"];
+        var guangxi = ["南宁", "柳州", "桂林", "梧州", "北海", "防城港", "钦州", "贵港", "玉林", "百色", "贺州", "河池", "崇左"];
+        var xizang = ["拉萨", "昌都地区", "林芝地区", "山南地区", "日喀则地区", "那曲地区", "阿里地区"];
+        var ningxia = ["银川", "石嘴山", "吴忠", "固原", "中卫"];
+        var hainan = ["海口", "三亚"];
+        var xianggang = ["中西区", "湾仔区", "东区", "南区", "九龙城区", "油尖旺区", "观塘区", "黄大仙区", "深水埗区", "北区", "大埔区", "沙田区", "西贡区", "元朗区", "屯门区", "荃湾区", "葵青区", "离岛区"];
+        var taiwan = ["台北", "高雄", "基隆", "台中", "台南", "新竹", "嘉义"];
+        var aomeng = ["澳门半岛", "氹仔岛", "路环岛"];
+
+        //页面加载方法
+        $(function () {
+            layui.use('form', function () {
+                form = layui.form;
+
+                //各种基于事件的操作,下面会有进一步介绍
+                //设置省份数据
+                setProvince();
+                //监听下拉事件
+                form.on('select(provinceChange)', function (data) {
+                    setCity(data.value);
+                });
+                //监听下拉事件
+                form.on('select(cityChange)', function (data) {
+                    // alert(data.value);
+                    // $("#selCity").val(data.value)
+                    // data.field.city = data.value;
+                });
+            });
+
+        });
+
+
+        //设置省份数据
+        function setProvince() {
+            //给省份下拉列表赋值
+
+            var $sel = $("#selProvince");
+
+            //获取对应省份城市
+            for (var i = 0, len = province.length; i < len; i++) {
+                modelVal = province[i];
+                var option = $("<option value='" + province[i] + "'>" + province[i] + "</option>");
+
+                //添加到 select 元素中
+                $sel.append(option);
+            }
+            form.render('select');
+            setCity($($sel.get(0)).val());
+
+        }
+
+
+        //根据选中的省份获取对应的城市
+        function setCity(provinec) {
+            var $city = $("#selCity");
+            var proCity, option, modelVal;
+
+            //通过省份名称,获取省份对应城市的数组名
+            switch (provinec) {
+                case "北京":
+                    proCity = beijing;
+                    break;
+                case "上海":
+                    proCity = shanghai;
+                    break;
+                case "天津":
+                    proCity = tianjing;
+                    break;
+                case "重庆":
+                    proCity = chongqing;
+                    break;
+                case "浙江":
+                    proCity = zhejiang;
+                    break;
+                case "江苏":
+                    proCity = jiangsu;
+                    break;
+                case "广东":
+                    proCity = guangdong;
+                    break;
+                case "福建":
+                    proCity = fujiang;
+                    break;
+                case "湖南":
+                    proCity = hunan;
+                    break;
+                case "湖北":
+                    proCity = hubei;
+                    break;
+                case "辽宁":
+                    proCity = liaoning;
+                    break;
+                case "吉林":
+                    proCity = jilin;
+                    break;
+                case "黑龙江":
+                    proCity = heilongjiang;
+                    break;
+                case "河北":
+                    proCity = hebei;
+                    break;
+                case "河南":
+                    proCity = henan;
+                    break;
+                case "山东":
+                    proCity = shandong;
+                    break;
+                case "陕西":
+                    proCity = shangxi;
+                    break;
+                case "甘肃":
+                    proCity = gansu;
+                    break;
+                case "新疆":
+                    proCity = xinjiang;
+                    break;
+                case "青海":
+                    proCity = qinghai;
+                    break;
+                case "山西":
+                    proCity = shanxi;
+                    break;
+                case "四川":
+                    proCity = sichuan;
+                    break;
+                case "贵州":
+                    proCity = guizhou;
+                    break;
+                case "安徽":
+                    proCity = anhui;
+                    break;
+                case "江西":
+                    proCity = jiangxi;
+                    break;
+                case "云南":
+                    proCity = yunnan;
+                    break;
+                case "内蒙古":
+                    proCity = neimenggu;
+                    break;
+                case "西藏":
+                    proCity = xizang;
+                    break;
+                case "广西":
+                    proCity = guangxi;
+                    break;
+                case "宁夏":
+                    proCity = ningxia;
+                    break;
+                case "海南":
+                    proCity = hainan;
+                    break;
+                case "香港":
+                    proCity = xianggang;
+                    break;
+                case "澳门":
+                    proCity = aomeng;
+                    break;
+                case "台湾":
+                    proCity = taiwan;
+                    break;
+            }
+
+            //先清空之前绑定的值
+            $city.empty();
+
+            //设置对应省份的城市
+            for (var i = 0, len = proCity.length; i < len; i++) {
+                modelVal = proCity[i];
+                option = "<option value='" + proCity[i] + "'>" + proCity[i] + "</option>";
+
+                //添加
+                $city.append(option);
+            }
+            form.render('select');
+        }
         initUserValue();
         function initUserValue() {
             form.val("salesman-update-form", {
                 "id": mallSalesman.id,
                 "name": mallSalesman.name,
+                "province": mallSalesman.province,
+                "city": mallSalesman.city,
                 "remark": mallSalesman.remark
             });
         }

--
Gitblit v1.9.1