From 9244eda73db2445b4fd298339652deb16e2e72ef Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 23 Apr 2025 17:19:42 +0800
Subject: [PATCH] feat(mall): 新增活动管理功能

---
 src/main/resources/templates/febs/views/modules/votesActivity/add.html                          |  186 +
 src/main/resources/templates/febs/views/modules/votesActivity/groupList.html                    |   60 
 src/main/resources/templates/febs/views/modules/votesActivity/optionInfo.html                   |   92 
 src/main/resources/templates/febs/views/modules/votesActivity/optionAdd.html                    |   73 
 src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java               |  312 +++
 src/main/java/cc/mrbird/febs/mall/dto/activity/AdminCategoryUpdateDto.java                      |   19 
 src/main/resources/static/febs/layarea.js                                                       | 4073 +++++++++++++++++++++++++++++++++++++++++
 src/main/java/cc/mrbird/febs/mall/dto/activity/AdminCategoryAddDto.java                         |   16 
 src/main/resources/templates/febs/views/modules/votesActivity/list.html                         |   82 
 src/main/resources/templates/index.html                                                         |    3 
 src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsController.java                      |  140 
 src/main/java/cc/mrbird/febs/mall/dto/AdminHappyActivityCategoryDto.java                        |    1 
 src/main/resources/templates/febs/views/modules/votesActivity/groupAdd.html                     |    9 
 src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java                       |   42 
 src/main/resources/templates/febs/views/modules/votesActivity/voteRecord.html                   |    4 
 /dev/null                                                                                       |   39 
 src/main/java/cc/mrbird/febs/mall/entity/HappyActivity.java                                     |    5 
 src/main/java/cc/mrbird/febs/mall/controller/activity/ViewHappyActivityController.java          |   62 
 src/main/resources/templates/febs/views/modules/votesActivity/groupInfo.html                    |   29 
 src/main/resources/templates/febs/views/modules/votesActivity/discountUpdate.html               |  198 +
 src/main/java/cc/mrbird/febs/common/utils/OssUtils.java                                         |    4 
 src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityCategoryController.java |  208 ++
 src/main/java/cc/mrbird/febs/mall/dto/activity/AdminActivityOptionAddDto.java                   |   39 
 src/main/java/cc/mrbird/febs/mall/entity/HappyFollow.java                                       |   13 
 src/main/resources/templates/febs/views/modules/votesActivity/optionList.html                   |   59 
 25 files changed, 5,324 insertions(+), 444 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/utils/OssUtils.java b/src/main/java/cc/mrbird/febs/common/utils/OssUtils.java
