From 9b1188a004df6585d1836e85e22ee24a91b5fd62 Mon Sep 17 00:00:00 2001
From: liujie <liujie>
Date: 星期二, 25 七月 2023 11:12:29 +0800
Subject: [PATCH] 后台代码删除

---
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/LoginLogServiceImpl.java       |   29 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition.html                    |   70 +
 cloud-server-management/src/main/java/com/dsh/course/feignClient/auth/model/RefreshTokenRequest.java          |   15 
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_edit.html               |  401 ++++++++
 cloud-server-management/src/main/webapp/static/modular/system/tCompetition/tCar_info.js                       |  473 ++++++++++
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DriverOnlineServiceImpl.java   |   47 +
 cloud-server-management/src/main/webapp/static/modular/system/tCompetition/carInsurance.js                    |  123 ++
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/NoticeServiceImpl.java         |   28 
 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java                     |   18 
 cloud-server-management/src/main/webapp/static/modular/system/tCompetition/carInsuranceInfo.js                |  118 ++
 cloud-server-management/src/main/java/com/dsh/course/feignClient/auth/model/GetTokenRequest.java              |   19 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/UserServiceImpl.java           |   58 +
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DeptServiceImpl.java           |   48 +
 cloud-server-management/src/main/java/com/dsh/course/feignClient/auth/UserClient.java                         |   28 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/OperationLogServiceImpl.java   |   29 
 /dev/null                                                                                                     |   30 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionController.java |  249 +++++
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html                |  381 ++++++++
 cloud-server-management/src/main/java/com/dsh/course/feignClient/auth/model/TokenResponse.java                |   19 
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/RoleServiceImpl.java           |   75 +
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/RelationServiceImpl.java       |   21 
 cloud-server-management/src/main/webapp/static/modular/system/tCompetition/tCar.js                            |  315 ++++++
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DictServiceImpl.java           |  106 ++
 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/MenuServiceImpl.java           |   91 +
 24 files changed, 2,761 insertions(+), 30 deletions(-)

diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/auth/UserClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/auth/UserClient.java
new file mode 100644
index 0000000..e56c3b2
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/auth/UserClient.java
@@ -0,0 +1,28 @@
+package com.dsh.course.feignClient.auth;
+
+import com.dsh.course.feignClient.auth.model.GetTokenRequest;
+import com.dsh.course.feignClient.auth.model.RefreshTokenRequest;
+import com.dsh.course.feignClient.auth.model.TokenResponse;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+@FeignClient("mb-cloud-auth")
+public interface UserClient {
+
+    /**
+     * 获取登录token
+     * @param request
+     * @return
+     */
+    @PostMapping("/oauth/getToken")
+    TokenResponse getToken(GetTokenRequest request);
+
+
+    /**
+     * 刷新登录token
+     * @param request
+     * @return
+     */
+    @PostMapping("/oauth/refreshToken")
+    TokenResponse refreshToken(RefreshTokenRequest request);
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/auth/model/GetTokenRequest.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/auth/model/GetTokenRequest.java
new file mode 100644
index 0000000..af041e3
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/auth/model/GetTokenRequest.java
@@ -0,0 +1,19 @@
+package com.dsh.course.feignClient.auth.model;
+
+import lombok.Data;
+
+@Data
+public class GetTokenRequest {
+    /**
+     * 用户名
+     */
+    private String username;
+    /**
+     * 密码
+     */
+    private String password;
+    /**
+     * 存储对象
+     */
+    private Object object;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/auth/model/RefreshTokenRequest.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/auth/model/RefreshTokenRequest.java
new file mode 100644
index 0000000..3d2ef52
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/auth/model/RefreshTokenRequest.java
@@ -0,0 +1,15 @@
+package com.dsh.course.feignClient.auth.model;
+
+import lombok.Data;
+
+@Data
+public class RefreshTokenRequest {
+    /**
+     * 原始token
+     */
+    private String token;
+    /**
+     * 刷新令牌凭证
+     */
+    private String refresh_token;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/auth/model/TokenResponse.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/auth/model/TokenResponse.java
new file mode 100644
index 0000000..a785aef
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/auth/model/TokenResponse.java
@@ -0,0 +1,19 @@
+package com.dsh.course.feignClient.auth.model;
+
+import lombok.Data;
+
+@Data
+public class TokenResponse {
+    /**
+     * token
+     */
+    private String token;
+    /**
+     * 刷新token的凭证
+     */
+    private String refresh_token;
+    /**
+     * 过期时间
+     */
+    private Long expiration_time;
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java
new file mode 100644
index 0000000..2d95e02
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java
@@ -0,0 +1,18 @@
+package com.dsh.course.feignClient.course;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+/**
+ * @author zhibing.pu
+ * @date 2023/6/29 10:09
+ */
+@FeignClient("mb-cloud-course")
+public interface CourseClient {
+
+
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/mapper/AgreementMapper.java b/cloud-server-management/src/main/java/com/dsh/course/mapper/AgreementMapper.java
deleted file mode 100644
index 772f5f4..0000000
--- a/cloud-server-management/src/main/java/com/dsh/course/mapper/AgreementMapper.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.dsh.course.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.dsh.course.entity.Agreement;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-
-@Mapper
-public interface AgreementMapper extends BaseMapper<Agreement> {
-
-
-    /**
-     * 获取协议内容
-     * @param type
-     * @return
-     */
-    String queryByType(@Param("type") Integer type, @Param("useType") Integer useType, @Param("language") Integer language);
-}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/mapper/CancleOrderMapper.java b/cloud-server-management/src/main/java/com/dsh/course/mapper/CancleOrderMapper.java
deleted file mode 100644
index 6660f51..0000000
--- a/cloud-server-management/src/main/java/com/dsh/course/mapper/CancleOrderMapper.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.dsh.course.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.dsh.course.entity.CancleOrder;
-import org.apache.ibatis.annotations.Param;
-
-public interface CancleOrderMapper extends BaseMapper<CancleOrder> {
-
-
-    /**
-     * 获取取消订单配置
-     * @param type
-     * @param orderType
-     * @return
-     */
-    CancleOrder query(@Param("type") Integer type, @Param("orderType") Integer orderType,
-                      @Param("companyId") Integer companyId);
-}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/service/impl/AgreementServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/course/service/impl/AgreementServiceImpl.java
deleted file mode 100644
index f46f5fc..0000000
--- a/cloud-server-management/src/main/java/com/dsh/course/service/impl/AgreementServiceImpl.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.dsh.course.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.dsh.course.entity.Agreement;
-import com.dsh.course.mapper.AgreementMapper;
-import com.dsh.course.service.IAgreementService;
-import org.springframework.stereotype.Service;
-import org.springframework.util.StringUtils;
-
-import javax.annotation.Resource;
-
-
-@Service
-public class AgreementServiceImpl extends ServiceImpl<AgreementMapper, Agreement> implements IAgreementService {
-
-    @Resource
-    private AgreementMapper agreementMapper;
-
-
-    /**
-     * 获取协议内容
-     * @param type
-     * @return
-     * @throws Exception
-     */
-    @Override
-    public String queryByType(Integer type, Integer userType,Integer language) throws Exception {
-        String s = agreementMapper.queryByType(type, userType,language);
-        if(StringUtils.isEmpty(s)){
-            s = agreementMapper.queryByType(type, null,language);
-        }
-        return s;
-    }
-}
diff --git a/cloud-server-management/src/main/java/com/dsh/course/service/impl/CancleOrderServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/course/service/impl/CancleOrderServiceImpl.java
deleted file mode 100644
index 77ff269..0000000
--- a/cloud-server-management/src/main/java/com/dsh/course/service/impl/CancleOrderServiceImpl.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.dsh.course.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.dsh.course.entity.CancleOrder;
-import com.dsh.course.mapper.CancleOrderMapper;
-import com.dsh.course.service.ICancleOrderService;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-
-
-@Service
-public class CancleOrderServiceImpl extends ServiceImpl<CancleOrderMapper, CancleOrder> implements ICancleOrderService {
-
-    @Resource
-    private CancleOrderMapper cancleOrderMapper;
-
-
-    /**
-     * 获取取消订单配置
-     * @param type
-     * @param orderType
-     * @return
-     * @throws Exception
-     */
-    @Override
-    public CancleOrder query(Integer type, Integer orderType, Integer companyId) throws Exception {
-        return cancleOrderMapper.query(type, orderType, companyId);
-    }
-}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionController.java
new file mode 100644
index 0000000..10b8110
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionController.java
@@ -0,0 +1,249 @@
+package com.dsh.guns.modular.system.controller.code;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dsh.course.feignClient.course.CourseClient;
+import com.dsh.guns.config.UserExt;
+import com.dsh.guns.core.base.controller.BaseController;
+import com.dsh.guns.core.common.constant.factory.PageFactory;
+import com.dsh.guns.core.util.SinataUtil;
+import com.dsh.guns.modular.system.util.DateUtil;
+import com.dsh.guns.modular.system.util.ExcelExportUtil;
+import com.dsh.guns.modular.system.util.ResultUtil;
+import org.apache.commons.lang.time.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * 车辆管理控制器
+ *
+ * @author fengshuonan
+ * @Date 2020-06-05 17:25:12
+ */
+@Controller
+@RequestMapping("/TCompetition")
+public class TCompetitionController extends BaseController {
+
+    private String PREFIX = "/system/TCompetition/";
+
+    @Autowired
+    private CourseClient courseClient;
+
+
+    /**
+     * 跳转到车辆管理首页
+     */
+    @RequestMapping("")
+    public String index(Model model) {
+        return PREFIX + "TCompetition.html";
+    }
+
+    /**
+     * 跳转到添加车辆管理
+     */
+    @RequestMapping("/tCompetition_add")
+    public String tCompetitionAdd(Model model) {
+        return PREFIX + "tCompetition_add.html";
+    }
+
+
+    /**
+     * 跳转到修改车辆管理
+     */
+    @RequestMapping("/tCompetition_update/{id}")
+    public String tCarUpdate(@PathVariable Integer id, Model model) {
+        return PREFIX + "tCompetition_edit.html";
+    }
+
+
+
+
+    /**
+     * 获取车辆管理列表
+     */
+    @RequestMapping(value = "/list")
+    @ResponseBody
+    public Object list(String createTime,
+                       String id,
+                       String brandName,
+                       String modelName,
+                       String carColor,
+                       String serverStr,
+                       String carLicensePlate,
+                       String driverName,
+                       String companyName,
+                       String franchiseeName) {
+        String beginTime = null;
+        String endTime = null;
+        if (SinataUtil.isNotEmpty(createTime)){
+            String[] timeArray = createTime.split(" - ");
+            beginTime = timeArray[0];
+            endTime = timeArray[1];
+        }
+        Page<Map<String, Object>> page = new PageFactory<Map<String, Object>>().defaultPage();
+        return super.packForBT(page);
+    }
+
+    /**
+     * 新增车辆管理
+     */
+    @RequestMapping(value = "/add")
+    @ResponseBody
+    public Object add( ) {
+        return ResultUtil.success();
+    }
+
+    /**
+     * 删除车辆管理
+     */
+    @RequestMapping(value = "/delete")
+    @ResponseBody
+    public Object delete(@RequestParam Integer tCarId) {
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 修改车辆管理
+     */
+    @RequestMapping(value = "/update")
+    @ResponseBody
+    public Object update() {
+        return ResultUtil.success();
+    }
+
+    /**
+     * 车辆管理详情
+     */
+    @RequestMapping(value = "/detail/{tCarId}")
+    @ResponseBody
+    public Object detail(@PathVariable("tCarId") Integer tCarId) {
+        return null;
+    }
+
+    /**
+     * 下载模板
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/uploadCarModel")
+    public void uploadCarModel(HttpServletRequest request, HttpServletResponse response) {
+        // 表格数据【封装】 Table datas
+        List<List<String>> dataList = new ArrayList<List<String>>();
+        Integer language = UserExt.getLanguage();
+        if(language==1){
+            // 首行【封装】 first line 
+            List<String> shellList = new ArrayList<String>();
+            shellList.add("所属机构[平台车辆/加盟车辆]");
+            shellList.add("所属分公司[提示:加盟车辆选填]");
+            shellList.add("所属加盟商[提示:加盟车辆选填]");
+            shellList.add("服务模式:摩托车车[是/否]");
+            shellList.add("服务模式:同城快送[是/否]");
+            shellList.add("车辆品牌");
+            shellList.add("车辆类型");
+            shellList.add("车辆颜色[1(黑色)/2(银色)/3(白色)/4(红色)/5(黄色)/6(橙色)/7(蓝色)]");
+            shellList.add("车牌号");
+            shellList.add("行驶证编号");
+            shellList.add("年检到期时间[例如 2020-02-02]");
+            shellList.add("商业保险到期时间[例如 2020-02-02]");
+            dataList.add(shellList);
+
+            try {
+                // 调用工具类进行导出 Invoke the utility class to carry out data export.
+                ExcelExportUtil.easySheet("平台导入车辆模板"+DateUtil.format(new Date(), "YYYYMMddHHmmss"), "平台导入车辆模板", dataList, request, response);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }else if(language==2){
+            // 首行【封装】 first line 
+            List<String> shellList = new ArrayList<String>();
+            shellList.add("Affiliated Organization [Platform Vehicle/Franchised Vehicle]");
+            shellList.add("Affiliated branch [Tip: Select for franchised vehicle]");
+            shellList.add("Franchisee [Tip: Select Franchised vehicle]");
+            shellList.add("Service mode: Motorcycle [Yes/No]");
+            shellList.add("Service mode: intra-city express [Yes/No]");
+            shellList.add("Vehicle brand");
+            shellList.add("Vehicle type");
+            shellList.add("Vehicle color [1(Black)/2(Silver)/3(white)/4(red)/5(yellow)/6(orange)/7(Blue)]");
+            shellList.add("License plate number");
+            shellList.add("License number");
+            shellList.add("Annual inspection expiration time [e.g. 2020-02-02]");
+            shellList.add("Commercial Insurance Expiration Time [e.g. 2020-02-02]");
+            dataList.add(shellList);
+
+            try {
+                // 调用工具类进行导出 Invoke the utility class to carry out data export.
+                ExcelExportUtil.easySheet("Platform import vehicle template"+DateUtil.format(new Date(), "YYYYMMddHHmmss"), "Platform import vehicle template", dataList, request, response);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }else {
+            // 首行【封装】 first line
+            List<String> shellList = new ArrayList<String>();
+            shellList.add("Organisasi Berkait [Platform Vehicle/Franchised Vehicle]");
+            shellList.add("Branch terkait [Tip: Pilih untuk kendaraan terkait]");
+            shellList.add("Franchisee [Tip: Pilih kendaraan Franchised]");
+            shellList.add("Mod layanan: Motosikal [Ya/Tidak]");
+            shellList.add("Modus layanan: ekspres intra-kota [Ya/Tidak]");
+            shellList.add("Tanda kendaraan");
+            shellList.add("Jenis kendaraan");
+            shellList.add("Warna kendaraan [1(Hitam)/2(Perak)/3(putih)/4(merah)/5(kuning)/6(oranye)/7(Biru)]");
+            shellList.add("Nomor plat lisensi");
+            shellList.add("Nomor lisensi");
+            shellList.add("Waktu penggantian inspeksi tahunan [contohnya 2020-02-02]");
+            shellList.add("Waktu Expiration Insurance Commercial [contohnya 2020-02-02]");
+            dataList.add(shellList);
+
+            try {
+                // 调用工具类进行导出 Invoke the utility class to carry out data export.
+                ExcelExportUtil.easySheet("templat kendaraan import platform"+DateUtil.format(new Date(), "YYYYMMddHHmmss"), "templat kendaraan import platform", dataList, request, response);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+
+    }
+
+
+    /**
+     * 判断日期是否满足yyyy-MM-dd格式
+     * @param str
+     * @return
+     */
+    public static boolean isValidDate(String str) {
+        boolean convertSuccess=true;
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        try {
+            format.setLenient(false);
+            format.parse(str);
+        } catch (Exception e) {
+            convertSuccess=false;
+        }
+        return convertSuccess;
+    }
+
+
+    /**
+     * 转换日期
+     * @return
+     */
+    public static String importByExcelForDate(String value) {//value就是它的天数
+        String currentCellValue = "";
+        if(value != null && !value.equals("")){
+            Calendar calendar = new GregorianCalendar(1900,0,-1);
+            Date d = calendar.getTime();
+            Date dd = DateUtils.addDays(d,Integer.valueOf(value));
+            DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
+            currentCellValue = formater.format(dd);
+        }
+        return currentCellValue;
+    }
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DeptServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DeptServiceImpl.java
new file mode 100644
index 0000000..cbb7ddd
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DeptServiceImpl.java
@@ -0,0 +1,48 @@
+package com.dsh.guns.modular.system.service.impl;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.course.mapper.DeptMapper;
+import com.dsh.course.model.node.ZTreeNode;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.dsh.guns.modular.system.model.Dept;
+import com.dsh.guns.modular.system.service.IDeptService;
+
+@Service
+@Transactional
+public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements IDeptService {
+
+    @Resource
+    private DeptMapper deptMapper;
+
+    @Override
+    public void deleteDept(Integer deptId) {
+        Dept dept = deptMapper.selectById(deptId);
+
+        QueryWrapper<Dept> wrapper = new QueryWrapper<>();
+        wrapper = wrapper.like("pids", "%[" + dept.getId() + "]%");
+        List<Dept> subDepts = deptMapper.selectList(wrapper);
+        for (Dept temp : subDepts) {
+            temp.deleteById();
+        }
+
+        dept.deleteById();
+    }
+
+    @Override
+    public List<ZTreeNode> tree() {
+        return this.baseMapper.tree();
+    }
+
+    @Override
+    public List<Map<String, Object>> list(String condition) {
+        return this.baseMapper.list(condition);
+    }
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DictServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DictServiceImpl.java
new file mode 100644
index 0000000..4489569
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DictServiceImpl.java
@@ -0,0 +1,106 @@
+package com.dsh.guns.modular.system.service.impl;
+
+import static com.dsh.guns.core.common.constant.factory.MutiStrFactory.MUTI_STR_CODE;
+import static com.dsh.guns.core.common.constant.factory.MutiStrFactory.MUTI_STR_NAME;
+import static com.dsh.guns.core.common.constant.factory.MutiStrFactory.MUTI_STR_NUM;
+import static com.dsh.guns.core.common.constant.factory.MutiStrFactory.parseKeyValue;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.course.mapper.DictMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.dsh.guns.core.common.exception.BizExceptionEnum;
+import com.dsh.guns.core.exception.GunsException;
+import com.dsh.guns.modular.system.model.Dict;
+import com.dsh.guns.modular.system.service.IDictService;
+
+@Service
+@Transactional
+public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements IDictService {
+
+    @Resource
+    private DictMapper dictMapper;
+
+    @Override
+    public void addDict(String dictCode,String dictName,String dictTips, String dictValues) {
+        //判断有没有该字典
+        //Check if the dictionary exists
+        List<Dict> dicts = dictMapper.selectList(new QueryWrapper<Dict>().eq("code", dictCode).eq("pid", 0));
+        if (dicts != null && dicts.size() > 0) {
+            throw new GunsException(BizExceptionEnum.DICT_EXISTED);
+        }
+
+        //解析dictValues
+        List<Map<String, String>> items = parseKeyValue(dictValues);
+
+        //添加字典 add dict
+        Dict dict = new Dict();
+        dict.setName(dictName);
+        dict.setCode(dictCode);
+        dict.setTips(dictTips);
+        dict.setNum(0);
+        dict.setPid(0);
+        this.dictMapper.insert(dict);
+
+        //添加字典条目 Add dictionary entry
+        for (Map<String, String> item : items) {
+            String code = item.get(MUTI_STR_CODE);
+            String name = item.get(MUTI_STR_NAME);
+            String num = item.get(MUTI_STR_NUM);
+            Dict itemDict = new Dict();
+            itemDict.setPid(dict.getId());
+            itemDict.setCode(code);
+            itemDict.setName(name);
+
+            try {
+                itemDict.setNum(Integer.valueOf(num));
+            } catch (NumberFormatException e) {
+                throw new GunsException(BizExceptionEnum.DICT_MUST_BE_NUMBER);
+            }
+            this.dictMapper.insert(itemDict);
+        }
+    }
+
+    @Override
+    public void editDict(Integer dictId,String dictCode, String dictName,String dictTips, String dicts) {
+        //删除之前的字典 add before dict
+        this.delteDict(dictId);
+
+        //重新添加新的字典 Add a new dictionary again
+        this.addDict(dictCode,dictName,dictTips, dicts);
+    }
+
+    @Override
+    public void delteDict(Integer dictId) {
+        //删除这个字典的子词典 Delete the sub-dictionary of this dictionary.
+        QueryWrapper<Dict> dictEntityWrapper = new QueryWrapper<>();
+        dictEntityWrapper = dictEntityWrapper.eq("pid", dictId);
+        dictMapper.delete(dictEntityWrapper);
+
+        //删除这个词典 Delete the dictionary
+        dictMapper.deleteById(dictId);
+    }
+
+    @Override
+    public List<Dict> selectByCode(String code) {
+        return this.baseMapper.selectByCode(code);
+    }
+
+    @Override
+    public List<Dict> selectByParentCode(String code) {
+        return this.baseMapper.selectByParentCode(code);
+    }
+
+
+    @Override
+    public List<Map<String, Object>> list(String conditiion) {
+        return this.baseMapper.list(conditiion);
+    }
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DriverOnlineServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DriverOnlineServiceImpl.java
new file mode 100644
index 0000000..a26f996
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/DriverOnlineServiceImpl.java
@@ -0,0 +1,47 @@
+//package com.dsh.guns.modular.system.service.impl;
+//
+//import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+//import com.dsh.guns.modular.system.dao.DriverOnlineMapper;
+//import com.dsh.guns.modular.system.model.DriverOnline;
+//import com.dsh.guns.modular.system.service.IDriverOnlineService;
+//import org.springframework.stereotype.Service;
+//
+//import javax.annotation.Resource;
+//import java.util.HashMap;
+//import java.util.List;
+//import java.util.Map;
+//
+//
+//@Service
+//public class DriverOnlineServiceImpl extends ServiceImpl<DriverOnlineMapper, DriverOnline> implements IDriverOnlineService {
+//
+//    @Resource
+//    private DriverOnlineMapper driverOnlineMapper;
+//
+//
+//
+//
+//    /**
+//     * 获取列表数据
+//     * @param name
+//     * @param phone
+//     * @param offset
+//     * @param limit
+//     * @return
+//     * @throws Exception
+//     */
+//    @Override
+//    public Map<String, Object> queryOnlineDriver(String name, String phone, Integer offset, Integer limit) throws Exception {
+//        Map<String, Object> map = new HashMap<>();
+//        List<Map<String, Object>> list = driverOnlineMapper.queryOnlineDriver(name, phone, offset, limit);
+//        int i = driverOnlineMapper.queryOnlineDriverCount(name, phone);
+//        map.put("rows", list);
+//        map.put("total", i);
+//        return map;
+//    }
+//
+//    @Override
+//    public int queryOnlineDriverCount(String name, String phone) {
+//        return driverOnlineMapper.queryOnlineDriverCount(name, phone);
+//    }
+//}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/LoginLogServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/LoginLogServiceImpl.java
new file mode 100644
index 0000000..10e9e45
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/LoginLogServiceImpl.java
@@ -0,0 +1,29 @@
+package com.dsh.guns.modular.system.service.impl;
+
+import java.util.List;
+import java.util.Map;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.course.mapper.LoginLogMapper;
+import org.springframework.stereotype.Service;
+
+import com.dsh.guns.modular.system.model.LoginLog;
+import com.dsh.guns.modular.system.service.ILoginLogService;
+
+/**
+ * <p>
+ * 登录记录 服务实现类
+ * </p>
+ *
+ * @author stylefeng123
+ * @since 2018-02-22
+ */
+@Service
+public class LoginLogServiceImpl extends ServiceImpl<LoginLogMapper, LoginLog> implements ILoginLogService {
+
+    @Override
+    public List<Map<String, Object>> getLoginLogs(Page<LoginLog> page, String beginTime, String endTime, String logName, String orderByField, boolean asc) {
+        return this.baseMapper.getLoginLogs(page, beginTime, endTime, logName, orderByField, asc);
+    }
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/MenuServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/MenuServiceImpl.java
new file mode 100644
index 0000000..fe4a69a
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/MenuServiceImpl.java
@@ -0,0 +1,91 @@
+package com.dsh.guns.modular.system.service.impl;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.course.mapper.MenuMapper;
+import com.dsh.course.model.node.MenuNode;
+import com.dsh.course.model.node.ZTreeNode;
+import org.springframework.stereotype.Service;
+
+import com.dsh.guns.modular.system.model.Menu;
+import com.dsh.guns.modular.system.service.IMenuService;
+
+/**
+ * 菜单服务
+ *
+ * @author fengshuonan
+ * @date 2017-05-05 22:20
+ */
+@Service
+public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {
+
+    @Resource
+    private MenuMapper menuMapper;
+
+    @Override
+    public void delMenu(Long menuId) {
+
+        //删除菜单 delete menu
+        this.menuMapper.deleteById(menuId);
+
+        //删除关联的delete relation
+        this.menuMapper.deleteRelationByMenu(menuId);
+    }
+
+    @Override
+    public void delMenuContainSubMenus(Long menuId) {
+
+        Menu menu = menuMapper.selectById(menuId);
+
+        //删除当前菜单 dele current menu
+        delMenu(menuId);
+
+        //删除所有子菜单 delete all sub menu
+        QueryWrapper<Menu> wrapper = new QueryWrapper<>();
+        wrapper = wrapper.like("pcodes", "%[" + menu.getCode() + "]%");
+        List<Menu> menus = menuMapper.selectList(wrapper);
+        for (Menu temp : menus) {
+            delMenu(temp.getId());
+        }
+    }
+
+    @Override
+    public List<Map<String, Object>> selectMenus(String condition, String level) {
+        return this.baseMapper.selectMenus(condition, level);
+    }
+
+    @Override
+    public List<Long> getMenuIdsByRoleId(Integer roleId) {
+        return this.baseMapper.getMenuIdsByRoleId(roleId);
+    }
+
+    @Override
+    public List<ZTreeNode> menuTreeList() {
+        return this.baseMapper.menuTreeList();
+    }
+
+    @Override
+    public List<ZTreeNode> menuTreeListByMenuIds(List<Long> menuIds) {
+        return this.baseMapper.menuTreeListByMenuIds(menuIds);
+    }
+
+    @Override
+    public int deleteRelationByMenu(Long menuId) {
+        return this.baseMapper.deleteRelationByMenu(menuId);
+    }
+
+    @Override
+    public List<String> getResUrlsByRoleId(Integer roleId) {
+        return this.baseMapper.getResUrlsByRoleId(roleId);
+    }
+
+    @Override
+    public List<MenuNode> getMenusByRoleIds(List<String> roleIds) {
+        return this.baseMapper.getMenusByRoleIds(roleIds);
+    }
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/NoticeServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/NoticeServiceImpl.java
new file mode 100644
index 0000000..efbcc9a
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/NoticeServiceImpl.java
@@ -0,0 +1,28 @@
+package com.dsh.guns.modular.system.service.impl;
+
+import java.util.List;
+import java.util.Map;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.course.mapper.NoticeMapper;
+import org.springframework.stereotype.Service;
+
+import com.dsh.guns.modular.system.model.Notice;
+import com.dsh.guns.modular.system.service.INoticeService;
+
+/**
+ * <p>
+ * 通知表 服务实现类
+ * </p>
+ *
+ * @author stylefeng123
+ * @since 2018-02-22
+ */
+@Service
+public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> implements INoticeService {
+
+    @Override
+    public List<Map<String, Object>> list(String condition) {
+        return this.baseMapper.list(condition);
+    }
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/OperationLogServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/OperationLogServiceImpl.java
new file mode 100644
index 0000000..3eeebf4
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/OperationLogServiceImpl.java
@@ -0,0 +1,29 @@
+package com.dsh.guns.modular.system.service.impl;
+
+import java.util.List;
+import java.util.Map;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.course.mapper.OperationLogMapper;
+import org.springframework.stereotype.Service;
+
+import com.dsh.guns.modular.system.model.OperationLog;
+import com.dsh.guns.modular.system.service.IOperationLogService;
+
+/**
+ * <p>
+ * 操作日志 服务实现类
+ * </p>
+ *
+ * @author stylefeng123
+ * @since 2018-02-22
+ */
+@Service
+public class OperationLogServiceImpl extends ServiceImpl<OperationLogMapper, OperationLog> implements IOperationLogService {
+
+    @Override
+    public List<Map<String, Object>> getOperationLogs(Page<OperationLog> page, String beginTime, String endTime, String logName, String s) {
+        return this.baseMapper.getOperationLogs(page, beginTime, endTime, logName, s);
+    }
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/RelationServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/RelationServiceImpl.java
new file mode 100644
index 0000000..38e81bd
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/RelationServiceImpl.java
@@ -0,0 +1,21 @@
+package com.dsh.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.course.mapper.RelationMapper;
+import org.springframework.stereotype.Service;
+
+import com.dsh.guns.modular.system.model.Relation;
+import com.dsh.guns.modular.system.service.IRelationService;
+
+/**
+ * <p>
+ * 角色和菜单关联表 服务实现类
+ * </p>
+ *
+ * @author stylefeng123
+ * @since 2018-02-22
+ */
+@Service
+public class RelationServiceImpl extends ServiceImpl<RelationMapper, Relation> implements IRelationService {
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/RoleServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/RoleServiceImpl.java
new file mode 100644
index 0000000..2e2f50a
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/RoleServiceImpl.java
@@ -0,0 +1,75 @@
+package com.dsh.guns.modular.system.service.impl;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Resource;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.course.mapper.RelationMapper;
+import com.dsh.course.mapper.RoleMapper;
+import com.dsh.course.model.node.ZTreeNode;
+import com.dsh.guns.modular.system.controller.util.Convert;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.dsh.guns.modular.system.model.Relation;
+import com.dsh.guns.modular.system.model.Role;
+import com.dsh.guns.modular.system.service.IRoleService;
+
+@Service
+public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IRoleService {
+
+    @Resource
+    private RoleMapper roleMapper;
+
+    @Resource
+    private RelationMapper relationMapper;
+
+    @Override
+    @Transactional(readOnly = false)
+    public void setAuthority(Integer roleId, String ids) {
+
+        // 删除该角色所有的权限 Delete all permissions for this role.
+        this.roleMapper.deleteRolesById(roleId);
+
+        // 添加新的权限 add new permissions
+        for (Long id : Convert.toLongArray(true, Convert.toStrArray(",", ids))) {
+            Relation relation = new Relation();
+            relation.setRoleid(roleId);
+            relation.setMenuid(id);
+            this.relationMapper.insert(relation);
+        }
+    }
+
+    @Override
+    @Transactional(readOnly = false)
+    public void delRoleById(Integer roleId) {
+        //删除角色 delete role
+        this.roleMapper.deleteById(roleId);
+
+        // 删除该角色所有的权限 Delete all permissions for this role.
+        this.roleMapper.deleteRolesById(roleId);
+    }
+
+    @Override
+    public List<Map<String, Object>> selectRoles(String condition) {
+        return this.baseMapper.selectRoles(condition);
+    }
+
+    @Override
+    public int deleteRolesById(Integer roleId) {
+        return this.baseMapper.deleteRolesById(roleId);
+    }
+
+    @Override
+    public List<ZTreeNode> roleTreeList() {
+        return this.baseMapper.roleTreeList();
+    }
+
+    @Override
+    public List<ZTreeNode> roleTreeListByRoleId(String[] roleId) {
+        return this.baseMapper.roleTreeListByRoleId(roleId);
+    }
+
+}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/UserServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/UserServiceImpl.java
new file mode 100644
index 0000000..a9c2206
--- /dev/null
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/UserServiceImpl.java
@@ -0,0 +1,58 @@
+package com.dsh.guns.modular.system.service.impl;
+
+import java.util.List;
+
+import java.util.Map;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dsh.course.mapper.UserMapper;
+import com.dsh.guns.core.dataScope.DataScope;
+import org.springframework.stereotype.Service;
+
+import com.dsh.guns.modular.system.model.User;
+import com.dsh.guns.modular.system.service.IUserService;
+
+/**
+ * <p>
+ * 管理员表 服务实现类
+ * </p>
+ *
+ * @author stylefeng123
+ * @since 2018-02-22
+ */
+@Service
+public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
+
+    @Override
+    public int setStatus(Integer userId, int status) {
+        return this.baseMapper.setStatus(userId, status);
+    }
+
+    @Override
+    public int changePwd(Integer userId, String pwd) {
+        return this.baseMapper.changePwd(userId, pwd);
+    }
+
+
+    @Override
+    public int setRoles(Integer userId, String roleIds) {
+        return this.baseMapper.setRoles(userId, roleIds);
+    }
+
+    @Override
+    public User getByAccount(String account) {
+        return this.baseMapper.getByAccount(account);
+    }
+
+    @Override
+    public Integer getMenuNumByRole(String roleStr) {
+        return this.baseMapper.getMenuNumByRole(roleStr);
+    }
+
+    @Override
+    public List<Map<String, Object>> getUserListPage(Page<Map<String, Object>> page, DataScope dataScope, String name, String beginTime, String endTime, Integer deptid) {
+        List<Map<String, Object>> userListPage = this.baseMapper.getUserListPage(page, dataScope, name, beginTime, endTime, deptid);
+        return userListPage;
+    }
+}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition.html
new file mode 100644
index 0000000..b52a9fd
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition.html
@@ -0,0 +1,70 @@
+@layout("/common/_container.html"){
+<div class="row">
+    <div class="col-sm-12">
+        <div class="ibox float-e-margins">
+
+            <div class="ibox-title">
+                <h5>车辆管理</h5>
+            </div>
+            <div class="ibox-content">
+                <div class="row row-lg">
+                    <div class="col-sm-12">
+                        <div class="row">
+                            <div class="col-sm-3">
+                                <#TimeCon id="createTime" name="添加时间" isTime="false"/>
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="id" name="车辆ID" />
+
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="brandName" name="车辆品牌" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="modelName" name="车辆类型" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="carColor" name="车辆颜色" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="serverStr" name="服务模式" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="carLicensePlate" name="车牌号" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="driverName" name="关联司机" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#button name="搜索" icon="fa-search" clickFun="TCar.search()"/>
+                                <#button name="重置" icon="fa-trash" clickFun="TCar.resetSearch()" space="true"/>
+                            </div>
+                            <div class="col-sm-3">
+                                <input type="file" name="file" style="width:0px;height:0px;" id="uploadEventFile" onchange="TCar.exportCar()">
+                            </div>
+                        </div>
+                        <div class="hidden-xs" id="TCarTableToolbar" role="group">
+                            <#button name="添加" icon="fa-plus" clickFun="TCar.openAddTCar()"/>
+                            <#button name="修改" icon="fa-edit" clickFun="TCar.openTCarDetail()" space="true"/>
+                            <#button name="删除" icon="fa-remove" clickFun="TCar.delete()" space="true"/>
+                            <#button btnCss="info" name="下载模板" id="uploadModel" icon="fa fa-level-down" clickFun="TCar.uploadCarModel()" space="true"/>
+                            <#button btnCss="danger" name="导入" id="uploadEventBtn" icon="fa fa-level-up" space="true"/>
+                            <#button name="导出" icon="fa-remove" clickFun="TCar.outCar()" space="true"/>
+
+                        </div>
+                        <#table id="TCarTable"/>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/modular/system/tCar/tCar.js"></script>
+<script>
+    laydate.render({
+        elem: '#createTime'
+        ,range: true
+        ,lang:"en"
+    });
+</script>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html
new file mode 100644
index 0000000..9f9e6a9
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html
@@ -0,0 +1,381 @@
+@layout("/common/_container.html"){
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal" id="carInfoForm">
+            <input type="hidden" id="roleType" name="roleType" value="${roleType}">
+            <input hidden id="language" value="${language}">
+            @if(language==1){
+            <div class="row">
+                <div class="col-sm-11">
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">所属机构:</label>
+                        <div class="col-sm-9"  style="display: flex;align-items: center;">
+                            @if(roleType == 1){
+                            <div class="radio radio-info radio-inline">
+                                <input type="radio" id="companyType1" value="1" name="companyType" checked="" onclick="TCarInfoDlg.companyTypeClick(1)">
+                                <label for="companyType1"> 平台车辆 </label>
+                            </div>
+                            <div class="radio radio-success radio-inline">
+                                <input type="radio" id="companyTyp2" value="2" name="companyType" onclick="TCarInfoDlg.companyTypeClick(2)">
+                                <label for="companyTyp2"> 加盟车辆 </label>
+                            </div>
+                            <select class="form-control companyDiv" id="oneId" onchange="TCarInfoDlg.oneChange(this)" style="width: 200px;display: none;">
+                                <option value="">选择所属分公司</option>
+                                @for(obj in companyList!){
+                                <option value="${obj.id}">${obj.name}</option>
+                                @}
+                            </select>
+                            <select class="form-control companyDiv" id="twoId"  style="width: 200px;margin-left: 30px;display: none;">
+                                <option value="">选择所属加盟商</option>
+                            </select>
+                            @}else if(roleType == 2){
+                            <span class="control-label">${objectName!}</span>
+                            <select class="form-control" id="franchiseeId"  style="width: 200px;margin-left: 30px;">
+                                <option value="">选择所属加盟商</option>
+                                @for(obj in franchiseeList!){
+                                <option value="${obj.id}">${obj.name}</option>
+                                @}
+                            </select>
+                            @}else if(roleType == 3){
+                            <span class="control-label">${objectName!}</span>
+                            @}
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <fieldset>
+                            <label class="col-sm-3 control-label">服务模式:</label>
+                            <div class="col-sm-9">
+                                <div class="checkbox checkbox-success  checkbox-inline">
+                                    <input type="checkbox" name="serverBox" id="serverBox1" value="1" onclick="TCarInfoDlg.zcServerClick()">
+                                    <label for="serverBox1"> 摩托车 </label>
+                                </div>
+                                <div class="checkbox checkbox-success  checkbox-inline">
+                                    <input type="checkbox" name="serverBox" id="serverBox4" value="4">
+                                    <label for="serverBox4"> 同城快送 </label>
+                                </div>
+                            </div>
+                        </fieldset>
+                    </div>
+                    <div class="form-group" style="display: none;" id="zcModelDiv">
+                        <label class="col-sm-3 control-label">摩托车车型:</label>
+                        <div class="col-sm-9">
+                            <select class="form-control" id="zcModel" name="zcModel">
+                                <option value="">选择车型</option>
+                                @for(obj in zcModelList){
+                                <option value="${obj.id}">${obj.name}</option>
+                                @}
+                            </select>
+                        </div>
+                    </div>
+                    <div class="form-group" style="display: none;" id="kcModelDiv">
+                        <label class="col-sm-3 control-label">同城快送车型:</label>
+                        <div class="col-sm-9">
+                            <select class="form-control" id="kcModel" name="kcModel">
+                                <option value="">选择车型</option>
+                                @for(obj in kcModelList){
+                                <option value="${obj.id}">${obj.name}</option>
+                                @}
+                            </select>
+                        </div>
+                    </div>
+
+                    <#select id="carBrandId" name="车辆品牌:" onchange="TCarInfoDlg.brandChange(this)">
+                    <option value="">选择车辆品牌</option>
+                    @for(obj in brandList){
+                    <option value="${obj.id}">${obj.name}</option>
+                    @}
+                </#select>
+                <#select id="carModelId" name="车辆类型:">
+                <option value="">选择车辆类型</option>
+            </#select>
+            <#select id="carColor" name="车辆颜色:">
+            <option value="">选择车辆颜色</option>
+            <option value="1">黑色</option>
+            <option value="2">银色</option>
+            <option value="3">白色</option>
+            <option value="4">红色</option>
+            <option value="5">黄色</option>
+            <option value="6">橙色</option>
+            <option value="7">蓝色</option>
+        </#select>
+        <#input id="carLicensePlate" name="车牌号" />
+        <#avatar id="carPhoto" name="车辆照片:" />
+        <#input id="drivingLicenseNumber" name="行驶证编号" />
+        <#avatar id="drivingLicensePhoto" name="行驶证照片:" />
+        <#input id="annualInspectionTime" name="年检到期时间" type="text"/>
+        <#input id="commercialInsuranceTime" name="商业保险到期时间" type="text"/>
+    </div>
+</div>
+
+<div class="row btn-group-m-t">
+    <div class="col-sm-10 col-sm-offset-5">
+        <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TCarInfoDlg.addSubmit()"/>
+        <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/>
+    </div>
+</div>
+            @}
+            @if(language==2){
+<div class="row">
+    <div class="col-sm-11">
+        <div class="form-group">
+            <label class="col-sm-3 control-label">Affiliated organization:</label>
+            <div class="col-sm-9"  style="display: flex;align-items: center;">
+                @if(roleType == 1){
+                <div class="radio radio-info radio-inline">
+                    <input type="radio" id="companyType1" value="1" name="companyType" checked="" onclick="TCarInfoDlg.companyTypeClick(1)">
+                    <label for="companyType1"> Platform vehicle </label>
+                </div>
+                <div class="radio radio-success radio-inline">
+                    <input type="radio" id="companyTyp2" value="2" name="companyType" onclick="TCarInfoDlg.companyTypeClick(2)">
+                    <label for="companyTyp2"> Franchised vehicles </label>
+                </div>
+                <select class="form-control companyDiv" id="oneId" onchange="TCarInfoDlg.oneChange(this)" style="width: 200px;display: none;">
+                    <option value="">Select Branch</option>
+                    @for(obj in companyList!){
+                    <option value="${obj.id}">${obj.name}</option>
+                    @}
+                </select>
+                <select class="form-control companyDiv" id="twoId"  style="width: 200px;margin-left: 30px;display: none;">
+                    <option value="">Select the franchisee</option>
+                </select>
+                @}else if(roleType == 2){
+                <span class="control-label">${objectName!}</span>
+                <select class="form-control" id="franchiseeId"  style="width: 200px;margin-left: 30px;">
+                    <option value="">Select the franchisee</option>
+                    @for(obj in franchiseeList!){
+                    <option value="${obj.id}">${obj.name}</option>
+                    @}
+                </select>
+                @}else if(roleType == 3){
+                <span class="control-label">${objectName!}</span>
+                @}
+            </div>
+        </div>
+        <div class="form-group">
+            <fieldset>
+                <label class="col-sm-3 control-label">Service mode:</label>
+                <div class="col-sm-9">
+                    <div class="checkbox checkbox-success  checkbox-inline">
+                        <input type="checkbox" name="serverBox" id="serverBox1" value="1" onclick="TCarInfoDlg.zcServerClick()">
+                        <label for="serverBox1"> motorcycle </label>
+                    </div>
+                    <div class="checkbox checkbox-success  checkbox-inline">
+                        <input type="checkbox" name="serverBox" id="serverBox4" value="4">
+                        <label for="serverBox4"> Intra-city express delivery </label>
+                    </div>
+                </div>
+            </fieldset>
+        </div>
+        <div class="form-group" style="display: none;" id="zcModelDiv">
+            <label class="col-sm-3 control-label">Motorcycle model:</label>
+            <div class="col-sm-9">
+                <select class="form-control" id="zcModel" name="zcModel">
+                    <option value="">Select vehicle type</option>
+                    @for(obj in zcModelList){
+                    <option value="${obj.id}">${obj.name}</option>
+                    @}
+                </select>
+            </div>
+        </div>
+        <div class="form-group" style="display: none;" id="kcModelDiv">
+            <label class="col-sm-3 control-label">Local express delivery model:</label>
+            <div class="col-sm-9">
+                <select class="form-control" id="kcModel" name="kcModel">
+                    <option value="">Select vehicle type</option>
+                    @for(obj in kcModelList){
+                    <option value="${obj.id}">${obj.name}</option>
+                    @}
+                </select>
+            </div>
+        </div>
+
+        <#select id="carBrandId" name="Vehicle brand:" onchange="TCarInfoDlg.brandChange(this)">
+        <option value="">Select vehicle brand</option>
+        @for(obj in brandList){
+        <option value="${obj.id}">${obj.name}</option>
+        @}
+    </#select>
+    <#select id="carModelId" name="Vehicle type:">
+    <option value="">Vehicle type</option>
+</#select>
+<#select id="carColor" name="Vehicle color:">
+<option value="">Select vehicle color</option>
+<option value="1">black</option>
+<option value="2">silvery</option>
+<option value="3">white</option>
+<option value="4">red</option>
+<option value="5">yellow</option>
+<option value="6">orange</option>
+<option value="7">blue</option>
+</#select>
+<#input id="carLicensePlate" name="License plate number" />
+<#avatar id="carPhoto" name="Vehicle photos:" />
+<#input id="drivingLicenseNumber" name="Driving license number" />
+<#avatar id="drivingLicensePhoto" name="Photo of driving license:" />
+<#input id="annualInspectionTime" name="Annual inspection expiration time" type="text"/>
+<#input id="commercialInsuranceTime" name="Expiration time of commercial insurance" type="text"/>
+</div>
+</div>
+
+<div class="row btn-group-m-t">
+    <div class="col-sm-10 col-sm-offset-5">
+        <#button btnCss="info" name="Submit" id="ensure" icon="fa-check" clickFun="TCarInfoDlg.addSubmit()"/>
+        <#button btnCss="danger" name="Cancel" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/>
+    </div>
+</div>
+            @}
+            @if(language==3){
+<div class="row">
+    <div class="col-sm-11">
+        <div class="form-group">
+            <label class="col-sm-3 control-label">Organisasi Afiliasi:</label>
+            <div class="col-sm-9"  style="display: flex;align-items: center;">
+                @if(roleType == 1){
+                <div class="radio radio-info radio-inline">
+                    <input type="radio" id="companyType1" value="1" name="companyType" checked="" onclick="TCarInfoDlg.companyTypeClick(1)">
+                    <label for="companyType1"> Kendaraan platform </label>
+                </div>
+                <div class="radio radio-success radio-inline">
+                    <input type="radio" id="companyTyp2" value="2" name="companyType" onclick="TCarInfoDlg.companyTypeClick(2)">
+                    <label for="companyTyp2"> Kendaraan waralaba </label>
+                </div>
+                <select class="form-control companyDiv" id="oneId" onchange="TCarInfoDlg.oneChange(this)" style="width: 200px;display: none;">
+                    <option value="">Pilih Branch</option>
+                    @for(obj in companyList!){
+                    <option value="${obj.id}">${obj.name}</option>
+                    @}
+                </select>
+                <select class="form-control companyDiv" id="twoId"  style="width: 200px;margin-left: 30px;display: none;">
+                    <option value="">Pilih pemilik franchise</option>
+                </select>
+                @}else if(roleType == 2){
+                <span class="control-label">${objectName!}</span>
+                <select class="form-control" id="franchiseeId"  style="width: 200px;margin-left: 30px;">
+                    <option value="">Pilih pemilik franchise</option>
+                    @for(obj in franchiseeList!){
+                    <option value="${obj.id}">${obj.name}</option>
+                    @}
+                </select>
+                @}else if(roleType == 3){
+                <span class="control-label">${objectName!}</span>
+                @}
+            </div>
+        </div>
+        <div class="form-group">
+            <fieldset>
+                <label class="col-sm-3 control-label">Mode Layanan:</label>
+                <div class="col-sm-9">
+                    <div class="checkbox checkbox-success  checkbox-inline">
+                        <input type="checkbox" name="serverBox" id="serverBox1" value="1" onclick="TCarInfoDlg.zcServerClick()">
+                        <label for="serverBox1"> sepeda motor </label>
+                    </div>
+                    <div class="checkbox checkbox-success  checkbox-inline">
+                        <input type="checkbox" name="serverBox" id="serverBox4" value="4">
+                        <label for="serverBox4"> Pengiriman Ekspres Dalam Kota </label>
+                    </div>
+                </div>
+            </fieldset>
+        </div>
+        <div class="form-group" style="display: none;" id="zcModelDiv">
+            <label class="col-sm-3 control-label">Pengaturan model sepeda motor:</label>
+            <div class="col-sm-9">
+                <select class="form-control" id="zcModel" name="zcModel">
+                    <option value="">Pilih Jenis Kendaraan</option>
+                    @for(obj in zcModelList){
+                    <option value="${obj.id}">${obj.name}</option>
+                    @}
+                </select>
+            </div>
+        </div>
+        <div class="form-group" style="display: none;" id="kcModelDiv">
+            <label class="col-sm-3 control-label">Model pengiriman ekspres lokal:</label>
+            <div class="col-sm-9">
+                <select class="form-control" id="kcModel" name="kcModel">
+                    <option value="">Pilih Jenis Kendaraan</option>
+                    @for(obj in kcModelList){
+                    <option value="${obj.id}">${obj.name}</option>
+                    @}
+                </select>
+            </div>
+        </div>
+
+        <#select id="carBrandId" name="Merek kendaraan:" onchange="TCarInfoDlg.brandChange(this)">
+        <option value="">Pilih Merek Kendaraan</option>
+        @for(obj in brandList){
+        <option value="${obj.id}">${obj.name}</option>
+        @}
+    </#select>
+    <#select id="carModelId" name="Jenis Kendaraan:">
+    <option value="">Pilih Jenis Kendaraan</option>
+</#select>
+<#select id="carColor" name="Warna kendaraan:">
+    <option value="">Pilih Warna Kendaraan</option>
+    <option value="1">hitam</option>
+    <option value="2">perak</option>
+    <option value="3">putih</option>
+    <option value="4">merah</option>
+    <option value="5">kuning</option>
+    <option value="6">oranye</option>
+    <option value="7">biru</option>
+</#select>
+<#input id="carLicensePlate" name="车牌号" />
+<#avatar id="carPhoto" name="Nomor SIM Mengemudi:" />
+<#input id="drivingLicenseNumber" name="Nomor SIM Mengemudi" />
+<#avatar id="drivingLicensePhoto" name="Foto SIM:" />
+<#input id="annualInspectionTime" name="Waktu Kedaluwarsa Inspeksi Tahunan" type="text"/>
+<#input id="commercialInsuranceTime" name="Waktu kedaluwarsa asuransi komersial" type="text"/>
+</div>
+</div>
+
+<div class="row btn-group-m-t">
+    <div class="col-sm-10 col-sm-offset-5">
+        <#button btnCss="info" name="Kirim" id="ensure" icon="fa-check" clickFun="TCarInfoDlg.addSubmit()"/>
+        <#button btnCss="danger" name="Batal" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/>
+    </div>
+</div>
+            @}
+
+        </div>
+
+    </div>
+</div>
+<script src="${ctxPath}/modular/system/tCar/tCar_info.js"></script>
+<script>
+    laydate.render({
+        elem: '#annualInspectionTime'
+        ,lang:"en"
+    });
+    laydate.render({
+        elem: '#commercialInsuranceTime'
+        ,lang:"en"
+    });
+    laydate.render({
+        elem: '#certifyDateA'
+        ,lang:"en"
+    });
+    laydate.render({
+        elem: '#transDateStart'
+        ,lang:"en"
+    });
+    laydate.render({
+        elem: '#transDateStop'
+        ,lang:"en"
+    });
+    laydate.render({
+        elem: '#certifyDateB'
+        ,lang:"en"
+    });
+    laydate.render({
+        elem: '#nextFixDate'
+        ,lang:"en"
+    });
+    laydate.render({
+        elem: '#GPSInstallDate'
+        ,lang:"en"
+    });
+    laydate.render({
+        elem: '#registerDate'
+        ,lang:"en"
+    });
+</script>
+@}
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_edit.html
new file mode 100644
index 0000000..16f5070
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_edit.html
@@ -0,0 +1,401 @@
+@layout("/common/_container.html"){
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal" id="carInfoForm">
+            <input type="hidden" id="id" name="id" value="${item.id}">
+            <input hidden id="language" value="${language}">
+            <input type="hidden" id="roleType" name="roleType" value="${roleType}">
+            @if(language==1){
+            <div class="row">
+                <div class="col-sm-11">
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">所属机构:</label>
+                        <div class="col-sm-9"  style="display: flex;align-items: center;">
+                            @if(roleType == 1){
+                            <div class="radio radio-info radio-inline">
+                                <input type="radio" id="companyType1" value="1" name="companyType" ${1 == companyType ? 'checked=checked' : ''} onclick="TCarInfoDlg.companyTypeClick(1)">
+                                <label for="companyType1"> 平台车辆 </label>
+                            </div>
+                            <div class="radio radio-success radio-inline">
+                                <input type="radio" id="companyTyp2" value="2" name="companyType" ${2 == companyType ? 'checked=checked' : ''} onclick="TCarInfoDlg.companyTypeClick(2)">
+                                <label for="companyTyp2"> 加盟车辆 </label>
+                            </div>
+                            <select class="form-control companyDiv" id="oneId" onchange="TCarInfoDlg.oneChange(this)" style="width: 200px">
+                                <option value="">选择所属分公司</option>
+                                @for(obj in companyList!){
+                                <option value="${obj.id}" ${obj.id == item.companyId ? 'selected=selected' : ''}>${obj.name}</option>
+                                @}
+                            </select>
+                            <select class="form-control companyDiv" id="twoId"  style="width: 200px;margin-left: 30px;">
+                                <option value="">选择所属加盟商</option>
+                                @for(obj in franchiseeList!){
+                                <option value="${obj.id}" ${obj.id == item.franchiseeId ? 'selected=selected' : ''}>${obj.name}</option>
+                                @}
+                            </select>
+                            @}else if(roleType == 2){
+                            <span class="control-label">${objectName!}</span>
+                            <select class="form-control" id="franchiseeId"  style="width: 200px;margin-left: 30px;">
+                                <option value="">选择所属加盟商</option>
+                                @for(obj in franchiseeList!){
+                                <option value="${obj.id}" ${obj.id == item.franchiseeId ? 'selected=selected' : ''}>${obj.name}</option>
+                                @}
+                            </select>
+                            @}else if(roleType == 3){
+                            <span class="control-label">${objectName!}</span>
+                            @}
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <fieldset>
+                            <label class="col-sm-3 control-label">服务模式:</label>
+                            <div class="col-sm-9">
+                                <div class="checkbox checkbox-success  checkbox-inline">
+                                    <input type="checkbox" name="serverBox" id="serverBox1" value="1" ${2 == one ? 'checked=checked' : ''} onclick="TCarInfoDlg.zcServerClick()">
+                                    <label for="serverBox1"> 摩托车 </label>
+                                </div>
+                                <div class="checkbox checkbox-success  checkbox-inline">
+                                    <input type="checkbox" name="serverBox" id="serverBox4" value="4" ${2 == four ? 'checked=checked' : ''}>
+                                    <label for="serverBox4"> 同城快送 </label>
+                                </div>
+                            </div>
+                        </fieldset>
+                    </div>
+                    <div class="form-group" id="zcModelDiv">
+                        <label class="col-sm-3 control-label">摩托车车型:</label>
+                        <div class="col-sm-9">
+                            <select class="form-control" id="zcModel" name="zcModel">
+                                <option value="">选择车型</option>
+                                @for(obj in zcModelList){
+                                <option value="${obj.id}" ${obj.id == zcModel ? 'selected=selected' : ''}>${obj.name}</option>
+                                @}
+                            </select>
+                        </div>
+                    </div>
+                    <#select id="carBrandId" name="车辆品牌:" onchange="TCarInfoDlg.brandChange(this)">
+                    <option value="">选择车辆品牌</option>
+                    @for(obj in brandList){
+                    <option value="${obj.id}" ${obj.id == item.carBrandId ? 'selected=selected' : ''}>${obj.name}</option>
+                    @}
+                </#select>
+                <#select id="carModelId" name="车辆类型:">
+                <option value="">选择车辆类型</option>
+                @for(obj in modelList){
+                <option value="${obj.id}" ${obj.id == item.carModelId ? 'selected=selected' : ''}>${obj.name}</option>
+                @}
+            </#select>
+            <#select id="carColor" name="车辆颜色:">
+            <option value="">选择车辆颜色</option>
+            <option value="1" ${'1' == item.carColor ? 'selected=selected' : ''}>黑色</option>
+            <option value="2" ${'2' == item.carColor ? 'selected=selected' : ''}>银色</option>
+            <option value="3" ${'3' == item.carColor ? 'selected=selected' : ''}>白色</option>
+            <option value="4" ${'4' == item.carColor ? 'selected=selected' : ''}>红色</option>
+            <option value="5" ${'5' == item.carColor ? 'selected=selected' : ''}>黄色</option>
+            <option value="6" ${'6' == item.carColor ? 'selected=selected' : ''}>橙色</option>
+            <option value="7" ${'7' == item.carColor ? 'selected=selected' : ''}>蓝色</option>
+        </#select>
+        <#input id="carLicensePlate" name="车牌号" value="${item.carLicensePlate}"/>
+        <#avatar id="carPhoto" name="车辆照片:" avatarImg="${item.carPhoto}"/>
+        <#input id="drivingLicenseNumber" name="行驶证编号" value="${item.drivingLicenseNumber}"/>
+        <#avatar id="drivingLicensePhoto" name="行驶证照片:" avatarImg="${item.drivingLicensePhoto}"/>
+        <#input id="annualInspectionTime" name="年检到期时间" type="text" value="${item.annualInspectionTime}"/>
+        <#input id="commercialInsuranceTime" name="商业保险到期时间" type="text" value="${item.commercialInsuranceTime}"/>
+    </div>
+</div>
+
+<div class="row btn-group-m-t">
+    <div class="col-sm-10 col-sm-offset-5">
+        <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TCarInfoDlg.editSubmit()"/>
+        <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/>
+    </div>
+</div>
+            @}
+            @if(language==2){
+<div class="row">
+    <div class="col-sm-11">
+        <div class="form-group">
+            <label class="col-sm-3 control-label">Affiliated organization:</label>
+            <div class="col-sm-9"  style="display: flex;align-items: center;">
+                @if(roleType == 1){
+                <div class="radio radio-info radio-inline">
+                    <input type="radio" id="companyType1" value="1" name="companyType" ${1 == companyType ? 'checked=checked' : ''} onclick="TCarInfoDlg.companyTypeClick(1)">
+                    <label for="companyType1"> Platform vehicle </label>
+                </div>
+                <div class="radio radio-success radio-inline">
+                    <input type="radio" id="companyTyp2" value="2" name="companyType" ${2 == companyType ? 'checked=checked' : ''} onclick="TCarInfoDlg.companyTypeClick(2)">
+                    <label for="companyTyp2"> Franchised vehicles </label>
+                </div>
+                <select class="form-control companyDiv" id="oneId" onchange="TCarInfoDlg.oneChange(this)" style="width: 200px">
+                    <option value="">Select Branch</option>
+                    @for(obj in companyList!){
+                    <option value="${obj.id}" ${obj.id == item.companyId ? 'selected=selected' : ''}>${obj.name}</option>
+                    @}
+                </select>
+                <select class="form-control companyDiv" id="twoId"  style="width: 200px;margin-left: 30px;">
+                    <option value="">Select the franchisee</option>
+                    @for(obj in franchiseeList!){
+                    <option value="${obj.id}" ${obj.id == item.franchiseeId ? 'selected=selected' : ''}>${obj.name}</option>
+                    @}
+                </select>
+                @}else if(roleType == 2){
+                <span class="control-label">${objectName!}</span>
+                <select class="form-control" id="franchiseeId"  style="width: 200px;margin-left: 30px;">
+                    <option value="">Select the franchisee</option>
+                    @for(obj in franchiseeList!){
+                    <option value="${obj.id}" ${obj.id == item.franchiseeId ? 'selected=selected' : ''}>${obj.name}</option>
+                    @}
+                </select>
+                @}else if(roleType == 3){
+                <span class="control-label">${objectName!}</span>
+                @}
+            </div>
+        </div>
+        <div class="form-group">
+            <fieldset>
+                <label class="col-sm-3 control-label">Service mode:</label>
+                <div class="col-sm-9">
+                    <div class="checkbox checkbox-success  checkbox-inline">
+                        <input type="checkbox" name="serverBox" id="serverBox1" value="1" ${2 == one ? 'checked=checked' : ''} onclick="TCarInfoDlg.zcServerClick()">
+                        <label for="serverBox1"> motorcycle </label>
+                    </div>
+                    <div class="checkbox checkbox-success  checkbox-inline">
+                        <input type="checkbox" name="serverBox" id="serverBox4" value="4" ${2 == four ? 'checked=checked' : ''}>
+                        <label for="serverBox4"> Intra-city express delivery </label>
+                    </div>
+                </div>
+            </fieldset>
+        </div>
+        <div class="form-group" id="zcModelDiv">
+            <label class="col-sm-3 control-label">Motorcycle model setting:</label>
+            <div class="col-sm-9">
+                <select class="form-control" id="zcModel" name="zcModel">
+                    <option value="">Select vehicle type</option>
+                    @for(obj in zcModelList){
+                    <option value="${obj.id}" ${obj.id == zcModel ? 'selected=selected' : ''}>${obj.name}</option>
+                    @}
+                </select>
+            </div>
+        </div>
+        <div class="form-group" id="kcModelDiv">
+            <label class="col-sm-3 control-label">Cross city travel model:</label>
+            <div class="col-sm-9">
+                <select class="form-control" id="kcModel" name="kcModel">
+                    <option value="">Select vehicle type</option>
+                    @for(obj in kcModelList){
+                    <option value="${obj.id}" ${obj.id == kcModel ? 'selected=selected' : ''}>${obj.name}</option>
+                    @}
+                </select>
+            </div>
+        </div>
+        <#select id="carBrandId" name="Vehicle brand:" onchange="TCarInfoDlg.brandChange(this)">
+        <option value="">Select vehicle brand</option>
+        @for(obj in brandList){
+        <option value="${obj.id}" ${obj.id == item.carBrandId ? 'selected=selected' : ''}>${obj.name}</option>
+        @}
+    </#select>
+    <#select id="carModelId" name="Vehicle type:">
+    <option value="">Select vehicle type</option>
+    @for(obj in modelList){
+    <option value="${obj.id}" ${obj.id == item.carModelId ? 'selected=selected' : ''}>${obj.name}</option>
+    @}
+</#select>
+<#select id="carColor" name="Vehicle color:">
+<option value="">Select vehicle color</option>
+<option value="1" ${'1' == item.carColor ? 'selected=selected' : ''}>black</option>
+<option value="2" ${'2' == item.carColor ? 'selected=selected' : ''}>silvery</option>
+<option value="3" ${'3' == item.carColor ? 'selected=selected' : ''}>white</option>
+<option value="4" ${'4' == item.carColor ? 'selected=selected' : ''}>red</option>
+<option value="5" ${'5' == item.carColor ? 'selected=selected' : ''}>yellow</option>
+<option value="6" ${'6' == item.carColor ? 'selected=selected' : ''}>orange</option>
+<option value="7" ${'7' == item.carColor ? 'selected=selected' : ''}>blue</option>
+</#select>
+<#input id="carLicensePlate" name="License plate number" value="${item.carLicensePlate}"/>
+<#avatar id="carPhoto" name="Vehicle photos:" avatarImg="${item.carPhoto}"/>
+<#input id="drivingLicenseNumber" name="Driving license number" value="${item.drivingLicenseNumber}"/>
+<#avatar id="drivingLicensePhoto" name="Photo of driving license:" avatarImg="${item.drivingLicensePhoto}"/>
+<#input id="annualInspectionTime" name="Annual inspection expiration time" type="text" value="${item.annualInspectionTime}"/>
+<#input id="commercialInsuranceTime" name="Expiration time of commercial insurance" type="text" value="${item.commercialInsuranceTime}"/>
+</div>
+</div>
+
+<div class="row btn-group-m-t">
+    <div class="col-sm-10 col-sm-offset-5">
+        <#button btnCss="info" name="Submit" id="ensure" icon="fa-check" clickFun="TCarInfoDlg.editSubmit()"/>
+        <#button btnCss="danger" name="Cancel" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/>
+    </div>
+</div>
+            @}
+            @if(language==3){
+<div class="row">
+    <div class="col-sm-11">
+        <div class="form-group">
+            <label class="col-sm-3 control-label">Organisasi Afiliasi:</label>
+            <div class="col-sm-9"  style="display: flex;align-items: center;">
+                @if(roleType == 1){
+                <div class="radio radio-info radio-inline">
+                    <input type="radio" id="companyType1" value="1" name="companyType" ${1 == companyType ? 'checked=checked' : ''} onclick="TCarInfoDlg.companyTypeClick(1)">
+                    <label for="companyType1"> Kendaraan platform </label>
+                </div>
+                <div class="radio radio-success radio-inline">
+                    <input type="radio" id="companyTyp2" value="2" name="companyType" ${2 == companyType ? 'checked=checked' : ''} onclick="TCarInfoDlg.companyTypeClick(2)">
+                    <label for="companyTyp2"> Kendaraan waralaba </label>
+                </div>
+                <select class="form-control companyDiv" id="oneId" onchange="TCarInfoDlg.oneChange(this)" style="width: 200px">
+                    <option value="">Pilih Branch</option>
+                    @for(obj in companyList!){
+                    <option value="${obj.id}" ${obj.id == item.companyId ? 'selected=selected' : ''}>${obj.name}</option>
+                    @}
+                </select>
+                <select class="form-control companyDiv" id="twoId"  style="width: 200px;margin-left: 30px;">
+                    <option value="">Pilih pemilik franchise</option>
+                    @for(obj in franchiseeList!){
+                    <option value="${obj.id}" ${obj.id == item.franchiseeId ? 'selected=selected' : ''}>${obj.name}</option>
+                    @}
+                </select>
+                @}else if(roleType == 2){
+                <span class="control-label">${objectName!}</span>
+                <select class="form-control" id="franchiseeId"  style="width: 200px;margin-left: 30px;">
+                    <option value="">Pilih pemilik franchise</option>
+                    @for(obj in franchiseeList!){
+                    <option value="${obj.id}" ${obj.id == item.franchiseeId ? 'selected=selected' : ''}>${obj.name}</option>
+                    @}
+                </select>
+                @}else if(roleType == 3){
+                <span class="control-label">${objectName!}</span>
+                @}
+            </div>
+        </div>
+        <div class="form-group">
+            <fieldset>
+                <label class="col-sm-3 control-label">Mode Layanan:</label>
+                <div class="col-sm-9">
+                    <div class="checkbox checkbox-success  checkbox-inline">
+                        <input type="checkbox" name="serverBox" id="serverBox1" value="1" ${2 == one ? 'checked=checked' : ''} onclick="TCarInfoDlg.zcServerClick()">
+                        <label for="serverBox1"> sepeda motor </label>
+                    </div>
+                    <div class="checkbox checkbox-success  checkbox-inline">
+                        <input type="checkbox" name="serverBox" id="serverBox4" value="4" ${2 == four ? 'checked=checked' : ''}>
+                        <label for="serverBox4"> Pengiriman Ekspres Dalam Kota </label>
+                    </div>
+                </div>
+            </fieldset>
+        </div>
+        <div class="form-group" id="zcModelDiv">
+            <label class="col-sm-3 control-label">Pengaturan model sepeda motor:</label>
+            <div class="col-sm-9">
+                <select class="form-control" id="zcModel" name="zcModel">
+                    <option value="">Pilih Jenis Kendaraan</option>
+                    @for(obj in zcModelList){
+                    <option value="${obj.id}" ${obj.id == zcModel ? 'selected=selected' : ''}>${obj.name}</option>
+                    @}
+                </select>
+            </div>
+        </div>
+        <div class="form-group" id="kcModelDiv">
+            <label class="col-sm-3 control-label">Model perjalanan melintasi kota:</label>
+            <div class="col-sm-9">
+                <select class="form-control" id="kcModel" name="kcModel">
+                    <option value="">Pilih Jenis Kendaraan</option>
+                    @for(obj in kcModelList){
+                    <option value="${obj.id}" ${obj.id == kcModel ? 'selected=selected' : ''}>${obj.name}</option>
+                    @}
+                </select>
+            </div>
+        </div>
+        <#select id="carBrandId" name="Merek kendaraan:" onchange="TCarInfoDlg.brandChange(this)">
+        <option value="">Pilih Merek Kendaraan</option>
+        @for(obj in brandList){
+        <option value="${obj.id}" ${obj.id == item.carBrandId ? 'selected=selected' : ''}>${obj.name}</option>
+        @}
+    </#select>
+    <#select id="carModelId" name="Jenis Kendaraan:">
+    <option value="">Pilih Jenis Kendaraan</option>
+    @for(obj in modelList){
+    <option value="${obj.id}" ${obj.id == item.carModelId ? 'selected=selected' : ''}>${obj.name}</option>
+    @}
+</#select>
+<#select id="carColor" name="车辆颜色:">
+<option value="">选择车辆颜色</option>
+<option value="1" ${'1' == item.carColor ? 'selected=selected' : ''}>hitam</option>
+<option value="2" ${'2' == item.carColor ? 'selected=selected' : ''}>perak</option>
+<option value="3" ${'3' == item.carColor ? 'selected=selected' : ''}>putih</option>
+<option value="4" ${'4' == item.carColor ? 'selected=selected' : ''}>merah</option>
+<option value="5" ${'5' == item.carColor ? 'selected=selected' : ''}>kuning</option>
+<option value="6" ${'6' == item.carColor ? 'selected=selected' : ''}>oranye</option>
+<option value="7" ${'7' == item.carColor ? 'selected=selected' : ''}>biru</option>
+</#select>
+<#input id="carLicensePlate" name="Nomor plat nomor" value="${item.carLicensePlate}"/>
+<#avatar id="carPhoto" name="Foto kendaraan:" avatarImg="${item.carPhoto}"/>
+<#input id="drivingLicenseNumber" name="Nomor SIM Mengemudi" value="${item.drivingLicenseNumber}"/>
+<#avatar id="drivingLicensePhoto" name="Foto SIM:" avatarImg="${item.drivingLicensePhoto}"/>
+<#input id="annualInspectionTime" name="Waktu Kedaluwarsa Inspeksi Tahunan" type="text" value="${item.annualInspectionTime}"/>
+<#input id="commercialInsuranceTime" name="Waktu kedaluwarsa asuransi komersial" type="text" value="${item.commercialInsuranceTime}"/>
+</div>
+</div>
+
+<div class="row btn-group-m-t">
+    <div class="col-sm-10 col-sm-offset-5">
+        <#button btnCss="info" name="Kirim" id="ensure" icon="fa-check" clickFun="TCarInfoDlg.editSubmit()"/>
+        <#button btnCss="danger" name="Batal" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/>
+    </div>
+</div>
+            @}
+
+        </div>
+
+    </div>
+</div>
+<script src="${ctxPath}/modular/system/tCar/tCar_info.js"></script>
+<script>
+    laydate.render({
+        elem: '#annualInspectionTime'
+        ,lang:"en"
+    });
+    laydate.render({
+        elem: '#commercialInsuranceTime'
+        ,lang:"en"
+    });
+    laydate.render({
+        elem: '#certifyDateA'
+        ,lang:"en"
+    });
+    laydate.render({
+        elem: '#transDateStart'
+        ,lang:"en"
+    });
+    laydate.render({
+        elem: '#transDateStop'
+        ,lang:"en"
+    });
+    laydate.render({
+
+        elem: '#certifyDateB'
+        ,lang:"en"
+    });
+    laydate.render({
+        elem: '#nextFixDate'
+        ,lang:"en"
+    });
+    laydate.render({
+        elem: '#GPSInstallDate'
+        ,lang:"en"
+    });
+    laydate.render({
+        elem: '#registerDate'
+        ,lang:"en"
+    });
+</script>
+<script type="application/javascript">
+    $(function() {
+        var companyType = $("input[name='companyType']:checked").val();
+        if (1 == companyType){
+            $(".companyDiv").hide();
+        } else if (2 == companyType){
+            $(".companyDiv").show();
+        }
+
+        TCarInfoDlg.zcServerClick();
+        TCarInfoDlg.kcServerClick();
+
+    });
+</script>
+@}
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tCompetition/carInsurance.js b/cloud-server-management/src/main/webapp/static/modular/system/tCompetition/carInsurance.js
new file mode 100644
index 0000000..8ffae41
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tCompetition/carInsurance.js
@@ -0,0 +1,123 @@
+/**
+ * 车辆管理管理初始化
+ */
+var CarInsurance = {
+    id: "TCarTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1,
+    carId: $('#carId').val()
+};
+
+/**
+ * 初始化表格的列
+ */
+CarInsurance.initColumn = function () {
+    return [
+        {field: 'selectItem', radio: true},
+        {title: '保险公司名称', field: 'insurCom', visible: true, align: 'center', valign: 'middle'},
+        {title: '保险号', field: 'insurNum', visible: true, align: 'center', valign: 'middle'},
+        {title: '保险类型', field: 'insurType', visible: true, align: 'center', valign: 'middle'},
+        {title: '保险金额', field: 'insurCount', visible: true, align: 'center', valign: 'middle'},
+        {title: '保险生效时间', field: 'insurEff', visible: true, align: 'center', valign: 'middle'},
+        {title: '保险到期时间', field: 'insurExp', visible: true, align: 'center', valign: 'middle'}
+    ];
+};
+
+/**
+ * 检查是否选中
+ */
+CarInsurance.check = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length == 0){
+        if(language==1){
+            Feng.info("请先选中表格中的某一记录!");
+        }else if(language==2){
+            Feng.info("Please select a record in the table first!");
+        }else {
+            Feng.info("Pilih catatan di tabel terlebih dahulu!");
+        }
+        return false;
+    }else{
+        CarInsurance.seItem = selected[0];
+        return true;
+    }
+};
+
+/**
+ * 点击添加车辆管理
+ */
+CarInsurance.openAddCarInsurance = function () {
+    var index = layer.open({
+        type: 2,
+        title: language==1?'添加':(language==2?'Add':'Tambahkan'),
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/tCar/showAddCarInsurance?carId=' + CarInsurance.carId
+    });
+    this.layerIndex = index;
+};
+
+/**
+ * 打开查看车辆管理详情
+ */
+CarInsurance.openCarInsuranceDetail = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: language==1?'编辑':(language==2?'Edit':'Edit'),
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tCar/showEditCarInsurance?id=' + CarInsurance.seItem.id + "&carId=" + CarInsurance.carId
+        });
+        this.layerIndex = index;
+    }
+};
+var language=1;
+/**
+ * 删除车辆管理
+ */
+CarInsurance.delete = function () {
+    if (this.check()) {
+        swal({
+            title: "您是否确认删除?",
+            text: language==1?"请谨慎操作!":(language==2?' Please operate with caution!':'Harap beroperasi dengan hati -hati!'),
+            type: "warning",
+            showCancelButton: true,
+            confirmButtonColor: "#DD6B55",
+            confirmButtonText: language==1?"删除":(language==2?'Delete':'Hapus'),
+            closeOnConfirm: true
+        }, function () {
+            var ajax = new $ax(Feng.ctxPath + "/tCar/delCarInsurance", function (data) {
+                swal("删除成功", "您已经成功删除了。", "success");
+                CarInsurance.table.refresh();
+            }, function (data) {
+                swal("删除失败", data.responseJSON.message+"!", "warning");
+            });
+            ajax.set("id", CarInsurance.seItem.id);
+            ajax.start();
+        });
+    }
+};
+
+
+/**
+ * 查询车辆管理列表
+ */
+CarInsurance.search = function () {
+    var queryData = {};
+    CarInsurance.table.refresh({query: queryData});
+};
+
+$(function () {
+    var defaultColunms = CarInsurance.initColumn();
+    var table = new BSTable(CarInsurance.id, "/tCar/queryInsuranceList", defaultColunms);
+    table.setPaginationType("server");
+    table.setQueryParams({
+        carId: CarInsurance.carId
+    })
+    CarInsurance.table = table.init();
+});
+
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tCompetition/carInsuranceInfo.js b/cloud-server-management/src/main/webapp/static/modular/system/tCompetition/carInsuranceInfo.js
new file mode 100644
index 0000000..7969a43
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tCompetition/carInsuranceInfo.js
@@ -0,0 +1,118 @@
+var CarInsuranceInfo = {
+    id: $('#id').val(),
+    carId: $('#carId').val()
+}
+
+var language=1;
+/**
+ * 关闭此对话框
+ */
+CarInsuranceInfo.close = function() {
+    parent.layer.close(window.parent.CarInsurance.layerIndex);
+}
+
+/**
+ * 提交添加
+ */
+CarInsuranceInfo.addSubmit = function() {
+    var insurCom = $('#insurCom').val();
+    var insurNum = $('#insurNum').val();
+    var insurType = $('#insurType').val();
+    var insurCount = $('#insurCount').val();
+    var insurEff = $('#insurEff').val();
+    var insurExp = $('#insurExp').val();
+    if(null == insurCom || '' == insurCom){
+        Feng.error("保险公司名称不能为空");
+        return;
+    }
+    if(null == insurNum || '' == insurNum){
+        Feng.error("保险号不能为空");
+        return;
+    }
+    if(null == insurType || '' == insurType){
+        Feng.error("保险类型不能为空");
+        return;
+    }
+    if(null == insurCount || '' == insurCount){
+        Feng.error("保险金额不能为空");
+        return;
+    }
+    if(null == insurEff || '' == insurEff){
+        Feng.error("保险生效时间不能为空");
+        return;
+    }
+    if(null == insurExp || '' == insurExp){
+        Feng.error("保险到期时间不能为空");
+        return;
+    }
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tCar/saveCarInsurance", function(data){
+          if(language==1){
+            Feng.success("添加成功!");
+        }else if(language==2){
+            Feng.success("Successfully added!");
+        }else {
+            Feng.success("Sangat berhasil ditambah!");
+        }
+        window.parent.CarInsurance.table.refresh();
+        CarInsuranceInfo.close();
+    },function(data){
+        if(language==1){
+            Feng.error("添加失败!" + data.responseJSON.message + "!");
+        }else if(language==2){
+            Feng.error("Fail to add!" + data.responseJSON.message + "!");
+        }else {
+            Feng.error("Gagal menambah!" + data.responseJSON.message + "!");
+        }
+    });
+    ajax.set(this.tCarInfoData);
+    ajax.setData({
+        id: CarInsuranceInfo.id,
+        carId: CarInsuranceInfo.carId,
+        insurCom: insurCom,
+        insurNum: insurNum,
+        insurType: insurType,
+        insurCount: insurCount,
+        insurEff: insurEff,
+        insurExp: insurExp
+    })
+    ajax.start();
+}
+
+/**
+ * 提交修改
+ */
+CarInsuranceInfo.queryInfo = function() {
+//提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tCar/queryCarInsurance", function(data){
+        var s = data.data;
+        $('#insurCom').val(s.insurCom);
+        $('#insurNum').val(s.insurNum);
+        $('#insurType').val(s.insurType);
+        $('#insurCount').val(s.insurCount);
+        $('#insurEff').val(s.insurEff.split(" ")[0]);
+        $('#insurExp').val(s.insurExp.split(" ")[0]);
+    },function(data){
+        if(language==1){
+            Feng.error("修改失败!" + data.responseJSON.message + "!");
+        }else if(language==2){
+            Feng.error("Fail to modify!" + data.responseJSON.message + "!");
+        }else {
+            Feng.error("Gagal mengubah!" + data.responseJSON.message + "!");;
+        }
+    });
+    ajax.set(this.tCarInfoData);
+    ajax.setData({
+        id: CarInsuranceInfo.id
+    })
+    ajax.start();
+
+}
+
+$(function() {
+    if(CarInsuranceInfo.id != ''){
+        CarInsuranceInfo.queryInfo()
+    }
+});
+
+
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tCompetition/tCar.js b/cloud-server-management/src/main/webapp/static/modular/system/tCompetition/tCar.js
new file mode 100644
index 0000000..05238e8
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tCompetition/tCar.js
@@ -0,0 +1,315 @@
+/**
+ * 车辆管理管理初始化
+ */
+var TCar = {
+    id: "TCarTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1
+};
+var language =1
+/**
+ * 初始化表格的列
+ */
+TCar.initColumn = function () {
+    return [
+        {field: 'selectItem', radio: true},
+        {title: '所在省', field: 'insertTime', visible: true, align: 'center', valign: 'middle',width:'8%',
+        },
+        {title: '所在市', field: 'id', visible: true, align: 'center', valign: 'middle'},
+        {title: '举办门店', field: 'companyName', visible: true, align: 'center', valign: 'middle',width:'8%',
+        },
+        {title:  '赛事名称', field: 'brandName', visible: true, align: 'center', valign: 'middle',width:'8%',
+        },
+        {title: '开始时间', field: 'modelName', visible: true, align: 'center', valign: 'middle',width:'8%',
+        },
+        {title: '结束时间', field: 'carColor', visible: true, align: 'center', valign: 'middle',width:'5%',
+        },
+        {title: '最大人数-已报名人数', field: 'serverStr', visible: true, align: 'center', valign: 'middle',width:'8%',
+        },
+        {title: '报名条件', field: 'carLicensePlate', visible: true, align: 'center', valign: 'middle',width:'8%',
+        },
+    ];
+};
+function currentTime(timestamp){
+    var time = timestamp + '';
+    if(time.length != 13){
+        timestamp = timestamp * 1000;
+    }
+    var date = new Date(timestamp);;
+    var Y = date.getFullYear() + '-';
+    var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
+    var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' ';
+
+    var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':';
+    var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':';
+    var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds());
+    var strDate = Y + M + D + h + m + s;
+    return strDate
+}
+
+function currentTime1(timestamp){
+    var time = timestamp + '';
+    if(time.length != 13){
+        timestamp = timestamp * 1000;
+    }
+    var date = new Date(timestamp);;
+    var Y = date.getFullYear() + '-';
+    var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
+    var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' ';
+
+    var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':';
+    var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':';
+    var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds());
+    var strDate = Y + M + D ;
+    return strDate
+}
+/**
+ * 检查是否选中
+ */
+TCar.check = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length == 0){
+            Feng.info("请先选中表格中的某一记录!");
+        return false;
+    }else{
+        TCar.seItem = selected[0];
+        return true;
+    }
+};
+
+/**
+ * 点击添加车辆管理
+ */
+TCar.openAddTCar = function () {
+    var index = layer.open({
+        type: 2,
+        title: '添加',
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/tCar/tCar_add'
+    });
+    this.layerIndex = index;
+};
+
+/**
+ * 打开查看车辆管理详情
+ */
+TCar.openTCarDetail = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title:'编辑',
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tCar/tCar_update/' + TCar.seItem.id
+        });
+        this.layerIndex = index;
+    }
+};
+
+/**
+ * 删除车辆管理
+ */
+TCar.delete = function () {
+    if (this.check()) {
+        var nickname = TCar.seItem.carLicensePlate;
+        if (nickname == "" || nickname == null || nickname == undefined){
+                nickname = "该车辆";
+        }else{
+            nickname = "【"+nickname+"】";
+        }
+        swal({
+           title: language==1?"您是否确认删除" + nickname + "?":(language==2?"Are you sure to delete the" + nickname + "?":"Apakah Anda pasti akan menghapus" + nickname + "?"),
+            text: language==1?"请谨慎操作!":(language==2?' Please operate with caution!':'Harap beroperasi dengan hati -hati!'),
+            type: "warning",
+            showCancelButton: true,
+            confirmButtonColor: "#DD6B55",
+            confirmButtonText: language==1?"删除":(language==2?'Delete':'Hapus'),
+            closeOnConfirm: true
+        }, function () {
+            var ajax = new $ax(Feng.ctxPath + "/tCar/delete", function (data) {
+                  if(language==1){
+                    swal("删除成功", "您已经成功删除了" + nickname + "。", "success");
+                }else if(language==2){
+                    swal("Delete succeeded!", "You have successfully deleted it" + nickname + "。", "success");
+                }else {
+                    swal("Hapus berhasil!", "Anda berhasil menghapus" + nickname + "。", "success");
+                }
+                TCar.table.refresh();
+            }, function (data) {
+                if(language==1){
+                    swal("删除失败", data.responseJSON.message + "!", "warning");
+                }else if(language==2){
+                    swal("Failed to delete", data.responseJSON.message + "!", "warning");
+                }else {
+                    swal("Hapus Gagal", data.responseJSON.message + "!", "warning");
+                }
+
+            });
+            ajax.set("tCarId",TCar.seItem.id);
+            ajax.start();
+        });
+    }
+};
+
+
+TCar.carInsurance = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: language==1?'车辆保险':(language==2?'Vehicle insurance':'Asuransi kendaraan'),
+            area: ['100%', '100%'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tCar/carInsurance?carId=' + TCar.seItem.id
+        });
+        this.layerIndex = index;
+    }
+};
+
+
+
+/**
+ * 查询车辆管理列表
+ */
+TCar.search = function () {
+    var queryData = {};
+    queryData['createTime'] = $("#createTime").val();
+    queryData['id'] = $("#id").val();
+    queryData['brandName'] = $("#brandName").val();
+    queryData['modelName'] = $("#modelName").val();
+    queryData['carColor'] = $("#carColor").val();
+    queryData['serverStr'] = $("#serverStr").val();
+    queryData['carLicensePlate'] = $("#carLicensePlate").val();
+    queryData['driverName'] = $("#driverName").val();
+    queryData['companyName'] = $("#companyName").val();
+    queryData['franchiseeName'] = $("#franchiseeName").val();
+    TCar.table.refresh({query: queryData});
+};
+
+TCar.resetSearch = function () {
+    $("#createTime").val("");
+    $("#id").val("");
+    $("#brandName").val("");
+    $("#modelName").val("");
+    $("#carColor").val("");
+    $("#serverStr").val("");
+    $("#carLicensePlate").val("");
+    $("#driverName").val("");
+    $("#companyName").val("");
+    $("#franchiseeName").val("");
+    TCar.search();
+};
+
+$(function () {
+    var defaultColunms = TCar.initColumn();
+    var table = new BSTable(TCar.id, "/tCar/list", defaultColunms);
+    table.setPaginationType("server");
+    TCar.table = table.init();
+});
+
+/**
+ * 下载模板
+ */
+TCar.uploadCarModel = function () {
+    window.location.href = Feng.ctxPath + "/tCar/uploadCarModel";
+}
+
+var agreement = function(){
+    this.init = function(){
+        //模拟上传excel  
+        $("#uploadEventBtn").unbind("click").bind("click",function(){
+            $("#uploadEventFile").click();
+        });
+    };
+}
+/**
+ * 导入合同
+ */
+TCar.exportCar = function () {
+    var uploadEventFile = $("#uploadEventFile").val();
+    if(uploadEventFile == ''){
+        if(language==1){
+            Feng.info("请选择Excel,再上传");
+        }else if(language==2){
+            Feng.info("Please select Excel and upload");
+        }else {
+            Feng.info("Silakan pilih Excel dan upload");
+        }
+    }else if(uploadEventFile.lastIndexOf(".xls")<0){//可判断以.xls和.xlsx结尾的excel  
+        if(language==1){
+            Feng.info("只能上传Excel文件");
+        }else if(language==2){
+            Feng.info("Only Excel files can be uploaded");
+        }else {
+            Feng.info("Hanya berkas Excel yang dapat diunggah");
+        }
+    }else{
+        var url = Feng.ctxPath + '/tCar/exportCar';
+        var file = document.querySelector('input[name=file]').files[0];
+        var reader = new FileReader();
+        if (file) {
+            var formData = new FormData();
+            formData.append("myfile", file);
+            this.sendAjaxRequest(url, 'POST', formData);
+        }
+    }
+}
+TCar.sendAjaxRequest = function(url,type,data){
+    $.ajax({
+        url : url,
+        type : type,
+        data : data,
+        success : function(result) {
+            if(result.code==500) {
+                Feng.info(result.message);
+            }else {
+                if(language==1){
+                    Feng.success("导入成功!");
+                }else if(language==2){
+                    Feng.success("SUCCESSFUL IMPORT!");
+                }else {
+                    Feng.success("Import berhasil!");
+                }
+            }
+            TCar.table.refresh();
+        },
+        error : function() {
+            if(language==1){
+                Feng.error("excel上传失败!");
+            }else if(language==2){
+                Feng.error("Uploading excel Fails. Procedure!");
+            }else {
+                Feng.error("Gagal mengunggah excel!");
+            }
+        },
+        cache : false,
+        contentType : false,
+        processData : false
+    });
+};
+
+var agreement;
+$(function(){
+    agreement = new agreement();
+    agreement.init();
+});
+
+/**
+ * 导出车辆操作
+ */
+TCar.outCar = function () {
+    var operation = function() {
+        window.location.href = Feng.ctxPath + "/tCar/outCar";
+    };
+    if(language==1){
+        Feng.confirm("是否确认导出车辆信息?", operation);
+    }else if(language==2){
+        Feng.confirm("Are you sure to export vehicle information?", operation);
+    }else {
+        Feng.confirm("Apakah Anda pasti akan mengekspor informasi kendaraan?", operation);
+    }
+}
\ No newline at end of file
diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tCompetition/tCar_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tCompetition/tCar_info.js
new file mode 100644
index 0000000..0b9bddd
--- /dev/null
+++ b/cloud-server-management/src/main/webapp/static/modular/system/tCompetition/tCar_info.js
@@ -0,0 +1,473 @@
+/**
+ * 初始化车辆管理详情对话框
+ */
+var language=$("#language").val();
+var TCarInfoDlg = {
+    tCarInfoData : {},
+    validateFields: {
+        carBrandId: {
+            validators: {
+                notEmpty: {
+                    message: language==1?'请选择车辆品牌':(language==2?"Please select the vehicle brand":"Silakan pilih tanda kendaraan")
+                }
+            }
+        },
+        carModelId: {
+            validators: {
+                notEmpty: {
+                    message:  language==1?'请选择车辆类型':(language==2?"Please select the vehicle type":"Silakan pilih tipe kendaraan")
+                }
+            }
+        },
+        zcModel: {
+            validators: {
+                notEmpty: {
+                    message: language==1?'请选择摩托车车型':(language==2?"Please select a motorcycle model":"Silakan pilih model motor")
+                }
+            }
+        },
+        carColor: {
+            validators: {
+                notEmpty: {
+                    message: language==1?'车辆颜色不能为空':(language==2?"The vehicle color cannot be empty.":"Warna kendaraan tidak bisa kosong.")
+                }
+            }
+        },
+        drivingLicenseNumber: {
+            validators: {
+                notEmpty: {
+                    message: language==1?'行驶证编号不能为空':(language==2?"The driving license number cannot be empty":"Nomor SIM Tidak Bisa Kosong")
+                }
+            }
+        },
+        annualInspectionTime: {
+            validators: {
+                notEmpty: {
+                    message: language==1?'年检到期时间不能为空':(language==2?"The annual inspection expiration time cannot be empty":"Waktu kedaluwarsa inspeksi tahunan tidak bisa kosong")
+                }
+            }
+        },
+        commercialInsuranceTime: {
+            validators: {
+                notEmpty: {
+                    message: language==1?'商业保险到期时间不能为空':(language==2?"The commercial insurance expiration time cannot be empty":"Waktu kedaluwarsa asuransi komersial tidak bisa kosong")
+                }
+            }
+        }
+    }
+};
+
+/**
+ * 验证数据是否为空
+ */
+TCarInfoDlg.validate = function () {
+    $('#carInfoForm').data("bootstrapValidator").resetForm();
+    $('#carInfoForm').bootstrapValidator('validate');
+    return $("#carInfoForm").data('bootstrapValidator').isValid();
+};
+
+/**
+ * 清除数据
+ */
+TCarInfoDlg.clearData = function() {
+    this.tCarInfoData = {};
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TCarInfoDlg.set = function(key, val) {
+    this.tCarInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val;
+    return this;
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TCarInfoDlg.get = function(key) {
+    return $("#" + key).val();
+}
+
+/**
+ * 关闭此对话框
+ */
+TCarInfoDlg.close = function() {
+    parent.layer.close(window.parent.TCar.layerIndex);
+}
+
+/**
+ * 收集数据
+ */
+TCarInfoDlg.collectData = function() {
+    this
+    .set('id')
+    .set('isPlatCar')
+    .set('companyId')
+    .set('franchiseeId')
+    .set('carColor')
+    .set('carModelId')
+    .set('carBrandId')
+    .set('carLicensePlate')
+    .set('carPhoto')
+    .set('drivingLicenseNumber')
+    .set('drivingLicensePhoto')
+    .set('annualInspectionTime')
+    .set('commercialInsuranceTime')
+    .set('createTime')
+    .set('state')
+    .set('addType')
+    .set('addObjectId')
+    .set('plateColor')
+    .set('vehicleType')
+    .set('ownerName')
+    .set('engineId')
+    .set('VIN')
+    .set('certifyDateA')
+    .set('fuelType')
+    .set('engineDisplace')
+    .set('certificate')
+    .set('transAgency')
+    .set('transArea')
+    .set('transDateStart')
+    .set('transDateStop')
+    .set('certifyDateB')
+    .set('fixState')
+    .set('nextFixDate')
+    .set('checkState')
+    .set('feePrintId')
+    .set('GPSBrand')
+    .set('GPSModel')
+    .set('GPSIMEI')
+    .set('GPSInstallDate')
+    .set('registerDate')
+    .set('commercialType');
+}
+
+/**
+ * 提交添加
+ */
+TCarInfoDlg.addSubmit = function() {
+
+    this.clearData();
+    this.collectData();
+    if(!this.validate()){
+        return ;
+    }
+    var roleType = $("#roleType").val();  //1=平台  2=分公司 3=加盟商
+    var companyType = $("input[name='companyType']:checked").val();
+    if (1 == roleType){
+        if (2 == companyType){
+            var oneId = $("#oneId").val();
+            if ("" == oneId){
+                if(language==1){
+                    Feng.info("所属分公司不能为空!");
+                }else if(language==2){
+                    Feng.info("The subordinate branch cannot be empty!");
+                }else {
+                    Feng.info("Cabang subordinat tidak dapat kosong!");
+                }
+                return;
+            }
+        }
+    }
+    var serverBox =[];
+    $('input[name="serverBox"]:checked').each(function(){
+        serverBox.push($(this).val());
+    });
+    if (serverBox.length == 0){
+        if(language==1){
+            Feng.info("请选择经营业务");
+        }else if(language==2){
+            Feng.info("Please select business");
+        }else {
+            Feng.info("Pilih bisnis");
+        }
+        return;
+    }
+    var carPhoto = $("#carPhoto").valueOf();
+    if ("" == carPhoto){
+        if(language==1){
+            Feng.info("请上传车辆照片");
+        }else if(language==2){
+            Feng.info("Please upload a photo of the vehicle");
+        }else {
+            Feng.info("Silakan mengunggah foto kendaraan");
+        }
+
+        return;
+    }
+    var drivingLicensePhoto = $("#drivingLicensePhoto").valueOf();
+    if ("" == drivingLicensePhoto){
+        if(language==1){
+            Feng.info("请上传行驶证照片");
+        }else if(language==2){
+            Feng.info("Please upload a photo of your vehicle. Please upload a photo of your driving license");
+        }else {
+            Feng.info("Silakan mengunggah foto kendaraanmu. Silakan mengunggah foto dari lisensi mengemudi Anda");
+        }
+
+        return;
+    }
+
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tCar/add", function(data){
+        if(data.status == 200){
+            if(language==1){
+                Feng.success("添加成功!");
+            }else if(language==2){
+                Feng.success("Successfully added!");
+            }else {
+                Feng.success("Sangat berhasil ditambah!");
+            }
+            window.parent.TCar.table.refresh();
+            TCarInfoDlg.close();
+        }else{
+            Feng.error(data.msg);
+        }
+
+    },function(data){
+        if(language==1){
+            Feng.error("添加失败!" + data.responseJSON.message + "!");
+        }else if(language==2){
+            Feng.error("Fail to add!" + data.responseJSON.message + "!");
+        }else {
+            Feng.error("Gagal menambah!" + data.responseJSON.message + "!");
+        }
+    });
+    ajax.set(this.tCarInfoData);
+    ajax.set("serverBox",serverBox.toString());
+    ajax.set("zcModel",$("#zcModel").val());
+    ajax.set("kcModel",$("#kcModel").val());
+    ajax.set("roleType",roleType);
+    if (1 == roleType){
+        ajax.set("companyType",companyType);
+        ajax.set("oneId",$("#oneId").val());
+        ajax.set("twoId",$("#twoId").val());
+        ajax.set("franchiseeId",0);
+    } else if (2 == roleType) {
+        ajax.set("franchiseeId",$("#franchiseeId").val());
+        ajax.set("companyType",0);
+        ajax.set("oneId",0);
+        ajax.set("twoId",0);
+    }else if (3 == roleType){
+        ajax.set("franchiseeId",0);
+        ajax.set("companyType",0);
+        ajax.set("oneId",0);
+        ajax.set("twoId",0);
+    }
+    ajax.start();
+}
+
+/**
+ * 提交修改
+ */
+TCarInfoDlg.editSubmit = function() {
+
+    this.clearData();
+    this.collectData();
+    if(!this.validate()){
+        return ;
+    }
+
+    var roleType = $("#roleType").val();  //1=平台  2=分公司 3=加盟商
+    var companyType = $("input[name='companyType']:checked").val();
+    if (1 == roleType){
+        if (2 == companyType){
+            var oneId = $("#oneId").val();
+            if ("" == oneId){
+                if(language==1){
+                    Feng.info("所属分公司不能为空!");
+                }else if(language==2){
+                    Feng.info("The subordinate branch cannot be empty!");
+                }else {
+                    Feng.info("Cabang subordinat tidak dapat kosong!");
+                }
+                return;
+            }
+        }
+    }
+    var serverBox =[];
+    $('input[name="serverBox"]:checked').each(function(){
+        serverBox.push($(this).val());
+    });
+    if (serverBox.length == 0){
+        if(language==1){
+            Feng.info("请选择经营业务");
+        }else if(language==2){
+            Feng.info("Please select business");
+        }else {
+            Feng.info("Pilih bisnis");
+        }
+        return;
+    }
+    var carPhoto = $("#carPhoto").valueOf();
+    if ("" == carPhoto){
+        if(language==1){
+            Feng.info("请上传车辆照片");
+        }else if(language==2){
+            Feng.info("Please upload a photo of the vehicle");
+        }else {
+            Feng.info("Silakan mengunggah foto kendaraan");
+        }
+        return;
+    }
+    var drivingLicensePhoto = $("#drivingLicensePhoto").valueOf();
+    if ("" == drivingLicensePhoto){
+        if(language==1){
+            Feng.info("请上传行驶证照片");
+        }else if(language==2){
+            Feng.info("Please upload a photo of your vehicle. Please upload a photo of your driving license");
+        }else {
+            Feng.info("Silakan mengunggah foto kendaraanmu. Silakan mengunggah foto dari lisensi mengemudi Anda");
+        }
+        return;
+    }
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tCar/update", function(data){
+        if(data.status == 200){
+            if(language==1){
+                Feng.success("修改成功!");
+            }else if(language==2){
+                Feng.success("Modify successfully!");
+            }else {
+                Feng.success("Mengubah dengan sukses!");
+            }
+            window.parent.TCar.table.refresh();
+            TCarInfoDlg.close();
+        }else{
+            Feng.error(data.msg);
+        }
+    },function(data){
+        if(language==1){
+            Feng.error("修改失败!" + data.responseJSON.message + "!");
+        }else if(language==2){
+            Feng.error("Fail to modify!" + data.responseJSON.message + "!");
+        }else {
+            Feng.error("Gagal mengubah!" + data.responseJSON.message + "!");;
+        }
+    });
+    ajax.set(this.tCarInfoData);
+    ajax.set("serverBox",serverBox.toString());
+    ajax.set("zcModel",$("#zcModel").val());
+    ajax.set("kcModel",$("#kcModel").val());
+    ajax.set("roleType",roleType);
+    if (1 == roleType){
+        ajax.set("companyType",companyType);
+        ajax.set("oneId",$("#oneId").val());
+        ajax.set("twoId",$("#twoId").val());
+        ajax.set("franchiseeId",0);
+    } else if (2 == roleType) {
+        ajax.set("franchiseeId",$("#franchiseeId").val());
+        ajax.set("companyType",0);
+        ajax.set("oneId",0);
+        ajax.set("twoId",0);
+    }else if (3 == roleType){
+        ajax.set("franchiseeId",0);
+        ajax.set("companyType",0);
+        ajax.set("oneId",0);
+        ajax.set("twoId",0);
+    }
+    ajax.start();
+}
+
+$(function() {
+    Feng.initValidator("carInfoForm", TCarInfoDlg.validateFields);
+    // 初始化图片上传
+    var carPhoto = new $WebUpload("carPhoto");
+    carPhoto.setUploadBarId("progressBar");
+    carPhoto.init();
+    var drivingLicensePhoto = new $WebUpload("drivingLicensePhoto");
+    drivingLicensePhoto.setUploadBarId("progressBar");
+    drivingLicensePhoto.init();
+});
+
+/**
+ * 选择分公司后执行
+ */
+TCarInfoDlg.oneChange = function (e) {
+    var oneId=$(e).val();
+    var ajax = new $ax(Feng.ctxPath + "/tDriver/oneChange", function(data){
+        if(data!=null){
+            if(language==1){
+                var content='<option value="">选择所属加盟商</option>';
+            }else if(language==2){
+                var content='<option value="">Choose your franchisee</option>';
+            }else {
+                var content='<option value="">Pilih franchisee Anda</option>';
+            }
+            $.each(data, function(k,v) {
+                content += "<option value='"+v.id+"'>"+v.name+"</option>";
+            });
+            $("#twoId").empty().append(content);
+        }
+    });
+    ajax.set("oneId",oneId);
+    ajax.start();
+}
+
+/**
+ * 类型改变执行
+ * @param e
+ */
+TCarInfoDlg.companyTypeClick = function (e) {
+    if (1 == e){
+        $(".companyDiv").hide();
+    } else if (2 == e){
+        $(".companyDiv").show();
+    }
+}
+
+/**
+ * 车辆品牌改变时执行
+ */
+TCarInfoDlg.brandChange = function (e) {
+    var carBrandId=$(e).val();
+    var ajax = new $ax(Feng.ctxPath + "/tCar/brandChange", function(data){
+        if(data!=null){
+            if(language==1){
+                var content='<option value="">选择车辆类型</option>';
+            }else if(language==2){
+                var content='<option value="">Please select the vehicle type</option>';
+            }else {
+                var content='<option value="">Pilih Jenis Kendaraan</option>';
+            }
+
+            $.each(data, function(k,v) {
+                content += "<option value='"+v.id+"'>"+v.name+"</option>";
+            });
+            $("#carModelId").empty().append(content);
+        }
+    });
+    ajax.set("carBrandId",carBrandId);
+    ajax.start();
+}
+
+/**
+ * 专车服务被点击
+ */
+TCarInfoDlg.zcServerClick = function () {
+    var serverBox1 = $('#serverBox1').prop('checked');
+    if (serverBox1){
+        $("#zcModelDiv").show();
+    } else {
+        $("#zcModelDiv").hide();
+    }
+}
+
+/**
+ * 跨城服务被点击
+ */
+TCarInfoDlg.kcServerClick = function () {
+    var serverBox3 = $('#serverBox3').prop('checked');
+    if (serverBox3){
+        $("#kcModelDiv").show();
+    } else {
+        $("#kcModelDiv").hide();
+    }
+}

--
Gitblit v1.7.1