From 52b4d8d25c348eb641fa3c0959b604f2b2e3626a Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期二, 14 三月 2023 16:35:46 +0800
Subject: [PATCH] 版本管理,发票管理

---
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TBillMapper.xml                |   28 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java   |   30 
 management/guns-admin/src/main/webapp/WEB-INF/view/common/tags/uploadFile.tag                                    |    2 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TEditionMapper.xml             |   19 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TEdition.java                        |  112 +++
 management/guns-admin/src/main/webapp/static/modular/system/tEdition/tEdition_info.js                            |  140 ++++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITEditionService.java              |   16 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TEditionMapper.java                    |   16 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBillServiceImpl.java         |   50 +
 management/guns-admin/src/main/webapp/WEB-INF/view/system/tBill/tBill_add.html                                   |   39 +
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/enums/TBillStateEnum.java                  |   51 +
 management/guns-admin/src/main/webapp/WEB-INF/view/system/tEdition/tEdition.html                                 |   49 +
 management/guns-admin/src/main/webapp/static/modular/system/tBill/tBill.js                                       |  212 ++++++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TBill.java                           |  219 ++++++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITBillService.java                 |   28 
 management/guns-admin/src/main/webapp/static/js/common/web-upload-file.js                                        |    1 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TBillController.java    |  212 ++++++
 management/guns-admin/src/main/webapp/WEB-INF/view/system/tBill/tBill_edit.html                                  |   39 +
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TEditionController.java |  128 ++++
 management/guns-admin/src/main/webapp/static/modular/system/tBill/tBill_info.js                                  |  106 +++
 management/guns-admin/src/main/webapp/WEB-INF/view/system/tEdition/tEdition_edit.html                            |   30 
 management/guns-admin/src/main/webapp/static/modular/system/tEdition/tEdition.js                                 |  165 +++++
 management/guns-admin/src/main/webapp/WEB-INF/view/system/tBill/tBill.html                                       |   75 ++
 management/guns-admin/src/main/webapp/WEB-INF/view/system/tEdition/tEdition_add.html                             |   91 ++
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TBillMapper.java                       |   16 
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TEditionServiceImpl.java      |   20 
 26 files changed, 1,889 insertions(+), 5 deletions(-)

diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TBillController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TBillController.java
new file mode 100644
index 0000000..e35af56
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TBillController.java
@@ -0,0 +1,212 @@
+package com.stylefeng.guns.modular.system.controller.general;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.modular.system.controller.resp.TDriverResp;
+import com.stylefeng.guns.modular.system.controller.util.ExcelUtil;
+import com.stylefeng.guns.modular.system.enums.TBillStateEnum;
+import com.stylefeng.guns.modular.system.model.TDriver;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.stylefeng.guns.core.log.LogObjectHolder;
+import org.springframework.web.bind.annotation.RequestParam;
+import com.stylefeng.guns.modular.system.model.TBill;
+import com.stylefeng.guns.modular.system.service.ITBillService;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 控制器
+ *
+ * @author fengshuonan
+ * @Date 2023-03-14 15:15:19
+ */
+@Controller
+@RequestMapping("/tBill")
+public class TBillController extends BaseController {
+
+    private String PREFIX = "/system/tBill/";
+
+    @Autowired
+    private ITBillService tBillService;
+
+    /**
+     * 跳转到首页
+     */
+    @RequestMapping("")
+    public String index() {
+        return PREFIX + "tBill.html";
+    }
+
+    /**
+     * 跳转到添加
+     */
+    @RequestMapping("/tBill_add")
+    public String tBillAdd() {
+        return PREFIX + "tBill_add.html";
+    }
+
+    /**
+     * 跳转到修改
+     */
+    @RequestMapping("/tBill_update/{tBillId}")
+    public String tBillUpdate(@PathVariable Integer tBillId, Model model) {
+        TBill tBill = tBillService.selectById(tBillId);
+        model.addAttribute("item",tBill);
+        LogObjectHolder.me().set(tBill);
+        return PREFIX + "tBill_edit.html";
+    }
+
+    /**
+     * 获取列表
+     */
+    @RequestMapping(value = "/list")
+    @ResponseBody
+    public Object list(String createTime,String addresseePhone,Integer state,Integer billType,Integer billHeaderType) {
+        EntityWrapper<TBill> wrapper = tBillService.getPageListWrapper(createTime,addresseePhone,state,billType,billHeaderType);
+        return tBillService.selectList(wrapper);
+    }
+
+    /**
+     * 详情
+     */
+    @RequestMapping(value = "/confirm")
+    @ResponseBody
+    public Object confirm(Integer tBillId) {
+        TBill tBill = tBillService.selectById(tBillId);
+        tBill.setState(TBillStateEnum.FINISH_BILL.getCode());
+        tBillService.updateById(tBill);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 详情
+     */
+    @RequestMapping(value = "/cancel")
+    @ResponseBody
+    public Object cancel(Integer tBillId) {
+        TBill tBill = tBillService.selectById(tBillId);
+        tBill.setState(TBillStateEnum.FAIL_BILL.getCode());
+        tBillService.updateById(tBill);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 获取列表
+     */
+    @RequestMapping(value = "/list-back")
+    @ResponseBody
+    public Object listBack(String condition) {
+        return tBillService.selectList(null);
+    }
+
+    /**
+     * 新增
+     */
+    @RequestMapping(value = "/add")
+    @ResponseBody
+    public Object add(TBill tBill) {
+        tBillService.insert(tBill);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping(value = "/delete")
+    @ResponseBody
+    public Object delete(@RequestParam Integer tBillId) {
+        tBillService.deleteById(tBillId);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping(value = "/update")
+    @ResponseBody
+    public Object update(TBill tBill) {
+        tBillService.updateById(tBill);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 详情
+     */
+    @RequestMapping(value = "/detail/{tBillId}")
+    @ResponseBody
+    public Object detail(@PathVariable("tBillId") Integer tBillId) {
+        return tBillService.selectById(tBillId);
+    }
+
+    @ApiOperation(value = "导出发票列表",notes="导出发票列表")
+    @RequestMapping(value = "/export")
+    @ResponseBody
+    public void export(String createTime,String addresseePhone,Integer state,Integer billType,Integer billHeaderType, HttpServletResponse response) {
+        try {
+            Date date = new Date();
+            DateFormat format = new SimpleDateFormat("yyyyMMdd");
+            String time1 = format.format(date);
+            String fileName = "BillInfo"+time1+".xls";
+            String[] title = new String[] {"申请时间","发票类型","抬头类型","发票抬头","公司税号","发票内容",
+                    "发票金额","收件人姓名","收件人电话","收件人邮箱","开票状态"};
+            EntityWrapper<TBill> wrapper = tBillService.getPageListWrapper(createTime,addresseePhone,state,billType,billHeaderType);
+            List<TBill> tBills = tBillService.selectList(wrapper);
+            String[][] values = new String[tBills.size()][];
+            for (int i = 0; i < tBills.size(); i++) {
+                TBill d = tBills.get(i);
+                values[i] = new String[title.length];
+                values[i][0] = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d.getCreateTime());
+                Integer billType1 = d.getBillType();
+                if(1 == billType1){
+                    values[i][1] = "电子发票";
+                }
+                Integer billHeaderType1 = d.getBillHeaderType();
+                if(1 == billHeaderType1){
+                    values[i][2] = "公司";
+                } else if (2 == billHeaderType1) {
+                    values[i][2] = "个人";
+                }
+                values[i][3] = d.getCompanyName();
+                values[i][4] = d.getCompanyTaxNumber();
+                values[i][5] = d.getBillContent();
+                values[i][6] = String.valueOf(Objects.nonNull(d.getBillAmount())?d.getBillAmount(): BigDecimal.ZERO);
+                values[i][7] = d.getAddresseeName();
+                values[i][8] = d.getAddresseePhone();
+                values[i][9] = d.getAddresseeEmail();
+                Integer state1 = d.getState();
+                if(1 == state1){
+                    values[i][10] = "待开票";
+                } else if (2 == state1) {
+                    values[i][10] = "已开票";
+                } else if (3 == state1) {
+                    values[i][10] = "开票失败";
+                }
+            }
+            HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook("Variance"+time1, title, values, null);
+            ExcelUtil.setResponseHeader(response, fileName);
+            OutputStream os = response.getOutputStream();
+            wb.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TEditionController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TEditionController.java
new file mode 100644
index 0000000..afdea00
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TEditionController.java
@@ -0,0 +1,128 @@
+package com.stylefeng.guns.modular.system.controller.general;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.util.DateUtil;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.stylefeng.guns.core.log.LogObjectHolder;
+import org.springframework.web.bind.annotation.RequestParam;
+import com.stylefeng.guns.modular.system.model.TEdition;
+import com.stylefeng.guns.modular.system.service.ITEditionService;
+
+import java.util.Date;
+
+/**
+ * 控制器
+ *
+ * @author fengshuonan
+ * @Date 2023-03-14 09:44:02
+ */
+@Controller
+@RequestMapping("/tEdition")
+public class TEditionController extends BaseController {
+
+    private String PREFIX = "/system/tEdition/";
+
+    @Autowired
+    private ITEditionService tEditionService;
+
+    /**
+     * 跳转到首页
+     */
+    @RequestMapping("")
+    public String index() {
+        return PREFIX + "tEdition.html";
+    }
+
+    /**
+     * 跳转到添加
+     */
+    @RequestMapping("/tEdition_add")
+    public String tEditionAdd() {
+        return PREFIX + "tEdition_add.html";
+    }
+
+    /**
+     * 跳转到修改
+     */
+    @RequestMapping("/tEdition_update/{tEditionId}")
+    public String tEditionUpdate(@PathVariable Integer tEditionId, Model model) {
+        TEdition tEdition = tEditionService.selectById(tEditionId);
+        model.addAttribute("item",tEdition);
+        LogObjectHolder.me().set(tEdition);
+        return PREFIX + "tEdition_edit.html";
+    }
+
+    /**
+     * 获取列表
+     */
+    @RequestMapping(value = "/list")
+    @ResponseBody
+    public Object list(String createTime,String editionNo) {
+        EntityWrapper<TEdition> wrapper = new EntityWrapper<>();
+        if(StringUtils.hasLength(createTime)){
+            String[] split = createTime.split(" - ");
+            Date startTime = DateUtil.getDate_str4(split[0]);
+            Date endTime = DateUtil.getDate_str4(split[1]);
+            wrapper.between("createTime",startTime,endTime);
+        }
+        if(StringUtils.hasLength(editionNo)){
+            wrapper.like("editionNo",editionNo);
+        }
+        return tEditionService.selectList(wrapper);
+    }
+
+    /**
+     * 获取列表
+     */
+    @RequestMapping(value = "/list-back")
+    @ResponseBody
+    public Object listBack(String condition) {
+        return tEditionService.selectList(null);
+    }
+
+    /**
+     * 新增
+     */
+    @RequestMapping(value = "/add")
+    @ResponseBody
+    public Object add(TEdition tEdition) {
+        tEditionService.insert(tEdition);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 删除
+     */
+    @RequestMapping(value = "/delete")
+    @ResponseBody
+    public Object delete(@RequestParam Integer tEditionId) {
+        tEditionService.deleteById(tEditionId);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 修改
+     */
+    @RequestMapping(value = "/update")
+    @ResponseBody
+    public Object update(TEdition tEdition) {
+        tEditionService.updateById(tEdition);
+        return SUCCESS_TIP;
+    }
+
+    /**
+     * 详情
+     */
+    @RequestMapping(value = "/detail/{tEditionId}")
+    @ResponseBody
+    public Object detail(@PathVariable("tEditionId") Integer tEditionId) {
+        return tEditionService.selectById(tEditionId);
+    }
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java
index 59d69f4..8c9c6c5 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java
@@ -19,6 +19,7 @@
 import com.stylefeng.guns.core.log.LogObjectHolder;
 import com.stylefeng.guns.core.shiro.ShiroKit;
 import com.stylefeng.guns.core.shiro.ShiroUser;
+import com.stylefeng.guns.core.util.ObsUploadUtil;
 import com.stylefeng.guns.core.util.SinataUtil;
 import com.stylefeng.guns.core.util.ToolUtil;
 import com.stylefeng.guns.modular.system.dao.UserMapper;
@@ -29,6 +30,7 @@
 import com.stylefeng.guns.modular.system.service.ITDriverService;
 import com.stylefeng.guns.modular.system.service.IUserService;
 import com.stylefeng.guns.modular.system.transfer.UserDto;
+import com.stylefeng.guns.modular.system.util.OssUploadUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -37,12 +39,10 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.naming.NoPermissionException;
+import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
 import java.io.File;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
 
 /**
  * 系统管理员控制器
@@ -431,6 +431,28 @@
         return pictureName;
     }
 
+    @ResponseBody
+    @RequestMapping("/saveApk")
+    public String saveApk(@RequestPart("myfile") MultipartFile file, HttpServletRequest request){
+        Map<String, Object> m = new HashMap<>();
+        try {
+            String pictureName = UUID.randomUUID().toString() + "." + ToolUtil.getFileSuffix(file.getOriginalFilename());
+            try {
+                String fileSavePath = gunsProperties.getFileUploadPath()+"apk\\";
+                String s = OssUploadUtil.ossUpload(request, file);
+                // file.transferTo(new File(fileSavePath + pictureName));
+                return s;
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            m.put("imgUrl", gunsProperties.getFileUploadPath()+"apk/"+pictureName);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+
     /**
      * 判断当前登录的用户是否有操作这个用户的权限
      */
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TBillMapper.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TBillMapper.java
new file mode 100644
index 0000000..87bc846
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TBillMapper.java
@@ -0,0 +1,16 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.stylefeng.guns.modular.system.model.TBill;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 发票管理 Mapper 接口
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-03-14
+ */
+public interface TBillMapper extends BaseMapper<TBill> {
+
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TEditionMapper.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TEditionMapper.java
new file mode 100644
index 0000000..e2a5665
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TEditionMapper.java
@@ -0,0 +1,16 @@
+package com.stylefeng.guns.modular.system.dao;
+
+import com.stylefeng.guns.modular.system.model.TEdition;
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 版本管理 Mapper 接口
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-03-14
+ */
+public interface TEditionMapper extends BaseMapper<TEdition> {
+
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TBillMapper.xml b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TBillMapper.xml
new file mode 100644
index 0000000..66bba2d
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TBillMapper.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.stylefeng.guns.modular.system.dao.TBillMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.TBill">
+        <id column="id" property="id" />
+        <result column="orderId" property="orderId" />
+        <result column="billType" property="billType" />
+        <result column="billHeaderType" property="billHeaderType" />
+        <result column="companyName" property="companyName" />
+        <result column="companyTaxNumber" property="companyTaxNumber" />
+        <result column="billContent" property="billContent" />
+        <result column="moreContent" property="moreContent" />
+        <result column="billAmount" property="billAmount" />
+        <result column="addresseeName" property="addresseeName" />
+        <result column="addresseePhone" property="addresseePhone" />
+        <result column="addresseeEmail" property="addresseeEmail" />
+        <result column="state" property="state" />
+        <result column="createTime" property="createTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, orderId, billType, billHeaderType, companyName, companyTaxNumber, billContent, moreContent, billAmount, addresseeName, addresseePhone, addresseeEmail, state, createTime
+    </sql>
+
+</mapper>
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TEditionMapper.xml b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TEditionMapper.xml
new file mode 100644
index 0000000..68d4961
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TEditionMapper.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.stylefeng.guns.modular.system.dao.TEditionMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.stylefeng.guns.modular.system.model.TEdition">
+        <id column="id" property="id" />
+        <result column="editionNo" property="editionNo" />
+        <result column="editionFile" property="editionFile" />
+        <result column="editionAnnouncement" property="editionAnnouncement" />
+        <result column="createTime" property="createTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, editionNo, editionFile, editionAnnouncement, createTime
+    </sql>
+
+</mapper>
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/enums/TBillStateEnum.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/enums/TBillStateEnum.java
new file mode 100644
index 0000000..ffbc28d
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/enums/TBillStateEnum.java
@@ -0,0 +1,51 @@
+package com.stylefeng.guns.modular.system.enums;
+
+
+
+/**
+ * @Description 发票状态枚举
+ * @Author xiaochen
+ * @Date 2023/02/15 9:42
+ */
+public enum TBillStateEnum {
+
+    WAIT_BILL(1, "待开票"),
+    FINISH_BILL(2, "已开票"),
+    FAIL_BILL(3,"开票失败");
+
+    private String desc;
+
+
+    private int code;
+
+
+    TBillStateEnum(int code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    /**
+     * 通过code获取枚举
+     *
+     * @param code
+     * @return
+     */
+    public static TBillStateEnum fromCode(Integer code) {
+        TBillStateEnum[] resultTypes = TBillStateEnum.values();
+        for (TBillStateEnum resultType : resultTypes) {
+            if (code.equals(resultType.getCode())) {
+                return resultType;
+            }
+        }
+        return null;
+    }
+
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TBill.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TBill.java
new file mode 100644
index 0000000..8c1d780
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TBill.java
@@ -0,0 +1,219 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.enums.IdType;
+import java.math.BigDecimal;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 发票管理
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-03-14
+ */
+@TableName("t_bill")
+public class TBill extends Model<TBill> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 订单id
+     */
+    private Integer orderId;
+    /**
+     * 发票类型 1电子发票
+     */
+    private Integer billType;
+    /**
+     * 发票抬头 1公司 2个人
+     */
+    private Integer billHeaderType;
+    /**
+     * 公司名称/个人抬头名称
+     */
+    private String companyName;
+    /**
+     * 公司税号
+     */
+    private String companyTaxNumber;
+    /**
+     * 发票内容
+     */
+    private String billContent;
+    /**
+     * 更多内容
+     */
+    private String moreContent;
+    /**
+     * 发票金额
+     */
+    private BigDecimal billAmount;
+    /**
+     * 收件人姓名
+     */
+    private String addresseeName;
+    /**
+     * 收件人电话
+     */
+    private String addresseePhone;
+    /**
+     * 收件人邮箱
+     */
+    private String addresseeEmail;
+    /**
+     * 开票状态 1待开票 2已开票 3开票失败
+     */
+    private Integer state;
+    /**
+     * 添加时间
+     */
+    private Date createTime;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Integer orderId) {
+        this.orderId = orderId;
+    }
+
+    public Integer getBillType() {
+        return billType;
+    }
+
+    public void setBillType(Integer billType) {
+        this.billType = billType;
+    }
+
+    public Integer getBillHeaderType() {
+        return billHeaderType;
+    }
+
+    public void setBillHeaderType(Integer billHeaderType) {
+        this.billHeaderType = billHeaderType;
+    }
+
+    public String getCompanyName() {
+        return companyName;
+    }
+
+    public void setCompanyName(String companyName) {
+        this.companyName = companyName;
+    }
+
+    public String getCompanyTaxNumber() {
+        return companyTaxNumber;
+    }
+
+    public void setCompanyTaxNumber(String companyTaxNumber) {
+        this.companyTaxNumber = companyTaxNumber;
+    }
+
+    public String getBillContent() {
+        return billContent;
+    }
+
+    public void setBillContent(String billContent) {
+        this.billContent = billContent;
+    }
+
+    public String getMoreContent() {
+        return moreContent;
+    }
+
+    public void setMoreContent(String moreContent) {
+        this.moreContent = moreContent;
+    }
+
+    public BigDecimal getBillAmount() {
+        return billAmount;
+    }
+
+    public void setBillAmount(BigDecimal billAmount) {
+        this.billAmount = billAmount;
+    }
+
+    public String getAddresseeName() {
+        return addresseeName;
+    }
+
+    public void setAddresseeName(String addresseeName) {
+        this.addresseeName = addresseeName;
+    }
+
+    public String getAddresseePhone() {
+        return addresseePhone;
+    }
+
+    public void setAddresseePhone(String addresseePhone) {
+        this.addresseePhone = addresseePhone;
+    }
+
+    public String getAddresseeEmail() {
+        return addresseeEmail;
+    }
+
+    public void setAddresseeEmail(String addresseeEmail) {
+        this.addresseeEmail = addresseeEmail;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+    @Override
+    public String toString() {
+        return "TBill{" +
+        "id=" + id +
+        ", orderId=" + orderId +
+        ", billType=" + billType +
+        ", billHeaderType=" + billHeaderType +
+        ", companyName=" + companyName +
+        ", companyTaxNumber=" + companyTaxNumber +
+        ", billContent=" + billContent +
+        ", moreContent=" + moreContent +
+        ", billAmount=" + billAmount +
+        ", addresseeName=" + addresseeName +
+        ", addresseePhone=" + addresseePhone +
+        ", addresseeEmail=" + addresseeEmail +
+        ", state=" + state +
+        ", createTime=" + createTime +
+        "}";
+    }
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TEdition.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TEdition.java
new file mode 100644
index 0000000..5974e7a
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TEdition.java
@@ -0,0 +1,112 @@
+package com.stylefeng.guns.modular.system.model;
+
+import com.baomidou.mybatisplus.enums.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.activerecord.Model;
+import com.baomidou.mybatisplus.annotations.TableName;
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 版本管理
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-03-14
+ */
+@TableName("t_edition")
+public class TEdition extends Model<TEdition> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 版本编号
+     */
+    private String editionNo;
+    /**
+     * 版本文件
+     */
+    private String editionFile;
+    /**
+     * 版本公告
+     */
+    private String editionAnnouncement;
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+    /**
+     * 端口 1用户端 2司机端
+     */
+    private Integer editionPort;
+
+    public Integer getEditionPort() {
+        return editionPort;
+    }
+
+    public void setEditionPort(Integer editionPort) {
+        this.editionPort = editionPort;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getEditionNo() {
+        return editionNo;
+    }
+
+    public void setEditionNo(String editionNo) {
+        this.editionNo = editionNo;
+    }
+
+    public String getEditionFile() {
+        return editionFile;
+    }
+
+    public void setEditionFile(String editionFile) {
+        this.editionFile = editionFile;
+    }
+
+    public String getEditionAnnouncement() {
+        return editionAnnouncement;
+    }
+
+    public void setEditionAnnouncement(String editionAnnouncement) {
+        this.editionAnnouncement = editionAnnouncement;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+    @Override
+    public String toString() {
+        return "TEdition{" +
+        "id=" + id +
+        ", editionNo=" + editionNo +
+        ", editionFile=" + editionFile +
+        ", editionAnnouncement=" + editionAnnouncement +
+        ", createTime=" + createTime +
+        "}";
+    }
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITBillService.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITBillService.java
new file mode 100644
index 0000000..67359ac
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITBillService.java
@@ -0,0 +1,28 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.stylefeng.guns.modular.system.model.TBill;
+import com.baomidou.mybatisplus.service.IService;
+
+/**
+ * <p>
+ * 发票管理 服务类
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-03-14
+ */
+public interface ITBillService extends IService<TBill> {
+
+    /**
+     * 获取发票wrapper
+     * @param createTime
+     * @param addresseePhone
+     * @param state
+     * @param billType
+     * @param billHeaderType
+     * @return
+     */
+    EntityWrapper<TBill> getPageListWrapper(String createTime, String addresseePhone, Integer state, Integer billType, Integer billHeaderType);
+
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITEditionService.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITEditionService.java
new file mode 100644
index 0000000..2364542
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/ITEditionService.java
@@ -0,0 +1,16 @@
+package com.stylefeng.guns.modular.system.service;
+
+import com.stylefeng.guns.modular.system.model.TEdition;
+import com.baomidou.mybatisplus.service.IService;
+
+/**
+ * <p>
+ * 版本管理 服务类
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-03-14
+ */
+public interface ITEditionService extends IService<TEdition> {
+
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBillServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBillServiceImpl.java
new file mode 100644
index 0000000..239d2a4
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TBillServiceImpl.java
@@ -0,0 +1,50 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.stylefeng.guns.core.util.DateUtil;
+import com.stylefeng.guns.modular.system.model.TBill;
+import com.stylefeng.guns.modular.system.dao.TBillMapper;
+import com.stylefeng.guns.modular.system.service.ITBillService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * <p>
+ * 发票管理 服务实现类
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-03-14
+ */
+@Service
+public class TBillServiceImpl extends ServiceImpl<TBillMapper, TBill> implements ITBillService {
+
+    @Override
+    public EntityWrapper<TBill> getPageListWrapper(String createTime, String addresseePhone, Integer state, Integer billType, Integer billHeaderType) {
+        EntityWrapper<TBill> wrapper = new EntityWrapper<>();
+
+        if(StringUtils.hasLength(createTime)){
+            String[] split = createTime.split(" - ");
+            Date startTime = DateUtil.getDate_str4(split[0]);
+            Date endTime = DateUtil.getDate_str4(split[1]);
+            wrapper.between("createTime",startTime,endTime);
+        }
+        if(StringUtils.hasLength(addresseePhone)){
+            wrapper.like("addresseePhone",addresseePhone);
+        }
+        if(Objects.nonNull(state)){
+            wrapper.eq("state",state);
+        }
+        if(Objects.nonNull(billType)){
+            wrapper.eq("billType",billType);
+        }
+        if(Objects.nonNull(billHeaderType)){
+            wrapper.eq("billHeaderType",billHeaderType);
+        }
+        return wrapper;
+    }
+}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TEditionServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TEditionServiceImpl.java
new file mode 100644
index 0000000..dda68d8
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TEditionServiceImpl.java
@@ -0,0 +1,20 @@
+package com.stylefeng.guns.modular.system.service.impl;
+
+import com.stylefeng.guns.modular.system.model.TEdition;
+import com.stylefeng.guns.modular.system.dao.TEditionMapper;
+import com.stylefeng.guns.modular.system.service.ITEditionService;
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 版本管理 服务实现类
+ * </p>
+ *
+ * @author stylefeng
+ * @since 2023-03-14
+ */
+@Service
+public class TEditionServiceImpl extends ServiceImpl<TEditionMapper, TEdition> implements ITEditionService {
+
+}
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/common/tags/uploadFile.tag b/management/guns-admin/src/main/webapp/WEB-INF/view/common/tags/uploadFile.tag
index 793cd19..3c53f3c 100644
--- a/management/guns-admin/src/main/webapp/WEB-INF/view/common/tags/uploadFile.tag
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/common/tags/uploadFile.tag
@@ -5,7 +5,7 @@
         <input type="hidden" id="${id}" name="${id}"/>
     </div>
     <div class="col-sm-2">
-        <button class="btn btn-outline btn-success" type="button" onclick="UploadFileFn()"><i class="fa fa-upload"></i>上传文件</button>
+        <button class="btn btn-outline btn-success" type="button" onclick="TEdition.previewFile()"><i class="fa fa-upload"></i>上传文件</button>
     </div>
 </div>
 <div class="col-sm-12 progress progress-striped" style="margin-top: 10px;">
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tBill/tBill.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tBill/tBill.html
new file mode 100644
index 0000000..bc0ead3
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tBill/tBill.html
@@ -0,0 +1,75 @@
+@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-2">
+                                <#TimeCon id="createTime" name="申请时间" />
+                            </div>
+                            <div class="col-sm-2">
+                                <#NameCon id="addresseePhone" name="手机号" />
+                            </div>
+                            <div class="col-sm-2">
+                                <select class="input-group" id="state" style="width: 180px;height: 33px" name="state">
+                                    <option value="">状态</option>
+                                    <option value="1">待开票</option>
+                                    <option value="2">已开票</option>
+                                    <option value="3">开票失败</option>
+                                </select>
+                            </div>
+                            <div class="col-sm-2">
+                                <select class="input-group" id="billType" style="width: 180px;height: 33px" name="billType">
+                                    <option value="">发票类型</option>
+                                    <option value="1">电子发票</option>
+                                </select>
+                            </div>
+                            <div class="col-sm-2">
+                                <select class="input-group" id="billHeaderType" style="width: 180px;height: 33px" name="billHeaderType">
+                                    <option value="">抬头类型</option>
+                                    <option value="1">公司</option>
+                                    <option value="2">个人</option>
+                                </select>
+                            </div>
+                            <div class="col-sm-2">
+                                <#button name="搜索" icon="fa-search" clickFun="TBill.search()"/>
+                                <#button name="重置" icon="fa-trash" clickFun="TBill.resetSearch()" space="true"/>
+                            </div>
+                            <div class="col-sm-12">
+                                <button type="button" class="btn btn-primary " onclick="TBill.export()" id="export">
+                                    <i class="fa "></i>&nbsp;导出
+                                </button>
+                            </div>
+                        </div>
+                        <div class="hidden-xs" id="TBillTableToolbar" role="group">
+                            @if(shiro.hasPermission("/tBill/add")){
+                                <#button name="添加" icon="fa-plus" clickFun="TBill.openAddTBill()"/>
+                            @}
+                            @if(shiro.hasPermission("/tBill/update")){
+                                <#button name="修改" icon="fa-edit" clickFun="TBill.openTBillDetail()" space="true"/>
+                            @}
+                            @if(shiro.hasPermission("/tBill/delete")){
+                                <#button name="删除" icon="fa-remove" clickFun="TBill.delete()" space="true"/>
+                            @}
+                        </div>
+                        <#table id="TBillTable"/>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tBill/tBill.js"></script>
+<script type="text/javascript">
+    laydate.render({
+        elem: '#createTime',
+        type: 'date',
+        range: true
+    });
+</script>
+@}
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tBill/tBill_add.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tBill/tBill_add.html
new file mode 100644
index 0000000..c736c5e
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tBill/tBill_add.html
@@ -0,0 +1,39 @@
+@layout("/common/_container.html"){
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal">
+
+            <div class="row">
+                <div class="col-sm-6 b-r">
+                            <#input id="id" name="主键" underline="true"/>
+                            <#input id="orderId" name="订单id" underline="true"/>
+                            <#input id="billType" name="发票类型 1电子发票" underline="true"/>
+                            <#input id="billHeaderType" name="发票抬头 1公司 2个人" underline="true"/>
+                            <#input id="companyName" name="公司名称/个人抬头名称" underline="true"/>
+                            <#input id="companyTaxNumber" name="公司税号" underline="true"/>
+                            <#input id="billContent" name="发票内容"/>
+                </div>
+
+                <div class="col-sm-6">
+                            <#input id="moreContent" name="更多内容" underline="true"/>
+                            <#input id="billAmount" name="发票金额" underline="true"/>
+                            <#input id="addresseeName" name="收件人姓名" underline="true"/>
+                            <#input id="addresseePhone" name="收件人电话" underline="true"/>
+                            <#input id="addresseeEmail" name="收件人邮箱" underline="true"/>
+                            <#input id="state" name="开票状态 1代开票 2已开票 3开票失败" underline="true"/>
+                            <#input id="createTime" name="添加时间" underline="true"/>
+                </div>
+            </div>
+
+            <div class="row btn-group-m-t">
+                <div class="col-sm-10">
+                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TBillInfoDlg.addSubmit()"/>
+                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TBillInfoDlg.close()"/>
+                </div>
+            </div>
+        </div>
+
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tBill/tBill_info.js"></script>
+@}
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tBill/tBill_edit.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tBill/tBill_edit.html
new file mode 100644
index 0000000..71ea9ae
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tBill/tBill_edit.html
@@ -0,0 +1,39 @@
+@layout("/common/_container.html"){
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal">
+
+            <div class="row">
+                <div class="col-sm-6 b-r">
+                            <#input id="id" name="主键" value="${item.id}" underline="true"/>
+                            <#input id="orderId" name="订单id" value="${item.orderId}" underline="true"/>
+                            <#input id="billType" name="发票类型 1电子发票" value="${item.billType}" underline="true"/>
+                            <#input id="billHeaderType" name="发票抬头 1公司 2个人" value="${item.billHeaderType}" underline="true"/>
+                            <#input id="companyName" name="公司名称/个人抬头名称" value="${item.companyName}" underline="true"/>
+                            <#input id="companyTaxNumber" name="公司税号" value="${item.companyTaxNumber}" underline="true"/>
+                            <#input id="billContent" name="发票内容" value="${item.billContent}" />
+                </div>
+
+                <div class="col-sm-6">
+                            <#input id="moreContent" name="更多内容" value="${item.moreContent}" underline="true"/>
+                            <#input id="billAmount" name="发票金额" value="${item.billAmount}" underline="true"/>
+                            <#input id="addresseeName" name="收件人姓名" value="${item.addresseeName}" underline="true"/>
+                            <#input id="addresseePhone" name="收件人电话" value="${item.addresseePhone}" underline="true"/>
+                            <#input id="addresseeEmail" name="收件人邮箱" value="${item.addresseeEmail}" underline="true"/>
+                            <#input id="state" name="开票状态 1代开票 2已开票 3开票失败" value="${item.state}" underline="true"/>
+                            <#input id="createTime" name="添加时间" value="${item.createTime}" />
+                </div>
+            </div>
+
+            <div class="row btn-group-m-t">
+                <div class="col-sm-10">
+                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TBillInfoDlg.editSubmit()"/>
+                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TBillInfoDlg.close()"/>
+                </div>
+            </div>
+        </div>
+
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tBill/tBill_info.js"></script>
+@}
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tEdition/tEdition.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tEdition/tEdition.html
new file mode 100644
index 0000000..ef451b9
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tEdition/tEdition.html
@@ -0,0 +1,49 @@
+@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="更新时间" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#NameCon id="editionNo" name="版本号" />
+                            </div>
+                            <div class="col-sm-3">
+                                <#button name="搜索" icon="fa-search" clickFun="TEdition.search()"/>
+                                <#button name="重置" icon="fa-trash" clickFun="TEdition.resetSearch()" space="true"/>
+                            </div>
+                        </div>
+                        <div class="hidden-xs" id="TEditionTableToolbar" role="group">
+                            @if(shiro.hasPermission("/tEdition/add")){
+                                <#button name="添加" icon="fa-plus" clickFun="TEdition.openAddTEdition()"/>
+                            @}
+                            @if(shiro.hasPermission("/tEdition/update")){
+                                <#button name="修改" icon="fa-edit" clickFun="TEdition.openTEditionDetail()" space="true"/>
+                            @}
+                            @if(shiro.hasPermission("/tEdition/delete")){
+                                <#button name="删除" icon="fa-remove" clickFun="TEdition.delete()" space="true"/>
+                            @}
+                        </div>
+                        <#table id="TEditionTable"/>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tEdition/tEdition.js"></script>
+<script type="text/javascript">
+    laydate.render({
+        elem: '#createTime',
+        type: 'date',
+        range: true
+    });
+</script>
+@}
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tEdition/tEdition_add.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tEdition/tEdition_add.html
new file mode 100644
index 0000000..5472e03
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tEdition/tEdition_add.html
@@ -0,0 +1,91 @@
+@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" id="editionInfoForm">
+                <div class="row row-lg">
+                    <div class="col-sm-12">
+
+                        <div class="col-sm-12"  style="cursor: pointer;text-align: left;">
+                            <div class="initialLevel col-sm-12 control-label form-group"  >
+                                <div class="initialLevel col-sm-5 control-label form-group"  >
+                                    <label class="control-label  col-sm-2" >版本编号:</label>
+                                    <input id="editionNo" name="editionNo" type="text" class="col-sm-3" style="width: 180px;height: 30px" required="required">
+                                </div>
+                            </div>
+
+                            <div class="initialLevel col-sm-12 control-label form-group"  >
+                                <div class="initialLevel col-sm-5 control-label form-group"  >
+                                    <label class="control-label  col-sm-2" >端&emsp;&emsp;口:</label>
+                                    <select id="editionPort" class="col-sm-3" style="width: 180px;height: 30px" name="editionPort">
+                                        <option value="">请选择端口</option>
+                                        <option value="1">用户端</option>
+                                        <option value="2">司机端</option>
+                                    </select>
+                                </div>
+                            </div>
+
+                            <div class="initialLevel col-sm-12 control-label form-group"  >
+                                <div class="initialLevel col-sm-6 control-label form-group"  >
+                                    <label class="control-label col-sm-2" >上传apk文件:</label>
+                                    <input id="upFile" type="file" onclick="TEdition.previewFile()" class="col-sm-3" style="width: 180px;height: 30px" required="required">
+                                    <input hidden id="editionFile" name="editionFile">
+                                </div>
+                            </div>
+
+                            <div class="initialLevel col-sm-12 control-label form-group"  >
+                                <div class="initialLevel col-sm-5 control-label form-group"  >
+                                    <label class="control-label  col-sm-2" >版本公告:</label>
+                                    <textarea id="editionAnnouncement" name="editionAnnouncement" class="col-sm-3" style="width: 180px;height: 80px"></textarea>
+                                </div>
+                            </div>
+
+                        </div>
+                    </div>
+                </div>
+
+                <div class="row btn-group-m-t">
+                    <div class="col-sm-10" style="text-align: center">
+                        <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TEditionInfoDlg.close()"/>
+                        <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TEditionInfoDlg.addSubmit()"/>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<!--<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal">
+
+            <div class="row">
+                <div class="col-sm-6 b-r">
+                            <#input id="id" name="主键" underline="true"/>
+                            <#input id="editionNo" name="版本编号" underline="true"/>
+                            <#input id="editionFile" name="版本文件"/>
+                </div>
+
+                <div class="col-sm-6">
+                            <#input id="editionAnnouncement" name="版本公告" underline="true"/>
+                            <#input id="createTime" name="创建时间" underline="true"/>
+                </div>
+            </div>
+
+            <div class="row btn-group-m-t">
+                <div class="col-sm-10">
+                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TEditionInfoDlg.addSubmit()"/>
+                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TEditionInfoDlg.close()"/>
+                </div>
+            </div>
+        </div>
+
+    </div>
+</div>-->
+<script src="${ctxPath}/static/modular/system/tEdition/tEdition_info.js"></script>
+<script src="${ctxPath}/static/modular/system/tEdition/tEdition.js"></script>
+<script src="${ctxPath}/static/js/common/web-upload-file.js"></script>
+
+@}
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tEdition/tEdition_edit.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tEdition/tEdition_edit.html
new file mode 100644
index 0000000..9b191c7
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tEdition/tEdition_edit.html
@@ -0,0 +1,30 @@
+@layout("/common/_container.html"){
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal">
+
+            <div class="row">
+                <div class="col-sm-6 b-r">
+                            <#input id="id" name="主键" value="${item.id}" underline="true"/>
+                            <#input id="editionNo" name="版本编号" value="${item.editionNo}" underline="true"/>
+                            <#input id="editionFile" name="版本文件" value="${item.editionFile}" />
+                </div>
+
+                <div class="col-sm-6">
+                            <#input id="editionAnnouncement" name="版本公告" value="${item.editionAnnouncement}" underline="true"/>
+                            <#input id="createTime" name="创建时间" value="${item.createTime}" />
+                </div>
+            </div>
+
+            <div class="row btn-group-m-t">
+                <div class="col-sm-10">
+                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TEditionInfoDlg.editSubmit()"/>
+                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TEditionInfoDlg.close()"/>
+                </div>
+            </div>
+        </div>
+
+    </div>
+</div>
+<script src="${ctxPath}/static/modular/system/tEdition/tEdition_info.js"></script>
+@}
diff --git a/management/guns-admin/src/main/webapp/static/js/common/web-upload-file.js b/management/guns-admin/src/main/webapp/static/js/common/web-upload-file.js
index 2b714a5..4b4b761 100644
--- a/management/guns-admin/src/main/webapp/static/js/common/web-upload-file.js
+++ b/management/guns-admin/src/main/webapp/static/js/common/web-upload-file.js
@@ -3,6 +3,7 @@
  */
 // 开始上传文件
 function UploadFileFn() {
+    console.log(111)
     $("#progressBarFile").html("0%").css("width", "0%");
     var upFile = $("#upFile").get(0).files[0]; //input file标签
     var formData = new FormData(); //创建FormData对象
diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tBill/tBill.js b/management/guns-admin/src/main/webapp/static/modular/system/tBill/tBill.js
new file mode 100644
index 0000000..7846f31
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/static/modular/system/tBill/tBill.js
@@ -0,0 +1,212 @@
+/**
+ * 管理初始化
+ */
+var TBill = {
+    id: "TBillTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1
+};
+
+/**
+ * 初始化表格的列
+ */
+TBill.initColumn = function () {
+    return [
+        {field: 'selectItem', radio: true},
+        {title: '主键', field: 'id', visible: false, align: 'center', valign: 'middle'},
+        {title: '订单id', field: 'orderId', visible: false, align: 'center', valign: 'middle'},
+        {title: '申请时间', field: 'createTime', visible: true, align: 'center', valign: 'middle'},
+        {title: '发票类型', field: 'billType', visible: true, align: 'center', valign: 'middle',
+                formatter: function (value, row) {
+                    if(row.billType === 1){
+                        return '<span>电子发票</span>'
+                    }
+                }
+            },
+        {title: '抬头类型', field: 'billHeaderType', visible: true, align: 'center', valign: 'middle',
+                formatter: function (value, row) {
+                    if(row.billHeaderType === 1){
+                        return '<span>公司</span>'
+                    }else if(row.billHeaderType === 2){
+                        return '<span>个人</span>'
+                    }
+                }
+            },
+        {title: '发票抬头', field: 'companyName', visible: true, align: 'center', valign: 'middle'},
+        {title: '公司税号', field: 'companyTaxNumber', visible: true, align: 'center', valign: 'middle'},
+        {title: '发票内容', field: 'billContent', visible: true, align: 'center', valign: 'middle'},
+        {title: '更多内容', field: 'moreContent', visible: false, align: 'center', valign: 'middle'},
+        {title: '发票金额', field: 'billAmount', visible: true, align: 'center', valign: 'middle'},
+        {title: '收件人姓名', field: 'addresseeName', visible: true, align: 'center', valign: 'middle'},
+        {title: '收件人电话', field: 'addresseePhone', visible: true, align: 'center', valign: 'middle'},
+        {title: '收件人邮箱', field: 'addresseeEmail', visible: true, align: 'center', valign: 'middle'},
+        {title: '开票状态', field: 'state', visible: true, align: 'center', valign: 'middle',
+            formatter: function (value, row) {
+                if(row.state === 1){
+                    return '<span>待开票</span>'
+                }else if(row.state === 2){
+                    return '<span>已开票</span>'
+                }else if(row.state === 3){
+                    return '<span>开票失败</span>'
+                }
+            }
+        },
+        {title: '操作', visible: true, align: 'center', valign: 'middle',width:150,
+            formatter: function (value, row) {
+                return '<a href="#" onclick="TBill.confirm('+row.id+','+row.state+')" style="color:blue">确定</a>' + '&emsp;' +
+                    '<a href="#" onclick="TBill.cancel('+row.id+','+row.state+')" style="color:red">取消</a>'
+            }
+        }
+    ];
+};
+
+/**
+ * 检查是否选中
+ */
+TBill.check = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length == 0){
+        Feng.info("请先选中表格中的某一记录!");
+        return false;
+    }else{
+        TBill.seItem = selected[0];
+        return true;
+    }
+};
+
+/**
+ * 点击添加
+ */
+TBill.openAddTBill = function () {
+    var index = layer.open({
+        type: 2,
+        title: '添加',
+        area: ['800px', '420px'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/tBill/tBill_add'
+    });
+    this.layerIndex = index;
+};
+
+/**
+ * 打开查看详情
+ */
+TBill.openTBillDetail = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: '详情',
+            area: ['800px', '420px'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tBill/tBill_update/' + TBill.seItem.id
+        });
+        this.layerIndex = index;
+    }
+};
+
+/**
+ * 删除
+ */
+TBill.delete = function () {
+    if (this.check()) {
+        var ajax = new $ax(Feng.ctxPath + "/tBill/delete", function (data) {
+            Feng.success("删除成功!");
+            TBill.table.refresh();
+        }, function (data) {
+            Feng.error("删除失败!" + data.responseJSON.message + "!");
+        });
+        ajax.set("tBillId",this.seItem.id);
+        ajax.start();
+    }
+};
+
+/**
+ * 确认通过发票
+ */
+TBill.confirm = function (id,state) {
+
+    if(1 !== state){
+        Feng.error("该条数据已审核");
+        return;
+    }
+
+    var ajax = new $ax(Feng.ctxPath + "/tBill/confirm", function (data) {
+        Feng.success("操作成功!");
+        TBill.table.refresh();
+    }, function (data) {
+        Feng.error("操作失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set("tBillId",id);
+    ajax.start();
+};
+
+/**
+ * 发票失败
+ */
+TBill.cancel = function (id,state) {
+    if(1 !== state){
+        Feng.error("该条数据已审核");
+        return;
+    }
+
+    var ajax = new $ax(Feng.ctxPath + "/tBill/cancel", function (data) {
+        Feng.success("操作成功!");
+        TBill.table.refresh();
+    }, function (data) {
+        Feng.error("操作失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set("tBillId",id);
+    ajax.start();
+};
+
+/**
+ * 发票信息导出
+ */
+TBill.export=function(){
+    var createTime=$("#createTime").val()
+    var addresseePhone=$("#addresseePhone").val()
+    var state=$("#state").val()
+    var billType=$("#billType").val()
+    var billHeaderType=$("#billHeaderType").val()
+    window.location.href=Feng.ctxPath + "/tBill/export?createTime="+createTime
+        +"&addresseePhone="+addresseePhone
+        +"&state="+state
+        +"&billType="+billType
+        +"&billHeaderType="+billHeaderType
+    ;
+}
+
+/**
+ * 查询列表
+ */
+TBill.search = function () {
+    var queryData = {};
+    queryData['createTime'] = $("#createTime").val();
+    queryData['addresseePhone'] = $("#addresseePhone").val();
+    queryData['state'] = $("#state").val();
+    queryData['billType'] = $("#billType").val();
+    queryData['billHeaderType'] = $("#billHeaderType").val();
+    TBill.table.refresh({query: queryData});
+};
+
+/**
+ * 重置
+ */
+TBill.resetSearch = function (){
+    $("#createTime").val('');
+    $("#addresseePhone").val('');
+    $("#state").val('');
+    $("#billType").val('');
+    $("#billHeaderType").val('');
+    TBill.search();
+}
+
+$(function () {
+    var defaultColunms = TBill.initColumn();
+    var table = new BSTable(TBill.id, "/tBill/list", defaultColunms);
+    table.setPaginationType("client");
+    TBill.table = table.init();
+});
diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tBill/tBill_info.js b/management/guns-admin/src/main/webapp/static/modular/system/tBill/tBill_info.js
new file mode 100644
index 0000000..5f74005
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/static/modular/system/tBill/tBill_info.js
@@ -0,0 +1,106 @@
+/**
+ * 初始化详情对话框
+ */
+var TBillInfoDlg = {
+    tBillInfoData : {}
+};
+
+/**
+ * 清除数据
+ */
+TBillInfoDlg.clearData = function() {
+    this.tBillInfoData = {};
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TBillInfoDlg.set = function(key, val) {
+    this.tBillInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val;
+    return this;
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TBillInfoDlg.get = function(key) {
+    return $("#" + key).val();
+}
+
+/**
+ * 关闭此对话框
+ */
+TBillInfoDlg.close = function() {
+    parent.layer.close(window.parent.TBill.layerIndex);
+}
+
+/**
+ * 收集数据
+ */
+TBillInfoDlg.collectData = function() {
+    this
+    .set('id')
+    .set('orderId')
+    .set('billType')
+    .set('billHeaderType')
+    .set('companyName')
+    .set('companyTaxNumber')
+    .set('billContent')
+    .set('moreContent')
+    .set('billAmount')
+    .set('addresseeName')
+    .set('addresseePhone')
+    .set('addresseeEmail')
+    .set('state')
+    .set('createTime');
+}
+
+/**
+ * 提交添加
+ */
+TBillInfoDlg.addSubmit = function() {
+
+    this.clearData();
+    this.collectData();
+
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tBill/add", function(data){
+        Feng.success("添加成功!");
+        window.parent.TBill.table.refresh();
+        TBillInfoDlg.close();
+    },function(data){
+        Feng.error("添加失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set(this.tBillInfoData);
+    ajax.start();
+}
+
+/**
+ * 提交修改
+ */
+TBillInfoDlg.editSubmit = function() {
+
+    this.clearData();
+    this.collectData();
+
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tBill/update", function(data){
+        Feng.success("修改成功!");
+        window.parent.TBill.table.refresh();
+        TBillInfoDlg.close();
+    },function(data){
+        Feng.error("修改失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set(this.tBillInfoData);
+    ajax.start();
+}
+
+$(function() {
+
+});
diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tEdition/tEdition.js b/management/guns-admin/src/main/webapp/static/modular/system/tEdition/tEdition.js
new file mode 100644
index 0000000..e09f924
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/static/modular/system/tEdition/tEdition.js
@@ -0,0 +1,165 @@
+/**
+ * 管理初始化
+ */
+var TEdition = {
+    id: "TEditionTable",	//表格id
+    seItem: null,		//选中的条目
+    table: null,
+    layerIndex: -1
+};
+
+/**
+ * 初始化表格的列
+ */
+TEdition.initColumn = function () {
+    return [
+        {field: 'selectItem', radio: true},
+            {title: '主键', field: 'id', visible: true, align: 'center', valign: 'middle'},
+            {title: '版本编号', field: 'editionNo', visible: true, align: 'center', valign: 'middle'},
+            {title: '版本文件', field: 'editionFile', visible: true, align: 'center', valign: 'middle',
+                formatter: function (value, row) {
+                    return row.editionFile.substr(47,row.editionFile.length)
+                }
+            },
+            {title: '版本公告', field: 'editionAnnouncement', visible: true, align: 'center', valign: 'middle'},
+            {title: '端口', field: 'editionPort', visible: false, align: 'center', valign: 'middle'},
+            {title: '创建时间', field: 'createTime', visible: true, align: 'center', valign: 'middle'},
+        {title: '操作', visible: true, align: 'center', valign: 'middle',width:150,
+            formatter: function (value, row) {
+                return '<a href="#" onclick="TEdition.delete('+row.id+')" style="color:red">删除</a>'
+            }
+        }
+    ];
+};
+
+/**
+ * 检查是否选中
+ */
+TEdition.check = function () {
+    var selected = $('#' + this.id).bootstrapTable('getSelections');
+    if(selected.length == 0){
+        Feng.info("请先选中表格中的某一记录!");
+        return false;
+    }else{
+        TEdition.seItem = selected[0];
+        return true;
+    }
+};
+
+/**
+ * 点击添加
+ */
+TEdition.openAddTEdition = function () {
+    var index = layer.open({
+        type: 2,
+        title: '添加',
+        area: ['100%', '100%'], //宽高
+        fix: false, //不固定
+        maxmin: true,
+        content: Feng.ctxPath + '/tEdition/tEdition_add'
+    });
+    this.layerIndex = index;
+};
+
+/**
+ * 打开查看详情
+ */
+TEdition.openTEditionDetail = function () {
+    if (this.check()) {
+        var index = layer.open({
+            type: 2,
+            title: '详情',
+            area: ['800px', '420px'], //宽高
+            fix: false, //不固定
+            maxmin: true,
+            content: Feng.ctxPath + '/tEdition/tEdition_update/' + TEdition.seItem.id
+        });
+        this.layerIndex = index;
+    }
+};
+
+/**
+ * 删除
+ */
+TEdition.delete = function (id) {
+    var ajax = new $ax(Feng.ctxPath + "/tEdition/delete", function (data) {
+        Feng.success("删除成功!");
+        TEdition.table.refresh();
+    }, function (data) {
+        Feng.error("删除失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set("tEditionId",id);
+    ajax.start();
+};
+
+TEdition.previewFile = function(){
+
+    $("#upFile").change(function(){
+        var file = document.querySelector('#upFile').files[0];
+        var pic = ["apk"];
+        var index1 = file.name.lastIndexOf(".");
+        var ext = file.name.substr(index1+1);
+        for (var a = 0;a < pic.length; a++ ){
+            if (ext != pic[a]){
+                console.log(pic[a])
+                Feng.error("请上传apk文件");
+                return;
+            }
+        }
+        if (file) {
+            TEdition.uploadApk(file);
+        } else {
+        }
+    });
+}
+
+TEdition.uploadApk = function(file){
+
+    var index = layer.load(1, {
+        shade: [0.1,'#fff'] //0.1透明度的白色背景
+    });
+    var formData = new FormData();
+    formData.append("myfile", file);
+    $.ajax({
+        url : Feng.ctxPath + "/mgr/saveApk",
+        type : "POST",
+        data : formData,
+        contentType : false,
+        processData : false,
+        success : function(data) {
+            $("#editionFile").val(data);
+            Feng.success("上传成功!");
+            layer.close(index);
+        },
+        error : function() {
+            Feng.error("上传失败");
+            layer.close(index);
+        }
+    })
+}
+
+/**
+ * 查询列表
+ */
+TEdition.search = function () {
+    var queryData = {};
+    queryData['createTime'] = $("#createTime").val();
+    queryData['editionNo'] = $("#editionNo").val();
+    TEdition.table.refresh({query: queryData});
+};
+
+/**
+ * 重置
+ */
+TEdition.resetSearch = function (){
+    $("#createTime").val('');
+    $("#editionNo").val('');
+    TEdition.search();
+}
+
+$(function () {
+    var defaultColunms = TEdition.initColumn();
+    var table = new BSTable(TEdition.id, "/tEdition/list", defaultColunms);
+    table.setPaginationType("client");
+    TEdition.table = table.init();
+});
diff --git a/management/guns-admin/src/main/webapp/static/modular/system/tEdition/tEdition_info.js b/management/guns-admin/src/main/webapp/static/modular/system/tEdition/tEdition_info.js
new file mode 100644
index 0000000..8b31dd0
--- /dev/null
+++ b/management/guns-admin/src/main/webapp/static/modular/system/tEdition/tEdition_info.js
@@ -0,0 +1,140 @@
+/**
+ * 初始化详情对话框
+ */
+var TEditionInfoDlg = {
+    tEditionInfoData : {},
+    validateFields: {
+        editionNo: {
+            validators: {
+                notEmpty: {
+                    message: '版本编号不能为空'
+                }
+            }
+        },
+        editionPort: {
+            validators: {
+                notEmpty: {
+                    message: '请选择端口'
+                }
+            }
+        },
+        editionAnnouncement: {
+            validators: {
+                notEmpty: {
+                    message: '版本公告不能为空'
+                }
+            }
+        },
+    }
+};
+
+/**
+ * 验证数据是否为空
+ */
+TEditionInfoDlg.validate = function () {
+    $('#editionInfoForm').data("bootstrapValidator").resetForm();
+    $('#editionInfoForm').bootstrapValidator('validate');
+    return $("#editionInfoForm").data('bootstrapValidator').isValid();
+};
+
+/**
+ * 清除数据
+ */
+TEditionInfoDlg.clearData = function() {
+    this.tEditionInfoData = {};
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TEditionInfoDlg.set = function(key, val) {
+    this.tEditionInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val;
+    return this;
+}
+
+/**
+ * 设置对话框中的数据
+ *
+ * @param key 数据的名称
+ * @param val 数据的具体值
+ */
+TEditionInfoDlg.get = function(key) {
+    return $("#" + key).val();
+}
+
+/**
+ * 关闭此对话框
+ */
+TEditionInfoDlg.close = function() {
+    parent.layer.close(window.parent.TEdition.layerIndex);
+}
+
+/**
+ * 收集数据
+ */
+TEditionInfoDlg.collectData = function() {
+    this
+    .set('id')
+    .set('editionNo')
+    .set('editionFile')
+    .set('editionAnnouncement')
+    .set('editionPort')
+    .set('createTime');
+}
+
+/**
+ * 提交添加
+ */
+TEditionInfoDlg.addSubmit = function() {
+
+    this.clearData();
+    this.collectData();
+
+    if(!this.validate()){
+        return ;
+    }
+
+    var editionFile = $("#editionFile").val();
+    if ("" == editionFile){
+        Feng.info("请上传apk文件");
+        return;
+    }
+
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tEdition/add", function(data){
+        Feng.success("添加成功!");
+        window.parent.TEdition.table.refresh();
+        TEditionInfoDlg.close();
+    },function(data){
+        Feng.error("添加失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set(this.tEditionInfoData);
+    ajax.start();
+}
+
+/**
+ * 提交修改
+ */
+TEditionInfoDlg.editSubmit = function() {
+
+    this.clearData();
+    this.collectData();
+
+    //提交信息
+    var ajax = new $ax(Feng.ctxPath + "/tEdition/update", function(data){
+        Feng.success("修改成功!");
+        window.parent.TEdition.table.refresh();
+        TEditionInfoDlg.close();
+    },function(data){
+        Feng.error("修改失败!" + data.responseJSON.message + "!");
+    });
+    ajax.set(this.tEditionInfoData);
+    ajax.start();
+}
+
+$(function() {
+    Feng.initValidator("editionInfoForm", TEditionInfoDlg.validateFields);
+});

--
Gitblit v1.7.1