index 1fecc9b..4ed1fa4 100644
--- a/src/main/java/cc/mrbird/febs/common/utils/OssUtils.java
+++ b/src/main/java/cc/mrbird/febs/common/utils/OssUtils.java
@@ -11,8 +11,8 @@
 public class OssUtils {
 
     private static String    	END_POINT         = "https://oss-cn-hangzhou.aliyuncs.com";
-    private static String       ACCESS_KEY_ID     = "LTAI5tCZ5MZT3372gGq4oC62";
-    private static String       ACCESS_KEY_SECRET = "IJkBOYotXQrfrv73PyN6OGHg5NNya9";
+    private static String       ACCESS_KEY_ID     = "LTAI5tCH5Ld2n72QmF1A2zXm";
+    private static String       ACCESS_KEY_SECRET = "RNIf3J90mV1WdbgraesLusjF7TRRb9";
     private static String 		bucket_name 	  = "https://excoin.oss-cn-hangzhou.aliyuncs.com";
 
     public static boolean uploadFileWithBase64(String base64, String pathName) {
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsController.java
index a7ca828..428afbf 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsController.java
@@ -108,6 +108,7 @@
     // 文件保存目录URL
     @Value("${static.resource.path}")
     private String resourcePath;
+
     /**
      *  图片上传
      * @return
@@ -115,58 +116,97 @@
     @PostMapping(value = "/uploadFileBase64")
     @ControllerEndpoint(operation = "图片上传", exceptionMessage = "上传失败")
     public Map<String,Object> uploadFileBase64(@RequestBody @Validated MultipartFile file) throws IOException {
-        if (file.isEmpty()) {
-            new FebsResponse().message("上传文件为空");
-        }
-        return FileUtil.fileUploadEsc(file,resourceUrl,resourcePath);
-
-//        String base64EncoderImg = "";
-//        BASE64Encoder base64Encoder =new BASE64Encoder();
-//        List<String> imageFuffixStr = CollUtil.toList(StrUtil.split(file.getOriginalFilename(), "."));
-//        String imageFuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
-//        if("jpg".equals(imageFuffixStr.get(1))){
-//            try {
-//                //输出到BufferedImage
-//                BufferedImage bufferedImage = Thumbnails.of(file.getInputStream())
-//                        // 图片大小(长宽)压缩比例 从0-1,1表示原图
-//                        .scale(1f)
-//                        // 图片质量压缩比例 从0-1,越接近1质量越好
-//                        .outputQuality(0.9f)
-//                        .asBufferedImage();
-//                //对内存中的图片文件进行Base64处理
-//                ByteArrayOutputStream newBaos = new ByteArrayOutputStream();//io流
-//                ImageIO.write(bufferedImage, "jpg", newBaos);//写入流中
-//                byte[] bytes = newBaos.toByteArray();//转换成字节
-//                base64EncoderImg = base64Encoder.encode(bytes);
-////            base64EncoderImg = URLEncoder.encode(new BASE64Encoder().encode(bytes), "UTF-8");
-//            } catch (Exception e) {
-//                e.printStackTrace();
-//            }
-//        }else{
-//            try {
-//                base64EncoderImg = base64Encoder.encode(file.getBytes());
-//            } catch (IOException e) {
-//                e.printStackTrace();
-//            }
+//        if (file.isEmpty()) {
+//            new FebsResponse().message("上传文件为空");
 //        }
-//        //文件加密
-////        String imageFuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
-////      String imageFuffix = ".png";
-//        String imageNames = System.currentTimeMillis() + IdUtil.simpleUUID() + imageFuffix;
-//        String imageName = "uploadeFile/" + imageNames;
-//        OssUtils.uploadFileWithBase64(base64EncoderImg, imageName);
-//        String bucket_name ="https://excoin.oss-cn-hangzhou.aliyuncs.com";
-//        String url = bucket_name + "/" + imageName;
-//
-//        Map<String,Object> map = new HashMap<String,Object>();
-//        Map<String,Object> map2 = new HashMap<String,Object>();
-//        map.put("code",0);//0表示成功,1失败
-//        map.put("msg","上传成功");//提示消息
-//        map.put("data",map2);
-//        map2.put("src",url);//图片url
-//        map2.put("title",imageNames);//图片名称,这个会显示在输入框里
-//        return map;
+//        return FileUtil.fileUploadEsc(file,resourceUrl,resourcePath);
+
+        if (file == null || file.isEmpty()) {
+            return new FebsResponse().message("上传文件为空").fail();
+        }
+
+        try {
+            byte[] fileBytes = file.getBytes();
+            String base64Str = java.util.Base64.getEncoder().encodeToString(fileBytes);
+            String imageSuffix = "." + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
+            String imageNames = System.currentTimeMillis() + IdUtil.simpleUUID() + imageSuffix;
+            String imageName = "hc/" + imageNames;
+            OssUtils.uploadFileWithBase64(base64Str, imageName);
+            String bucket_name = "https://excoin.oss-cn-hangzhou.aliyuncs.com";
+            String url = bucket_name + "/" + imageName;
+
+            Map<String,Object> map = new HashMap<String,Object>();
+            Map<String,Object> map2 = new HashMap<String,Object>();
+            map2.put("src",url);//图片url
+            map2.put("title",imageNames);//图片名称,这个会显示在输入框里
+            map.put("code",0);//0表示成功,1失败
+            map.put("msg","上传成功");//提示消息
+            map.put("data",map2);
+            return map;
+        } catch (IOException e) {
+            log.error("上传失败: {}", e.getMessage());
+            return new FebsResponse().message("上传失败").fail();
+        }
     }
+//    /**
+//     *  图片上传
+//     * @return
+//     */
+//    @PostMapping(value = "/uploadFileBase64")
+//    @ControllerEndpoint(operation = "图片上传", exceptionMessage = "上传失败")
+//    public Map<String,Object> uploadFileBase64(@RequestBody @Validated MultipartFile file) throws IOException {
+//        if (file.isEmpty()) {
+//            new FebsResponse().message("上传文件为空");
+//        }
+//        return FileUtil.fileUploadEsc(file,resourceUrl,resourcePath);
+//
+////        String base64EncoderImg = "";
+////        BASE64Encoder base64Encoder =new BASE64Encoder();
+////        List<String> imageFuffixStr = CollUtil.toList(StrUtil.split(file.getOriginalFilename(), "."));
+////        String imageFuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
+////        if("jpg".equals(imageFuffixStr.get(1))){
+////            try {
+////                //输出到BufferedImage
+////                BufferedImage bufferedImage = Thumbnails.of(file.getInputStream())
+////                        // 图片大小(长宽)压缩比例 从0-1,1表示原图
+////                        .scale(1f)
+////                        // 图片质量压缩比例 从0-1,越接近1质量越好
+////                        .outputQuality(0.9f)
+////                        .asBufferedImage();
+////                //对内存中的图片文件进行Base64处理
+////                ByteArrayOutputStream newBaos = new ByteArrayOutputStream();//io流
+////                ImageIO.write(bufferedImage, "jpg", newBaos);//写入流中
+////                byte[] bytes = newBaos.toByteArray();//转换成字节
+////                base64EncoderImg = base64Encoder.encode(bytes);
+//////            base64EncoderImg = URLEncoder.encode(new BASE64Encoder().encode(bytes), "UTF-8");
+////            } catch (Exception e) {
+////                e.printStackTrace();
+////            }
+////        }else{
+////            try {
+////                base64EncoderImg = base64Encoder.encode(file.getBytes());
+////            } catch (IOException e) {
+////                e.printStackTrace();
+////            }
+////        }
+////        //文件加密
+//////        String imageFuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
+//////      String imageFuffix = ".png";
+////        String imageNames = System.currentTimeMillis() + IdUtil.simpleUUID() + imageFuffix;
+////        String imageName = "uploadeFile/" + imageNames;
+////        OssUtils.uploadFileWithBase64(base64EncoderImg, imageName);
+////        String bucket_name ="https://excoin.oss-cn-hangzhou.aliyuncs.com";
+////        String url = bucket_name + "/" + imageName;
+////
+////        Map<String,Object> map = new HashMap<String,Object>();
+////        Map<String,Object> map2 = new HashMap<String,Object>();
+////        map.put("code",0);//0表示成功,1失败
+////        map.put("msg","上传成功");//提示消息
+////        map.put("data",map2);
+////        map2.put("src",url);//图片url
+////        map2.put("title",imageNames);//图片名称,这个会显示在输入框里
+////        return map;
+//    }
 
     public String Base64ImageByMemory(BufferedImage pic) {
         String imgString = "";
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityCategoryController.java b/src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityCategoryController.java
new file mode 100644
index 0000000..2b30870
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityCategoryController.java
@@ -0,0 +1,208 @@
+package cc.mrbird.febs.mall.controller.activity;
+
+import cc.mrbird.febs.common.annotation.ControllerEndpoint;
+import cc.mrbird.febs.common.controller.BaseController;
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.mall.dto.AdminHappyActivityCategoryDto;
+import cc.mrbird.febs.mall.dto.activity.AdminActivityOptionAddDto;
+import cc.mrbird.febs.mall.dto.activity.AdminCategoryAddDto;
+import cc.mrbird.febs.mall.dto.activity.AdminCategoryUpdateDto;
+import cc.mrbird.febs.mall.entity.HappyActivity;
+import cc.mrbird.febs.mall.entity.HappyActivityOption;
+import cc.mrbird.febs.mall.service.IAdminHappyActivityService;
+import cn.hutool.core.util.StrUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import java.util.Map;
+
+@Slf4j
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(value = "/admin/happyActivity")
+public class AdminVotesActivityCategoryController extends BaseController {
+
+    private final IAdminHappyActivityService adminHappyActivityService;
+    private final RedisUtils redisUtils;
+
+    /**
+     * 分类列表
+     * @return
+     */
+    @GetMapping("groupList")
+    public FebsResponse groupList(AdminHappyActivityCategoryDto dto, QueryRequest request) {
+
+        Map<String, Object> data = getDataTable(adminHappyActivityService.getGroupList(dto, request));
+        return new FebsResponse().success().data(data);
+    }
+    /**
+     * 分类-新增
+     */
+    @PostMapping("addGroup")
+    @ControllerEndpoint(operation = "分类-新增", exceptionMessage = "操作失败")
+    public FebsResponse addGroup(@RequestBody @Valid AdminCategoryAddDto dto) {
+
+        return adminHappyActivityService.addGroup(dto);
+    }
+
+    /**
+     * 分类-删除
+     */
+    @GetMapping("groupDelete/{id}")
+    @ControllerEndpoint(operation = "选项-删除", exceptionMessage = "操作失败")
+    public FebsResponse groupDelete(@NotNull(message = "{required}") @PathVariable Long id) {
+
+        return adminHappyActivityService.groupDelete(id);
+    }
+
+    /**
+     * 分类-更新
+     */
+    @PostMapping("groupUpdate")
+    @ControllerEndpoint(operation = "分类-更新", exceptionMessage = "操作失败")
+    public FebsResponse groupUpdate(@RequestBody @Valid AdminCategoryUpdateDto dto) {
+
+        return adminHappyActivityService.groupUpdate(dto);
+    }
+    /**
+     * 分类-开启
+     */
+    @GetMapping("groupState/{id}/{type}")
+    @ControllerEndpoint(operation = "分类-开启", exceptionMessage = "操作失败")
+    public FebsResponse groupState(
+            @NotNull(message = "{required}") @PathVariable Long id,
+            @NotNull(message = "{required}") @PathVariable Integer type) {
+
+        return adminHappyActivityService.groupState(id,type);
+    }
+
+    /**
+     * 获取分类
+     * @return
+     */
+    @GetMapping(value = "/allGroup")
+    public FebsResponse allGroup() {
+
+        return new FebsResponse().success().data(adminHappyActivityService.allGroup());
+    }
+
+
+
+    /**
+     * 活动-列表
+     */
+    @GetMapping("list")
+    public FebsResponse getAdminActivityListInPage(HappyActivity dto, QueryRequest request) {
+        Map<String, Object> data = getDataTable(adminHappyActivityService.getAdminActivityListInPage(dto, request));
+        return new FebsResponse().success().data(data);
+    }
+
+    /**
+     * 活动-新增
+     */
+    @PostMapping("add")
+    @ControllerEndpoint(operation = "新增", exceptionMessage = "操作失败")
+    public FebsResponse addActivity(@RequestBody HappyActivity dto) {
+        return adminHappyActivityService.addActivity(dto);
+    }
+
+    /**
+     * 活动-删除
+     */
+    @GetMapping("delActivity/{id}")
+    @ControllerEndpoint(operation = "活动-删除", exceptionMessage = "删除失败")
+    public FebsResponse delActivity(@NotNull(message = "{required}") @PathVariable Long id) {
+        return adminHappyActivityService.delActivity(id);
+    }
+    /**
+     * 活动-开启
+     */
+    @GetMapping("changeState/{id}/{state}")
+    @ControllerEndpoint(operation = "活动-开启", exceptionMessage = "操作失败")
+    public FebsResponse changeState(@NotNull(message = "{required}") @PathVariable Long id
+            ,@NotNull(message = "{required}") @PathVariable Integer state) {
+        return adminHappyActivityService.changeState(id,state);
+    }
+
+    /**
+     * 活动-更新
+     */
+    @PostMapping("activityUpdate")
+    @ControllerEndpoint(operation = "活动-更新", exceptionMessage = "操作失败")
+    public FebsResponse activityUpdate(@RequestBody HappyActivity dto) {
+
+        return adminHappyActivityService.activityUpdate(dto);
+    }
+
+    /**
+     * 获取全部活动
+     * @return
+     */
+    @GetMapping(value = "/allActivities")
+    public FebsResponse allActivities() {
+        return new FebsResponse().success().data(adminHappyActivityService.allActivities());
+    }
+
+    /**
+     * 选项-列表
+     * @return
+     */
+    @GetMapping("optionList")
+    public FebsResponse optionList(HappyActivityOption dto, QueryRequest request) {
+
+        Map<String, Object> data = getDataTable(adminHappyActivityService.getOptionListInPage(dto, request));
+        return new FebsResponse().success().data(data);
+    }
+
+    /**
+     * 选项-新增
+     */
+    @PostMapping("addOption")
+    @ControllerEndpoint(operation = "选项-新增", exceptionMessage = "操作失败")
+    public FebsResponse addOption(@RequestBody @Valid AdminActivityOptionAddDto dto) {
+
+        return adminHappyActivityService.addOption(dto);
+    }
+
+    /**
+     * 选项-更新
+     */
+    @PostMapping("optionUpdate")
+    @ControllerEndpoint(operation = "选项-更新", exceptionMessage = "操作失败")
+    public FebsResponse optionUpdate(@RequestBody HappyActivityOption dto) {
+
+        return adminHappyActivityService.optionUpdate(dto);
+    }
+
+    /**
+     * 选项-删除
+     */
+    @GetMapping("optionDelete/{id}")
+    @ControllerEndpoint(operation = "选项-删除", exceptionMessage = "操作失败")
+    public FebsResponse optionDelete(@NotNull(message = "{required}") @PathVariable Long id) {
+
+        return adminHappyActivityService.optionDelete(id);
+    }
+    /**
+     * 选项-得票记录
+     */
+    @GetMapping("voteRecord")
+    public FebsResponse voteRecord(QueryRequest request, Integer parentId) {
+        HappyActivityOption voteRecord = new HappyActivityOption();
+        String existToken = redisUtils.getString("voteRecord");
+        if (StrUtil.isNotBlank(existToken)) {
+            redisUtils.del(existToken);
+        }
+        voteRecord.setId(Long.parseLong(existToken));
+        Map<String, Object> data = getDataTable(adminHappyActivityService.getFollowVoteInPage(voteRecord,request));
+        return new FebsResponse().success().data(data);
+    }
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityController.java b/src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityController.java
deleted file mode 100644
index 5575d41..0000000
--- a/src/main/java/cc/mrbird/febs/mall/controller/activity/AdminVotesActivityController.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package cc.mrbird.febs.mall.controller.activity;
-
-import cc.mrbird.febs.common.controller.BaseController;
-import cc.mrbird.febs.common.entity.FebsResponse;
-import cc.mrbird.febs.common.entity.QueryRequest;
-import cc.mrbird.febs.common.utils.RedisUtils;
-import cc.mrbird.febs.mall.dto.AdminHappyActivityCategoryDto;
-import cc.mrbird.febs.mall.service.IAdminHappyActivityService;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-import javax.validation.constraints.NotNull;
-import java.util.Map;
-
-@Slf4j
-@Validated
-@RestController
-@RequiredArgsConstructor
-@RequestMapping(value = "/admin/happyActivity")
-public class AdminVotesActivityController extends BaseController {
-
-
-    private final IAdminHappyActivityService adminHappyActivityService;
-    private final RedisUtils redisUtils;
-
-    /**
-     * 分类列表
-     * @return
-     */
-    @GetMapping("groupList")
-    public FebsResponse groupList(AdminHappyActivityCategoryDto dto, QueryRequest request) {
-        Map<String, Object> data = getDataTable(adminHappyActivityService.getGroupList(dto, request));
-        return new FebsResponse().success().data(data);
-    }
-
-}
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/activity/ViewHappyActivityController.java b/src/main/java/cc/mrbird/febs/mall/controller/activity/ViewHappyActivityController.java
index 9204752..7e467c5 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/activity/ViewHappyActivityController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/activity/ViewHappyActivityController.java
@@ -2,6 +2,8 @@
 
 import cc.mrbird.febs.common.controller.BaseController;
 import cc.mrbird.febs.common.entity.FebsConstant;
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.utils.FebsUtil;
 import cc.mrbird.febs.common.utils.RedisUtils;
 import cc.mrbird.febs.mall.entity.HappyActivity;
@@ -22,12 +24,14 @@
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 
+import java.util.Map;
+
 @Controller("votesActivityView")
 @RequestMapping(FebsConstant.VIEW_PREFIX + "modules/votesActivity")
 @RequiredArgsConstructor
 public class ViewHappyActivityController extends BaseController {
 
-    private final IAdminHappyActivityService iVoteActivityService;
+    private final IAdminHappyActivityService iAdminHappyActivityService;
     private final HappyActivityCategoryMapper happyActivityCategoryMapper;
     private final HappyActivityOptionMapper happyActivityOptionMapper;
     private final RedisUtils redisUtils;
@@ -61,12 +65,42 @@
     @RequiresPermissions("groupInfo:view")
     public String groupInfo(@PathVariable long id, Model model) {
         HappyActivityCategory voteActivityGroup = happyActivityCategoryMapper.selectById(id);
-        model.addAttribute("groupInfo", voteActivityGroup);
+        model.addAttribute("voteActivityGroup", voteActivityGroup);
         return FebsUtil.view("modules/votesActivity/groupInfo");
     }
 
     /**
-     * 活动选项列表
+     * 活动-列表
+     */
+    @GetMapping("list")
+    @RequiresPermissions("list:view")
+    public String activityList() {
+        return FebsUtil.view("modules/votesActivity/list");
+    }
+
+    /**
+     * 活动-新增
+     */
+    @GetMapping("add")
+    @RequiresPermissions("add:add")
+    public String activityAdd() {
+        return FebsUtil.view("modules/votesActivity/add");
+    }
+
+    /**
+     * 活动-修改
+     */
+    @GetMapping("votesActivityUpdate/{id}")
+    @RequiresPermissions("votesActivityUpdate:update")
+    public String votesActivityctivityUpdate(@PathVariable long id, Model model) {
+        HappyActivity happyActivity = iAdminHappyActivityService.getBaseMapper().selectById(id);
+        model.addAttribute("activity", happyActivity);
+
+        return FebsUtil.view("modules/votesActivity/discountUpdate");
+    }
+
+    /**
+     * 活动-选项列表
      */
     @GetMapping("optionList")
     @RequiresPermissions("optionList:view")
@@ -75,7 +109,7 @@
     }
 
     /**
-     * 活动选项新增
+     * 活动-选项新增
      * @return
      */
     @GetMapping(value = "/optionAdd")
@@ -85,7 +119,7 @@
     }
 
     /**
-     * 活动选项新增编辑
+     * 活动-选项编辑
      * @param id
      * @param model
      * @return
@@ -93,8 +127,22 @@
     @GetMapping("optionInfo/{id}")
     @RequiresPermissions("optionInfo:view")
     public String optionInfo(@PathVariable long id, Model model) {
-        HappyActivityOption voteOption = happyActivityOptionMapper.selectById(id);
-        model.addAttribute("voteOption", voteOption);
+        HappyActivityOption happyActivityOption = happyActivityOptionMapper.selectById(id);
+        model.addAttribute("voteOption", happyActivityOption);
         return FebsUtil.view("modules/votesActivity/optionInfo");
     }
+    /**
+     * 活动-得票记录
+     * @return
+     */
+    @GetMapping("voteRecord/{id}")
+    @RequiresPermissions("voteRecord:view")
+    public String moneyFlow(@PathVariable long id, Model model) {
+        String existToken = redisUtils.getString("voteRecord");
+        if (StrUtil.isNotBlank(existToken)) {
+            redisUtils.del(existToken);
+        }
+        redisUtils.set("voteRecord", id, -1);
+        return FebsUtil.view("modules/votesActivity/voteRecord");
+    }
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/AdminHappyActivityCategoryDto.java b/src/main/java/cc/mrbird/febs/mall/dto/AdminHappyActivityCategoryDto.java
index dcd2375..5784c80 100644
--- a/src/main/java/cc/mrbird/febs/mall/dto/AdminHappyActivityCategoryDto.java
+++ b/src/main/java/cc/mrbird/febs/mall/dto/AdminHappyActivityCategoryDto.java
@@ -6,4 +6,5 @@
 public class AdminHappyActivityCategoryDto {
     private String name;
     private Integer status;
+    private Integer hotState;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/activity/AdminActivityOptionAddDto.java b/src/main/java/cc/mrbird/febs/mall/dto/activity/AdminActivityOptionAddDto.java
new file mode 100644
index 0000000..3ad532a
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/activity/AdminActivityOptionAddDto.java
@@ -0,0 +1,39 @@
+package cc.mrbird.febs.mall.dto.activity;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class AdminActivityOptionAddDto {
+    @NotNull(message = "所属活动不能为空")
+    private Long activityId;//投票活动ID
+
+    @NotBlank(message = "选项名称不能为空")
+    private String optionName;//佳丽姓名
+
+    private String realName;//注册姓名
+
+    private String image;//投票选项图片 URL
+
+    private String description;//投票活动描述
+
+    private String videoUrl; //视频url
+
+    private String mobilePhone;//手机
+
+    private String sex;//性别
+
+    private String hobby;//兴趣爱好
+
+    private String mcnState;//是否签约MCN机构 0否 1是
+
+    private String address;//地址
+
+    private String province;//省份
+
+    private String city;//城市
+
+    private String email;//邮箱
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/activity/AdminCategoryAddDto.java b/src/main/java/cc/mrbird/febs/mall/dto/activity/AdminCategoryAddDto.java
new file mode 100644
index 0000000..6e3082f
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/activity/AdminCategoryAddDto.java
@@ -0,0 +1,16 @@
+package cc.mrbird.febs.mall.dto.activity;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class AdminCategoryAddDto {
+
+    @NotBlank(message = "名称不能为空")
+    private String name;
+
+    @NotNull(message = "排序不能为空")
+    private Integer orderCnt;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/activity/AdminCategoryUpdateDto.java b/src/main/java/cc/mrbird/febs/mall/dto/activity/AdminCategoryUpdateDto.java
new file mode 100644
index 0000000..c7c50ac
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/activity/AdminCategoryUpdateDto.java
@@ -0,0 +1,19 @@
+package cc.mrbird.febs.mall.dto.activity;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class AdminCategoryUpdateDto {
+
+    @NotNull(message = "ID不能为空")
+    private Long id;
+
+    @NotBlank(message = "名称不能为空")
+    private String name;
+
+    @NotNull(message = "排序不能为空")
+    private Integer orderCnt;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/HappyActivity.java b/src/main/java/cc/mrbird/febs/mall/entity/HappyActivity.java
index da8abe5..76155a5 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/HappyActivity.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/HappyActivity.java
@@ -1,6 +1,7 @@
 package cc.mrbird.febs.mall.entity;
 
 import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
@@ -36,8 +37,11 @@
      `back_img` varchar(500) DEFAULT NULL COMMENT '背景图片',
      `DELETE_FLAG` int(11) DEFAULT '0' COMMENT '删除标识 0-未删除 1-已删除',
      `vote_cnt` int(11) DEFAULT NULL COMMENT '投票数量',
+     `add_state` int(11) DEFAULT '0' COMMENT '是否允许报名 0-不允许 1-允许',
      */
     private Long categoryId;
+    @TableField(exist = false)
+    private String categoryName;//
     private String code;
     private String name;
     private Integer type;
@@ -61,6 +65,7 @@
     private String backImg;
     private Integer deleteFlag;
     private Integer voteCnt;
+    private Integer addState;
 
 
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/HappyFollow.java b/src/main/java/cc/mrbird/febs/mall/entity/HappyFollow.java
index 4325b83..7653965 100644
--- a/src/main/java/cc/mrbird/febs/mall/entity/HappyFollow.java
+++ b/src/main/java/cc/mrbird/febs/mall/entity/HappyFollow.java
@@ -1,6 +1,7 @@
 package cc.mrbird.febs.mall.entity;
 
 import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 
@@ -18,9 +19,21 @@
      `DELETE_FLAG` int(11) DEFAULT '0' COMMENT '删除标识 0-未删除 1-已删除',
      */
     private Long memberId;
+    //用户昵称
+    @TableField(exist = false)
+    private String memberName;
+
     private Integer sourceType;
     private Long sourceId;
+    //活动名称
+    @TableField(exist = false)
+    private String activityName;
+
     private Long sourceOptionId;
+    //选项名称
+    @TableField(exist = false)
+    private String optionName;
+
     private Integer type;
     private Integer deleteFlag;
 
diff --git a/src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java b/src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java
index 2a108bd..af02647 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/IAdminHappyActivityService.java
@@ -1,14 +1,56 @@
 package cc.mrbird.febs.mall.service;
 
+import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.mall.dto.AdminHappyActivityCategoryDto;
+import cc.mrbird.febs.mall.dto.activity.AdminActivityOptionAddDto;
+import cc.mrbird.febs.mall.dto.activity.AdminCategoryAddDto;
+import cc.mrbird.febs.mall.dto.activity.AdminCategoryUpdateDto;
 import cc.mrbird.febs.mall.entity.HappyActivity;
 import cc.mrbird.febs.mall.entity.HappyActivityCategory;
+import cc.mrbird.febs.mall.entity.HappyActivityOption;
+import cc.mrbird.febs.mall.entity.HappyFollow;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import java.util.List;
 
 public interface IAdminHappyActivityService extends IService<HappyActivity>{
 
 
     IPage<HappyActivityCategory> getGroupList(AdminHappyActivityCategoryDto dto, QueryRequest request);
+
+    FebsResponse addGroup(AdminCategoryAddDto dto);
+
+    FebsResponse groupDelete(@NotNull(message = "{required}") Long id);
+
+    FebsResponse groupUpdate(@Valid AdminCategoryUpdateDto dto);
+
+    FebsResponse groupState(@NotNull(message = "{required}") Long id, @NotNull(message = "{required}") Integer type);
+
+    List<HappyActivityCategory> allGroup();
+
+    IPage<HappyActivity> getAdminActivityListInPage(HappyActivity dto, QueryRequest request);
+
+    FebsResponse addActivity(HappyActivity dto);
+
+    FebsResponse delActivity(Long id);
+
+    FebsResponse changeState(Long id, Integer state);
+
+    FebsResponse activityUpdate(HappyActivity dto);
+
+    IPage<HappyActivityOption> getOptionListInPage(HappyActivityOption dto, QueryRequest request);
+
+    List<HappyActivity> allActivities();
+
+    FebsResponse addOption(AdminActivityOptionAddDto dto);
+
+    FebsResponse optionUpdate(HappyActivityOption dto);
+
+    FebsResponse optionDelete(Long id);
+
+    IPage<HappyFollow> getFollowVoteInPage(HappyActivityOption voteRecord, QueryRequest request);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java
index 4f260d4..1070b62 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java
@@ -1,12 +1,18 @@
 package cc.mrbird.febs.mall.service.impl;
 
+import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
+import cc.mrbird.febs.common.enumerates.StateUpDownEnum;
+import cc.mrbird.febs.common.utils.MallUtils;
 import cc.mrbird.febs.mall.dto.AdminHappyActivityCategoryDto;
-import cc.mrbird.febs.mall.entity.HappyActivity;
-import cc.mrbird.febs.mall.entity.HappyActivityCategory;
-import cc.mrbird.febs.mall.mapper.HappyActivityCategoryMapper;
-import cc.mrbird.febs.mall.mapper.HappyActivityMapper;
+import cc.mrbird.febs.mall.dto.activity.AdminActivityOptionAddDto;
+import cc.mrbird.febs.mall.dto.activity.AdminCategoryAddDto;
+import cc.mrbird.febs.mall.dto.activity.AdminCategoryUpdateDto;
+import cc.mrbird.febs.mall.entity.*;
+import cc.mrbird.febs.mall.mapper.*;
 import cc.mrbird.febs.mall.service.IAdminHappyActivityService;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -18,6 +24,12 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
 @Slf4j
 @Service
 @RequiredArgsConstructor
@@ -25,6 +37,10 @@
 public class AdminHappyActivityServiceImpl extends ServiceImpl<HappyActivityMapper, HappyActivity> implements IAdminHappyActivityService {
 
     private final HappyActivityCategoryMapper happyActivityCategoryMapper;
+    private final HappyActivityOptionMapper happyActivityOptionMapper;
+    private final HappyFollowMapper happyFollowMapper;
+    private final MallMemberMapper mallMemberMapper;
+
     @Override
     public IPage<HappyActivityCategory> getGroupList(AdminHappyActivityCategoryDto dto, QueryRequest request) {
         Page<HappyActivityCategory> page = new Page<>(request.getPageNum(), request.getPageSize());
@@ -35,8 +51,296 @@
         if(ObjectUtil.isNotEmpty(dto.getStatus())){
             voteOptionLambdaQueryWrapper.eq(HappyActivityCategory::getState,dto.getStatus());
         }
+        if(ObjectUtil.isNotEmpty(dto.getHotState())){
+            voteOptionLambdaQueryWrapper.eq(HappyActivityCategory::getHotState,dto.getHotState());
+        }
+        voteOptionLambdaQueryWrapper.eq(HappyActivityCategory::getDeleteFlag, StateUpDownEnum.DOWN.getCode());
         voteOptionLambdaQueryWrapper.orderByDesc(HappyActivityCategory::getCreatedTime);
         Page<HappyActivityCategory> adminOptionVoIPage = happyActivityCategoryMapper.selectPage(page, voteOptionLambdaQueryWrapper);
         return adminOptionVoIPage;
     }
+
+    @Override
+    public FebsResponse addGroup(AdminCategoryAddDto dto) {
+
+        HappyActivityCategory happyActivityCategory = new HappyActivityCategory();
+        happyActivityCategory.setName(dto.getName());
+        happyActivityCategory.setOrderCnt(dto.getOrderCnt());
+        happyActivityCategoryMapper.insert(happyActivityCategory);
+        return new FebsResponse().success().message("操作成功");
+    }
+
+    @Override
+    public FebsResponse groupDelete(Long id) {
+        HappyActivityCategory happyActivityCategory = happyActivityCategoryMapper.selectById(id);
+        happyActivityCategory.setDeleteFlag(StateUpDownEnum.UP.getCode());
+        happyActivityCategoryMapper.updateById(happyActivityCategory);
+        return new FebsResponse().success().message("操作成功");
+    }
+
+    @Override
+    public FebsResponse groupUpdate(AdminCategoryUpdateDto dto) {
+
+        HappyActivityCategory happyActivityCategory = happyActivityCategoryMapper.selectById(dto.getId());
+        happyActivityCategory.setName(dto.getName());
+        happyActivityCategory.setOrderCnt(dto.getOrderCnt());
+        happyActivityCategoryMapper.updateById(happyActivityCategory);
+        return new FebsResponse().success().message("操作成功");
+    }
+
+    @Override
+    public FebsResponse groupState(Long id, Integer type) {
+
+        HappyActivityCategory happyActivityCategory = happyActivityCategoryMapper.selectById(id);
+        if(StateUpDownEnum.UP.getCode() == happyActivityCategory.getDeleteFlag()){
+            throw new RuntimeException("该分组已删除,无法操作");
+        }
+
+        if(type == 1){
+            happyActivityCategory.setHotState(happyActivityCategory.getHotState() == StateUpDownEnum.UP.getCode() ? StateUpDownEnum.DOWN.getCode() : StateUpDownEnum.UP.getCode());
+        }
+
+        if(type == 2){
+            happyActivityCategory.setState(happyActivityCategory.getState() == StateUpDownEnum.UP.getCode() ? StateUpDownEnum.DOWN.getCode() : StateUpDownEnum.UP.getCode());
+        }
+        happyActivityCategoryMapper.updateById(happyActivityCategory);
+        return new FebsResponse().success().message("操作成功");
+    }
+
+    @Override
+    public List<HappyActivityCategory> allGroup() {
+        List<HappyActivityCategory> happyActivityCategories =
+                happyActivityCategoryMapper.selectList(
+                        new LambdaQueryWrapper<HappyActivityCategory>()
+                                .eq(HappyActivityCategory::getState, StateUpDownEnum.UP.getCode())
+                                .eq(HappyActivityCategory::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+                                .orderByDesc(HappyActivityCategory::getOrderCnt)
+                );
+        if(CollUtil.isNotEmpty(happyActivityCategories)){
+            return happyActivityCategories;
+        }
+        return Collections.emptyList();
+    }
+
+    @Override
+    public IPage<HappyActivity> getAdminActivityListInPage(HappyActivity dto, QueryRequest request) {
+        Page<HappyActivity> page = new Page<>(request.getPageNum(), request.getPageSize());
+        LambdaQueryWrapper<HappyActivity> voteActivityLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        if(StrUtil.isNotEmpty(dto.getName())){
+            voteActivityLambdaQueryWrapper.like(HappyActivity::getName,dto.getName());
+        }
+        if(ObjectUtil.isNotEmpty(dto.getState())){
+            voteActivityLambdaQueryWrapper.eq(HappyActivity::getState,dto.getState());
+        }
+
+        if(ObjectUtil.isNotEmpty(dto.getCategoryId())){
+            voteActivityLambdaQueryWrapper.eq(HappyActivity::getCategoryId,dto.getCategoryId());
+        }
+        voteActivityLambdaQueryWrapper.eq(HappyActivity::getDeleteFlag, StateUpDownEnum.DOWN.getCode());
+        voteActivityLambdaQueryWrapper.orderByDesc(HappyActivity::getCreatedTime);
+        Page<HappyActivity> voteActivityPage = this.baseMapper.selectPage(page, voteActivityLambdaQueryWrapper);
+
+        List<HappyActivity> records = voteActivityPage.getRecords();
+        if(CollUtil.isNotEmpty(records)){
+            //stream流获取records的全部categoryId
+            Set<Long> categoryIds = records.stream().map(HappyActivity::getCategoryId).collect(Collectors.toSet());
+            if(CollUtil.isNotEmpty(categoryIds)){
+                //stream流操作categoryIds得到一个Map<categoryId,HappyActivityCategory>的map对象
+                List<HappyActivityCategory> happyActivityCategories = happyActivityCategoryMapper.selectList(
+                        new LambdaQueryWrapper<HappyActivityCategory>()
+                                .select(HappyActivityCategory::getId, HappyActivityCategory::getName)
+                                .in(HappyActivityCategory::getId,categoryIds)
+                );
+                Map<Long, HappyActivityCategory> categoryMap = happyActivityCategories.stream().collect(Collectors.toMap(HappyActivityCategory::getId, happyActivityCategory -> happyActivityCategory));
+
+                for (HappyActivity happyActivity : records){
+                    happyActivity.setCategoryName(categoryMap.get(happyActivity.getCategoryId()).getName());
+                }
+            }
+        }
+        return voteActivityPage;
+    }
+
+    @Override
+    public FebsResponse addActivity(HappyActivity dto) {
+
+        String code = MallUtils.getOrderNum("AC");
+
+        HappyActivity happyActivity = new HappyActivity();
+        BeanUtil.copyProperties(dto, happyActivity);
+        happyActivity.setCode(code);
+        this.baseMapper.insert(happyActivity);
+
+        return new FebsResponse().success().message("操作成功");
+    }
+
+    @Override
+    public FebsResponse delActivity(Long id) {
+        HappyActivity happyActivity = this.baseMapper.selectById(id);
+
+        happyActivity.setDeleteFlag(StateUpDownEnum.UP.getCode());
+        this.baseMapper.updateById(happyActivity);
+
+        return new FebsResponse().success().message("操作成功");
+    }
+
+    @Override
+    public FebsResponse changeState(Long id, Integer state) {
+        HappyActivity happyActivity = this.baseMapper.selectById(id);
+
+        happyActivity.setState(state);
+        this.baseMapper.updateById(happyActivity);
+
+        return new FebsResponse().success().message("操作成功");
+    }
+
+    @Override
+    public FebsResponse activityUpdate(HappyActivity dto) {
+
+        HappyActivity happyActivity = this.baseMapper.selectById(dto.getId());
+        happyActivity.setCategoryId(dto.getCategoryId());
+        happyActivity.setName(dto.getName());
+        happyActivity.setType(dto.getType());
+        happyActivity.setJoinCnt(dto.getJoinCnt());
+        happyActivity.setStartTime(dto.getStartTime());
+        happyActivity.setEndTime(dto.getEndTime());
+        happyActivity.setPhone(dto.getPhone());
+        happyActivity.setAddress(dto.getAddress());
+        happyActivity.setPayState(dto.getPayState());
+        happyActivity.setPayAmount(dto.getPayAmount());
+        happyActivity.setTextRemark(dto.getTextRemark());
+        happyActivity.setIndexImg(dto.getIndexImg());
+        happyActivity.setOrderCnt(dto.getOrderCnt());
+        happyActivity.setHotState(dto.getHotState());
+        happyActivity.setBackImg(dto.getBackImg());
+        happyActivity.setVoteCnt(dto.getVoteCnt());
+        happyActivity.setAddState(dto.getAddState());
+        this.baseMapper.updateById(happyActivity);
+
+        return new FebsResponse().success().message("操作成功");
+    }
+
+    @Override
+    public IPage<HappyActivityOption> getOptionListInPage(HappyActivityOption dto, QueryRequest request) {
+        List<HappyActivity> happyActivities = this.baseMapper.selectList(
+                new LambdaQueryWrapper<HappyActivity>()
+                        .select(HappyActivity::getId)
+                        .eq(HappyActivity::getType, StateUpDownEnum.ACTIVITY_TYPE_VOTE.getCode())
+        );
+        if(CollUtil.isEmpty(happyActivities)){
+            return new Page<>();
+        }
+
+        //stream流操作happyActivities得到一个set<id>集合
+        Set<Long> activityIds = happyActivities.stream().map(HappyActivity::getId).collect(Collectors.toSet());
+
+        Page<HappyActivityOption> page = new Page<>(request.getPageNum(), request.getPageSize());
+        LambdaQueryWrapper<HappyActivityOption> voteOptionLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        if(ObjectUtil.isNotEmpty(dto.getActivityId())){
+            voteOptionLambdaQueryWrapper.eq(HappyActivityOption::getActivityId,dto.getActivityId());
+        }
+        if(ObjectUtil.isNotEmpty(dto.getState())){
+            voteOptionLambdaQueryWrapper.eq(HappyActivityOption::getState,dto.getState());
+        }
+        if(ObjectUtil.isNotEmpty(dto.getOptionName())){
+            voteOptionLambdaQueryWrapper.eq(HappyActivityOption::getOptionName,dto.getOptionName());
+        }
+        voteOptionLambdaQueryWrapper.in(HappyActivityOption::getActivityId,activityIds);
+        voteOptionLambdaQueryWrapper.eq(HappyActivityOption::getDeleteFlag, StateUpDownEnum.DOWN.getCode());
+        voteOptionLambdaQueryWrapper.orderByDesc(HappyActivityOption::getCreatedTime);
+        Page<HappyActivityOption> adminOptionVoIPage = happyActivityOptionMapper.selectPage(page, voteOptionLambdaQueryWrapper);
+        return adminOptionVoIPage;
+    }
+
+    @Override
+    public List<HappyActivity> allActivities() {
+        List<HappyActivity> happyActivities = this.baseMapper.selectList(
+                new LambdaQueryWrapper<HappyActivity>()
+                        .select(HappyActivity::getId, HappyActivity::getName)
+                        .eq(HappyActivity::getType, StateUpDownEnum.ACTIVITY_TYPE_VOTE.getCode())
+                        .eq(HappyActivity::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+        );
+        return happyActivities;
+    }
+
+    @Override
+    public FebsResponse addOption(AdminActivityOptionAddDto dto) {
+
+
+        if(ObjectUtil.isEmpty(dto.getActivityId())){
+            return new FebsResponse().fail().message("请选择投票活动");
+        }
+
+        List<HappyActivityOption> happyActivityOptions = happyActivityOptionMapper.selectList(
+                new LambdaQueryWrapper<HappyActivityOption>()
+                        .eq(HappyActivityOption::getActivityId, dto.getActivityId())
+                        .eq(HappyActivityOption::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+        );
+
+        HappyActivityOption happyActivityOption = new HappyActivityOption();
+        BeanUtil.copyProperties(dto, happyActivityOption);
+
+        happyActivityOption.setOrderCnt(CollUtil.isEmpty(happyActivityOptions) ? 1 : happyActivityOptions.size() + 1);
+        happyActivityOptionMapper.insert(happyActivityOption);
+        return new FebsResponse().success().message("操作成功");
+    }
+
+    @Override
+    public FebsResponse optionUpdate(HappyActivityOption dto) {
+
+        HappyActivityOption happyActivityOption = happyActivityOptionMapper.selectById(dto.getId());
+        BeanUtil.copyProperties(dto, happyActivityOption);
+        happyActivityOptionMapper.updateById(happyActivityOption);
+        return new FebsResponse().success().message("操作成功");
+    }
+
+    @Override
+    public FebsResponse optionDelete(Long id) {
+
+        HappyActivityOption happyActivityOption = happyActivityOptionMapper.selectById(id);
+
+        happyActivityOption.setDeleteFlag(StateUpDownEnum.UP.getCode());
+        happyActivityOptionMapper.updateById(happyActivityOption);
+        return new FebsResponse().success().message("操作成功");
+    }
+
+    @Override
+    public IPage<HappyFollow> getFollowVoteInPage(HappyActivityOption voteRecord, QueryRequest request) {
+        Long id = voteRecord.getId();
+        HappyActivityOption happyActivityOption = happyActivityOptionMapper.selectById(id);
+        if(ObjectUtil.isEmpty(happyActivityOption)){
+            return null;
+        }
+        HappyActivity happyActivity = this.baseMapper.selectById(happyActivityOption.getActivityId());
+        if(ObjectUtil.isEmpty(happyActivity)){
+            return null;
+        }
+        //获取活动名称
+        String activityName = happyActivity.getName();
+
+        //获取选项名称
+        String optionName = happyActivityOption.getOptionName();
+
+        Page<HappyFollow> page = new Page<>(request.getPageNum(), request.getPageSize());
+        LambdaQueryWrapper<HappyFollow> voteRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        voteRecordLambdaQueryWrapper.eq(HappyFollow::getSourceId, happyActivity.getId());
+        voteRecordLambdaQueryWrapper.eq(HappyFollow::getSourceOptionId, happyActivityOption.getId());
+        voteRecordLambdaQueryWrapper.eq(HappyFollow::getType,StateUpDownEnum.VOTE.getCode());
+        voteRecordLambdaQueryWrapper.orderByDesc(HappyFollow::getCreatedTime);
+        Page<HappyFollow> adminIPage = happyFollowMapper.selectPage(page, voteRecordLambdaQueryWrapper);
+        if(CollUtil.isNotEmpty(adminIPage.getRecords())){
+            List<HappyFollow> records = adminIPage.getRecords();
+            //stream流获取records的memberId的set集合
+            Set<Long> memberIds = records.stream().map(HappyFollow::getMemberId).collect(Collectors.toSet());
+            List<MallMember> mallMembers = mallMemberMapper.selectList(new LambdaQueryWrapper<MallMember>().in(MallMember::getId, memberIds));
+            Map<Long, MallMember> mallMemberMap = mallMembers.stream().collect(Collectors.toMap(MallMember::getId, mallMember -> mallMember));
+            for(HappyFollow record : records){
+                record.setActivityName(activityName);
+                record.setOptionName(optionName);
+                String memberName = mallMemberMap.get(record.getMemberId()).getName();
+                record.setMemberName(StrUtil.isEmpty(memberName) ? "未知用户" : memberName);
+            }
+        }
+        return adminIPage;
+    }
 }
diff --git a/src/main/resources/static/febs/layarea.js b/src/main/resources/static/febs/layarea.js
new file mode 100644
index 0000000..bddb7ee
--- /dev/null
+++ b/src/main/resources/static/febs/layarea.js
@@ -0,0 +1,4073 @@
+layui.define(['layer', 'form', 'laytpl'], function (exports) {
+    "use strict";
+  
+    let $ = layui.$
+        , form = layui.form
+        , layarea = {
+      _id: 0
+      , config: {}
+      , set: function (options) {
+        let that = this;
+        that.config = $.extend({}, that.config, options);
+        return that;
+      }
+      , on: function (events, callback) {
+        return layui.onevent.call(this, 'layarea', events, callback);
+      }
+    }
+        , thisArea = function () {
+      let that = this;
+      return {
+        layarea: function (files) {
+          that.layarea.call(that, files);
+        }
+        , config: that.config
+        , reload: that.reload
+        , events: that.events
+      }
+    }
+        , Class = function (options) {
+      let that = this;
+      that.config = $.extend({}, {
+        elem: '',
+        data: {
+          province: '',
+          city: '',
+          county: '',
+          provinceCode: 0,
+          cityCode: 0,
+          countyCode: 0,
+        }
+      }, options);
+      that.render();
+    };
+  
+    let areaList = {
+      province_list: {
+        110000: '北京市',
+        120000: '天津市',
+        130000: '河北省',
+        140000: '山西省',
+        150000: '内蒙古自治区',
+        210000: '辽宁省',
+        220000: '吉林省',
+        230000: '黑龙江省',
+        310000: '上海市',
+        320000: '江苏省',
+        330000: '浙江省',
+        340000: '安徽省',
+        350000: '福建省',
+        360000: '江西省',
+        370000: '山东省',
+        410000: '河南省',
+        420000: '湖北省',
+        430000: '湖南省',
+        440000: '广东省',
+        450000: '广西壮族自治区',
+        460000: '海南省',
+        500000: '重庆市',
+        510000: '四川省',
+        520000: '贵州省',
+        530000: '云南省',
+        540000: '西藏自治区',
+        610000: '陕西省',
+        620000: '甘肃省',
+        630000: '青海省',
+        640000: '宁夏回族自治区',
+        650000: '新疆维吾尔自治区',
+        710000: '台湾省',
+        810000: '香港特别行政区',
+        820000: '澳门特别行政区',
+        900000: '海外'
+      },
+      city_list: {
+        110100: '北京市',
+        120100: '天津市',
+        130100: '石家庄市',
+        130200: '唐山市',
+        130300: '秦皇岛市',
+        130400: '邯郸市',
+        130500: '邢台市',
+        130600: '保定市',
+        130700: '张家口市',
+        130800: '承德市',
+        130900: '沧州市',
+        131000: '廊坊市',
+        131100: '衡水市',
+        139000: '省直辖县',
+        140100: '太原市',
+        140200: '大同市',
+        140300: '阳泉市',
+        140400: '长治市',
+        140500: '晋城市',
+        140600: '朔州市',
+        140700: '晋中市',
+        140800: '运城市',
+        140900: '忻州市',
+        141000: '临汾市',
+        141100: '吕梁市',
+        150100: '呼和浩特市',
+        150200: '包头市',
+        150300: '乌海市',
+        150400: '赤峰市',
+        150500: '通辽市',
+        150600: '鄂尔多斯市',
+        150700: '呼伦贝尔市',
+        150800: '巴彦淖尔市',
+        150900: '乌兰察布市',
+        152200: '兴安盟',
+        152500: '锡林郭勒盟',
+        152900: '阿拉善盟',
+        210100: '沈阳市',
+        210200: '大连市',
+        210300: '鞍山市',
+        210400: '抚顺市',
+        210500: '本溪市',
+        210600: '丹东市',
+        210700: '锦州市',
+        210800: '营口市',
+        210900: '阜新市',
+        211000: '辽阳市',
+        211100: '盘锦市',
+        211200: '铁岭市',
+        211300: '朝阳市',
+        211400: '葫芦岛市',
+        220100: '长春市',
+        220200: '吉林市',
+        220300: '四平市',
+        220400: '辽源市',
+        220500: '通化市',
+        220600: '白山市',
+        220700: '松原市',
+        220800: '白城市',
+        222400: '延边朝鲜族自治州',
+        230100: '哈尔滨市',
+        230200: '齐齐哈尔市',
+        230300: '鸡西市',
+        230400: '鹤岗市',
+        230500: '双鸭山市',
+        230600: '大庆市',
+        230700: '伊春市',
+        230800: '佳木斯市',
+        230900: '七台河市',
+        231000: '牡丹江市',
+        231100: '黑河市',
+        231200: '绥化市',
+        232700: '大兴安岭地区',
+        310100: '上海市',
+        320100: '南京市',
+        320200: '无锡市',
+        320300: '徐州市',
+        320400: '常州市',
+        320500: '苏州市',
+        320600: '南通市',
+        320700: '连云港市',
+        320800: '淮安市',
+        320900: '盐城市',
+        321000: '扬州市',
+        321100: '镇江市',
+        321200: '泰州市',
+        321300: '宿迁市',
+        330100: '杭州市',
+        330200: '宁波市',
+        330300: '温州市',
+        330400: '嘉兴市',
+        330500: '湖州市',
+        330600: '绍兴市',
+        330700: '金华市',
+        330800: '衢州市',
+        330900: '舟山市',
+        331000: '台州市',
+        331100: '丽水市',
+        340100: '合肥市',
+        340200: '芜湖市',
+        340300: '蚌埠市',
+        340400: '淮南市',
+        340500: '马鞍山市',
+        340600: '淮北市',
+        340700: '铜陵市',
+        340800: '安庆市',
+        341000: '黄山市',
+        341100: '滁州市',
+        341200: '阜阳市',
+        341300: '宿州市',
+        341500: '六安市',
+        341600: '亳州市',
+        341700: '池州市',
+        341800: '宣城市',
+        350100: '福州市',
+        350200: '厦门市',
+        350300: '莆田市',
+        350400: '三明市',
+        350500: '泉州市',
+        350600: '漳州市',
+        350700: '南平市',
+        350800: '龙岩市',
+        350900: '宁德市',
+        360100: '南昌市',
+        360200: '景德镇市',
+        360300: '萍乡市',
+        360400: '九江市',
+        360500: '新余市',
+        360600: '鹰潭市',
+        360700: '赣州市',
+        360800: '吉安市',
+        360900: '宜春市',
+        361000: '抚州市',
+        361100: '上饶市',
+        370100: '济南市',
+        370200: '青岛市',
+        370300: '淄博市',
+        370400: '枣庄市',
+        370500: '东营市',
+        370600: '烟台市',
+        370700: '潍坊市',
+        370800: '济宁市',
+        370900: '泰安市',
+        371000: '威海市',
+        371100: '日照市',
+        371200: '莱芜市',
+        371300: '临沂市',
+        371400: '德州市',
+        371500: '聊城市',
+        371600: '滨州市',
+        371700: '菏泽市',
+        410100: '郑州市',
+        410200: '开封市',
+        410300: '洛阳市',
+        410400: '平顶山市',
+        410500: '安阳市',
+        410600: '鹤壁市',
+        410700: '新乡市',
+        410800: '焦作市',
+        410900: '濮阳市',
+        411000: '许昌市',
+        411100: '漯河市',
+        411200: '三门峡市',
+        411300: '南阳市',
+        411400: '商丘市',
+        411500: '信阳市',
+        411600: '周口市',
+        411700: '驻马店市',
+        419000: '省直辖县',
+        420100: '武汉市',
+        420200: '黄石市',
+        420300: '十堰市',
+        420500: '宜昌市',
+        420600: '襄阳市',
+        420700: '鄂州市',
+        420800: '荆门市',
+        420900: '孝感市',
+        421000: '荆州市',
+        421100: '黄冈市',
+        421200: '咸宁市',
+        421300: '随州市',
+        422800: '恩施土家族苗族自治州',
+        429000: '省直辖县',
+        430100: '长沙市',
+        430200: '株洲市',
+        430300: '湘潭市',
+        430400: '衡阳市',
+        430500: '邵阳市',
+        430600: '岳阳市',
+        430700: '常德市',
+        430800: '张家界市',
+        430900: '益阳市',
+        431000: '郴州市',
+        431100: '永州市',
+        431200: '怀化市',
+        431300: '娄底市',
+        433100: '湘西土家族苗族自治州',
+        440100: '广州市',
+        440200: '韶关市',
+        440300: '深圳市',
+        440400: '珠海市',
+        440500: '汕头市',
+        440600: '佛山市',
+        440700: '江门市',
+        440800: '湛江市',
+        440900: '茂名市',
+        441200: '肇庆市',
+        441300: '惠州市',
+        441400: '梅州市',
+        441500: '汕尾市',
+        441600: '河源市',
+        441700: '阳江市',
+        441800: '清远市',
+        441900: '东莞市',
+        442000: '中山市',
+        445100: '潮州市',
+        445200: '揭阳市',
+        445300: '云浮市',
+        450100: '南宁市',
+        450200: '柳州市',
+        450300: '桂林市',
+        450400: '梧州市',
+        450500: '北海市',
+        450600: '防城港市',
+        450700: '钦州市',
+        450800: '贵港市',
+        450900: '玉林市',
+        451000: '百色市',
+        451100: '贺州市',
+        451200: '河池市',
+        451300: '来宾市',
+        451400: '崇左市',
+        460100: '海口市',
+        460200: '三亚市',
+        460300: '三沙市',
+        460400: '儋州市',
+        469000: '省直辖县',
+        500100: '重庆市',
+        500200: '县',
+        510100: '成都市',
+        510300: '自贡市',
+        510400: '攀枝花市',
+        510500: '泸州市',
+        510600: '德阳市',
+        510700: '绵阳市',
+        510800: '广元市',
+        510900: '遂宁市',
+        511000: '内江市',
+        511100: '乐山市',
+        511300: '南充市',
+        511400: '眉山市',
+        511500: '宜宾市',
+        511600: '广安市',
+        511700: '达州市',
+        511800: '雅安市',
+        511900: '巴中市',
+        512000: '资阳市',
+        513200: '阿坝藏族羌族自治州',
+        513300: '甘孜藏族自治州',
+        513400: '凉山彝族自治州',
+        520100: '贵阳市',
+        520200: '六盘水市',
+        520300: '遵义市',
+        520400: '安顺市',
+        520500: '毕节市',
+        520600: '铜仁市',
+        522300: '黔西南布依族苗族自治州',
+        522600: '黔东南苗族侗族自治州',
+        522700: '黔南布依族苗族自治州',
+        530100: '昆明市',
+        530300: '曲靖市',
+        530400: '玉溪市',
+        530500: '保山市',
+        530600: '昭通市',
+        530700: '丽江市',
+        530800: '普洱市',
+        530900: '临沧市',
+        532300: '楚雄彝族自治州',
+        532500: '红河哈尼族彝族自治州',
+        532600: '文山壮族苗族自治州',
+        532800: '西双版纳傣族自治州',
+        532900: '大理白族自治州',
+        533100: '德宏傣族景颇族自治州',
+        533300: '怒江傈僳族自治州',
+        533400: '迪庆藏族自治州',
+        540100: '拉萨市',
+        540200: '日喀则市',
+        540300: '昌都市',
+        540400: '林芝市',
+        540500: '山南市',
+        540600: '那曲市',
+        542500: '阿里地区',
+        610100: '西安市',
+        610200: '铜川市',
+        610300: '宝鸡市',
+        610400: '咸阳市',
+        610500: '渭南市',
+        610600: '延安市',
+        610700: '汉中市',
+        610800: '榆林市',
+        610900: '安康市',
+        611000: '商洛市',
+        620100: '兰州市',
+        620200: '嘉峪关市',
+        620300: '金昌市',
+        620400: '白银市',
+        620500: '天水市',
+        620600: '武威市',
+        620700: '张掖市',
+        620800: '平凉市',
+        620900: '酒泉市',
+        621000: '庆阳市',
+        621100: '定西市',
+        621200: '陇南市',
+        622900: '临夏回族自治州',
+        623000: '甘南藏族自治州',
+        630100: '西宁市',
+        630200: '海东市',
+        632200: '海北藏族自治州',
+        632300: '黄南藏族自治州',
+        632500: '海南藏族自治州',
+        632600: '果洛藏族自治州',
+        632700: '玉树藏族自治州',
+        632800: '海西蒙古族藏族自治州',
+        640100: '银川市',
+        640200: '石嘴山市',
+        640300: '吴忠市',
+        640400: '固原市',
+        640500: '中卫市',
+        650100: '乌鲁木齐市',
+        650200: '克拉玛依市',
+        650400: '吐鲁番市',
+        650500: '哈密市',
+        652300: '昌吉回族自治州',
+        652700: '博尔塔拉蒙古自治州',
+        652800: '巴音郭楞蒙古自治州',
+        652900: '阿克苏地区',
+        653000: '克孜勒苏柯尔克孜自治州',
+        653100: '喀什地区',
+        653200: '和田地区',
+        654000: '伊犁哈萨克自治州',
+        654200: '塔城地区',
+        654300: '阿勒泰地区',
+        659000: '自治区直辖县级行政区划',
+        710100: '台北市',
+        710200: '高雄市',
+        710300: '台南市',
+        710400: '台中市',
+        710500: '金门县',
+        710600: '南投县',
+        710700: '基隆市',
+        710800: '新竹市',
+        710900: '嘉义市',
+        711100: '新北市',
+        711200: '宜兰县',
+        711300: '新竹县',
+        711400: '桃园县',
+        711500: '苗栗县',
+        711700: '彰化县',
+        711900: '嘉义县',
+        712100: '云林县',
+        712400: '屏东县',
+        712500: '台东县',
+        712600: '花莲县',
+        712700: '澎湖县',
+        712800: '连江县',
+        810100: '香港岛',
+        810200: '九龙',
+        810300: '新界',
+        820100: '澳门半岛',
+        820200: '离岛',
+        912400: '加拿大',
+        941000: '韩国',
+        984000: '美国'
+      },
+      county_list: {
+        110101: '东城区',
+        110102: '西城区',
+        110105: '朝阳区',
+        110106: '丰台区',
+        110107: '石景山区',
+        110108: '海淀区',
+        110109: '门头沟区',
+        110111: '房山区',
+        110112: '通州区',
+        110113: '顺义区',
+        110114: '昌平区',
+        110115: '大兴区',
+        110116: '怀柔区',
+        110117: '平谷区',
+        110118: '密云区',
+        110119: '延庆区',
+        120101: '和平区',
+        120102: '河东区',
+        120103: '河西区',
+        120104: '南开区',
+        120105: '河北区',
+        120106: '红桥区',
+        120110: '东丽区',
+        120111: '西青区',
+        120112: '津南区',
+        120113: '北辰区',
+        120114: '武清区',
+        120115: '宝坻区',
+        120116: '滨海新区',
+        120117: '宁河区',
+        120118: '静海区',
+        120119: '蓟州区',
+        130102: '长安区',
+        130104: '桥西区',
+        130105: '新华区',
+        130107: '井陉矿区',
+        130108: '裕华区',
+        130109: '藁城区',
+        130110: '鹿泉区',
+        130111: '栾城区',
+        130121: '井陉县',
+        130123: '正定县',
+        130125: '行唐县',
+        130126: '灵寿县',
+        130127: '高邑县',
+        130128: '深泽县',
+        130129: '赞皇县',
+        130130: '无极县',
+        130131: '平山县',
+        130132: '元氏县',
+        130133: '赵县',
+        130181: '辛集市',
+        130183: '晋州市',
+        130184: '新乐市',
+        130202: '路南区',
+        130203: '路北区',
+        130204: '古冶区',
+        130205: '开平区',
+        130207: '丰南区',
+        130208: '丰润区',
+        130209: '曹妃甸区',
+        130223: '滦县',
+        130224: '滦南县',
+        130225: '乐亭县',
+        130227: '迁西县',
+        130229: '玉田县',
+        130281: '遵化市',
+        130283: '迁安市',
+        130302: '海港区',
+        130303: '山海关区',
+        130304: '北戴河区',
+        130306: '抚宁区',
+        130321: '青龙满族自治县',
+        130322: '昌黎县',
+        130324: '卢龙县',
+        130390: '经济技术开发区',
+        130402: '邯山区',
+        130403: '丛台区',
+        130404: '复兴区',
+        130406: '峰峰矿区',
+        130407: '肥乡区',
+        130408: '永年区',
+        130423: '临漳县',
+        130424: '成安县',
+        130425: '大名县',
+        130426: '涉县',
+        130427: '磁县',
+        130430: '邱县',
+        130431: '鸡泽县',
+        130432: '广平县',
+        130433: '馆陶县',
+        130434: '魏县',
+        130435: '曲周县',
+        130481: '武安市',
+        130502: '桥东区',
+        130503: '桥西区',
+        130521: '邢台县',
+        130522: '临城县',
+        130523: '内丘县',
+        130524: '柏乡县',
+        130525: '隆尧县',
+        130526: '任县',
+        130527: '南和县',
+        130528: '宁晋县',
+        130529: '巨鹿县',
+        130530: '新河县',
+        130531: '广宗县',
+        130532: '平乡县',
+        130533: '威县',
+        130534: '清河县',
+        130535: '临西县',
+        130581: '南宫市',
+        130582: '沙河市',
+        130602: '竞秀区',
+        130606: '莲池区',
+        130607: '满城区',
+        130608: '清苑区',
+        130609: '徐水区',
+        130623: '涞水县',
+        130624: '阜平县',
+        130626: '定兴县',
+        130627: '唐县',
+        130628: '高阳县',
+        130629: '容城县',
+        130630: '涞源县',
+        130631: '望都县',
+        130632: '安新县',
+        130633: '易县',
+        130634: '曲阳县',
+        130635: '蠡县',
+        130636: '顺平县',
+        130637: '博野县',
+        130638: '雄县',
+        130681: '涿州市',
+        130682: '定州市',
+        130683: '安国市',
+        130684: '高碑店市',
+        130702: '桥东区',
+        130703: '桥西区',
+        130705: '宣化区',
+        130706: '下花园区',
+        130708: '万全区',
+        130709: '崇礼区',
+        130722: '张北县',
+        130723: '康保县',
+        130724: '沽源县',
+        130725: '尚义县',
+        130726: '蔚县',
+        130727: '阳原县',
+        130728: '怀安县',
+        130730: '怀来县',
+        130731: '涿鹿县',
+        130732: '赤城县',
+        130802: '双桥区',
+        130803: '双滦区',
+        130804: '鹰手营子矿区',
+        130821: '承德县',
+        130822: '兴隆县',
+        130824: '滦平县',
+        130825: '隆化县',
+        130826: '丰宁满族自治县',
+        130827: '宽城满族自治县',
+        130828: '围场满族蒙古族自治县',
+        130881: '平泉市',
+        130902: '新华区',
+        130903: '运河区',
+        130921: '沧县',
+        130922: '青县',
+        130923: '东光县',
+        130924: '海兴县',
+        130925: '盐山县',
+        130926: '肃宁县',
+        130927: '南皮县',
+        130928: '吴桥县',
+        130929: '献县',
+        130930: '孟村回族自治县',
+        130981: '泊头市',
+        130982: '任丘市',
+        130983: '黄骅市',
+        130984: '河间市',
+        131002: '安次区',
+        131003: '广阳区',
+        131022: '固安县',
+        131023: '永清县',
+        131024: '香河县',
+        131025: '大城县',
+        131026: '文安县',
+        131028: '大厂回族自治县',
+        131081: '霸州市',
+        131082: '三河市',
+        131090: '开发区',
+        131102: '桃城区',
+        131103: '冀州区',
+        131121: '枣强县',
+        131122: '武邑县',
+        131123: '武强县',
+        131124: '饶阳县',
+        131125: '安平县',
+        131126: '故城县',
+        131127: '景县',
+        131128: '阜城县',
+        131182: '深州市',
+        140105: '小店区',
+        140106: '迎泽区',
+        140107: '杏花岭区',
+        140108: '尖草坪区',
+        140109: '万柏林区',
+        140110: '晋源区',
+        140121: '清徐县',
+        140122: '阳曲县',
+        140123: '娄烦县',
+        140181: '古交市',
+        140202: '城区',
+        140203: '矿区',
+        140211: '南郊区',
+        140212: '新荣区',
+        140221: '阳高县',
+        140222: '天镇县',
+        140223: '广灵县',
+        140224: '灵丘县',
+        140225: '浑源县',
+        140226: '左云县',
+        140227: '大同县',
+        140302: '城区',
+        140303: '矿区',
+        140311: '郊区',
+        140321: '平定县',
+        140322: '盂县',
+        140402: '城区',
+        140411: '郊区',
+        140421: '长治县',
+        140423: '襄垣县',
+        140424: '屯留县',
+        140425: '平顺县',
+        140426: '黎城县',
+        140427: '壶关县',
+        140428: '长子县',
+        140429: '武乡县',
+        140430: '沁县',
+        140431: '沁源县',
+        140481: '潞城市',
+        140502: '城区',
+        140521: '沁水县',
+        140522: '阳城县',
+        140524: '陵川县',
+        140525: '泽州县',
+        140581: '高平市',
+        140602: '朔城区',
+        140603: '平鲁区',
+        140621: '山阴县',
+        140622: '应县',
+        140623: '右玉县',
+        140624: '怀仁县',
+        140702: '榆次区',
+        140721: '榆社县',
+        140722: '左权县',
+        140723: '和顺县',
+        140724: '昔阳县',
+        140725: '寿阳县',
+        140726: '太谷县',
+        140727: '祁县',
+        140728: '平遥县',
+        140729: '灵石县',
+        140781: '介休市',
+        140802: '盐湖区',
+        140821: '临猗县',
+        140822: '万荣县',
+        140823: '闻喜县',
+        140824: '稷山县',
+        140825: '新绛县',
+        140826: '绛县',
+        140827: '垣曲县',
+        140828: '夏县',
+        140829: '平陆县',
+        140830: '芮城县',
+        140881: '永济市',
+        140882: '河津市',
+        140902: '忻府区',
+        140921: '定襄县',
+        140922: '五台县',
+        140923: '代县',
+        140924: '繁峙县',
+        140925: '宁武县',
+        140926: '静乐县',
+        140927: '神池县',
+        140928: '五寨县',
+        140929: '岢岚县',
+        140930: '河曲县',
+        140931: '保德县',
+        140932: '偏关县',
+        140981: '原平市',
+        141002: '尧都区',
+        141021: '曲沃县',
+        141022: '翼城县',
+        141023: '襄汾县',
+        141024: '洪洞县',
+        141025: '古县',
+        141026: '安泽县',
+        141027: '浮山县',
+        141028: '吉县',
+        141029: '乡宁县',
+        141030: '大宁县',
+        141031: '隰县',
+        141032: '永和县',
+        141033: '蒲县',
+        141034: '汾西县',
+        141081: '侯马市',
+        141082: '霍州市',
+        141102: '离石区',
+        141121: '文水县',
+        141122: '交城县',
+        141123: '兴县',
+        141124: '临县',
+        141125: '柳林县',
+        141126: '石楼县',
+        141127: '岚县',
+        141128: '方山县',
+        141129: '中阳县',
+        141130: '交口县',
+        141181: '孝义市',
+        141182: '汾阳市',
+        150102: '新城区',
+        150103: '回民区',
+        150104: '玉泉区',
+        150105: '赛罕区',
+        150121: '土默特左旗',
+        150122: '托克托县',
+        150123: '和林格尔县',
+        150124: '清水河县',
+        150125: '武川县',
+        150202: '东河区',
+        150203: '昆都仑区',
+        150204: '青山区',
+        150205: '石拐区',
+        150206: '白云鄂博矿区',
+        150207: '九原区',
+        150221: '土默特右旗',
+        150222: '固阳县',
+        150223: '达尔罕茂明安联合旗',
+        150302: '海勃湾区',
+        150303: '海南区',
+        150304: '乌达区',
+        150402: '红山区',
+        150403: '元宝山区',
+        150404: '松山区',
+        150421: '阿鲁科尔沁旗',
+        150422: '巴林左旗',
+        150423: '巴林右旗',
+        150424: '林西县',
+        150425: '克什克腾旗',
+        150426: '翁牛特旗',
+        150428: '喀喇沁旗',
+        150429: '宁城县',
+        150430: '敖汉旗',
+        150502: '科尔沁区',
+        150521: '科尔沁左翼中旗',
+        150522: '科尔沁左翼后旗',
+        150523: '开鲁县',
+        150524: '库伦旗',
+        150525: '奈曼旗',
+        150526: '扎鲁特旗',
+        150581: '霍林郭勒市',
+        150602: '东胜区',
+        150603: '康巴什区',
+        150621: '达拉特旗',
+        150622: '准格尔旗',
+        150623: '鄂托克前旗',
+        150624: '鄂托克旗',
+        150625: '杭锦旗',
+        150626: '乌审旗',
+        150627: '伊金霍洛旗',
+        150702: '海拉尔区',
+        150703: '扎赉诺尔区',
+        150721: '阿荣旗',
+        150722: '莫力达瓦达斡尔族自治旗',
+        150723: '鄂伦春自治旗',
+        150724: '鄂温克族自治旗',
+        150725: '陈巴尔虎旗',
+        150726: '新巴尔虎左旗',
+        150727: '新巴尔虎右旗',
+        150781: '满洲里市',
+        150782: '牙克石市',
+        150783: '扎兰屯市',
+        150784: '额尔古纳市',
+        150785: '根河市',
+        150802: '临河区',
+        150821: '五原县',
+        150822: '磴口县',
+        150823: '乌拉特前旗',
+        150824: '乌拉特中旗',
+        150825: '乌拉特后旗',
+        150826: '杭锦后旗',
+        150902: '集宁区',
+        150921: '卓资县',
+        150922: '化德县',
+        150923: '商都县',
+        150924: '兴和县',
+        150925: '凉城县',
+        150926: '察哈尔右翼前旗',
+        150927: '察哈尔右翼中旗',
+        150928: '察哈尔右翼后旗',
+        150929: '四子王旗',
+        150981: '丰镇市',
+        152201: '乌兰浩特市',
+        152202: '阿尔山市',
+        152221: '科尔沁右翼前旗',
+        152222: '科尔沁右翼中旗',
+        152223: '扎赉特旗',
+        152224: '突泉县',
+        152501: '二连浩特市',
+        152502: '锡林浩特市',
+        152522: '阿巴嘎旗',
+        152523: '苏尼特左旗',
+        152524: '苏尼特右旗',
+        152525: '东乌珠穆沁旗',
+        152526: '西乌珠穆沁旗',
+        152527: '太仆寺旗',
+        152528: '镶黄旗',
+        152529: '正镶白旗',
+        152530: '正蓝旗',
+        152531: '多伦县',
+        152921: '阿拉善左旗',
+        152922: '阿拉善右旗',
+        152923: '额济纳旗',
+        210102: '和平区',
+        210103: '沈河区',
+        210104: '大东区',
+        210105: '皇姑区',
+        210106: '铁西区',
+        210111: '苏家屯区',
+        210112: '浑南区',
+        210113: '沈北新区',
+        210114: '于洪区',
+        210115: '辽中区',
+        210123: '康平县',
+        210124: '法库县',
+        210181: '新民市',
+        210190: '经济技术开发区',
+        210202: '中山区',
+        210203: '西岗区',
+        210204: '沙河口区',
+        210211: '甘井子区',
+        210212: '旅顺口区',
+        210213: '金州区',
+        210214: '普兰店区',
+        210224: '长海县',
+        210281: '瓦房店市',
+        210283: '庄河市',
+        210302: '铁东区',
+        210303: '铁西区',
+        210304: '立山区',
+        210311: '千山区',
+        210321: '台安县',
+        210323: '岫岩满族自治县',
+        210381: '海城市',
+        210390: '高新区',
+        210402: '新抚区',
+        210403: '东洲区',
+        210404: '望花区',
+        210411: '顺城区',
+        210421: '抚顺县',
+        210422: '新宾满族自治县',
+        210423: '清原满族自治县',
+        210502: '平山区',
+        210503: '溪湖区',
+        210504: '明山区',
+        210505: '南芬区',
+        210521: '本溪满族自治县',
+        210522: '桓仁满族自治县',
+        210602: '元宝区',
+        210603: '振兴区',
+        210604: '振安区',
+        210624: '宽甸满族自治县',
+        210681: '东港市',
+        210682: '凤城市',
+        210702: '古塔区',
+        210703: '凌河区',
+        210711: '太和区',
+        210726: '黑山县',
+        210727: '义县',
+        210781: '凌海市',
+        210782: '北镇市',
+        210793: '经济技术开发区',
+        210802: '站前区',
+        210803: '西市区',
+        210804: '鲅鱼圈区',
+        210811: '老边区',
+        210881: '盖州市',
+        210882: '大石桥市',
+        210902: '海州区',
+        210903: '新邱区',
+        210904: '太平区',
+        210905: '清河门区',
+        210911: '细河区',
+        210921: '阜新蒙古族自治县',
+        210922: '彰武县',
+        211002: '白塔区',
+        211003: '文圣区',
+        211004: '宏伟区',
+        211005: '弓长岭区',
+        211011: '太子河区',
+        211021: '辽阳县',
+        211081: '灯塔市',
+        211102: '双台子区',
+        211103: '兴隆台区',
+        211104: '大洼区',
+        211122: '盘山县',
+        211202: '银州区',
+        211204: '清河区',
+        211221: '铁岭县',
+        211223: '西丰县',
+        211224: '昌图县',
+        211281: '调兵山市',
+        211282: '开原市',
+        211302: '双塔区',
+        211303: '龙城区',
+        211321: '朝阳县',
+        211322: '建平县',
+        211324: '喀喇沁左翼蒙古族自治县',
+        211381: '北票市',
+        211382: '凌源市',
+        211402: '连山区',
+        211403: '龙港区',
+        211404: '南票区',
+        211421: '绥中县',
+        211422: '建昌县',
+        211481: '兴城市',
+        215090: '工业园区',
+        220102: '南关区',
+        220103: '宽城区',
+        220104: '朝阳区',
+        220105: '二道区',
+        220106: '绿园区',
+        220112: '双阳区',
+        220113: '九台区',
+        220122: '农安县',
+        220182: '榆树市',
+        220183: '德惠市',
+        220192: '经济技术开发区',
+        220202: '昌邑区',
+        220203: '龙潭区',
+        220204: '船营区',
+        220211: '丰满区',
+        220221: '永吉县',
+        220281: '蛟河市',
+        220282: '桦甸市',
+        220283: '舒兰市',
+        220284: '磐石市',
+        220302: '铁西区',
+        220303: '铁东区',
+        220322: '梨树县',
+        220323: '伊通满族自治县',
+        220381: '公主岭市',
+        220382: '双辽市',
+        220402: '龙山区',
+        220403: '西安区',
+        220421: '东丰县',
+        220422: '东辽县',
+        220502: '东昌区',
+        220503: '二道江区',
+        220521: '通化县',
+        220523: '辉南县',
+        220524: '柳河县',
+        220581: '梅河口市',
+        220582: '集安市',
+        220602: '浑江区',
+        220605: '江源区',
+        220621: '抚松县',
+        220622: '靖宇县',
+        220623: '长白朝鲜族自治县',
+        220681: '临江市',
+        220702: '宁江区',
+        220721: '前郭尔罗斯蒙古族自治县',
+        220722: '长岭县',
+        220723: '乾安县',
+        220781: '扶余市',
+        220802: '洮北区',
+        220821: '镇赉县',
+        220822: '通榆县',
+        220881: '洮南市',
+        220882: '大安市',
+        221090: '工业园区',
+        222401: '延吉市',
+        222402: '图们市',
+        222403: '敦化市',
+        222404: '珲春市',
+        222405: '龙井市',
+        222406: '和龙市',
+        222424: '汪清县',
+        222426: '安图县',
+        230102: '道里区',
+        230103: '南岗区',
+        230104: '道外区',
+        230108: '平房区',
+        230109: '松北区',
+        230110: '香坊区',
+        230111: '呼兰区',
+        230112: '阿城区',
+        230113: '双城区',
+        230123: '依兰县',
+        230124: '方正县',
+        230125: '宾县',
+        230126: '巴彦县',
+        230127: '木兰县',
+        230128: '通河县',
+        230129: '延寿县',
+        230183: '尚志市',
+        230184: '五常市',
+        230202: '龙沙区',
+        230203: '建华区',
+        230204: '铁锋区',
+        230205: '昂昂溪区',
+        230206: '富拉尔基区',
+        230207: '碾子山区',
+        230208: '梅里斯达斡尔族区',
+        230221: '龙江县',
+        230223: '依安县',
+        230224: '泰来县',
+        230225: '甘南县',
+        230227: '富裕县',
+        230229: '克山县',
+        230230: '克东县',
+        230231: '拜泉县',
+        230281: '讷河市',
+        230302: '鸡冠区',
+        230303: '恒山区',
+        230304: '滴道区',
+        230305: '梨树区',
+        230306: '城子河区',
+        230307: '麻山区',
+        230321: '鸡东县',
+        230381: '虎林市',
+        230382: '密山市',
+        230402: '向阳区',
+        230403: '工农区',
+        230404: '南山区',
+        230405: '兴安区',
+        230406: '东山区',
+        230407: '兴山区',
+        230421: '萝北县',
+        230422: '绥滨县',
+        230502: '尖山区',
+        230503: '岭东区',
+        230505: '四方台区',
+        230506: '宝山区',
+        230521: '集贤县',
+        230522: '友谊县',
+        230523: '宝清县',
+        230524: '饶河县',
+        230602: '萨尔图区',
+        230603: '龙凤区',
+        230604: '让胡路区',
+        230605: '红岗区',
+        230606: '大同区',
+        230621: '肇州县',
+        230622: '肇源县',
+        230623: '林甸县',
+        230624: '杜尔伯特蒙古族自治县',
+        230702: '伊春区',
+        230703: '南岔区',
+        230704: '友好区',
+        230705: '西林区',
+        230706: '翠峦区',
+        230707: '新青区',
+        230708: '美溪区',
+        230709: '金山屯区',
+        230710: '五营区',
+        230711: '乌马河区',
+        230712: '汤旺河区',
+        230713: '带岭区',
+        230714: '乌伊岭区',
+        230715: '红星区',
+        230716: '上甘岭区',
+        230722: '嘉荫县',
+        230781: '铁力市',
+        230803: '向阳区',
+        230804: '前进区',
+        230805: '东风区',
+        230811: '郊区',
+        230822: '桦南县',
+        230826: '桦川县',
+        230828: '汤原县',
+        230881: '同江市',
+        230882: '富锦市',
+        230883: '抚远市',
+        230902: '新兴区',
+        230903: '桃山区',
+        230904: '茄子河区',
+        230921: '勃利县',
+        231002: '东安区',
+        231003: '阳明区',
+        231004: '爱民区',
+        231005: '西安区',
+        231025: '林口县',
+        231081: '绥芬河市',
+        231083: '海林市',
+        231084: '宁安市',
+        231085: '穆棱市',
+        231086: '东宁市',
+        231102: '爱辉区',
+        231121: '嫩江县',
+        231123: '逊克县',
+        231124: '孙吴县',
+        231181: '北安市',
+        231182: '五大连池市',
+        231202: '北林区',
+        231221: '望奎县',
+        231222: '兰西县',
+        231223: '青冈县',
+        231224: '庆安县',
+        231225: '明水县',
+        231226: '绥棱县',
+        231281: '安达市',
+        231282: '肇东市',
+        231283: '海伦市',
+        232721: '呼玛县',
+        232722: '塔河县',
+        232723: '漠河县',
+        232790: '松岭区',
+        232791: '呼中区',
+        232792: '加格达奇区',
+        232793: '新林区',
+        310101: '黄浦区',
+        310104: '徐汇区',
+        310105: '长宁区',
+        310106: '静安区',
+        310107: '普陀区',
+        310109: '虹口区',
+        310110: '杨浦区',
+        310112: '闵行区',
+        310113: '宝山区',
+        310114: '嘉定区',
+        310115: '浦东新区',
+        310116: '金山区',
+        310117: '松江区',
+        310118: '青浦区',
+        310120: '奉贤区',
+        310151: '崇明区',
+        320102: '玄武区',
+        320104: '秦淮区',
+        320105: '建邺区',
+        320106: '鼓楼区',
+        320111: '浦口区',
+        320113: '栖霞区',
+        320114: '雨花台区',
+        320115: '江宁区',
+        320116: '六合区',
+        320117: '溧水区',
+        320118: '高淳区',
+        320205: '锡山区',
+        320206: '惠山区',
+        320211: '滨湖区',
+        320213: '梁溪区',
+        320214: '新吴区',
+        320281: '江阴市',
+        320282: '宜兴市',
+        320302: '鼓楼区',
+        320303: '云龙区',
+        320305: '贾汪区',
+        320311: '泉山区',
+        320312: '铜山区',
+        320321: '丰县',
+        320322: '沛县',
+        320324: '睢宁县',
+        320381: '新沂市',
+        320382: '邳州市',
+        320391: '工业园区',
+        320402: '天宁区',
+        320404: '钟楼区',
+        320411: '新北区',
+        320412: '武进区',
+        320413: '金坛区',
+        320481: '溧阳市',
+        320505: '虎丘区',
+        320506: '吴中区',
+        320507: '相城区',
+        320508: '姑苏区',
+        320509: '吴江区',
+        320581: '常熟市',
+        320582: '张家港市',
+        320583: '昆山市',
+        320585: '太仓市',
+        320590: '工业园区',
+        320591: '高新区',
+        320602: '崇川区',
+        320611: '港闸区',
+        320612: '通州区',
+        320621: '海安县',
+        320623: '如东县',
+        320681: '启东市',
+        320682: '如皋市',
+        320684: '海门市',
+        320691: '高新区',
+        320703: '连云区',
+        320706: '海州区',
+        320707: '赣榆区',
+        320722: '东海县',
+        320723: '灌云县',
+        320724: '灌南县',
+        320803: '淮安区',
+        320804: '淮阴区',
+        320812: '清江浦区',
+        320813: '洪泽区',
+        320826: '涟水县',
+        320830: '盱眙县',
+        320831: '金湖县',
+        320890: '经济开发区',
+        320902: '亭湖区',
+        320903: '盐都区',
+        320904: '大丰区',
+        320921: '响水县',
+        320922: '滨海县',
+        320923: '阜宁县',
+        320924: '射阳县',
+        320925: '建湖县',
+        320981: '东台市',
+        321002: '广陵区',
+        321003: '邗江区',
+        321012: '江都区',
+        321023: '宝应县',
+        321081: '仪征市',
+        321084: '高邮市',
+        321090: '经济开发区',
+        321102: '京口区',
+        321111: '润州区',
+        321112: '丹徒区',
+        321181: '丹阳市',
+        321182: '扬中市',
+        321183: '句容市',
+        321202: '海陵区',
+        321203: '高港区',
+        321204: '姜堰区',
+        321281: '兴化市',
+        321282: '靖江市',
+        321283: '泰兴市',
+        321302: '宿城区',
+        321311: '宿豫区',
+        321322: '沭阳县',
+        321323: '泗阳县',
+        321324: '泗洪县',
+        330102: '上城区',
+        330103: '下城区',
+        330104: '江干区',
+        330105: '拱墅区',
+        330106: '西湖区',
+        330108: '滨江区',
+        330109: '萧山区',
+        330110: '余杭区',
+        330111: '富阳区',
+        330112: '临安区',
+        330122: '桐庐县',
+        330127: '淳安县',
+        330182: '建德市',
+        330203: '海曙区',
+        330205: '江北区',
+        330206: '北仑区',
+        330211: '镇海区',
+        330212: '鄞州区',
+        330213: '奉化区',
+        330225: '象山县',
+        330226: '宁海县',
+        330281: '余姚市',
+        330282: '慈溪市',
+        330302: '鹿城区',
+        330303: '龙湾区',
+        330304: '瓯海区',
+        330305: '洞头区',
+        330324: '永嘉县',
+        330326: '平阳县',
+        330327: '苍南县',
+        330328: '文成县',
+        330329: '泰顺县',
+        330381: '瑞安市',
+        330382: '乐清市',
+        330402: '南湖区',
+        330411: '秀洲区',
+        330421: '嘉善县',
+        330424: '海盐县',
+        330481: '海宁市',
+        330482: '平湖市',
+        330483: '桐乡市',
+        330502: '吴兴区',
+        330503: '南浔区',
+        330521: '德清县',
+        330522: '长兴县',
+        330523: '安吉县',
+        330602: '越城区',
+        330603: '柯桥区',
+        330604: '上虞区',
+        330624: '新昌县',
+        330681: '诸暨市',
+        330683: '嵊州市',
+        330702: '婺城区',
+        330703: '金东区',
+        330723: '武义县',
+        330726: '浦江县',
+        330727: '磐安县',
+        330781: '兰溪市',
+        330782: '义乌市',
+        330783: '东阳市',
+        330784: '永康市',
+        330802: '柯城区',
+        330803: '衢江区',
+        330822: '常山县',
+        330824: '开化县',
+        330825: '龙游县',
+        330881: '江山市',
+        330902: '定海区',
+        330903: '普陀区',
+        330921: '岱山县',
+        330922: '嵊泗县',
+        331002: '椒江区',
+        331003: '黄岩区',
+        331004: '路桥区',
+        331022: '三门县',
+        331023: '天台县',
+        331024: '仙居县',
+        331081: '温岭市',
+        331082: '临海市',
+        331083: '玉环市',
+        331102: '莲都区',
+        331121: '青田县',
+        331122: '缙云县',
+        331123: '遂昌县',
+        331124: '松阳县',
+        331125: '云和县',
+        331126: '庆元县',
+        331127: '景宁畲族自治县',
+        331181: '龙泉市',
+        340102: '瑶海区',
+        340103: '庐阳区',
+        340104: '蜀山区',
+        340111: '包河区',
+        340121: '长丰县',
+        340122: '肥东县',
+        340123: '肥西县',
+        340124: '庐江县',
+        340181: '巢湖市',
+        340190: '高新技术开发区',
+        340191: '经济技术开发区',
+        340202: '镜湖区',
+        340203: '弋江区',
+        340207: '鸠江区',
+        340208: '三山区',
+        340221: '芜湖县',
+        340222: '繁昌县',
+        340223: '南陵县',
+        340225: '无为县',
+        340302: '龙子湖区',
+        340303: '蚌山区',
+        340304: '禹会区',
+        340311: '淮上区',
+        340321: '怀远县',
+        340322: '五河县',
+        340323: '固镇县',
+        340402: '大通区',
+        340403: '田家庵区',
+        340404: '谢家集区',
+        340405: '八公山区',
+        340406: '潘集区',
+        340421: '凤台县',
+        340422: '寿县',
+        340503: '花山区',
+        340504: '雨山区',
+        340506: '博望区',
+        340521: '当涂县',
+        340522: '含山县',
+        340523: '和县',
+        340602: '杜集区',
+        340603: '相山区',
+        340604: '烈山区',
+        340621: '濉溪县',
+        340705: '铜官区',
+        340706: '义安区',
+        340711: '郊区',
+        340722: '枞阳县',
+        340802: '迎江区',
+        340803: '大观区',
+        340811: '宜秀区',
+        340822: '怀宁县',
+        340824: '潜山县',
+        340825: '太湖县',
+        340826: '宿松县',
+        340827: '望江县',
+        340828: '岳西县',
+        340881: '桐城市',
+        341002: '屯溪区',
+        341003: '黄山区',
+        341004: '徽州区',
+        341021: '歙县',
+        341022: '休宁县',
+        341023: '黟县',
+        341024: '祁门县',
+        341102: '琅琊区',
+        341103: '南谯区',
+        341122: '来安县',
+        341124: '全椒县',
+        341125: '定远县',
+        341126: '凤阳县',
+        341181: '天长市',
+        341182: '明光市',
+        341202: '颍州区',
+        341203: '颍东区',
+        341204: '颍泉区',
+        341221: '临泉县',
+        341222: '太和县',
+        341225: '阜南县',
+        341226: '颍上县',
+        341282: '界首市',
+        341302: '埇桥区',
+        341321: '砀山县',
+        341322: '萧县',
+        341323: '灵璧县',
+        341324: '泗县',
+        341390: '经济开发区',
+        341502: '金安区',
+        341503: '裕安区',
+        341504: '叶集区',
+        341522: '霍邱县',
+        341523: '舒城县',
+        341524: '金寨县',
+        341525: '霍山县',
+        341602: '谯城区',
+        341621: '涡阳县',
+        341622: '蒙城县',
+        341623: '利辛县',
+        341702: '贵池区',
+        341721: '东至县',
+        341722: '石台县',
+        341723: '青阳县',
+        341802: '宣州区',
+        341821: '郎溪县',
+        341822: '广德县',
+        341823: '泾县',
+        341824: '绩溪县',
+        341825: '旌德县',
+        341881: '宁国市',
+        350102: '鼓楼区',
+        350103: '台江区',
+        350104: '仓山区',
+        350105: '马尾区',
+        350111: '晋安区',
+        350112: '长乐区',
+        350121: '闽侯县',
+        350122: '连江县',
+        350123: '罗源县',
+        350124: '闽清县',
+        350125: '永泰县',
+        350128: '平潭县',
+        350181: '福清市',
+        350203: '思明区',
+        350205: '海沧区',
+        350206: '湖里区',
+        350211: '集美区',
+        350212: '同安区',
+        350213: '翔安区',
+        350302: '城厢区',
+        350303: '涵江区',
+        350304: '荔城区',
+        350305: '秀屿区',
+        350322: '仙游县',
+        350402: '梅列区',
+        350403: '三元区',
+        350421: '明溪县',
+        350423: '清流县',
+        350424: '宁化县',
+        350425: '大田县',
+        350426: '尤溪县',
+        350427: '沙县',
+        350428: '将乐县',
+        350429: '泰宁县',
+        350430: '建宁县',
+        350481: '永安市',
+        350502: '鲤城区',
+        350503: '丰泽区',
+        350504: '洛江区',
+        350505: '泉港区',
+        350521: '惠安县',
+        350524: '安溪县',
+        350525: '永春县',
+        350526: '德化县',
+        350527: '金门县',
+        350581: '石狮市',
+        350582: '晋江市',
+        350583: '南安市',
+        350602: '芗城区',
+        350603: '龙文区',
+        350622: '云霄县',
+        350623: '漳浦县',
+        350624: '诏安县',
+        350625: '长泰县',
+        350626: '东山县',
+        350627: '南靖县',
+        350628: '平和县',
+        350629: '华安县',
+        350681: '龙海市',
+        350702: '延平区',
+        350703: '建阳区',
+        350721: '顺昌县',
+        350722: '浦城县',
+        350723: '光泽县',
+        350724: '松溪县',
+        350725: '政和县',
+        350781: '邵武市',
+        350782: '武夷山市',
+        350783: '建瓯市',
+        350802: '新罗区',
+        350803: '永定区',
+        350821: '长汀县',
+        350823: '上杭县',
+        350824: '武平县',
+        350825: '连城县',
+        350881: '漳平市',
+        350902: '蕉城区',
+        350921: '霞浦县',
+        350922: '古田县',
+        350923: '屏南县',
+        350924: '寿宁县',
+        350925: '周宁县',
+        350926: '柘荣县',
+        350981: '福安市',
+        350982: '福鼎市',
+        360102: '东湖区',
+        360103: '西湖区',
+        360104: '青云谱区',
+        360105: '湾里区',
+        360111: '青山湖区',
+        360112: '新建区',
+        360121: '南昌县',
+        360123: '安义县',
+        360124: '进贤县',
+        360190: '经济技术开发区',
+        360192: '高新区',
+        360202: '昌江区',
+        360203: '珠山区',
+        360222: '浮梁县',
+        360281: '乐平市',
+        360302: '安源区',
+        360313: '湘东区',
+        360321: '莲花县',
+        360322: '上栗县',
+        360323: '芦溪县',
+        360402: '濂溪区',
+        360403: '浔阳区',
+        360404: '柴桑区',
+        360423: '武宁县',
+        360424: '修水县',
+        360425: '永修县',
+        360426: '德安县',
+        360428: '都昌县',
+        360429: '湖口县',
+        360430: '彭泽县',
+        360481: '瑞昌市',
+        360482: '共青城市',
+        360483: '庐山市',
+        360490: '经济技术开发区',
+        360502: '渝水区',
+        360521: '分宜县',
+        360602: '月湖区',
+        360622: '余江县',
+        360681: '贵溪市',
+        360702: '章贡区',
+        360703: '南康区',
+        360704: '赣县区',
+        360722: '信丰县',
+        360723: '大余县',
+        360724: '上犹县',
+        360725: '崇义县',
+        360726: '安远县',
+        360727: '龙南县',
+        360728: '定南县',
+        360729: '全南县',
+        360730: '宁都县',
+        360731: '于都县',
+        360732: '兴国县',
+        360733: '会昌县',
+        360734: '寻乌县',
+        360735: '石城县',
+        360781: '瑞金市',
+        360802: '吉州区',
+        360803: '青原区',
+        360821: '吉安县',
+        360822: '吉水县',
+        360823: '峡江县',
+        360824: '新干县',
+        360825: '永丰县',
+        360826: '泰和县',
+        360827: '遂川县',
+        360828: '万安县',
+        360829: '安福县',
+        360830: '永新县',
+        360881: '井冈山市',
+        360902: '袁州区',
+        360921: '奉新县',
+        360922: '万载县',
+        360923: '上高县',
+        360924: '宜丰县',
+        360925: '靖安县',
+        360926: '铜鼓县',
+        360981: '丰城市',
+        360982: '樟树市',
+        360983: '高安市',
+        361002: '临川区',
+        361003: '东乡区',
+        361021: '南城县',
+        361022: '黎川县',
+        361023: '南丰县',
+        361024: '崇仁县',
+        361025: '乐安县',
+        361026: '宜黄县',
+        361027: '金溪县',
+        361028: '资溪县',
+        361030: '广昌县',
+        361102: '信州区',
+        361103: '广丰区',
+        361121: '上饶县',
+        361123: '玉山县',
+        361124: '铅山县',
+        361125: '横峰县',
+        361126: '弋阳县',
+        361127: '余干县',
+        361128: '鄱阳县',
+        361129: '万年县',
+        361130: '婺源县',
+        361181: '德兴市',
+        370102: '历下区',
+        370103: '市中区',
+        370104: '槐荫区',
+        370105: '天桥区',
+        370112: '历城区',
+        370113: '长清区',
+        370114: '章丘区',
+        370124: '平阴县',
+        370125: '济阳县',
+        370126: '商河县',
+        370190: '高新区',
+        370202: '市南区',
+        370203: '市北区',
+        370211: '黄岛区',
+        370212: '崂山区',
+        370213: '李沧区',
+        370214: '城阳区',
+        370215: '即墨区',
+        370281: '胶州市',
+        370283: '平度市',
+        370285: '莱西市',
+        370290: '开发区',
+        370302: '淄川区',
+        370303: '张店区',
+        370304: '博山区',
+        370305: '临淄区',
+        370306: '周村区',
+        370321: '桓台县',
+        370322: '高青县',
+        370323: '沂源县',
+        370402: '市中区',
+        370403: '薛城区',
+        370404: '峄城区',
+        370405: '台儿庄区',
+        370406: '山亭区',
+        370481: '滕州市',
+        370502: '东营区',
+        370503: '河口区',
+        370505: '垦利区',
+        370522: '利津县',
+        370523: '广饶县',
+        370602: '芝罘区',
+        370611: '福山区',
+        370612: '牟平区',
+        370613: '莱山区',
+        370634: '长岛县',
+        370681: '龙口市',
+        370682: '莱阳市',
+        370683: '莱州市',
+        370684: '蓬莱市',
+        370685: '招远市',
+        370686: '栖霞市',
+        370687: '海阳市',
+        370690: '开发区',
+        370702: '潍城区',
+        370703: '寒亭区',
+        370704: '坊子区',
+        370705: '奎文区',
+        370724: '临朐县',
+        370725: '昌乐县',
+        370781: '青州市',
+        370782: '诸城市',
+        370783: '寿光市',
+        370784: '安丘市',
+        370785: '高密市',
+        370786: '昌邑市',
+        370790: '开发区',
+        370791: '高新区',
+        370811: '任城区',
+        370812: '兖州区',
+        370826: '微山县',
+        370827: '鱼台县',
+        370828: '金乡县',
+        370829: '嘉祥县',
+        370830: '汶上县',
+        370831: '泗水县',
+        370832: '梁山县',
+        370881: '曲阜市',
+        370883: '邹城市',
+        370890: '高新区',
+        370902: '泰山区',
+        370911: '岱岳区',
+        370921: '宁阳县',
+        370923: '东平县',
+        370982: '新泰市',
+        370983: '肥城市',
+        371002: '环翠区',
+        371003: '文登区',
+        371082: '荣成市',
+        371083: '乳山市',
+        371091: '经济技术开发区',
+        371102: '东港区',
+        371103: '岚山区',
+        371121: '五莲县',
+        371122: '莒县',
+        371202: '莱城区',
+        371203: '钢城区',
+        371302: '兰山区',
+        371311: '罗庄区',
+        371312: '河东区',
+        371321: '沂南县',
+        371322: '郯城县',
+        371323: '沂水县',
+        371324: '兰陵县',
+        371325: '费县',
+        371326: '平邑县',
+        371327: '莒南县',
+        371328: '蒙阴县',
+        371329: '临沭县',
+        371402: '德城区',
+        371403: '陵城区',
+        371422: '宁津县',
+        371423: '庆云县',
+        371424: '临邑县',
+        371425: '齐河县',
+        371426: '平原县',
+        371427: '夏津县',
+        371428: '武城县',
+        371481: '乐陵市',
+        371482: '禹城市',
+        371502: '东昌府区',
+        371521: '阳谷县',
+        371522: '莘县',
+        371523: '茌平县',
+        371524: '东阿县',
+        371525: '冠县',
+        371526: '高唐县',
+        371581: '临清市',
+        371602: '滨城区',
+        371603: '沾化区',
+        371621: '惠民县',
+        371622: '阳信县',
+        371623: '无棣县',
+        371625: '博兴县',
+        371626: '邹平县',
+        371702: '牡丹区',
+        371703: '定陶区',
+        371721: '曹县',
+        371722: '单县',
+        371723: '成武县',
+        371724: '巨野县',
+        371725: '郓城县',
+        371726: '鄄城县',
+        371728: '东明县',
+        410102: '中原区',
+        410103: '二七区',
+        410104: '管城回族区',
+        410105: '金水区',
+        410106: '上街区',
+        410108: '惠济区',
+        410122: '中牟县',
+        410181: '巩义市',
+        410182: '荥阳市',
+        410183: '新密市',
+        410184: '新郑市',
+        410185: '登封市',
+        410190: '高新技术开发区',
+        410191: '经济技术开发区',
+        410202: '龙亭区',
+        410203: '顺河回族区',
+        410204: '鼓楼区',
+        410205: '禹王台区',
+        410212: '祥符区',
+        410221: '杞县',
+        410222: '通许县',
+        410223: '尉氏县',
+        410225: '兰考县',
+        410302: '老城区',
+        410303: '西工区',
+        410304: '瀍河回族区',
+        410305: '涧西区',
+        410306: '吉利区',
+        410311: '洛龙区',
+        410322: '孟津县',
+        410323: '新安县',
+        410324: '栾川县',
+        410325: '嵩县',
+        410326: '汝阳县',
+        410327: '宜阳县',
+        410328: '洛宁县',
+        410329: '伊川县',
+        410381: '偃师市',
+        410402: '新华区',
+        410403: '卫东区',
+        410404: '石龙区',
+        410411: '湛河区',
+        410421: '宝丰县',
+        410422: '叶县',
+        410423: '鲁山县',
+        410425: '郏县',
+        410481: '舞钢市',
+        410482: '汝州市',
+        410502: '文峰区',
+        410503: '北关区',
+        410505: '殷都区',
+        410506: '龙安区',
+        410522: '安阳县',
+        410523: '汤阴县',
+        410526: '滑县',
+        410527: '内黄县',
+        410581: '林州市',
+        410590: '开发区',
+        410602: '鹤山区',
+        410603: '山城区',
+        410611: '淇滨区',
+        410621: '浚县',
+        410622: '淇县',
+        410702: '红旗区',
+        410703: '卫滨区',
+        410704: '凤泉区',
+        410711: '牧野区',
+        410721: '新乡县',
+        410724: '获嘉县',
+        410725: '原阳县',
+        410726: '延津县',
+        410727: '封丘县',
+        410728: '长垣县',
+        410781: '卫辉市',
+        410782: '辉县市',
+        410802: '解放区',
+        410803: '中站区',
+        410804: '马村区',
+        410811: '山阳区',
+        410821: '修武县',
+        410822: '博爱县',
+        410823: '武陟县',
+        410825: '温县',
+        410882: '沁阳市',
+        410883: '孟州市',
+        410902: '华龙区',
+        410922: '清丰县',
+        410923: '南乐县',
+        410926: '范县',
+        410927: '台前县',
+        410928: '濮阳县',
+        411002: '魏都区',
+        411003: '建安区',
+        411024: '鄢陵县',
+        411025: '襄城县',
+        411081: '禹州市',
+        411082: '长葛市',
+        411102: '源汇区',
+        411103: '郾城区',
+        411104: '召陵区',
+        411121: '舞阳县',
+        411122: '临颍县',
+        411202: '湖滨区',
+        411203: '陕州区',
+        411221: '渑池县',
+        411224: '卢氏县',
+        411281: '义马市',
+        411282: '灵宝市',
+        411302: '宛城区',
+        411303: '卧龙区',
+        411321: '南召县',
+        411322: '方城县',
+        411323: '西峡县',
+        411324: '镇平县',
+        411325: '内乡县',
+        411326: '淅川县',
+        411327: '社旗县',
+        411328: '唐河县',
+        411329: '新野县',
+        411330: '桐柏县',
+        411381: '邓州市',
+        411402: '梁园区',
+        411403: '睢阳区',
+        411421: '民权县',
+        411422: '睢县',
+        411423: '宁陵县',
+        411424: '柘城县',
+        411425: '虞城县',
+        411426: '夏邑县',
+        411481: '永城市',
+        411502: '浉河区',
+        411503: '平桥区',
+        411521: '罗山县',
+        411522: '光山县',
+        411523: '新县',
+        411524: '商城县',
+        411525: '固始县',
+        411526: '潢川县',
+        411527: '淮滨县',
+        411528: '息县',
+        411602: '川汇区',
+        411621: '扶沟县',
+        411622: '西华县',
+        411623: '商水县',
+        411624: '沈丘县',
+        411625: '郸城县',
+        411626: '淮阳县',
+        411627: '太康县',
+        411628: '鹿邑县',
+        411681: '项城市',
+        411690: '经济开发区',
+        411702: '驿城区',
+        411721: '西平县',
+        411722: '上蔡县',
+        411723: '平舆县',
+        411724: '正阳县',
+        411725: '确山县',
+        411726: '泌阳县',
+        411727: '汝南县',
+        411728: '遂平县',
+        411729: '新蔡县',
+        419001: '济源市',
+        420102: '江岸区',
+        420103: '江汉区',
+        420104: '硚口区',
+        420105: '汉阳区',
+        420106: '武昌区',
+        420107: '青山区',
+        420111: '洪山区',
+        420112: '东西湖区',
+        420113: '汉南区',
+        420114: '蔡甸区',
+        420115: '江夏区',
+        420116: '黄陂区',
+        420117: '新洲区',
+        420202: '黄石港区',
+        420203: '西塞山区',
+        420204: '下陆区',
+        420205: '铁山区',
+        420222: '阳新县',
+        420281: '大冶市',
+        420302: '茅箭区',
+        420303: '张湾区',
+        420304: '郧阳区',
+        420322: '郧西县',
+        420323: '竹山县',
+        420324: '竹溪县',
+        420325: '房县',
+        420381: '丹江口市',
+        420502: '西陵区',
+        420503: '伍家岗区',
+        420504: '点军区',
+        420505: '猇亭区',
+        420506: '夷陵区',
+        420525: '远安县',
+        420526: '兴山县',
+        420527: '秭归县',
+        420528: '长阳土家族自治县',
+        420529: '五峰土家族自治县',
+        420581: '宜都市',
+        420582: '当阳市',
+        420583: '枝江市',
+        420590: '经济开发区',
+        420602: '襄城区',
+        420606: '樊城区',
+        420607: '襄州区',
+        420624: '南漳县',
+        420625: '谷城县',
+        420626: '保康县',
+        420682: '老河口市',
+        420683: '枣阳市',
+        420684: '宜城市',
+        420702: '梁子湖区',
+        420703: '华容区',
+        420704: '鄂城区',
+        420802: '东宝区',
+        420804: '掇刀区',
+        420821: '京山县',
+        420822: '沙洋县',
+        420881: '钟祥市',
+        420902: '孝南区',
+        420921: '孝昌县',
+        420922: '大悟县',
+        420923: '云梦县',
+        420981: '应城市',
+        420982: '安陆市',
+        420984: '汉川市',
+        421002: '沙市区',
+        421003: '荆州区',
+        421022: '公安县',
+        421023: '监利县',
+        421024: '江陵县',
+        421081: '石首市',
+        421083: '洪湖市',
+        421087: '松滋市',
+        421102: '黄州区',
+        421121: '团风县',
+        421122: '红安县',
+        421123: '罗田县',
+        421124: '英山县',
+        421125: '浠水县',
+        421126: '蕲春县',
+        421127: '黄梅县',
+        421181: '麻城市',
+        421182: '武穴市',
+        421202: '咸安区',
+        421221: '嘉鱼县',
+        421222: '通城县',
+        421223: '崇阳县',
+        421224: '通山县',
+        421281: '赤壁市',
+        421303: '曾都区',
+        421321: '随县',
+        421381: '广水市',
+        422801: '恩施市',
+        422802: '利川市',
+        422822: '建始县',
+        422823: '巴东县',
+        422825: '宣恩县',
+        422826: '咸丰县',
+        422827: '来凤县',
+        422828: '鹤峰县',
+        429004: '仙桃市',
+        429005: '潜江市',
+        429006: '天门市',
+        429021: '神农架林区',
+        430102: '芙蓉区',
+        430103: '天心区',
+        430104: '岳麓区',
+        430105: '开福区',
+        430111: '雨花区',
+        430112: '望城区',
+        430121: '长沙县',
+        430181: '浏阳市',
+        430182: '宁乡市',
+        430202: '荷塘区',
+        430203: '芦淞区',
+        430204: '石峰区',
+        430211: '天元区',
+        430221: '株洲县',
+        430223: '攸县',
+        430224: '茶陵县',
+        430225: '炎陵县',
+        430281: '醴陵市',
+        430302: '雨湖区',
+        430304: '岳塘区',
+        430321: '湘潭县',
+        430381: '湘乡市',
+        430382: '韶山市',
+        430405: '珠晖区',
+        430406: '雁峰区',
+        430407: '石鼓区',
+        430408: '蒸湘区',
+        430412: '南岳区',
+        430421: '衡阳县',
+        430422: '衡南县',
+        430423: '衡山县',
+        430424: '衡东县',
+        430426: '祁东县',
+        430481: '耒阳市',
+        430482: '常宁市',
+        430502: '双清区',
+        430503: '大祥区',
+        430511: '北塔区',
+        430521: '邵东县',
+        430522: '新邵县',
+        430523: '邵阳县',
+        430524: '隆回县',
+        430525: '洞口县',
+        430527: '绥宁县',
+        430528: '新宁县',
+        430529: '城步苗族自治县',
+        430581: '武冈市',
+        430602: '岳阳楼区',
+        430603: '云溪区',
+        430611: '君山区',
+        430621: '岳阳县',
+        430623: '华容县',
+        430624: '湘阴县',
+        430626: '平江县',
+        430681: '汨罗市',
+        430682: '临湘市',
+        430702: '武陵区',
+        430703: '鼎城区',
+        430721: '安乡县',
+        430722: '汉寿县',
+        430723: '澧县',
+        430724: '临澧县',
+        430725: '桃源县',
+        430726: '石门县',
+        430781: '津市市',
+        430802: '永定区',
+        430811: '武陵源区',
+        430821: '慈利县',
+        430822: '桑植县',
+        430902: '资阳区',
+        430903: '赫山区',
+        430921: '南县',
+        430922: '桃江县',
+        430923: '安化县',
+        430981: '沅江市',
+        431002: '北湖区',
+        431003: '苏仙区',
+        431021: '桂阳县',
+        431022: '宜章县',
+        431023: '永兴县',
+        431024: '嘉禾县',
+        431025: '临武县',
+        431026: '汝城县',
+        431027: '桂东县',
+        431028: '安仁县',
+        431081: '资兴市',
+        431102: '零陵区',
+        431103: '冷水滩区',
+        431121: '祁阳县',
+        431122: '东安县',
+        431123: '双牌县',
+        431124: '道县',
+        431125: '江永县',
+        431126: '宁远县',
+        431127: '蓝山县',
+        431128: '新田县',
+        431129: '江华瑶族自治县',
+        431202: '鹤城区',
+        431221: '中方县',
+        431222: '沅陵县',
+        431223: '辰溪县',
+        431224: '溆浦县',
+        431225: '会同县',
+        431226: '麻阳苗族自治县',
+        431227: '新晃侗族自治县',
+        431228: '芷江侗族自治县',
+        431229: '靖州苗族侗族自治县',
+        431230: '通道侗族自治县',
+        431281: '洪江市',
+        431302: '娄星区',
+        431321: '双峰县',
+        431322: '新化县',
+        431381: '冷水江市',
+        431382: '涟源市',
+        433101: '吉首市',
+        433122: '泸溪县',
+        433123: '凤凰县',
+        433124: '花垣县',
+        433125: '保靖县',
+        433126: '古丈县',
+        433127: '永顺县',
+        433130: '龙山县',
+        440103: '荔湾区',
+        440104: '越秀区',
+        440105: '海珠区',
+        440106: '天河区',
+        440111: '白云区',
+        440112: '黄埔区',
+        440113: '番禺区',
+        440114: '花都区',
+        440115: '南沙区',
+        440117: '从化区',
+        440118: '增城区',
+        440203: '武江区',
+        440204: '浈江区',
+        440205: '曲江区',
+        440222: '始兴县',
+        440224: '仁化县',
+        440229: '翁源县',
+        440232: '乳源瑶族自治县',
+        440233: '新丰县',
+        440281: '乐昌市',
+        440282: '南雄市',
+        440303: '罗湖区',
+        440304: '福田区',
+        440305: '南山区',
+        440306: '宝安区',
+        440307: '龙岗区',
+        440308: '盐田区',
+        440309: '龙华区',
+        440310: '坪山区',
+        440402: '香洲区',
+        440403: '斗门区',
+        440404: '金湾区',
+        440507: '龙湖区',
+        440511: '金平区',
+        440512: '濠江区',
+        440513: '潮阳区',
+        440514: '潮南区',
+        440515: '澄海区',
+        440523: '南澳县',
+        440604: '禅城区',
+        440605: '南海区',
+        440606: '顺德区',
+        440607: '三水区',
+        440608: '高明区',
+        440703: '蓬江区',
+        440704: '江海区',
+        440705: '新会区',
+        440781: '台山市',
+        440783: '开平市',
+        440784: '鹤山市',
+        440785: '恩平市',
+        440802: '赤坎区',
+        440803: '霞山区',
+        440804: '坡头区',
+        440811: '麻章区',
+        440823: '遂溪县',
+        440825: '徐闻县',
+        440881: '廉江市',
+        440882: '雷州市',
+        440883: '吴川市',
+        440890: '经济技术开发区',
+        440902: '茂南区',
+        440904: '电白区',
+        440981: '高州市',
+        440982: '化州市',
+        440983: '信宜市',
+        441202: '端州区',
+        441203: '鼎湖区',
+        441204: '高要区',
+        441223: '广宁县',
+        441224: '怀集县',
+        441225: '封开县',
+        441226: '德庆县',
+        441284: '四会市',
+        441302: '惠城区',
+        441303: '惠阳区',
+        441322: '博罗县',
+        441323: '惠东县',
+        441324: '龙门县',
+        441402: '梅江区',
+        441403: '梅县区',
+        441422: '大埔县',
+        441423: '丰顺县',
+        441424: '五华县',
+        441426: '平远县',
+        441427: '蕉岭县',
+        441481: '兴宁市',
+        441502: '城区',
+        441521: '海丰县',
+        441523: '陆河县',
+        441581: '陆丰市',
+        441602: '源城区',
+        441621: '紫金县',
+        441622: '龙川县',
+        441623: '连平县',
+        441624: '和平县',
+        441625: '东源县',
+        441702: '江城区',
+        441704: '阳东区',
+        441721: '阳西县',
+        441781: '阳春市',
+        441802: '清城区',
+        441803: '清新区',
+        441821: '佛冈县',
+        441823: '阳山县',
+        441825: '连山壮族瑶族自治县',
+        441826: '连南瑶族自治县',
+        441881: '英德市',
+        441882: '连州市',
+        441901: '中堂镇',
+        441903: '南城区',
+        441904: '长安镇',
+        441905: '东坑镇',
+        441906: '樟木头镇',
+        441907: '莞城区',
+        441908: '石龙镇',
+        441909: '桥头镇',
+        441910: '万江区',
+        441911: '麻涌镇',
+        441912: '虎门镇',
+        441913: '谢岗镇',
+        441914: '石碣镇',
+        441915: '茶山镇',
+        441916: '东城区',
+        441917: '洪梅镇',
+        441918: '道滘镇',
+        441919: '高埗镇',
+        441920: '企石镇',
+        441921: '凤岗镇',
+        441922: '大岭山镇',
+        441923: '松山湖',
+        441924: '清溪镇',
+        441925: '望牛墩镇',
+        441926: '厚街镇',
+        441927: '常平镇',
+        441928: '寮步镇',
+        441929: '石排镇',
+        441930: '横沥镇',
+        441931: '塘厦镇',
+        441932: '黄江镇',
+        441933: '大朗镇',
+        441990: '沙田镇',
+        442001: '南头镇',
+        442002: '神湾镇',
+        442003: '东凤镇',
+        442004: '五桂山镇',
+        442005: '黄圃镇',
+        442006: '小榄镇',
+        442007: '石岐区街道',
+        442008: '横栏镇',
+        442009: '三角镇',
+        442010: '三乡镇',
+        442011: '港口镇',
+        442012: '沙溪镇',
+        442013: '板芙镇',
+        442014: '沙朗镇',
+        442015: '东升镇',
+        442016: '阜沙镇',
+        442017: '民众镇',
+        442018: '东区街道',
+        442019: '火炬开发区',
+        442020: '西区街道',
+        442021: '南区街道',
+        442022: '古镇',
+        442023: '坦洲镇',
+        442024: '大涌镇',
+        442025: '南朗镇',
+        445102: '湘桥区',
+        445103: '潮安区',
+        445122: '饶平县',
+        445202: '榕城区',
+        445203: '揭东区',
+        445222: '揭西县',
+        445224: '惠来县',
+        445281: '普宁市',
+        445302: '云城区',
+        445303: '云安区',
+        445321: '新兴县',
+        445322: '郁南县',
+        445381: '罗定市',
+        450102: '兴宁区',
+        450103: '青秀区',
+        450105: '江南区',
+        450107: '西乡塘区',
+        450108: '良庆区',
+        450109: '邕宁区',
+        450110: '武鸣区',
+        450123: '隆安县',
+        450124: '马山县',
+        450125: '上林县',
+        450126: '宾阳县',
+        450127: '横县',
+        450202: '城中区',
+        450203: '鱼峰区',
+        450204: '柳南区',
+        450205: '柳北区',
+        450206: '柳江区',
+        450222: '柳城县',
+        450223: '鹿寨县',
+        450224: '融安县',
+        450225: '融水苗族自治县',
+        450226: '三江侗族自治县',
+        450302: '秀峰区',
+        450303: '叠彩区',
+        450304: '象山区',
+        450305: '七星区',
+        450311: '雁山区',
+        450312: '临桂区',
+        450321: '阳朔县',
+        450323: '灵川县',
+        450324: '全州县',
+        450325: '兴安县',
+        450326: '永福县',
+        450327: '灌阳县',
+        450328: '龙胜各族自治县',
+        450329: '资源县',
+        450330: '平乐县',
+        450331: '荔浦县',
+        450332: '恭城瑶族自治县',
+        450403: '万秀区',
+        450405: '长洲区',
+        450406: '龙圩区',
+        450421: '苍梧县',
+        450422: '藤县',
+        450423: '蒙山县',
+        450481: '岑溪市',
+        450502: '海城区',
+        450503: '银海区',
+        450512: '铁山港区',
+        450521: '合浦县',
+        450602: '港口区',
+        450603: '防城区',
+        450621: '上思县',
+        450681: '东兴市',
+        450702: '钦南区',
+        450703: '钦北区',
+        450721: '灵山县',
+        450722: '浦北县',
+        450802: '港北区',
+        450803: '港南区',
+        450804: '覃塘区',
+        450821: '平南县',
+        450881: '桂平市',
+        450902: '玉州区',
+        450903: '福绵区',
+        450921: '容县',
+        450922: '陆川县',
+        450923: '博白县',
+        450924: '兴业县',
+        450981: '北流市',
+        451002: '右江区',
+        451021: '田阳县',
+        451022: '田东县',
+        451023: '平果县',
+        451024: '德保县',
+        451026: '那坡县',
+        451027: '凌云县',
+        451028: '乐业县',
+        451029: '田林县',
+        451030: '西林县',
+        451031: '隆林各族自治县',
+        451081: '靖西市',
+        451102: '八步区',
+        451103: '平桂区',
+        451121: '昭平县',
+        451122: '钟山县',
+        451123: '富川瑶族自治县',
+        451202: '金城江区',
+        451203: '宜州区',
+        451221: '南丹县',
+        451222: '天峨县',
+        451223: '凤山县',
+        451224: '东兰县',
+        451225: '罗城仫佬族自治县',
+        451226: '环江毛南族自治县',
+        451227: '巴马瑶族自治县',
+        451228: '都安瑶族自治县',
+        451229: '大化瑶族自治县',
+        451302: '兴宾区',
+        451321: '忻城县',
+        451322: '象州县',
+        451323: '武宣县',
+        451324: '金秀瑶族自治县',
+        451381: '合山市',
+        451402: '江州区',
+        451421: '扶绥县',
+        451422: '宁明县',
+        451423: '龙州县',
+        451424: '大新县',
+        451425: '天等县',
+        451481: '凭祥市',
+        460105: '秀英区',
+        460106: '龙华区',
+        460107: '琼山区',
+        460108: '美兰区',
+        460202: '海棠区',
+        460203: '吉阳区',
+        460204: '天涯区',
+        460205: '崖州区',
+        460321: '西沙群岛',
+        460322: '南沙群岛',
+        460323: '中沙群岛的岛礁及其海域',
+        460401: '那大镇',
+        460402: '和庆镇',
+        460403: '南丰镇',
+        460404: '大成镇',
+        460405: '雅星镇',
+        460406: '兰洋镇',
+        460407: '光村镇',
+        460408: '木棠镇',
+        460409: '海头镇',
+        460410: '峨蔓镇',
+        460411: '王五镇',
+        460412: '白马井镇',
+        460413: '中和镇',
+        460414: '排浦镇',
+        460415: '东成镇',
+        460416: '新州镇',
+        469001: '五指山市',
+        469002: '琼海市',
+        469005: '文昌市',
+        469006: '万宁市',
+        469007: '东方市',
+        469021: '定安县',
+        469022: '屯昌县',
+        469023: '澄迈县',
+        469024: '临高县',
+        469025: '白沙黎族自治县',
+        469026: '昌江黎族自治县',
+        469027: '乐东黎族自治县',
+        469028: '陵水黎族自治县',
+        469029: '保亭黎族苗族自治县',
+        469030: '琼中黎族苗族自治县',
+        500101: '万州区',
+        500102: '涪陵区',
+        500103: '渝中区',
+        500104: '大渡口区',
+        500105: '江北区',
+        500106: '沙坪坝区',
+        500107: '九龙坡区',
+        500108: '南岸区',
+        500109: '北碚区',
+        500110: '綦江区',
+        500111: '大足区',
+        500112: '渝北区',
+        500113: '巴南区',
+        500114: '黔江区',
+        500115: '长寿区',
+        500116: '江津区',
+        500117: '合川区',
+        500118: '永川区',
+        500119: '南川区',
+        500120: '璧山区',
+        500151: '铜梁区',
+        500152: '潼南区',
+        500153: '荣昌区',
+        500154: '开州区',
+        500155: '梁平区',
+        500156: '武隆区',
+        500229: '城口县',
+        500230: '丰都县',
+        500231: '垫江县',
+        500233: '忠县',
+        500235: '云阳县',
+        500236: '奉节县',
+        500237: '巫山县',
+        500238: '巫溪县',
+        500240: '石柱土家族自治县',
+        500241: '秀山土家族苗族自治县',
+        500242: '酉阳土家族苗族自治县',
+        500243: '彭水苗族土家族自治县',
+        510104: '锦江区',
+        510105: '青羊区',
+        510106: '金牛区',
+        510107: '武侯区',
+        510108: '成华区',
+        510112: '龙泉驿区',
+        510113: '青白江区',
+        510114: '新都区',
+        510115: '温江区',
+        510116: '双流区',
+        510117: '郫都区',
+        510121: '金堂县',
+        510129: '大邑县',
+        510131: '蒲江县',
+        510132: '新津县',
+        510181: '都江堰市',
+        510182: '彭州市',
+        510183: '邛崃市',
+        510184: '崇州市',
+        510185: '简阳市',
+        510191: '高新区',
+        510302: '自流井区',
+        510303: '贡井区',
+        510304: '大安区',
+        510311: '沿滩区',
+        510321: '荣县',
+        510322: '富顺县',
+        510402: '东区',
+        510403: '西区',
+        510411: '仁和区',
+        510421: '米易县',
+        510422: '盐边县',
+        510502: '江阳区',
+        510503: '纳溪区',
+        510504: '龙马潭区',
+        510521: '泸县',
+        510522: '合江县',
+        510524: '叙永县',
+        510525: '古蔺县',
+        510603: '旌阳区',
+        510604: '罗江区',
+        510623: '中江县',
+        510681: '广汉市',
+        510682: '什邡市',
+        510683: '绵竹市',
+        510703: '涪城区',
+        510704: '游仙区',
+        510705: '安州区',
+        510722: '三台县',
+        510723: '盐亭县',
+        510725: '梓潼县',
+        510726: '北川羌族自治县',
+        510727: '平武县',
+        510781: '江油市',
+        510791: '高新区',
+        510802: '利州区',
+        510811: '昭化区',
+        510812: '朝天区',
+        510821: '旺苍县',
+        510822: '青川县',
+        510823: '剑阁县',
+        510824: '苍溪县',
+        510903: '船山区',
+        510904: '安居区',
+        510921: '蓬溪县',
+        510922: '射洪县',
+        510923: '大英县',
+        511002: '市中区',
+        511011: '东兴区',
+        511024: '威远县',
+        511025: '资中县',
+        511083: '隆昌市',
+        511102: '市中区',
+        511111: '沙湾区',
+        511112: '五通桥区',
+        511113: '金口河区',
+        511123: '犍为县',
+        511124: '井研县',
+        511126: '夹江县',
+        511129: '沐川县',
+        511132: '峨边彝族自治县',
+        511133: '马边彝族自治县',
+        511181: '峨眉山市',
+        511302: '顺庆区',
+        511303: '高坪区',
+        511304: '嘉陵区',
+        511321: '南部县',
+        511322: '营山县',
+        511323: '蓬安县',
+        511324: '仪陇县',
+        511325: '西充县',
+        511381: '阆中市',
+        511402: '东坡区',
+        511403: '彭山区',
+        511421: '仁寿县',
+        511423: '洪雅县',
+        511424: '丹棱县',
+        511425: '青神县',
+        511502: '翠屏区',
+        511503: '南溪区',
+        511521: '宜宾县',
+        511523: '江安县',
+        511524: '长宁县',
+        511525: '高县',
+        511526: '珙县',
+        511527: '筠连县',
+        511528: '兴文县',
+        511529: '屏山县',
+        511602: '广安区',
+        511603: '前锋区',
+        511621: '岳池县',
+        511622: '武胜县',
+        511623: '邻水县',
+        511681: '华蓥市',
+        511702: '通川区',
+        511703: '达川区',
+        511722: '宣汉县',
+        511723: '开江县',
+        511724: '大竹县',
+        511725: '渠县',
+        511781: '万源市',
+        511802: '雨城区',
+        511803: '名山区',
+        511822: '荥经县',
+        511823: '汉源县',
+        511824: '石棉县',
+        511825: '天全县',
+        511826: '芦山县',
+        511827: '宝兴县',
+        511902: '巴州区',
+        511903: '恩阳区',
+        511921: '通江县',
+        511922: '南江县',
+        511923: '平昌县',
+        512002: '雁江区',
+        512021: '安岳县',
+        512022: '乐至县',
+        513201: '马尔康市',
+        513221: '汶川县',
+        513222: '理县',
+        513223: '茂县',
+        513224: '松潘县',
+        513225: '九寨沟县',
+        513226: '金川县',
+        513227: '小金县',
+        513228: '黑水县',
+        513230: '壤塘县',
+        513231: '阿坝县',
+        513232: '若尔盖县',
+        513233: '红原县',
+        513301: '康定市',
+        513322: '泸定县',
+        513323: '丹巴县',
+        513324: '九龙县',
+        513325: '雅江县',
+        513326: '道孚县',
+        513327: '炉霍县',
+        513328: '甘孜县',
+        513329: '新龙县',
+        513330: '德格县',
+        513331: '白玉县',
+        513332: '石渠县',
+        513333: '色达县',
+        513334: '理塘县',
+        513335: '巴塘县',
+        513336: '乡城县',
+        513337: '稻城县',
+        513338: '得荣县',
+        513401: '西昌市',
+        513422: '木里藏族自治县',
+        513423: '盐源县',
+        513424: '德昌县',
+        513425: '会理县',
+        513426: '会东县',
+        513427: '宁南县',
+        513428: '普格县',
+        513429: '布拖县',
+        513430: '金阳县',
+        513431: '昭觉县',
+        513432: '喜德县',
+        513433: '冕宁县',
+        513434: '越西县',
+        513435: '甘洛县',
+        513436: '美姑县',
+        513437: '雷波县',
+        520102: '南明区',
+        520103: '云岩区',
+        520111: '花溪区',
+        520112: '乌当区',
+        520113: '白云区',
+        520115: '观山湖区',
+        520121: '开阳县',
+        520122: '息烽县',
+        520123: '修文县',
+        520181: '清镇市',
+        520201: '钟山区',
+        520203: '六枝特区',
+        520221: '水城县',
+        520281: '盘州市',
+        520302: '红花岗区',
+        520303: '汇川区',
+        520304: '播州区',
+        520322: '桐梓县',
+        520323: '绥阳县',
+        520324: '正安县',
+        520325: '道真仡佬族苗族自治县',
+        520326: '务川仡佬族苗族自治县',
+        520327: '凤冈县',
+        520328: '湄潭县',
+        520329: '余庆县',
+        520330: '习水县',
+        520381: '赤水市',
+        520382: '仁怀市',
+        520402: '西秀区',
+        520403: '平坝区',
+        520422: '普定县',
+        520423: '镇宁布依族苗族自治县',
+        520424: '关岭布依族苗族自治县',
+        520425: '紫云苗族布依族自治县',
+        520502: '七星关区',
+        520521: '大方县',
+        520522: '黔西县',
+        520523: '金沙县',
+        520524: '织金县',
+        520525: '纳雍县',
+        520526: '威宁彝族回族苗族自治县',
+        520527: '赫章县',
+        520602: '碧江区',
+        520603: '万山区',
+        520621: '江口县',
+        520622: '玉屏侗族自治县',
+        520623: '石阡县',
+        520624: '思南县',
+        520625: '印江土家族苗族自治县',
+        520626: '德江县',
+        520627: '沿河土家族自治县',
+        520628: '松桃苗族自治县',
+        522301: '兴义市',
+        522322: '兴仁县',
+        522323: '普安县',
+        522324: '晴隆县',
+        522325: '贞丰县',
+        522326: '望谟县',
+        522327: '册亨县',
+        522328: '安龙县',
+        522601: '凯里市',
+        522622: '黄平县',
+        522623: '施秉县',
+        522624: '三穗县',
+        522625: '镇远县',
+        522626: '岑巩县',
+        522627: '天柱县',
+        522628: '锦屏县',
+        522629: '剑河县',
+        522630: '台江县',
+        522631: '黎平县',
+        522632: '榕江县',
+        522633: '从江县',
+        522634: '雷山县',
+        522635: '麻江县',
+        522636: '丹寨县',
+        522701: '都匀市',
+        522702: '福泉市',
+        522722: '荔波县',
+        522723: '贵定县',
+        522725: '瓮安县',
+        522726: '独山县',
+        522727: '平塘县',
+        522728: '罗甸县',
+        522729: '长顺县',
+        522730: '龙里县',
+        522731: '惠水县',
+        522732: '三都水族自治县',
+        530102: '五华区',
+        530103: '盘龙区',
+        530111: '官渡区',
+        530112: '西山区',
+        530113: '东川区',
+        530114: '呈贡区',
+        530115: '晋宁区',
+        530124: '富民县',
+        530125: '宜良县',
+        530126: '石林彝族自治县',
+        530127: '嵩明县',
+        530128: '禄劝彝族苗族自治县',
+        530129: '寻甸回族彝族自治县',
+        530181: '安宁市',
+        530302: '麒麟区',
+        530303: '沾益区',
+        530321: '马龙县',
+        530322: '陆良县',
+        530323: '师宗县',
+        530324: '罗平县',
+        530325: '富源县',
+        530326: '会泽县',
+        530381: '宣威市',
+        530402: '红塔区',
+        530403: '江川区',
+        530422: '澄江县',
+        530423: '通海县',
+        530424: '华宁县',
+        530425: '易门县',
+        530426: '峨山彝族自治县',
+        530427: '新平彝族傣族自治县',
+        530428: '元江哈尼族彝族傣族自治县',
+        530502: '隆阳区',
+        530521: '施甸县',
+        530523: '龙陵县',
+        530524: '昌宁县',
+        530581: '腾冲市',
+        530602: '昭阳区',
+        530621: '鲁甸县',
+        530622: '巧家县',
+        530623: '盐津县',
+        530624: '大关县',
+        530625: '永善县',
+        530626: '绥江县',
+        530627: '镇雄县',
+        530628: '彝良县',
+        530629: '威信县',
+        530630: '水富县',
+        530702: '古城区',
+        530721: '玉龙纳西族自治县',
+        530722: '永胜县',
+        530723: '华坪县',
+        530724: '宁蒗彝族自治县',
+        530802: '思茅区',
+        530821: '宁洱哈尼族彝族自治县',
+        530822: '墨江哈尼族自治县',
+        530823: '景东彝族自治县',
+        530824: '景谷傣族彝族自治县',
+        530825: '镇沅彝族哈尼族拉祜族自治县',
+        530826: '江城哈尼族彝族自治县',
+        530827: '孟连傣族拉祜族佤族自治县',
+        530828: '澜沧拉祜族自治县',
+        530829: '西盟佤族自治县',
+        530902: '临翔区',
+        530921: '凤庆县',
+        530922: '云县',
+        530923: '永德县',
+        530924: '镇康县',
+        530925: '双江拉祜族佤族布朗族傣族自治县',
+        530926: '耿马傣族佤族自治县',
+        530927: '沧源佤族自治县',
+        532301: '楚雄市',
+        532322: '双柏县',
+        532323: '牟定县',
+        532324: '南华县',
+        532325: '姚安县',
+        532326: '大姚县',
+        532327: '永仁县',
+        532328: '元谋县',
+        532329: '武定县',
+        532331: '禄丰县',
+        532501: '个旧市',
+        532502: '开远市',
+        532503: '蒙自市',
+        532504: '弥勒市',
+        532523: '屏边苗族自治县',
+        532524: '建水县',
+        532525: '石屏县',
+        532527: '泸西县',
+        532528: '元阳县',
+        532529: '红河县',
+        532530: '金平苗族瑶族傣族自治县',
+        532531: '绿春县',
+        532532: '河口瑶族自治县',
+        532601: '文山市',
+        532622: '砚山县',
+        532623: '西畴县',
+        532624: '麻栗坡县',
+        532625: '马关县',
+        532626: '丘北县',
+        532627: '广南县',
+        532628: '富宁县',
+        532801: '景洪市',
+        532822: '勐海县',
+        532823: '勐腊县',
+        532901: '大理市',
+        532922: '漾濞彝族自治县',
+        532923: '祥云县',
+        532924: '宾川县',
+        532925: '弥渡县',
+        532926: '南涧彝族自治县',
+        532927: '巍山彝族回族自治县',
+        532928: '永平县',
+        532929: '云龙县',
+        532930: '洱源县',
+        532931: '剑川县',
+        532932: '鹤庆县',
+        533102: '瑞丽市',
+        533103: '芒市',
+        533122: '梁河县',
+        533123: '盈江县',
+        533124: '陇川县',
+        533301: '泸水市',
+        533323: '福贡县',
+        533324: '贡山独龙族怒族自治县',
+        533325: '兰坪白族普米族自治县',
+        533401: '香格里拉市',
+        533422: '德钦县',
+        533423: '维西傈僳族自治县',
+        540102: '城关区',
+        540103: '堆龙德庆区',
+        540104: '达孜区',
+        540121: '林周县',
+        540122: '当雄县',
+        540123: '尼木县',
+        540124: '曲水县',
+        540127: '墨竹工卡县',
+        540202: '桑珠孜区',
+        540221: '南木林县',
+        540222: '江孜县',
+        540223: '定日县',
+        540224: '萨迦县',
+        540225: '拉孜县',
+        540226: '昂仁县',
+        540227: '谢通门县',
+        540228: '白朗县',
+        540229: '仁布县',
+        540230: '康马县',
+        540231: '定结县',
+        540232: '仲巴县',
+        540233: '亚东县',
+        540234: '吉隆县',
+        540235: '聂拉木县',
+        540236: '萨嘎县',
+        540237: '岗巴县',
+        540302: '卡若区',
+        540321: '江达县',
+        540322: '贡觉县',
+        540323: '类乌齐县',
+        540324: '丁青县',
+        540325: '察雅县',
+        540326: '八宿县',
+        540327: '左贡县',
+        540328: '芒康县',
+        540329: '洛隆县',
+        540330: '边坝县',
+        540402: '巴宜区',
+        540421: '工布江达县',
+        540422: '米林县',
+        540423: '墨脱县',
+        540424: '波密县',
+        540425: '察隅县',
+        540426: '朗县',
+        540502: '乃东区',
+        540521: '扎囊县',
+        540522: '贡嘎县',
+        540523: '桑日县',
+        540524: '琼结县',
+        540525: '曲松县',
+        540526: '措美县',
+        540527: '洛扎县',
+        540528: '加查县',
+        540529: '隆子县',
+        540530: '错那县',
+        540531: '浪卡子县',
+        540602: '色尼区',
+        542421: '那曲县',
+        542422: '嘉黎县',
+        542423: '比如县',
+        542424: '聂荣县',
+        542425: '安多县',
+        542426: '申扎县',
+        542427: '索县',
+        542428: '班戈县',
+        542429: '巴青县',
+        542430: '尼玛县',
+        542431: '双湖县',
+        542521: '普兰县',
+        542522: '札达县',
+        542523: '噶尔县',
+        542524: '日土县',
+        542525: '革吉县',
+        542526: '改则县',
+        542527: '措勤县',
+        610102: '新城区',
+        610103: '碑林区',
+        610104: '莲湖区',
+        610111: '灞桥区',
+        610112: '未央区',
+        610113: '雁塔区',
+        610114: '阎良区',
+        610115: '临潼区',
+        610116: '长安区',
+        610117: '高陵区',
+        610118: '鄠邑区',
+        610122: '蓝田县',
+        610124: '周至县',
+        610202: '王益区',
+        610203: '印台区',
+        610204: '耀州区',
+        610222: '宜君县',
+        610302: '渭滨区',
+        610303: '金台区',
+        610304: '陈仓区',
+        610322: '凤翔县',
+        610323: '岐山县',
+        610324: '扶风县',
+        610326: '眉县',
+        610327: '陇县',
+        610328: '千阳县',
+        610329: '麟游县',
+        610330: '凤县',
+        610331: '太白县',
+        610402: '秦都区',
+        610403: '杨陵区',
+        610404: '渭城区',
+        610422: '三原县',
+        610423: '泾阳县',
+        610424: '乾县',
+        610425: '礼泉县',
+        610426: '永寿县',
+        610427: '彬县',
+        610428: '长武县',
+        610429: '旬邑县',
+        610430: '淳化县',
+        610431: '武功县',
+        610481: '兴平市',
+        610502: '临渭区',
+        610503: '华州区',
+        610522: '潼关县',
+        610523: '大荔县',
+        610524: '合阳县',
+        610525: '澄城县',
+        610526: '蒲城县',
+        610527: '白水县',
+        610528: '富平县',
+        610581: '韩城市',
+        610582: '华阴市',
+        610602: '宝塔区',
+        610603: '安塞区',
+        610621: '延长县',
+        610622: '延川县',
+        610623: '子长县',
+        610625: '志丹县',
+        610626: '吴起县',
+        610627: '甘泉县',
+        610628: '富县',
+        610629: '洛川县',
+        610630: '宜川县',
+        610631: '黄龙县',
+        610632: '黄陵县',
+        610702: '汉台区',
+        610703: '南郑区',
+        610722: '城固县',
+        610723: '洋县',
+        610724: '西乡县',
+        610725: '勉县',
+        610726: '宁强县',
+        610727: '略阳县',
+        610728: '镇巴县',
+        610729: '留坝县',
+        610730: '佛坪县',
+        610802: '榆阳区',
+        610803: '横山区',
+        610822: '府谷县',
+        610824: '靖边县',
+        610825: '定边县',
+        610826: '绥德县',
+        610827: '米脂县',
+        610828: '佳县',
+        610829: '吴堡县',
+        610830: '清涧县',
+        610831: '子洲县',
+        610881: '神木市',
+        610902: '汉滨区',
+        610921: '汉阴县',
+        610922: '石泉县',
+        610923: '宁陕县',
+        610924: '紫阳县',
+        610925: '岚皋县',
+        610926: '平利县',
+        610927: '镇坪县',
+        610928: '旬阳县',
+        610929: '白河县',
+        611002: '商州区',
+        611021: '洛南县',
+        611022: '丹凤县',
+        611023: '商南县',
+        611024: '山阳县',
+        611025: '镇安县',
+        611026: '柞水县',
+        620102: '城关区',
+        620103: '七里河区',
+        620104: '西固区',
+        620105: '安宁区',
+        620111: '红古区',
+        620121: '永登县',
+        620122: '皋兰县',
+        620123: '榆中县',
+        620201: '市辖区',
+        620290: '雄关区',
+        620291: '长城区',
+        620292: '镜铁区',
+        620293: '新城镇',
+        620294: '峪泉镇',
+        620295: '文殊镇',
+        620302: '金川区',
+        620321: '永昌县',
+        620402: '白银区',
+        620403: '平川区',
+        620421: '靖远县',
+        620422: '会宁县',
+        620423: '景泰县',
+        620502: '秦州区',
+        620503: '麦积区',
+        620521: '清水县',
+        620522: '秦安县',
+        620523: '甘谷县',
+        620524: '武山县',
+        620525: '张家川回族自治县',
+        620602: '凉州区',
+        620621: '民勤县',
+        620622: '古浪县',
+        620623: '天祝藏族自治县',
+        620702: '甘州区',
+        620721: '肃南裕固族自治县',
+        620722: '民乐县',
+        620723: '临泽县',
+        620724: '高台县',
+        620725: '山丹县',
+        620802: '崆峒区',
+        620821: '泾川县',
+        620822: '灵台县',
+        620823: '崇信县',
+        620824: '华亭县',
+        620825: '庄浪县',
+        620826: '静宁县',
+        620902: '肃州区',
+        620921: '金塔县',
+        620922: '瓜州县',
+        620923: '肃北蒙古族自治县',
+        620924: '阿克塞哈萨克族自治县',
+        620981: '玉门市',
+        620982: '敦煌市',
+        621002: '西峰区',
+        621021: '庆城县',
+        621022: '环县',
+        621023: '华池县',
+        621024: '合水县',
+        621025: '正宁县',
+        621026: '宁县',
+        621027: '镇原县',
+        621102: '安定区',
+        621121: '通渭县',
+        621122: '陇西县',
+        621123: '渭源县',
+        621124: '临洮县',
+        621125: '漳县',
+        621126: '岷县',
+        621202: '武都区',
+        621221: '成县',
+        621222: '文县',
+        621223: '宕昌县',
+        621224: '康县',
+        621225: '西和县',
+        621226: '礼县',
+        621227: '徽县',
+        621228: '两当县',
+        622901: '临夏市',
+        622921: '临夏县',
+        622922: '康乐县',
+        622923: '永靖县',
+        622924: '广河县',
+        622925: '和政县',
+        622926: '东乡族自治县',
+        622927: '积石山保安族东乡族撒拉族自治县',
+        623001: '合作市',
+        623021: '临潭县',
+        623022: '卓尼县',
+        623023: '舟曲县',
+        623024: '迭部县',
+        623025: '玛曲县',
+        623026: '碌曲县',
+        623027: '夏河县',
+        630102: '城东区',
+        630103: '城中区',
+        630104: '城西区',
+        630105: '城北区',
+        630121: '大通回族土族自治县',
+        630122: '湟中县',
+        630123: '湟源县',
+        630202: '乐都区',
+        630203: '平安区',
+        630222: '民和回族土族自治县',
+        630223: '互助土族自治县',
+        630224: '化隆回族自治县',
+        630225: '循化撒拉族自治县',
+        632221: '门源回族自治县',
+        632222: '祁连县',
+        632223: '海晏县',
+        632224: '刚察县',
+        632321: '同仁县',
+        632322: '尖扎县',
+        632323: '泽库县',
+        632324: '河南蒙古族自治县',
+        632521: '共和县',
+        632522: '同德县',
+        632523: '贵德县',
+        632524: '兴海县',
+        632525: '贵南县',
+        632621: '玛沁县',
+        632622: '班玛县',
+        632623: '甘德县',
+        632624: '达日县',
+        632625: '久治县',
+        632626: '玛多县',
+        632701: '玉树市',
+        632722: '杂多县',
+        632723: '称多县',
+        632724: '治多县',
+        632725: '囊谦县',
+        632726: '曲麻莱县',
+        632801: '格尔木市',
+        632802: '德令哈市',
+        632821: '乌兰县',
+        632822: '都兰县',
+        632823: '天峻县',
+        640104: '兴庆区',
+        640105: '西夏区',
+        640106: '金凤区',
+        640121: '永宁县',
+        640122: '贺兰县',
+        640181: '灵武市',
+        640202: '大武口区',
+        640205: '惠农区',
+        640221: '平罗县',
+        640302: '利通区',
+        640303: '红寺堡区',
+        640323: '盐池县',
+        640324: '同心县',
+        640381: '青铜峡市',
+        640402: '原州区',
+        640422: '西吉县',
+        640423: '隆德县',
+        640424: '泾源县',
+        640425: '彭阳县',
+        640502: '沙坡头区',
+        640521: '中宁县',
+        640522: '海原县',
+        650102: '天山区',
+        650103: '沙依巴克区',
+        650104: '新市区',
+        650105: '水磨沟区',
+        650106: '头屯河区',
+        650107: '达坂城区',
+        650109: '米东区',
+        650121: '乌鲁木齐县',
+        650202: '独山子区',
+        650203: '克拉玛依区',
+        650204: '白碱滩区',
+        650205: '乌尔禾区',
+        650402: '高昌区',
+        650421: '鄯善县',
+        650422: '托克逊县',
+        650502: '伊州区',
+        650521: '巴里坤哈萨克自治县',
+        650522: '伊吾县',
+        652301: '昌吉市',
+        652302: '阜康市',
+        652323: '呼图壁县',
+        652324: '玛纳斯县',
+        652325: '奇台县',
+        652327: '吉木萨尔县',
+        652328: '木垒哈萨克自治县',
+        652701: '博乐市',
+        652702: '阿拉山口市',
+        652722: '精河县',
+        652723: '温泉县',
+        652801: '库尔勒市',
+        652822: '轮台县',
+        652823: '尉犁县',
+        652824: '若羌县',
+        652825: '且末县',
+        652826: '焉耆回族自治县',
+        652827: '和静县',
+        652828: '和硕县',
+        652829: '博湖县',
+        652901: '阿克苏市',
+        652922: '温宿县',
+        652923: '库车县',
+        652924: '沙雅县',
+        652925: '新和县',
+        652926: '拜城县',
+        652927: '乌什县',
+        652928: '阿瓦提县',
+        652929: '柯坪县',
+        653001: '阿图什市',
+        653022: '阿克陶县',
+        653023: '阿合奇县',
+        653024: '乌恰县',
+        653101: '喀什市',
+        653121: '疏附县',
+        653122: '疏勒县',
+        653123: '英吉沙县',
+        653124: '泽普县',
+        653125: '莎车县',
+        653126: '叶城县',
+        653127: '麦盖提县',
+        653128: '岳普湖县',
+        653129: '伽师县',
+        653130: '巴楚县',
+        653131: '塔什库尔干塔吉克自治县',
+        653201: '和田市',
+        653221: '和田县',
+        653222: '墨玉县',
+        653223: '皮山县',
+        653224: '洛浦县',
+        653225: '策勒县',
+        653226: '于田县',
+        653227: '民丰县',
+        654002: '伊宁市',
+        654003: '奎屯市',
+        654004: '霍尔果斯市',
+        654021: '伊宁县',
+        654022: '察布查尔锡伯自治县',
+        654023: '霍城县',
+        654024: '巩留县',
+        654025: '新源县',
+        654026: '昭苏县',
+        654027: '特克斯县',
+        654028: '尼勒克县',
+        654201: '塔城市',
+        654202: '乌苏市',
+        654221: '额敏县',
+        654223: '沙湾县',
+        654224: '托里县',
+        654225: '裕民县',
+        654226: '和布克赛尔蒙古自治县',
+        654301: '阿勒泰市',
+        654321: '布尔津县',
+        654322: '富蕴县',
+        654323: '福海县',
+        654324: '哈巴河县',
+        654325: '青河县',
+        654326: '吉木乃县',
+        659001: '石河子市',
+        659002: '阿拉尔市',
+        659003: '图木舒克市',
+        659004: '五家渠市',
+        659005: '北屯市',
+        659006: '铁门关市',
+        659007: '双河市',
+        659008: '可克达拉市',
+        659009: '昆玉市',
+        710101: '中正区',
+        710102: '大同区',
+        710103: '中山区',
+        710104: '松山区',
+        710105: '大安区',
+        710106: '万华区',
+        710107: '信义区',
+        710108: '士林区',
+        710109: '北投区',
+        710110: '内湖区',
+        710111: '南港区',
+        710112: '文山区',
+        710199: '其它区',
+        710201: '新兴区',
+        710202: '前金区',
+        710203: '芩雅区',
+        710204: '盐埕区',
+        710205: '鼓山区',
+        710206: '旗津区',
+        710207: '前镇区',
+        710208: '三民区',
+        710209: '左营区',
+        710210: '楠梓区',
+        710211: '小港区',
+        710241: '苓雅区',
+        710242: '仁武区',
+        710243: '大社区',
+        710244: '冈山区',
+        710245: '路竹区',
+        710246: '阿莲区',
+        710247: '田寮区',
+        710248: '燕巢区',
+        710249: '桥头区',
+        710250: '梓官区',
+        710251: '弥陀区',
+        710252: '永安区',
+        710253: '湖内区',
+        710254: '凤山区',
+        710255: '大寮区',
+        710256: '林园区',
+        710257: '鸟松区',
+        710258: '大树区',
+        710259: '旗山区',
+        710260: '美浓区',
+        710261: '六龟区',
+        710262: '内门区',
+        710263: '杉林区',
+        710264: '甲仙区',
+        710265: '桃源区',
+        710266: '那玛夏区',
+        710267: '茂林区',
+        710268: '茄萣区',
+        710299: '其它区',
+        710301: '中西区',
+        710302: '东区',
+        710303: '南区',
+        710304: '北区',
+        710305: '安平区',
+        710306: '安南区',
+        710339: '永康区',
+        710340: '归仁区',
+        710341: '新化区',
+        710342: '左镇区',
+        710343: '玉井区',
+        710344: '楠西区',
+        710345: '南化区',
+        710346: '仁德区',
+        710347: '关庙区',
+        710348: '龙崎区',
+        710349: '官田区',
+        710350: '麻豆区',
+        710351: '佳里区',
+        710352: '西港区',
+        710353: '七股区',
+        710354: '将军区',
+        710355: '学甲区',
+        710356: '北门区',
+        710357: '新营区',
+        710358: '后壁区',
+        710359: '白河区',
+        710360: '东山区',
+        710361: '六甲区',
+        710362: '下营区',
+        710363: '柳营区',
+        710364: '盐水区',
+        710365: '善化区',
+        710366: '大内区',
+        710367: '山上区',
+        710368: '新市区',
+        710369: '安定区',
+        710399: '其它区',
+        710401: '中区',
+        710402: '东区',
+        710403: '南区',
+        710404: '西区',
+        710405: '北区',
+        710406: '北屯区',
+        710407: '西屯区',
+        710408: '南屯区',
+        710431: '太平区',
+        710432: '大里区',
+        710433: '雾峰区',
+        710434: '乌日区',
+        710435: '丰原区',
+        710436: '后里区',
+        710437: '石冈区',
+        710438: '东势区',
+        710439: '和平区',
+        710440: '新社区',
+        710441: '潭子区',
+        710442: '大雅区',
+        710443: '神冈区',
+        710444: '大肚区',
+        710445: '沙鹿区',
+        710446: '龙井区',
+        710447: '梧栖区',
+        710448: '清水区',
+        710449: '大甲区',
+        710450: '外埔区',
+        710451: '大安区',
+        710499: '其它区',
+        710507: '金沙镇',
+        710508: '金湖镇',
+        710509: '金宁乡',
+        710510: '金城镇',
+        710511: '烈屿乡',
+        710512: '乌坵乡',
+        710614: '南投市',
+        710615: '中寮乡',
+        710616: '草屯镇',
+        710617: '国姓乡',
+        710618: '埔里镇',
+        710619: '仁爱乡',
+        710620: '名间乡',
+        710621: '集集镇',
+        710622: '水里乡',
+        710623: '鱼池乡',
+        710624: '信义乡',
+        710625: '竹山镇',
+        710626: '鹿谷乡',
+        710701: '仁爱区',
+        710702: '信义区',
+        710703: '中正区',
+        710704: '中山区',
+        710705: '安乐区',
+        710706: '暖暖区',
+        710707: '七堵区',
+        710799: '其它区',
+        710801: '东区',
+        710802: '北区',
+        710803: '香山区',
+        710899: '其它区',
+        710901: '东区',
+        710902: '西区',
+        710999: '其它区',
+        711130: '万里区',
+        711132: '板桥区',
+        711133: '汐止区',
+        711134: '深坑区',
+        711136: '瑞芳区',
+        711137: '平溪区',
+        711138: '双溪区',
+        711140: '新店区',
+        711141: '坪林区',
+        711142: '乌来区',
+        711143: '永和区',
+        711144: '中和区',
+        711145: '土城区',
+        711146: '三峡区',
+        711147: '树林区',
+        711149: '三重区',
+        711150: '新庄区',
+        711151: '泰山区',
+        711152: '林口区',
+        711154: '五股区',
+        711155: '八里区',
+        711156: '淡水区',
+        711157: '三芝区',
+        711287: '宜兰市',
+        711288: '头城镇',
+        711289: '礁溪乡',
+        711290: '壮围乡',
+        711291: '员山乡',
+        711292: '罗东镇',
+        711293: '三星乡',
+        711294: '大同乡',
+        711295: '五结乡',
+        711296: '冬山乡',
+        711297: '苏澳镇',
+        711298: '南澳乡',
+        711299: '钓鱼台',
+        711387: '竹北市',
+        711388: '湖口乡',
+        711389: '新丰乡',
+        711390: '新埔镇',
+        711391: '关西镇',
+        711392: '芎林乡',
+        711393: '宝山乡',
+        711394: '竹东镇',
+        711395: '五峰乡',
+        711396: '横山乡',
+        711397: '尖石乡',
+        711398: '北埔乡',
+        711399: '峨眉乡',
+        711487: '中坜市',
+        711488: '平镇市',
+        711489: '龙潭乡',
+        711490: '杨梅市',
+        711491: '新屋乡',
+        711492: '观音乡',
+        711493: '桃园市',
+        711494: '龟山乡',
+        711495: '八德市',
+        711496: '大溪镇',
+        711497: '复兴乡',
+        711498: '大园乡',
+        711499: '芦竹乡',
+        711582: '竹南镇',
+        711583: '头份镇',
+        711584: '三湾乡',
+        711585: '南庄乡',
+        711586: '狮潭乡',
+        711587: '后龙镇',
+        711588: '通霄镇',
+        711589: '苑里镇',
+        711590: '苗栗市',
+        711591: '造桥乡',
+        711592: '头屋乡',
+        711593: '公馆乡',
+        711594: '大湖乡',
+        711595: '泰安乡',
+        711596: '铜锣乡',
+        711597: '三义乡',
+        711598: '西湖乡',
+        711599: '卓兰镇',
+        711774: '彰化市',
+        711775: '芬园乡',
+        711776: '花坛乡',
+        711777: '秀水乡',
+        711778: '鹿港镇',
+        711779: '福兴乡',
+        711780: '线西乡',
+        711781: '和美镇',
+        711782: '伸港乡',
+        711783: '员林镇',
+        711784: '社头乡',
+        711785: '永靖乡',
+        711786: '埔心乡',
+        711787: '溪湖镇',
+        711788: '大村乡',
+        711789: '埔盐乡',
+        711790: '田中镇',
+        711791: '北斗镇',
+        711792: '田尾乡',
+        711793: '埤头乡',
+        711794: '溪州乡',
+        711795: '竹塘乡',
+        711796: '二林镇',
+        711797: '大城乡',
+        711798: '芳苑乡',
+        711799: '二水乡',
+        711982: '番路乡',
+        711983: '梅山乡',
+        711984: '竹崎乡',
+        711985: '阿里山乡',
+        711986: '中埔乡',
+        711987: '大埔乡',
+        711988: '水上乡',
+        711989: '鹿草乡',
+        711990: '太保市',
+        711991: '朴子市',
+        711992: '东石乡',
+        711993: '六脚乡',
+        711994: '新港乡',
+        711995: '民雄乡',
+        711996: '大林镇',
+        711997: '溪口乡',
+        711998: '义竹乡',
+        711999: '布袋镇',
+        712180: '斗南镇',
+        712181: '大埤乡',
+        712182: '虎尾镇',
+        712183: '土库镇',
+        712184: '褒忠乡',
+        712185: '东势乡',
+        712186: '台西乡',
+        712187: '仑背乡',
+        712188: '麦寮乡',
+        712189: '斗六市',
+        712190: '林内乡',
+        712191: '古坑乡',
+        712192: '莿桐乡',
+        712193: '西螺镇',
+        712194: '二仑乡',
+        712195: '北港镇',
+        712196: '水林乡',
+        712197: '口湖乡',
+        712198: '四湖乡',
+        712199: '元长乡',
+        712467: '屏东市',
+        712468: '三地门乡',
+        712469: '雾台乡',
+        712470: '玛家乡',
+        712471: '九如乡',
+        712472: '里港乡',
+        712473: '高树乡',
+        712474: '盐埔乡',
+        712475: '长治乡',
+        712476: '麟洛乡',
+        712477: '竹田乡',
+        712478: '内埔乡',
+        712479: '万丹乡',
+        712480: '潮州镇',
+        712481: '泰武乡',
+        712482: '来义乡',
+        712483: '万峦乡',
+        712484: '莰顶乡',
+        712485: '新埤乡',
+        712486: '南州乡',
+        712487: '林边乡',
+        712488: '东港镇',
+        712489: '琉球乡',
+        712490: '佳冬乡',
+        712491: '新园乡',
+        712492: '枋寮乡',
+        712493: '枋山乡',
+        712494: '春日乡',
+        712495: '狮子乡',
+        712496: '车城乡',
+        712497: '牡丹乡',
+        712498: '恒春镇',
+        712499: '满州乡',
+        712584: '台东市',
+        712585: '绿岛乡',
+        712586: '兰屿乡',
+        712587: '延平乡',
+        712588: '卑南乡',
+        712589: '鹿野乡',
+        712590: '关山镇',
+        712591: '海端乡',
+        712592: '池上乡',
+        712593: '东河乡',
+        712594: '成功镇',
+        712595: '长滨乡',
+        712596: '金峰乡',
+        712597: '大武乡',
+        712598: '达仁乡',
+        712599: '太麻里乡',
+        712686: '花莲市',
+        712687: '新城乡',
+        712688: '太鲁阁',
+        712689: '秀林乡',
+        712690: '吉安乡',
+        712691: '寿丰乡',
+        712692: '凤林镇',
+        712693: '光复乡',
+        712694: '丰滨乡',
+        712695: '瑞穗乡',
+        712696: '万荣乡',
+        712697: '玉里镇',
+        712698: '卓溪乡',
+        712699: '富里乡',
+        712794: '马公市',
+        712795: '西屿乡',
+        712796: '望安乡',
+        712797: '七美乡',
+        712798: '白沙乡',
+        712799: '湖西乡',
+        712896: '南竿乡',
+        712897: '北竿乡',
+        712898: '东引乡',
+        712899: '莒光乡',
+        810101: '中西区',
+        810102: '湾仔',
+        810103: '东区',
+        810104: '南区',
+        810201: '九龙城区',
+        810202: '油尖旺区',
+        810203: '深水埗区',
+        810204: '黄大仙区',
+        810205: '观塘区',
+        810301: '北区',
+        810302: '大埔区',
+        810303: '沙田区',
+        810304: '西贡区',
+        810305: '元朗区',
+        810306: '屯门区',
+        810307: '荃湾区',
+        810308: '葵青区',
+        810309: '离岛区',
+        820101: '澳门半岛',
+        820201: '离岛'
+      }
+    };
+  
+  
+    Class.prototype.config = {
+      elem: '',
+      data: {
+        province: '',
+        city: '',
+        county: '',
+        provinceCode: 0,
+        cityCode: 0,
+        countyCode: 0,
+      },
+      change: function(result){}
+    };
+  
+    Class.prototype.index = 0;
+  
+    Class.prototype.render = function () {
+      let that = this, options = that.config;
+      options.elem = $(options.elem);
+  
+      that.events();
+    };
+      
+    Class.prototype.reload = function (op) {
+      let options = this.config;
+      options.data = $.extend(options.data, op.data || {});
+      this.events(true);
+    };
+  
+    Class.prototype.events = function (reload = false) {
+      let that = this, options = that.config;
+      let provinceFilter = 'province-' + layarea._id;
+      let cityFilter = 'city-' + layarea._id;
+      let countyFilter = 'county-' + layarea._id;
+  
+      let provinceEl = options.elem.find('.province-selector');
+      let cityEl = options.elem.find('.city-selector');
+      let countyEl = options.elem.find('.county-selector');
+
+      if (reload){
+        options.data.provinceCode = getCode('province', options.data.province);
+        let code = getCode('city', options.data.city, options.data.provinceCode.slice(0, 2));
+        options.data.cityCode = code;
+        options.data.countyCode = getCode('county', options.data.county, options.data.cityCode.slice(0, 4));
+        renderProvince();
+        return;
+      }
+      //filter
+      if(provinceEl.attr('lay-filter')){
+        provinceFilter = provinceEl.attr('lay-filter');
+      }
+      if(cityEl.attr('lay-filter')){
+        cityFilter = cityEl.attr('lay-filter');
+      }
+      if(countyEl.attr('lay-filter')){
+        countyFilter = countyEl.attr('lay-filter');
+      }
+      provinceEl.attr('lay-filter', provinceFilter);
+      cityEl.attr('lay-filter', cityFilter);
+      countyEl.attr('lay-filter', countyFilter);
+  
+      //获取默认值
+      if(provinceEl.data('value')){
+        options.data.province = provinceEl.data('value');
+        options.data.provinceCode = getCode('province', options.data.province);
+      } else if (!options.data.province) {
+        options.data.province = '';
+      }
+      if(cityEl.data('value')){
+        options.data.city = cityEl.data('value');
+        let code = getCode('city', options.data.city, options.data.provinceCode.slice(0, 2));
+        options.data.cityCode = code;
+      } else if (!options.data.city) {
+        options.data.city = '';
+      }
+      if(countyEl.data('value')){
+        options.data.county = countyEl.data('value');
+        options.data.countyCode = getCode('county', options.data.county, options.data.cityCode.slice(0, 4));
+      } else if (!options.data.county) {
+        options.data.county = '';
+      }
+      provinceEl.attr('lay-filter', provinceFilter);
+      cityEl.attr('lay-filter', cityFilter);
+      countyEl.attr('lay-filter', countyFilter);
+
+      //监听结果
+      form.on('select('+provinceFilter+')', function(data){
+        options.data.province = data.value;
+        options.data.provinceCode = getCode('province', data.value);
+        renderCity(options.data.provinceCode);
+  
+        options.change(options.data);
+      });
+      form.on('select('+cityFilter+')', function(data){
+        options.data.city = data.value;
+        if(options.data.provinceCode){
+            options.data.cityCode = getCode('city', data.value, options.data.provinceCode.slice(0, 2));
+            renderCounty(options.data.cityCode);
+        }
+  
+        options.change(options.data);
+      });
+      form.on('select('+countyFilter+')', function(data){
+        options.data.county = data.value;
+        if(options.data.cityCode){
+            options.data.countyCode = getCode('county', data.value, options.data.cityCode.slice(0, 4));
+        }
+        options.change(options.data);
+      });
+  
+      renderProvince();
+  
+      //查找province
+      function renderProvince(){
+        let tpl = '<option value="">--选择省--</option>';
+        let provinceList = getList("province");
+        let currentCode = '';
+        let currentName = '';
+        provinceList.forEach(function(_item){
+          // if (!currentCode){
+          //   currentCode = _item.code;
+          //   currentName = _item.name;
+          // }
+          if(_item.name === options.data.province){
+            currentCode = _item.code;
+            currentName = _item.name;
+          }
+          tpl += '<option value="'+_item.name+'">'+_item.name+'</option>';
+        });
+        provinceEl.html(tpl);
+        provinceEl.val(options.data.province);
+        form.render('select');
+        renderCity(currentCode);
+      }
+  
+      function renderCity(provinceCode){
+        let tpl = '<option value="">--选择市--</option>';
+        let cityList = getList('city', provinceCode.slice(0, 2));
+        let currentCode = '';
+        let currentName = '';
+        cityList.forEach(function(_item){
+          // if (!currentCode){
+          //   currentCode = _item.code;
+          //   currentName = _item.name;
+          // }
+          if(_item.name === options.data.city){
+            currentCode = _item.code;
+            currentName = _item.name;
+          }
+          tpl += '<option value="'+_item.name+'">'+_item.name+'</option>';
+        });
+        options.data.city = currentName;
+        options.data.cityCode = currentCode;
+        cityEl.html(tpl);
+        cityEl.val(options.data.city);
+        form.render('select');
+        renderCounty(currentCode);
+      }
+  
+      function renderCounty(cityCode){
+        let tpl = '<option value="">--选择区--</option>';
+        let countyList = getList('county', cityCode.slice(0, 4));
+        let currentCode = '';
+        let currentName = '';
+        countyList.forEach(function(_item){
+          // if (!currentCode){
+          //   currentCode = _item.code;
+          //   currentName = _item.name;
+          // }
+          if(_item.name === options.data.county){
+            currentCode = _item.code;
+            currentName = _item.name;
+          }
+          tpl += '<option value="'+_item.name+'">'+_item.name+'</option>';
+        });
+        options.data.county = currentName;
+        options.data.currentCode = currentCode;
+        countyEl.html(tpl);
+        countyEl.val(options.data.county);
+  
+        form.render('select');
+      }
+  
+      function getList(type, code) {
+        let result = [];
+  
+        if (type !== 'province' && !code) {
+          return result;
+        }
+  
+        let list = areaList[type + "_list"] || {};
+        result = Object.keys(list).map(function (code) {
+          return {
+            code: code,
+            name: list[code]
+          };
+        });
+  
+        if (code) {
+          // oversea code
+          if (code[0] === '9' && type === 'city') {
+            code = '9';
+          }
+  
+          result = result.filter(function (item) {
+            return item.code.indexOf(code) === 0;
+          });
+        }
+  
+        return result;
+      }
+  
+      function getCode(type, name, parentCode = 0){
+        let code = '';
+        let list = areaList[type + "_list"] || {};
+        let result = {};
+        Object.keys(list).map(function (_code) {
+          if(parentCode){
+            if(_code.indexOf(parentCode) === 0){
+              result[_code] = list[_code];
+            }
+          }else{
+            result[_code] = list[_code];
+          }
+        });
+        layui.each(result, function(_code, _name){
+          if(_name === name){
+            code = _code;
+          }
+        });
+
+        return code;
+      }
+    };
+  
+    layarea.render = function (options) {
+      let inst = new Class(options);
+      layarea._id++;
+      return thisArea.call(inst);
+    };
+  
+    //暴露接口
+    exports('layarea', layarea);
+  });
diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/add.html b/src/main/resources/templates/febs/views/modules/votesActivity/add.html
index e9c71bb..ab5e05c 100644
--- a/src/main/resources/templates/febs/views/modules/votesActivity/add.html
+++ b/src/main/resources/templates/febs/views/modules/votesActivity/add.html
@@ -1,4 +1,4 @@
-<div class="layui-fluid layui-anim febs-anim" id="febs-activity-add" lay-title="新增">
+<div class="layui-fluid layui-anim febs-anim" id="febs-activity-add" lay-title="活动新增">
     <div class="layui-row febs-container">
         <div class="layui-col-md12">
             <div class="layui-fluid" id="activity-add">
@@ -12,7 +12,7 @@
                                 <blockquote class="layui-elem-quote blue-border">基础信息</blockquote>
                                 <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
-                                        <label class="layui-form-label febs-form-item-require">所属分类:</label>
+                                        <label class="layui-form-label febs-form-item-require">分类:</label>
                                         <div class="layui-input-block">
                                             <div id="activity-group"></div>
                                         </div>
@@ -20,40 +20,78 @@
                                 </div>
                                 <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
+                                        <label class="layui-form-label febs-form-item-require">排序:</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="orderCnt" lay-verify="required"
+                                                   placeholder="" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+                                    <div class="layui-col-lg6">
                                         <label class="layui-form-label febs-form-item-require">名称:</label>
                                         <div class="layui-input-block">
                                             <input type="text" name="name" lay-verify="required"
                                                    placeholder="" autocomplete="off" class="layui-input">
                                         </div>
                                     </div>
+                                </div>
+                                <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
-                                        <label class="layui-form-label febs-form-item-require">活动类型:</label>
+                                        <label class="layui-form-label febs-form-item-require">类型:</label>
                                         <div class="layui-input-block">
-                                            <select name="activityType" class="activity-type">
-                                                <option value="1">文字</option>
-                                                <option value="2">图片</option>
-                                                <option value="3">视频</option>
-                                                <option value="4">二维码</option>
+                                            <select name="type" class="activity-type">
+                                                <option value="1">普通活动</option>
+                                                <option value="2">众筹活动</option>
+                                                <option value="3">投票活动</option>
+                                            </select>
+                                        </div>
+                                    </div>
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label febs-form-item-require">推荐首页:</label>
+                                        <div class="layui-input-block">
+                                            <select name="hotState" class="activity-type">
+                                                <option value="0">不推荐</option>
+                                                <option value="1">推荐</option>
                                             </select>
                                         </div>
                                     </div>
                                 </div>
                                 <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
-                                        <label class="layui-form-label ">票数总数:</label>
+                                        <label class="layui-form-label febs-form-item-require">联系方式:</label>
                                         <div class="layui-input-block">
-                                            <input type="text" name="totalVote"
-                                                   placeholder="" autocomplete="off" class="layui-input" disabled>
+                                            <input type="text" name="phone" lay-verify="required"
+                                                   placeholder="" autocomplete="off" class="layui-input">
                                         </div>
                                     </div>
                                     <div class="layui-col-lg6">
-                                        <label class="layui-form-label ">参与人数:</label>
+                                        <label class="layui-form-label febs-form-item-require">地址:</label>
                                         <div class="layui-input-block">
-                                            <input type="text" name="totalParticipants"
-                                                   placeholder="" autocomplete="off" class="layui-input" disabled>
+                                            <input type="text" name="address" lay-verify="required"
+                                                   placeholder="" autocomplete="off" class="layui-input">
                                         </div>
                                     </div>
                                 </div>
+                                <div class="layui-row layui-col-space10 layui-form-item">
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label febs-form-item-require">投票次数:</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="voteCnt" lay-verify="required"
+                                                   placeholder="" autocomplete="off" class="layui-input">
+                                            <div class="layui-form-mid layui-word-aux">投票活动,单个ID每天投票次数</div>
+                                        </div>
+                                    </div>
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label febs-form-item-require">自主报名:</label>
+                                        <div class="layui-input-block">
+                                            <select name="hotState" class="activity-type">
+                                                <option value="0">不允许</option>
+                                                <option value="1">允许</option>
+                                            </select>
+                                            <div class="layui-form-mid layui-word-aux">投票活动,是否允许用户小程序自主报名</div>
+                                        </div>
+                                    </div>
+                                </div>
+
                                 <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
                                         <label class="layui-form-label febs-form-item-require">开始时间:</label>
@@ -71,40 +109,75 @@
                                     </div>
                                 </div>
 
+
                                 <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
-                                        <label class="layui-form-label febs-form-item-require">是否多选:</label>
+                                        <label class="layui-form-label febs-form-item-require">门票售卖:</label>
                                         <div class="layui-input-block">
-                                            <select name="isMultiple" class="activity-type">
-                                                <option value="1">是</option>
-                                                <option value="2">否</option>
+                                            <select name="payState" class="activity-type">
+                                                <option value="0">关闭</option>
+                                                <option value="1">开启</option>
                                             </select>
+                                        </div>
+                                    </div>
+                                </div>
+
+                                <div class="layui-row layui-col-space10 layui-form-item">
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label febs-form-item-require">门票总数:</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="joinCnt" lay-verify="required"
+                                                   placeholder="" autocomplete="off" class="layui-input">
+                                            <div class="layui-form-mid layui-word-aux">门票总数</div>
                                         </div>
                                     </div>
                                     <div class="layui-col-lg6">
-                                        <label class="layui-form-label febs-form-item-require">投票方式:</label>
+                                        <label class="layui-form-label febs-form-item-require">门票价格:</label>
                                         <div class="layui-input-block">
-                                            <select name="votesType" class="activity-type" >
-                                                <option value="1">一天一次</option>
-                                            </select>
+                                            <input type="text" name="payAmount" lay-verify="required"
+                                                   placeholder="" autocomplete="off" class="layui-input">
+                                            <div class="layui-form-mid layui-word-aux">门票价格(关闭众筹,或者免费参与,请填写0)</div>
                                         </div>
                                     </div>
                                 </div>
-                                <div class="layui-form-item">
-                                    <label class="layui-form-label febs-form-item-require">背景图片:</label>
-                                    <div class="layui-input-block">
-                                        <div class="layui-upload">
-                                            <button type="button" class="layui-btn layui-btn-normal layui-btn" id="testMax">上传</button>
-                                            <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
-                                                <div class="layui-upload-list" id="demoMax"></div>
-                                            </blockquote>
+
+                                <div class="layui-row layui-col-space10 layui-form-item">
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label febs-form-item-require">封面:</label>
+                                        <div class="layui-input-block">
+                                            <div class="layui-upload">
+                                                <button type="button" class="layui-btn layui-btn-normal layui-btn" id="test1Max">上传</button>
+                                                <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+                                                    <div class="layui-upload-list" id="demo1Max"></div>
+                                                </blockquote>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label febs-form-item-require">背景:</label>
+                                        <div class="layui-input-block">
+                                            <div class="layui-upload">
+                                                <button type="button" class="layui-btn layui-btn-normal layui-btn" id="testMax">上传</button>
+                                                <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+                                                    <div class="layui-upload-list" id="demoMax"></div>
+                                                </blockquote>
+                                            </div>
                                         </div>
                                     </div>
                                 </div>
-                                <div class="layui-form-item febs-hide">
-                                    <label class="layui-form-label">图片链接:</label>
-                                    <div class="layui-input-block">
-                                        <input type="text" id="coverImage" lay-verify="required" name="coverImage" autocomplete="off" class="layui-input" readonly>
+
+                                <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label">封面链接:</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" id="indexImg" lay-verify="required" name="indexImg" autocomplete="off" class="layui-input" readonly>
+                                        </div>
+                                    </div>
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label">背景链接:</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" id="backImg" lay-verify="required" name="backImg" autocomplete="off" class="layui-input" readonly>
+                                        </div>
                                     </div>
                                 </div>
 
@@ -172,7 +245,7 @@
                 var form = new FormData();
                 form.append("file", files[0]);
                 $.ajax({
-                    url:'/admin/goods/uploadFileBaseEsc',
+                    url:'/admin/goods/uploadFileBase64',
                     type: "post",
                     processData: false,
                     contentType: false,
@@ -223,12 +296,29 @@
             data: []
         })
 
-        febs.get(ctx + 'admin/votesActivity/allGroup', null, function(res) {
+        febs.get(ctx + 'admin/happyActivity/allGroup', null, function(res) {
             activityGroup.update({
                 data : res.data,
                 autoRow: true,
             });
         })
+
+        //图片上传
+        upload.render({
+            elem: '#test1Max'
+            ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+            ,accept: 'file' //普通文件
+            ,size: 10240 //限制文件大小,单位 KB
+            ,before: function(obj){
+                //预读本地文件示例,不支持ie8
+                obj.preview(function(index, file, result){
+                    $('#demo1Max').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+                });
+            }
+            ,done: function(res){
+                $("#indexImg").val(res.data.src);
+            }
+        });
 
         //图片上传
         upload.render({
@@ -243,15 +333,15 @@
                 });
             }
             ,done: function(res){
-                $("#coverImage").val(res.data.src);
+                $("#backImg").val(res.data.src);
             }
         });
 
         form.on('submit(activity-add-form-submit)', function (data) {
-            data.field.groupId = activityGroup.getValue('valueStr');
-            data.field.introduce = editor.txt.html();
+            data.field.categoryId = activityGroup.getValue('valueStr');
+            data.field.textRemark = editor.txt.html();
             $.ajax({
-                'url':ctx + 'admin/votesActivity/add',
+                'url':ctx + 'admin/happyActivity/add',
                 'type':'post',
                 'dataType':'json',
                 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
@@ -273,21 +363,5 @@
             return false;
         });
 
-        // form.on('select(activity-type-select)', function(data){
-        //     $('.discount-size').each(function() {
-        //         if (data.value == 1) {
-        //             $(this).show();
-        //         } else {
-        //             $(this).hide();
-        //         }
-        //     })
-        //     $('.coupon-size').each(function() {
-        //         if (data.value == 2) {
-        //             $(this).show();
-        //         } else {
-        //             $(this).hide();
-        //         }
-        //     })
-        // });
     });
 </script>
diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/discountUpdate.html b/src/main/resources/templates/febs/views/modules/votesActivity/discountUpdate.html
index 0316b61..f3617d2 100644
--- a/src/main/resources/templates/febs/views/modules/votesActivity/discountUpdate.html
+++ b/src/main/resources/templates/febs/views/modules/votesActivity/discountUpdate.html
@@ -9,6 +9,7 @@
                         </ul>
                         <div class="layui-tab-content">
                             <div class="layui-tab-item layui-show">
+                                <blockquote class="layui-elem-quote blue-border">基础信息</blockquote>
                                 <!-- 隐藏的 ID 项 -->
                                 <div class="layui-form-item febs-hide">
                                     <label class="layui-form-label">ID:</label>
@@ -18,7 +19,7 @@
                                 </div>
                                 <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
-                                        <label class="layui-form-label febs-form-item-require">所属分类:</label>
+                                        <label class="layui-form-label febs-form-item-require">分类:</label>
                                         <div class="layui-input-block">
                                             <div id="activity-group"></div>
                                         </div>
@@ -26,40 +27,78 @@
                                 </div>
                                 <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
+                                        <label class="layui-form-label febs-form-item-require">排序:</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="orderCnt" lay-verify="required"
+                                                   placeholder="" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+                                    <div class="layui-col-lg6">
                                         <label class="layui-form-label febs-form-item-require">名称:</label>
                                         <div class="layui-input-block">
                                             <input type="text" name="name" lay-verify="required"
                                                    placeholder="" autocomplete="off" class="layui-input">
                                         </div>
                                     </div>
+                                </div>
+                                <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
-                                        <label class="layui-form-label febs-form-item-require">活动类型:</label>
+                                        <label class="layui-form-label febs-form-item-require">类型:</label>
                                         <div class="layui-input-block">
-                                            <select name="activityType" class="activity-type">
-                                                <option value="1">文字</option>
-                                                <option value="2">图片</option>
-                                                <option value="3">视频</option>
-                                                <option value="4">二维码</option>
+                                            <select name="type">
+                                                <option value="1">普通活动</option>
+                                                <option value="2">众筹活动</option>
+                                                <option value="3">投票活动</option>
+                                            </select>
+                                        </div>
+                                    </div>
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label febs-form-item-require">推荐首页:</label>
+                                        <div class="layui-input-block">
+                                            <select name="hotState">
+                                                <option value="0">不推荐</option>
+                                                <option value="1">推荐</option>
                                             </select>
                                         </div>
                                     </div>
                                 </div>
                                 <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
-                                        <label class="layui-form-label">票数总数:</label>
+                                        <label class="layui-form-label febs-form-item-require">联系方式:</label>
                                         <div class="layui-input-block">
-                                            <input type="text" name="totalVotes" lay-verify="required"
-                                                   placeholder="" autocomplete="off" class="layui-input" disabled>
+                                            <input type="text" name="phone" lay-verify="required"
+                                                   placeholder="" autocomplete="off" class="layui-input">
                                         </div>
                                     </div>
                                     <div class="layui-col-lg6">
-                                        <label class="layui-form-label">参与人数:</label>
+                                        <label class="layui-form-label febs-form-item-require">地址:</label>
                                         <div class="layui-input-block">
-                                            <input type="text" name="totalParticipants" lay-verify="required"
-                                                   placeholder="" autocomplete="off" class="layui-input" disabled>
+                                            <input type="text" name="address" lay-verify="required"
+                                                   placeholder="" autocomplete="off" class="layui-input">
                                         </div>
                                     </div>
                                 </div>
+                                <div class="layui-row layui-col-space10 layui-form-item">
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label febs-form-item-require">投票次数:</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="voteCnt" lay-verify="required"
+                                                   placeholder="" autocomplete="off" class="layui-input">
+                                            <div class="layui-form-mid layui-word-aux">投票活动,单个ID每天投票次数</div>
+                                        </div>
+                                    </div>
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label febs-form-item-require">自主报名:</label>
+                                        <div class="layui-input-block">
+                                            <select name="addState">
+                                                <option value="0">不允许</option>
+                                                <option value="1">允许</option>
+                                            </select>
+                                            <div class="layui-form-mid layui-word-aux">投票活动,是否允许用户小程序自主报名</div>
+                                        </div>
+                                    </div>
+                                </div>
+
                                 <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
                                         <label class="layui-form-label febs-form-item-require">开始时间:</label>
@@ -77,40 +116,75 @@
                                     </div>
                                 </div>
 
+
                                 <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
-                                        <label class="layui-form-label febs-form-item-require">是否多选:</label>
+                                        <label class="layui-form-label febs-form-item-require">门票售卖:</label>
                                         <div class="layui-input-block">
-                                            <select name="isMultiple" class="activity-type">
-                                                <option value="1">是</option>
-                                                <option value="2">否</option>
+                                            <select name="payState">
+                                                <option value="0">关闭</option>
+                                                <option value="1">开启</option>
                                             </select>
+                                        </div>
+                                    </div>
+                                </div>
+
+                                <div class="layui-row layui-col-space10 layui-form-item">
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label febs-form-item-require">门票总数:</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="joinCnt" lay-verify="required"
+                                                   placeholder="" autocomplete="off" class="layui-input">
+                                            <div class="layui-form-mid layui-word-aux">门票总数</div>
                                         </div>
                                     </div>
                                     <div class="layui-col-lg6">
-                                        <label class="layui-form-label febs-form-item-require">投票方式:</label>
+                                        <label class="layui-form-label febs-form-item-require">门票价格:</label>
                                         <div class="layui-input-block">
-                                            <select name="votesType" class="activity-type" >
-                                                <option value="1">一天一次</option>
-                                            </select>
+                                            <input type="text" name="payAmount" lay-verify="required"
+                                                   placeholder="" autocomplete="off" class="layui-input">
+                                            <div class="layui-form-mid layui-word-aux">门票价格(关闭众筹,或者免费参与,请填写0)</div>
                                         </div>
                                     </div>
                                 </div>
-                                <div class="layui-form-item">
-                                    <label class="layui-form-label febs-form-item-require">背景图片:</label>
-                                    <div class="layui-input-block">
-                                        <div class="layui-upload">
-                                            <button type="button" class="layui-btn layui-btn-normal layui-btn" id="testMax">上传</button>
-                                            <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
-                                                <div class="layui-upload-list" id="demoMax"></div>
-                                            </blockquote>
+
+                                <div class="layui-row layui-col-space10 layui-form-item">
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label febs-form-item-require">封面:</label>
+                                        <div class="layui-input-block">
+                                            <div class="layui-upload">
+                                                <button type="button" class="layui-btn layui-btn-normal layui-btn" id="test1Max">上传</button>
+                                                <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+                                                    <div class="layui-upload-list" id="demo1Max"></div>
+                                                </blockquote>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label febs-form-item-require">背景:</label>
+                                        <div class="layui-input-block">
+                                            <div class="layui-upload">
+                                                <button type="button" class="layui-btn layui-btn-normal layui-btn" id="testMax">上传</button>
+                                                <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+                                                    <div class="layui-upload-list" id="demoMax"></div>
+                                                </blockquote>
+                                            </div>
                                         </div>
                                     </div>
                                 </div>
-                                <div class="layui-form-item febs-hide">
-                                    <label class="layui-form-label">图片链接:</label>
-                                    <div class="layui-input-block">
-                                        <input type="text" id="coverImage" lay-verify="required" name="coverImage" autocomplete="off" class="layui-input" readonly>
+
+                                <div class="layui-row layui-col-space10 layui-form-item febs-hide">
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label">封面链接:</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" id="indexImg" lay-verify="required" name="indexImg" autocomplete="off" class="layui-input" readonly>
+                                        </div>
+                                    </div>
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label">背景链接:</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" id="backImg" lay-verify="required" name="backImg" autocomplete="off" class="layui-input" readonly>
+                                        </div>
                                     </div>
                                 </div>
 
@@ -123,6 +197,7 @@
                                         </div>
                                     </div>
                                 </div>
+
                             </div>
                         </div>
                     </div>
@@ -177,7 +252,7 @@
                 var form = new FormData();
                 form.append("file", files[0]);
                 $.ajax({
-                    url:'/admin/goods/uploadFileBaseEsc',
+                    url:'/admin/goods/uploadFileBase64',
                     type: "post",
                     processData: false,
                     contentType: false,
@@ -228,7 +303,7 @@
             data: []
         })
 
-        febs.get(ctx + 'admin/votesActivity/allGroup', null, function(res) {
+        febs.get(ctx + 'admin/happyActivity/allGroup', null, function(res) {
             activityGroup.update({
                 data : res.data,
                 autoRow: true,
@@ -239,9 +314,27 @@
 
         //图片上传
         upload.render({
+            elem: '#test1Max'
+            ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
+            ,accept: 'file' //普通文件
+            ,size: 10240 //限制文件大小,单位 KB
+            ,before: function(obj){
+                //预读本地文件示例,不支持ie8
+                obj.preview(function(index, file, result){
+                    $('#demo1Max').html('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img single-image" style="width: 130px">')
+                });
+            }
+            ,done: function(res){
+                $("#indexImg").val(res.data.src);
+            }
+        });
+
+        //图片上传
+        upload.render({
             elem: '#testMax'
             ,url: ctx + 'admin/goods/uploadFileBase64' //改成您自己的上传接口
-            ,multiple: true
+            ,accept: 'file' //普通文件
+            ,size: 10240 //限制文件大小,单位 KB
             ,before: function(obj){
                 //预读本地文件示例,不支持ie8
                 obj.preview(function(index, file, result){
@@ -249,7 +342,7 @@
                 });
             }
             ,done: function(res){
-                $("#coverImage").val(res.data.src);
+                $("#backImg").val(res.data.src);
             }
         });
 
@@ -263,26 +356,29 @@
             form.val("activity-discount-update-form", {
                 "id": activity.id || '',
                 "name": activity.name || '',
-                "coverImage": activity.coverImage || '',
-                "activityType": activity.activityType || '1', // 默认选中文字
-                "votesType": activity.votesType || '1', // 默认一天一次
-                "isMultiple": activity.isMultiple || '2', // 默认否
-                "introduce": activity.introduce || '',
+                "type": activity.type || '',
+                "joinCnt": activity.joinCnt || '',
                 "startTime": activity.startTime || '',
                 "endTime": activity.endTime || '',
-                "totalVotes": activity.totalVotes || '',
-                "totalParticipants": activity.totalParticipants || '',
+                "phone": activity.phone || '',
+                "address": activity.address || '',
+                "payState": activity.payState || '',
+                "payAmount": activity.payAmount || '',
+                "orderCnt": activity.orderCnt || '',
+                "hotState": activity.hotState || '',
+                "voteCnt": activity.voteCnt || '',
+                "addState": activity.addState || ''
             });
-            $('#demoMax').append('<img src="' + activity.coverImage + '" alt="" class="layui-upload-img single-image" style="width: 130px">')
-            $("#coverImage").val(activity.coverImage);
-
+            $('#demoMax').append('<img src="' + activity.backImg + '" alt="" class="layui-upload-img single-image" style="width: 130px">')
+            $("#backImg").val(activity.backImg);
+            $('#demo1Max').append('<img src="' + activity.indexImg + '" alt="" class="layui-upload-img single-image" style="width: 130px">')
+            $("#indexImg").val(activity.indexImg);
 
             var arr = [];
-            arr.push(activity.groupId)
+            arr.push(activity.categoryId)
             activityGroup.setValue(arr);
 
-            editor.txt.html(activity.introduce);
-
+            editor.txt.html(activity.textRemark);
         }
 
 
@@ -291,7 +387,7 @@
             data.field.groupId = activityGroup.getValue('valueStr');
             data.field.introduce = editor.txt.html();
             $.ajax({
-                'url':ctx + 'admin/votesActivity/activityUpdate',
+                'url':ctx + 'admin/happyActivity/activityUpdate',
                 'type':'post',
                 'dataType':'json',
                 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/groupAdd.html b/src/main/resources/templates/febs/views/modules/votesActivity/groupAdd.html
index 1e884a6..22e9326 100644
--- a/src/main/resources/templates/febs/views/modules/votesActivity/groupAdd.html
+++ b/src/main/resources/templates/febs/views/modules/votesActivity/groupAdd.html
@@ -13,6 +13,13 @@
                                         <div class="layui-row layui-col-space10 layui-form-item">
 
                                             <div class="layui-col-lg6">
+                                                <label class="layui-form-label febs-form-item-require">排序:</label>
+                                                <div class="layui-input-block">
+                                                    <input type="text" name="orderCnt" lay-verify="required" placeholder="" autocomplete="off" class="layui-input">
+                                                </div>
+                                            </div>
+
+                                            <div class="layui-col-lg6">
                                                 <label class="layui-form-label febs-form-item-require">名称:</label>
                                                 <div class="layui-input-block">
                                                     <input type="text" name="name" lay-verify="required" placeholder="" autocomplete="off" class="layui-input">
@@ -62,7 +69,7 @@
 
         form.on('submit(group-add-form-submit)', function (data) {
             $.ajax({
-                'url':ctx + 'admin/votesActivity/addGroup',
+                'url':ctx + 'admin/happyActivity/addGroup',
                 'type':'post',
                 'dataType':'json',
                 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/groupInfo.html b/src/main/resources/templates/febs/views/modules/votesActivity/groupInfo.html
index a96a7f3..1905116 100644
--- a/src/main/resources/templates/febs/views/modules/votesActivity/groupInfo.html
+++ b/src/main/resources/templates/febs/views/modules/votesActivity/groupInfo.html
@@ -15,6 +15,13 @@
                                 <div class="layui-row layui-col-space10 layui-form-item">
 
                                     <div class="layui-col-lg6">
+                                        <label class="layui-form-label febs-form-item-require">排序:</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="orderCnt" lay-verify="required" placeholder="" autocomplete="off" class="layui-input">
+                                        </div>
+                                    </div>
+
+                                    <div class="layui-col-lg6">
                                         <label class="layui-form-label febs-form-item-require">名称:</label>
                                         <div class="layui-input-block">
                                             <input type="text" name="name" lay-verify="required" placeholder="" autocomplete="off" class="layui-input">
@@ -51,37 +58,35 @@
 </style>
 <!-- 表格操作栏 end -->
 <script data-th-inline="javascript">
-    layui.use(['febs', 'form', 'formSelects', 'validate', 'laydate', 'layedit', 'upload', 'table', 'xmSelect', 'layarea'], function () {
+    layui.use(['febs', 'form', 'validate','formSelects', 'table'], function () {
         var $ = layui.jquery,
             febs = layui.febs,
             layer = layui.layer,
             table = layui.table,
-            formSelects = layui.formSelects,
             form = layui.form,
+            formSelects = layui.formSelects,
             $view = $('#group-info'),
-            groupInfo = [[${groupInfo}]],
-            layedit = layui.layedit,
-            upload = layui.upload,
-            layarea = layui.layarea,
+            voteActivityGroup = [[${voteActivityGroup}]],
             validate = layui.validate;
 
         form.render();
-        initGroupInfo();
+        initVoteActivityGroup();
 
         formSelects.render();
 
-        function initGroupInfo() {
-            console.log("groupInfo:", groupInfo); // 调试信息
+        function initVoteActivityGroup() {
+            console.log("voteActivityGroup:", voteActivityGroup); // 调试信息
             form.val("group-info-form", {
-                "id": groupInfo.id,
-                "name": groupInfo.name,
+                "id": voteActivityGroup.id,
+                "name": voteActivityGroup.name,
+                "orderCnt": voteActivityGroup.orderCnt,
             });
 
         }
 
         form.on('submit(group-info-form-submit)', function (data) {
             $.ajax({
-                'url':ctx + 'admin/votesActivity/groupUpdate',
+                'url':ctx + 'admin/happyActivity/groupUpdate',
                 'type':'post',
                 'dataType':'json',
                 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/groupList.html b/src/main/resources/templates/febs/views/modules/votesActivity/groupList.html
index 16ab05b..cd82262 100644
--- a/src/main/resources/templates/febs/views/modules/votesActivity/groupList.html
+++ b/src/main/resources/templates/febs/views/modules/votesActivity/groupList.html
@@ -1,4 +1,4 @@
-<div class="layui-fluid layui-anim febs-anim" id="febs-activity-group" lay-title="活动分类列表">
+<div class="layui-fluid layui-anim febs-anim" id="febs-activity-group" lay-title="活动分类管理">
     <div class="layui-row febs-container">
         <div class="layui-col-md12">
             <div class="layui-card">
@@ -20,6 +20,16 @@
                                                 <option value="">请选择</option>
                                                 <option value="0">未开启</option>
                                                 <option value="1">开启</option>
+                                            </select>
+                                        </div>
+                                    </div>
+                                    <div class="layui-inline">
+                                        <label class="layui-form-label layui-form-label-sm">推荐首页</label>
+                                        <div class="layui-input-inline">
+                                            <select name="hotState">
+                                                <option value="">请选择</option>
+                                                <option value="0">不推荐</option>
+                                                <option value="1">推荐</option>
                                             </select>
                                         </div>
                                     </div>
@@ -50,8 +60,15 @@
     <a lay-event="edit" shiro:hasPermission="votesActivityUpdate:update"><i
             class="layui-icon febs-edit-area febs-blue">&#xe7a5;</i></a>
 </script>
+<script type="text/html" id="hotStateSwitch">
+    {{# if(d.hotState === 1) { }}
+    <input type="checkbox" value={{d.id}} lay-text="推荐|不推荐" checked lay-skin="switch" lay-filter="hotStateSwitch">
+    {{# } else { }}
+    <input type="checkbox" value={{d.id}} lay-text="推荐|不推荐" lay-skin="switch" lay-filter="hotStateSwitch">
+    {{# } }}
+</script>
 <script type="text/html" id="groupStatusSwitch">
-    {{# if(d.status === 1) { }}
+    {{# if(d.state === 1) { }}
     <input type="checkbox" value={{d.id}} lay-text="开启|关闭" checked lay-skin="switch" lay-filter="groupStatusSwitch">
     {{# } else { }}
     <input type="checkbox" value={{d.id}} lay-text="开启|关闭" lay-skin="switch" lay-filter="groupStatusSwitch">
@@ -66,6 +83,15 @@
 <script type="text/html" id="groupOption">
     <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="groupInfo:view" lay-event="groupInfo">编辑</button>
     <button class="layui-btn layui-btn-danger layui-btn-sm" type="button" shiro:hasPermission="groupDelete:delete" lay-event="groupDelete">删除</button>
+</script>
+<script type="text/html" id="deleteFlag">
+    {{#
+    var deleteFlag = {
+    0: {title: '生效中', color: 'green'},
+    1: {title: '已删除', color: 'red'},
+    }[d.deleteFlag];
+    }}
+    <span class="layui-badge febs-bg-{{deleteFlag.color}}">{{ deleteFlag.title }}</span>
 </script>
 
 <style>
@@ -102,7 +128,7 @@
                 });
             }
             if (layEvent === 'groupInfo') {
-                febs.modal.open('审核编辑','modules/votesActivity/groupInfo/' + data.id, {
+                febs.modal.open('编辑','modules/votesActivity/groupInfo/' + data.id, {
                     btn: ['提交', '取消'],
                     area: ['100%', '100%'],
                     yes: function (index, layero) {
@@ -115,7 +141,7 @@
             }
         });
         function groupDelete(id) {
-            febs.get(ctx + 'admin/votesActivity/groupDelete/' + id, null, function (data) {
+            febs.get(ctx + 'admin/happyActivity/groupDelete/' + id, null, function (data) {
                 febs.alert.success(data.message);
                 $query.click();
             });
@@ -145,28 +171,39 @@
             tableIns = febs.table.init({
                 elem: $view.find('table'),
                 id: 'groupTable',
-                url: ctx + 'admin/votesActivity/groupList',
+                url: ctx + 'admin/happyActivity/groupList',
                 toolbar:"#groupToolbar",
                 defaultToolbar:[],
                 cols: [[
-                    {type: 'numbers', title: '序号', width: 80},
+                    {type: 'numbers', title: '', width: 80},
                     {title: '操作', toolbar: '#groupOption', minWidth: 200, align: 'center'},
+                    {field: 'orderCnt', title: '排序', minWidth: 100,align:'center'},
                     {field: 'name', title: '名称', minWidth: 100,align:'center'},
-                    {title: '审核状态', templet: '#groupStatusSwitch', minWidth: 100,align:'center'},
+                    {title: '推荐首页', templet: '#hotStateSwitch', minWidth: 100,align:'center'},
+                    {title: '状态', templet: '#groupStatusSwitch', minWidth: 100,align:'center'},
+                    {title: '是否删除', templet: '#deleteFlag', minWidth: 100,align:'center'},
                     {field: 'createdTime', title: '创建时间', minWidth: 150,align:'left'}
                 ]]
             });
         }
 
-        form.on('switch(groupStatusSwitch)', function (data) {
+        form.on('switch(hotStateSwitch)', function (data) {
             if (data.elem.checked) {
                 groupState(data.value,1);
             } else {
-                groupState(data.value,0);
+                groupState(data.value,1);
             }
         })
-        function groupState(id,state) {
-            febs.get(ctx + 'admin/votesActivity/groupState/' + id+'/' + state, null, function (data) {
+
+        form.on('switch(groupStatusSwitch)', function (data) {
+            if (data.elem.checked) {
+                groupState(data.value,2);
+            } else {
+                groupState(data.value,2);
+            }
+        })
+        function groupState(id,type) {
+            febs.get(ctx + 'admin/happyActivity/groupState/' + id+'/' + type, null, function (data) {
                 febs.alert.success(data.message);
                 $query.click();
             });
@@ -191,6 +228,7 @@
             return {
                 name: $searchForm.find('input[name="name"]').val().trim(),
                 status: $searchForm.find("select[name='status']").val(),
+                hotState: $searchForm.find("select[name='hotState']").val(),
             };
         }
 
diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/list.html b/src/main/resources/templates/febs/views/modules/votesActivity/list.html
index 233af1f..17a810a 100644
--- a/src/main/resources/templates/febs/views/modules/votesActivity/list.html
+++ b/src/main/resources/templates/febs/views/modules/votesActivity/list.html
@@ -16,7 +16,7 @@
                                     <div class="layui-inline">
                                         <label class="layui-form-label layui-form-label-sm">分类</label>
                                         <div class="layui-input-inline">
-                                            <select name="groupId" class="group-type">
+                                            <select name="categoryId" class="group-type">
                                                 <option value="">请选择</option>
                                             </select>
                                         </div>
@@ -24,10 +24,11 @@
                                     <div class="layui-inline">
                                         <label class="layui-form-label layui-form-label-sm">状态</label>
                                         <div class="layui-input-inline">
-                                            <select name="status">
+                                            <select name="state">
                                                 <option value="">请选择</option>
                                                 <option value="0">未开启</option>
                                                 <option value="1">已开启</option>
+                                                <option value="2">已结束</option>
                                             </select>
                                         </div>
                                     </div>
@@ -44,12 +45,6 @@
                         </div>
                     </form>
                     <table lay-filter="activityTable" lay-data="{id: 'activityTable'}"></table>
-<!--                    <style type="text/css">-->
-<!--                        ::-webkit-scrollbar {-->
-<!--                            height: 20px !important;-->
-<!--                            background-color: #f4f4f4;-->
-<!--                        }-->
-<!--                    </style>-->
                 </div>
             </div>
         </div>
@@ -64,10 +59,10 @@
             class="layui-icon febs-edit-area febs-blue">&#xe7a5;</i></a>
 </script>
 <script type="text/html" id="activityStateSwitch">
-    {{# if(d.status === 1) { }}
+    {{# if(d.state === 1) { }}
     <input type="checkbox" value={{d.id}} lay-text="开启|关闭" checked lay-skin="switch" lay-filter="activityStateSwitch">
-    {{# } else if(d.status === 2) { }}
-    <input type="checkbox" value={{d.id}} lay-text="进行中|关闭" checked lay-skin="switch" lay-filter="activityStateSwitch">
+    {{# } else if(d.state === 2) { }}
+    <span class="layui-badge febs-bg-red">已结束</span>
     {{# } else { }}
     <input type="checkbox" value={{d.id}} lay-text="开启|关闭" lay-skin="switch" lay-filter="activityStateSwitch">
     {{# } }}
@@ -80,8 +75,8 @@
 </script>
 
 <script type="text/html" id="activityOption">
-    <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="activityUpdateEvent">编辑</button>
-    <button class="layui-btn layui-btn-danger layui-btn-sm" type="button" lay-event="activityDeleteEvent">删除</button>
+    <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="votesActivityUpdate:update" lay-event="activityUpdateEvent">编辑</button>
+    <button class="layui-btn layui-btn-danger layui-btn-sm" type="button" shiro:hasPermission="votesActivityUpdate:update" lay-event="activityDeleteEvent">删除</button>
 </script>
 
 <style>
@@ -106,7 +101,7 @@
 
         form.render();
         //(下拉框)
-        $.get(ctx + 'admin/votesActivity/allGroup', function (res) {
+        $.get(ctx + 'admin/happyActivity/allGroup', function (res) {
             var data = res.data;
             for (let k in data)
             {
@@ -161,14 +156,21 @@
             }
         });
 
+        form.on('switch(activityStateSwitch)', function (data) {
+            if (data.elem.checked) {
+                changeState(data.value,1);
+            } else {
+                changeState(data.value,0);
+            }
+        })
         function changeState(id,state) {
-            febs.get(ctx + 'admin/votesActivity/changeState/' + id+'/' + state, null, function (data) {
+            febs.get(ctx + 'admin/happyActivity/changeState/' + id+'/' + state, null, function (data) {
                 febs.alert.success(data.message);
                 $query.click();
             });
         }
         function delAct(id) {
-            febs.get(ctx + 'admin/votesActivity/delActivity/' + id, null, function (data) {
+            febs.get(ctx + 'admin/happyActivity/delActivity/' + id, null, function (data) {
                 febs.alert.success(data.message);
                 $query.click();
             });
@@ -197,63 +199,33 @@
             tableIns = febs.table.init({
                 elem: $view.find('table'),
                 id: 'activityTable',
-                url: ctx + 'admin/votesActivity/list',
+                url: ctx + 'admin/happyActivity/list',
                 toolbar:"#activityToolbar",
                 defaultToolbar:[],
                 cols: [[
 
-                    {type: 'numbers', title: '序号', width: 80},
+                    {type: 'numbers', title: '', width: 80},
                     {title: '操作', toolbar: '#activityOption', minWidth: 200, align: 'center'},
                     {field: 'name', title: '名称', minWidth: 150,align:'left'},
-                    {field: 'groupby', title: '分类', minWidth: 150,align:'left'},
+                    {field: 'categoryName', title: '分类', minWidth: 150,align:'left'},
                     {
-                        field: 'coverImage',
-                        title: '图片',
+                        field: 'indexImg',
+                        title: '封面',
                         templet: function (d) {
                             return '<a lay-event="seeImgThumb">' +
-                                '<img id="seeImgThumb' + d.id + '" src="' + d.coverImage +
+                                '<img id="seeImgThumb' + d.id + '" src="' + d.indexImg +
                                 '" alt="图片" style="width: 50px; height: 50px; object-fit: cover; border-radius: 5px; cursor: pointer;">' +
                                 '</a>';
                         },
                         minWidth: 150,
                         align: 'center'
                     },
-                    {field: 'activityType', title: '类型', minWidth: 90,align:'left',templet: function(d){
-                            if (d.activityType === '1') {
-                                return '文字';
-                            } else if (d.activityType === '2') {
-                                return `图片`;
-                            } else if (d.activityType === '3') {
-                                return `视频`;
-                            } else {
-                                return '二维码';
-                            }
-                        }
-                    },
-                    {field: 'isMultiple', title: '是否多选', minWidth: 90,align:'left',templet: function(d){
-                            if (d.activityType === '1') {
-                                return '是';
-                            }else {
-                                return '否';
-                            }
-                        }
-                    },
-                    {field: 'totalVotes', title: '总投票数', minWidth: 90,align:'left'},
                     {field: 'startTime', title: '开始时间', minWidth: 200,align:'left'},
                     {field: 'endTime', title: '结束时间', minWidth: 200,align:'left'},
-                    {field: 'status', title: '状态', templet: '#activityStateSwitch', minWidth: 130,align:'center'}
+                    {field: 'state', title: '状态', templet: '#activityStateSwitch', minWidth: 130,align:'center'}
                 ]]
             });
         }
-
-
-        form.on('switch(activityStateSwitch)', function (data) {
-            if (data.elem.checked) {
-                changeState(data.value,1);
-            } else {
-                changeState(data.value,0);
-            }
-        })
 
 
         // 查询按钮
@@ -272,8 +244,8 @@
         function getQueryParams() {
             return {
                 name: $searchForm.find('input[name="name"]').val().trim(),
-                status: $searchForm.find("select[name='status']").val(),
-                groupId: $searchForm.find("select[name='groupId']").val(),
+                state: $searchForm.find("select[name='state']").val(),
+                categoryId: $searchForm.find("select[name='categoryId']").val(),
             };
         }
 
diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/optionAdd.html b/src/main/resources/templates/febs/views/modules/votesActivity/optionAdd.html
index f814f0e..57dc43c 100644
--- a/src/main/resources/templates/febs/views/modules/votesActivity/optionAdd.html
+++ b/src/main/resources/templates/febs/views/modules/votesActivity/optionAdd.html
@@ -18,38 +18,23 @@
                                             <div id="activity-option"></div>
                                         </div>
                                     </div>
-
-                                    <div class="layui-col-lg6">
-                                        <label class="layui-form-label">序号:</label>
-                                        <div class="layui-input-block">
-                                            <input type="number" name="number" placeholder="" autocomplete="off" class="layui-input" disabled>
-                                        </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-block">
-                                            <input type="text" name="registeredName" lay-verify="required" autocomplete="off" class="layui-input" >
-                                        </div>
-                                    </div>
-
-                                    <div class="layui-col-lg6">
                                         <label class="layui-form-label febs-form-item-require">选项名称:</label>
                                         <div class="layui-input-block">
-                                            <input type="text" name="beautyName" lay-verify="required" autocomplete="off" class="layui-input" >
+                                            <input type="text" name="optionName" lay-verify="required" autocomplete="off" class="layui-input" >
+                                        </div>
+                                    </div>
+                                    <div class="layui-col-lg6">
+                                        <label class="layui-form-label febs-form-item-require">姓名:</label>
+                                        <div class="layui-input-block">
+                                            <input type="text" name="realName" lay-verify="required" autocomplete="off" class="layui-input" >
+                                            <div class="layui-form-mid layui-word-aux">姓名和选项名称可一致</div>
                                         </div>
                                     </div>
                                 </div>
                                 <div class="layui-row layui-col-space10 layui-form-item">
-                                    <div class="layui-col-lg6">
-                                        <label class="layui-form-label">性别:</label>
-                                        <div class="layui-input-block">
-                                            <input type="radio" name="sex" value="1" title="男" />
-                                            <input type="radio" name="sex" value="2" title="女" />
-                                            <input type="radio" name="sex" value="2" title="保密" checked />
-                                        </div>
-                                    </div>
                                     <div class="layui-form-item" id="area-picker">
                                         <div class="layui-form-label">选择省/市</div>
                                         <div class="layui-input-inline" style="width: 200px;">
@@ -87,6 +72,16 @@
                                 </div>
                                 <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
+                                        <label class="layui-form-label">性别:</label>
+                                        <div class="layui-input-block">
+                                            <input type="radio" name="sex" value="1" title="男" />
+                                            <input type="radio" name="sex" value="2" title="女" />
+                                            <input type="radio" name="sex" value="2" title="保密" checked />
+                                        </div>
+                                    </div>
+                                </div>
+                                <div class="layui-row layui-col-space10 layui-form-item">
+                                    <div class="layui-col-lg6">
                                         <label class="layui-form-label">邮箱:</label>
                                         <div class="layui-input-block">
                                             <input type="text" name="email" autocomplete="off" class="layui-input" >
@@ -95,29 +90,13 @@
                                     <div class="layui-col-lg6">
                                         <label class="layui-form-label febs-form-item-require" style="white-space: nowrap;">是否签约MCN:</label>
                                         <div class="layui-input-block">
-                                            <select name="ismcn" lay-verify="required" class="layui-input">
+                                            <select name="mcnState" lay-verify="required" class="layui-input">
                                                 <option value="0">否</option>
                                                 <option value="1">是</option>
                                             </select>
                                         </div>
                                     </div>
                                 </div>
-
-                                <!--                                        <div class="layui-row layui-col-space10 layui-form-item">-->
-                                <!--                                            <div class="layui-col-lg6">-->
-                                <!--                                                <label class="layui-form-label febs-form-item-require">排名:</label>-->
-                                <!--                                                <div class="layui-input-block">-->
-                                <!--                                                    <input type="number" name="rank" lay-verify="required" autocomplete="off" class="layui-input" >-->
-                                <!--                                                </div>-->
-                                <!--                                            </div>-->
-
-                                <!--                                            <div class="layui-col-lg6">-->
-                                <!--                                                <label class="layui-form-label febs-form-item-require">票数差:</label>-->
-                                <!--                                                <div class="layui-input-block">-->
-                                <!--                                                    <input type="number" name="diffPrevious" lay-verify="required" autocomplete="off" class="layui-input" >-->
-                                <!--                                                </div>-->
-                                <!--                                            </div>-->
-                                <!--                                        </div>-->
 
                                 <div class="layui-form-item">
                                     <label class="layui-form-label">爱好:</label>
@@ -131,7 +110,7 @@
 
                             <div class="layui-tab-item">
                                 <div class="layui-form-item">
-                                    <label class="layui-form-label febs-form-item-require">选项图片:</label>
+                                    <label class="layui-form-label febs-form-item-require">封面:</label>
                                     <div class="layui-input-block">
                                         <div class="layui-upload">
                                             <button type="button" class="layui-btn layui-btn-normal layui-btn" id="test2">上传</button>
@@ -148,7 +127,7 @@
                                     </div>
                                 </div>
                                 <div class="layui-form-item">
-                                    <label class="layui-form-label febs-form-item-require">选项视频:</label>
+                                    <label class="layui-form-label febs-form-item-require">参赛作品:</label>
                                     <div class="layui-input-block">
                                         <div class="layui-upload">
                                             <button type="button" class="layui-btn upload" id="upload" style="background-color: #009688; margin-bottom: 2px">上传文件</button>
@@ -156,7 +135,7 @@
                                     </div>
                                 </div>
                                 <div class="layui-form-item">
-                                    <label class="layui-form-label">视频链接:</label>
+                                    <label class="layui-form-label">作品链接:</label>
                                     <div class="layui-input-block">
                                         <input type="text" id="videoUrl" lay-verify="required" name="videoUrl" autocomplete="off" class="layui-input" readonly>
                                     </div>
@@ -200,7 +179,7 @@
 </style>
 <!-- 表格操作栏 end -->
 <script data-th-inline="javascript">
-    layui.use(['febs', 'form', 'formSelects', 'validate', 'laydate', 'layedit', 'upload', 'table', 'xmSelect', 'layarea'], function () {
+    layui.use(['febs', 'form', 'formSelects', 'validate', 'layedit', 'upload', 'table', 'xmSelect', 'layarea'], function () {
         var $ = layui.jquery,
             febs = layui.febs,
             layer = layui.layer,
@@ -226,7 +205,7 @@
                 var form = new FormData();
                 form.append("file", files[0]);
                 $.ajax({
-                    url:'/admin/goods/uploadFileBaseEsc',
+                    url:'/admin/goods/uploadFileBase64',
                     type: "post",
                     processData: false,
                     contentType: false,
@@ -285,7 +264,7 @@
             data: []
         })
 
-        febs.get(ctx + 'admin/votesActivity/allActivities', null, function(res) {
+        febs.get(ctx + 'admin/happyActivity/allActivities', null, function(res) {
             activityOptions.update({
                 data : res.data,
                 autoRow: true,
@@ -343,7 +322,7 @@
             data.field.description = editor.txt.html();
             console.log(data.field);
             $.ajax({
-                'url':ctx + 'admin/votesActivity/addOption',
+                'url':ctx + 'admin/happyActivity/addOption',
                 'type':'post',
                 'dataType':'json',
                 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/optionInfo.html b/src/main/resources/templates/febs/views/modules/votesActivity/optionInfo.html
index c9f1d6e..64bf0f5 100644
--- a/src/main/resources/templates/febs/views/modules/votesActivity/optionInfo.html
+++ b/src/main/resources/templates/febs/views/modules/votesActivity/optionInfo.html
@@ -16,33 +16,33 @@
                                     <div class="layui-col-lg6">
                                         <label class="layui-form-label febs-form-item-require">审核:</label>
                                         <div class="layui-input-block">
-                                            <input type="radio" name="audit" value="1" title="待审核" checked />
-                                            <input type="radio" name="audit" value="2" title="同意" />
-                                            <input type="radio" name="audit" value="3" title="拒绝" />
+                                            <input type="radio" name="state" value="0" title="待审核" checked />
+                                            <input type="radio" name="state" value="1" title="同意" />
+                                            <input type="radio" name="state" value="2" title="拒绝" />
                                         </div>
                                     </div>
                                     <div class="layui-row layui-col-space10 layui-form-item">
                                         <div class="layui-col-lg6">
-                                            <label class="layui-form-label febs-form-item-require">选项图片:</label>
+                                            <label class="layui-form-label febs-form-item-require">封面:</label>
                                             <div class="layui-input-block">
                                                 <input type="text" lay-verify="required" name="image" autocomplete="off" class="layui-input" readonly>
                                             </div>
                                         </div>
                                         <div class="layui-col-lg6">
-                                            <button type="button" class="layui-btn layui-btn-normal layui-btn" id="openImg">图片审核</button>
+                                            <button type="button" class="layui-btn layui-btn-normal layui-btn" id="openImg">封面审核</button>
                                         </div>
                                     </div>
 
 
                                     <div class="layui-row layui-col-space10 layui-form-item">
                                         <div class="layui-col-lg6">
-                                            <label class="layui-form-label febs-form-item-require">选项视频:</label>
+                                            <label class="layui-form-label febs-form-item-require">参赛作品:</label>
                                             <div class="layui-input-block">
                                                 <input type="text" lay-verify="required" name="videoUrl" autocomplete="off" class="layui-input" readonly>
                                             </div>
                                         </div>
                                         <div class="layui-col-lg6">
-                                            <button type="button" class="layui-btn layui-btn-normal layui-btn" id="openVideo">视频审核</button>
+                                            <button type="button" class="layui-btn layui-btn-normal layui-btn" id="openVideo">作品审核</button>
                                         </div>
                                     </div>
                                 </div>
@@ -58,41 +58,26 @@
                                     <div class="layui-col-lg6">
                                         <label class="layui-form-label">序号:</label>
                                         <div class="layui-input-block">
-                                            <!--                                                    <input type="number" name="number" lay-verify="required" placeholder="" autocomplete="off" class="layui-input" data-value="{$voteOption.number}">-->
-                                            <input type="number" name="number" placeholder="" autocomplete="off" class="layui-input" data-value="{$voteOption.number}" disabled>
+                                            <input type="number" name="orderCnt" placeholder="" autocomplete="off" class="layui-input" data-value="{$voteOption.number}">
                                         </div>
                                     </div>
                                 </div>
                                 <div class="layui-form-item">
                                     <div class="layui-col-lg6">
-                                        <label class="layui-form-label febs-form-item-require">报名名称:</label>
+                                        <label class="layui-form-label febs-form-item-require">选项名称:</label>
                                         <div class="layui-input-block">
-                                            <input type="text" name="registeredName" lay-verify="required" autocomplete="off" class="layui-input" >
+                                            <input type="text" name="optionName" lay-verify="required" autocomplete="off" class="layui-input" >
                                         </div>
                                     </div>
                                     <div class="layui-col-lg6">
-                                        <label class="layui-form-label febs-form-item-require">选项名称:</label>
+                                        <label class="layui-form-label febs-form-item-require">姓名:</label>
                                         <div class="layui-input-block">
-                                            <input type="text" name="beautyName" lay-verify="required" autocomplete="off" class="layui-input" >
+                                            <input type="text" name="realName" lay-verify="required" autocomplete="off" class="layui-input" >
                                         </div>
                                     </div>
 
                                 </div>
-                                <!--                                        <div class="layui-row layui-col-space10 layui-form-item">-->
-                                <!--                                            <div class="layui-col-lg6">-->
-                                <!--                                                <label class="layui-form-label febs-form-item-require">省:</label>-->
-                                <!--                                                <div class="layui-input-block">-->
-                                <!--                                                    <input type="text" name="province" lay-verify="required" autocomplete="off" class="layui-input" >-->
-                                <!--                                                </div>-->
-                                <!--                                            </div>-->
 
-                                <!--                                            <div class="layui-col-lg6">-->
-                                <!--                                                <label class="layui-form-label febs-form-item-require">市:</label>-->
-                                <!--                                                <div class="layui-input-block">-->
-                                <!--                                                    <input type="text" name="city" lay-verify="required" autocomplete="off" class="layui-input" >-->
-                                <!--                                                </div>-->
-                                <!--                                            </div>-->
-                                <!--                                        </div>-->
                                 <div class="layui-row layui-col-space10 layui-form-item">
                                     <div class="layui-col-lg6">
                                         <label class="layui-form-label">性别:</label>
@@ -114,11 +99,6 @@
                                                 <option value="">--选择市--</option>
                                             </select>
                                         </div>
-                                        <!--                                                <div class="layui-input-inline" style="width: 200px;" >-->
-                                        <!--                                                    <select name="area" class="county-selector" data-value="浦东新区">-->
-                                        <!--                                                        <option value="">&#45;&#45;选择区&#45;&#45;</option>-->
-                                        <!--                                                    </select>-->
-                                        <!--                                                </div>-->
                                     </div>
 
                                 </div>
@@ -148,34 +128,10 @@
                                     <div class="layui-col-lg6">
                                         <label class="layui-form-label febs-form-item-require" style="white-space: nowrap;">是否签约MCN:</label>
                                         <div class="layui-input-block">
-                                            <select name="ismcn" lay-verify="required" class="layui-input">
+                                            <select name="mcnState" lay-verify="required" class="layui-input">
                                                 <option value="0">否</option>
                                                 <option value="1">是</option>
                                             </select>
-                                        </div>
-                                    </div>
-                                </div>
-
-                                <!--                                        <div class="layui-row layui-col-space10 layui-form-item">-->
-                                <!--                                            <div class="layui-col-lg6">-->
-                                <!--                                                <label class="layui-form-label febs-form-item-require">排名:</label>-->
-                                <!--                                                <div class="layui-input-block">-->
-                                <!--                                                    <input type="number" name="rank" autocomplete="off" class="layui-input" >-->
-                                <!--                                                </div>-->
-                                <!--                                            </div>-->
-
-                                <!--                                            <div class="layui-col-lg6">-->
-                                <!--                                                <label class="layui-form-label febs-form-item-require">票数差:</label>-->
-                                <!--                                                <div class="layui-input-block">-->
-                                <!--                                                    <input type="number" name="diffPrevious" autocomplete="off" class="layui-input" >-->
-                                <!--                                                </div>-->
-                                <!--                                            </div>-->
-                                <!--                                        </div>-->
-                                <div class="layui-row layui-col-space10 layui-form-item">
-                                    <div class="layui-col-lg6">
-                                        <label class="layui-form-label febs-form-item-require">票数统计:</label>
-                                        <div class="layui-input-block">
-                                            <input type="number" name="voteCount"  autocomplete="off" class="layui-input" >
                                         </div>
                                     </div>
                                 </div>
@@ -226,7 +182,7 @@
 </style>
 <!-- 表格操作栏 end -->
 <script data-th-inline="javascript">
-    layui.use(['febs', 'form', 'formSelects', 'validate', 'laydate', 'layedit', 'upload', 'table', 'xmSelect', 'layarea'], function () {
+    layui.use(['febs', 'form', 'formSelects', 'validate', 'laydate', 'layedit', 'table', 'xmSelect', 'layarea'], function () {
         var $ = layui.jquery,
             febs = layui.febs,
             layer = layui.layer,
@@ -236,7 +192,6 @@
             $view = $('#option-info'),
             voteOption = [[${voteOption}]],
             layedit = layui.layedit,
-            upload = layui.upload,
             layarea = layui.layarea,
             validate = layui.validate;
 
@@ -253,7 +208,7 @@
                 var form = new FormData();
                 form.append("file", files[0]);
                 $.ajax({
-                    url:'/admin/goods/uploadFileBaseEsc',
+                    url:'/admin/goods/uploadFileBase64',
                     type: "post",
                     processData: false,
                     contentType: false,
@@ -292,7 +247,7 @@
             data: []
         })
 
-        febs.get(ctx + 'admin/votesActivity/allActivities', null, function(res) {
+        febs.get(ctx + 'admin/happyActivity/allActivities', null, function(res) {
             activityOptions.update({
                 data : res.data,
                 autoRow: true,
@@ -324,22 +279,19 @@
             form.val("option-info-form", {
                 "id": voteOption.id,
                 "activityId": voteOption.activityId,
-                "beautyName": voteOption.beautyName,
-                "registeredName": voteOption.registeredName,
+                "optionName": voteOption.optionName,
+                "realName": voteOption.realName,
                 "description": voteOption.description,
-                "voteCount": voteOption.voteCount,
-                "rank": voteOption.rank,
-                "diffPrevious": voteOption.diffPrevious,
-                "number": voteOption.number,
+                "orderCnt": voteOption.orderCnt,
                 "mobilePhone": voteOption.mobilePhone,
                 "sex": voteOption.sex,
                 "hobby": voteOption.hobby,
-                "ismcn": voteOption.ismcn,
+                "mcnState": voteOption.mcnState,
                 "address": voteOption.address,
                 "province": voteOption.province,
                 "city": voteOption.city,
                 "videoUrl": voteOption.videoUrl,
-                "audit": voteOption.audit,
+                "state": voteOption.state,
                 "image": voteOption.image,
                 "email": voteOption.email
             });
@@ -367,7 +319,7 @@
             data.field.description = editor.txt.html();
             console.log(data.field);
             $.ajax({
-                'url':ctx + 'admin/votesActivity/optionUpdate',
+                'url':ctx + 'admin/happyActivity/optionUpdate',
                 'type':'post',
                 'dataType':'json',
                 'headers' : {'Content-Type' : 'application/json;charset=utf-8'}, //接口json格式
diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/optionList.html b/src/main/resources/templates/febs/views/modules/votesActivity/optionList.html
index 109ee31..52783e3 100644
--- a/src/main/resources/templates/febs/views/modules/votesActivity/optionList.html
+++ b/src/main/resources/templates/febs/views/modules/votesActivity/optionList.html
@@ -1,4 +1,4 @@
-<div class="layui-fluid layui-anim febs-anim" id="febs-activity-option" lay-title="活动选手列表">
+<div class="layui-fluid layui-anim febs-anim" id="febs-activity-option" lay-title="活动选项列表">
     <div class="layui-row febs-container">
         <div class="layui-col-md12">
             <div class="layui-card">
@@ -10,7 +10,7 @@
                                     <div class="layui-inline">
                                         <label class="layui-form-label layui-form-label-sm">选项名称</label>
                                         <div class="layui-input-inline">
-                                            <input type="text" placeholder="选项名称" name="beautyName" autocomplete="off" class="layui-input">
+                                            <input type="text" placeholder="选项名称" name="optionName" autocomplete="off" class="layui-input">
                                         </div>
                                     </div>
                                     <div class="layui-inline">
@@ -22,13 +22,13 @@
                                         </div>
                                     </div>
                                     <div class="layui-inline">
-                                        <label class="layui-form-label layui-form-label-sm">审核状态</label>
+                                        <label class="layui-form-label layui-form-label-sm">状态</label>
                                         <div class="layui-input-inline">
-                                            <select name="audit">
+                                            <select name="state">
                                                 <option value="">请选择</option>
-                                                <option value="1">待审核</option>
-                                                <option value="2">同意</option>
-                                                <option value="3">拒绝</option>
+                                                <option value="0">待审核</option>
+                                                <option value="1">同意</option>
+                                                <option value="2">拒绝</option>
                                             </select>
                                         </div>
                                     </div>
@@ -49,12 +49,6 @@
                         </div>
                     </form>
                     <table lay-filter="optionTable" lay-data="{id: 'optionTable'}"></table>
-<!--                    <style type="text/css">-->
-<!--                        ::-webkit-scrollbar {-->
-<!--                            height: 20px !important;-->
-<!--                            background-color: #f4f4f4;-->
-<!--                        }-->
-<!--                    </style>-->
                 </div>
             </div>
         </div>
@@ -68,18 +62,15 @@
     <a lay-event="edit" shiro:hasPermission="votesActivityUpdate:update"><i
             class="layui-icon febs-edit-area febs-blue">&#xe7a5;</i></a>
 </script>
-<script type="text/html" id="auditType">
+<script type="text/html" id="optionStateType">
     {{#
-    var audit = {
+    var state = {
     0: {title: '待审核', color: 'blue'},
-    1: {title: '待审核', color: 'blue'},
-    2: {title: '同意', color: 'green'},
-    3: {title: '拒绝', color: 'red'},
-    4: {title: '进行中', color: 'purple'},
-    5: {title: '已完成', color: 'gray'}
-    }[d.audit];
+    1: {title: '同意', color: 'green'},
+    2: {title: '拒绝', color: 'red'},
+    }[d.state];
     }}
-    <span class="layui-badge febs-bg-{{audit.color}}">{{ audit.title }}</span>
+    <span class="layui-badge febs-bg-{{state.color}}">{{ state.title }}</span>
 </script>
 <script type="text/html" id="optionToolbar">
     <div class="layui-btn-container">
@@ -116,7 +107,7 @@
 
         form.render();
         //(下拉框)
-        $.get(ctx + 'admin/votesActivity/allActivities', function (res) {
+        $.get(ctx + 'admin/happyActivity/allActivities', function (res) {
             var data = res.data;
             for (let k in data)
             {
@@ -159,7 +150,7 @@
             }
         });
         function optionDelete(id) {
-            febs.get(ctx + 'admin/votesActivity/optionDelete/' + id, null, function (data) {
+            febs.get(ctx + 'admin/happyActivity/optionDelete/' + id, null, function (data) {
                 febs.alert.success(data.message);
                 $query.click();
             });
@@ -185,7 +176,7 @@
         });
 
         function changeState(id,state) {
-            febs.get(ctx + 'admin/votesActivity/changeState/' + id+'/' + state, null, function (data) {
+            febs.get(ctx + 'admin/happyActivity/changeOptionState/' + id+'/' + state, null, function (data) {
                 febs.alert.success(data.message);
                 $query.click();
             });
@@ -196,19 +187,15 @@
             tableIns = febs.table.init({
                 elem: $view.find('table'),
                 id: 'optionTable',
-                url: ctx + 'admin/votesActivity/optionList',
+                url: ctx + 'admin/happyActivity/optionList',
                 toolbar:"#optionToolbar",
                 defaultToolbar:[],
                 cols: [[
-                    {type: 'numbers', title: '序号', width: 80},
+                    {type: 'numbers', title: '', width: 80},
                     {title: '操作', toolbar: '#optionOption', minWidth: 200, align: 'center'},
-                    {field: 'number', title: '编号', minWidth: 100,align:'center'},
-                    {field: 'beautyName', title: '选项名称', minWidth: 200,align:'center'},
-                    // {field: 'rank', title: '排名', minWidth: 150,align:'center'},
-                    {field: 'voteCount', title: '总票数', minWidth: 100,align:'center'},
-                    // {field: 'diffPrevious', title: '票数差', minWidth: 150,align:'center'},
-                    // {field: 'description', title: '选项描述', minWidth: 100,align:'center'},
-                    {title: '审核状态', templet: '#auditType', minWidth: 100,align:'center'},
+                    {field: 'orderCnt', title: '编号', minWidth: 100,align:'center'},
+                    {field: 'optionName', title: '选项名称', minWidth: 200,align:'center'},
+                    {title: '审核状态', templet: '#optionStateType', minWidth: 100,align:'center'},
                     {field: 'createdTime', title: '创建时间', minWidth: 150,align:'left'}
                 ]]
             });
@@ -246,9 +233,9 @@
         // 获取查询参数
         function getQueryParams() {
             return {
-                beautyName: $searchForm.find('input[name="beautyName"]').val().trim(),
+                optionName: $searchForm.find('input[name="optionName"]').val().trim(),
                 activityId: $searchForm.find("select[name='activityId']").val(),
-                audit: $searchForm.find("select[name='audit']").val(),
+                state: $searchForm.find("select[name='state']").val(),
             };
         }
 
diff --git a/src/main/resources/templates/febs/views/modules/votesActivity/voteRecord.html b/src/main/resources/templates/febs/views/modules/votesActivity/voteRecord.html
index 81de6bc..44c9be0 100644
--- a/src/main/resources/templates/febs/views/modules/votesActivity/voteRecord.html
+++ b/src/main/resources/templates/febs/views/modules/votesActivity/voteRecord.html
@@ -41,12 +41,12 @@
             tableIns = febs.table.init({
                 elem: $view.find('table'),
                 id: 'voteRecordTable',
-                url: ctx + 'admin/votesActivity/voteRecord?parentId=1',
+                url: ctx + 'admin/happyActivity/voteRecord?parentId=1',
                 cols: [[
                     {field: 'memberName', title: '昵称', minWidth: 150,align:'center'},
                     {field: 'activityName', title: '活动', minWidth: 150,align:'center'},
                     {field: 'optionName', title: '选项', minWidth: 150,align:'center'},
-                    {field: 'voteTime', title: '投票时间', minWidth: 150,align:'center'}
+                    {field: 'createdTime', title: '投票时间', minWidth: 150,align:'center'}
                 ]]
             });
         }
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index 93effd8..a3cb5f7 100644
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -44,7 +44,8 @@
         treeSelect: 'lay/extends/treeSelect',
         apexcharts: 'lay/extends/apexcharts.min',
         eleTree: 'lay/extends/eleTree',
-        xmSelect: 'lay/extends/xm-select'
+        xmSelect: 'lay/extends/xm-select',
+        layarea: 'layarea',
     }).use(['index']);
 </script>
 </body>

--
Gitblit v1.9.1