forked from kidgrow-microservices-platform

zhaoxiaohao
2020-11-25 a04d76dc568b4a13455ea6ca4ae2a92e6387736d
Merge branch 'development' into dev
1 files added
10 files modified
1615 ■■■■■ changed files
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ProductOrder.java 5 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ProductOrderDetail.java 17 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderDetailService.java 1 ●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java 13 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ProductOrderDetailController.java 27 ●●●● patch | view | raw | blame | history
kidgrow-uaa/kidgrow-uaa-server/src/main/java/com/kidgrow/oauth2/controller/OAuth2Controller.java 1 ●●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/contract.html 84 ●●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/doctor_form.html 1 ●●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital.html 2 ●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/recharge.html 403 ●●●● patch | view | raw | blame | history
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/rechargeupdate.html 1061 ●●●●● patch | view | raw | blame | history
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ProductOrder.java
@@ -11,6 +11,7 @@
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.NotEmpty;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.util.Date;
@@ -63,6 +64,10 @@
     */
    @NotEmpty(message = "合同名称不能为空")
    private String contractTitle;
    @NotNull(message = "合同名数量不能为空")
    @Min(1)
    private Integer contractNum;
    /**
     * 合同开始时间
     */
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-api/src/main/java/com/kidgrow/oprationcenter/model/ProductOrderDetail.java
@@ -50,10 +50,14 @@
    @NotEmpty(message = "产品/明细名称不能为空")
    private String proName;
    /**
     * 产品类型 0试用 1正式
     * 产品类型 0试用 1正式 3 自定义
     */
    @NotNull(message = "产品类型不能为空")
    private Integer proType;
    /**
     * 产品使用期限限制   1有限制,0 无限制
     */
    private Integer termType;
    /**
     * 是否共享 0否 1是
     */
@@ -66,10 +70,21 @@
    @NotEmpty(message = "是否删除,1删除,0未删除不能为空")
    private Boolean isDel;
    /**
     * 产品的读片总量
     */
    @NotNull(message = "产品的读片总量")
    private Integer orderAilightCount;
    /**
     * 产品的报告总量
     */
    @NotNull(message = "产品的报告总量")
    private Integer orderRecordCount;
    /**
     * 读片量
     */
    @NotNull(message = "读片量不能为空")
    private Integer ailightCount;
    /**
     * 报告量
     */
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/IProductOrderDetailService.java
@@ -143,5 +143,6 @@
     * @return
     */
    int getUserdProduct(Long hospitalId,Long departmentId);
}
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-biz/src/main/java/com/kidgrow/oprationcenter/service/impl/ProductOrderDetailServiceImpl.java
@@ -13,8 +13,10 @@
import com.kidgrow.oprationcenter.model.ConsumptionRecord;
import com.kidgrow.oprationcenter.model.ProductOrder;
import com.kidgrow.oprationcenter.model.ProductOrderDetail;
import com.kidgrow.oprationcenter.model.SysProduct;
import com.kidgrow.oprationcenter.service.IProductOrderDetailService;
import com.kidgrow.oprationcenter.service.IProductOrderService;
import com.kidgrow.oprationcenter.service.ISysProductService;
import com.kidgrow.oprationcenter.vo.*;
import com.kidgrow.redis.util.RedisUtils;
import com.kidgrow.usercenter.feign.SysDoctorService;
@@ -52,6 +54,8 @@
    @Autowired
    private IProductOrderService iProductOrderService;
    @Autowired
    private ISysProductService productService;
    @Autowired
    private RedisUtils redisUtils;
    /**
     * 列表
@@ -62,6 +66,15 @@
    public PageResult<ProductOrderDetail> findList(Map<String, Object> params){
        Page<ProductOrderDetail> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit"));
        List<ProductOrderDetail> list  =  baseMapper.findList(page, params);
        for (ProductOrderDetail productOrderDetail : list) {
            if(productOrderDetail.getOrderAilightCount()==null){
                SysProduct byId = productService.getById(productOrderDetail.getProId());
                if(byId!=null){
                    productOrderDetail.setOrderAilightCount(byId.getAilightCount());
                    productOrderDetail.setOrderRecordCount(byId.getRecordCount());
                }
            }
        }
        return PageResult.<ProductOrderDetail>builder().data(list).code(0).count(page.getTotal()).build();
    }
    /**
kidgrow-business/kidgrow-opration-center/kidgrow-opration-center-server/src/main/java/com/kidgrow/oprationcenter/controller/ProductOrderDetailController.java
@@ -4,6 +4,7 @@
import com.kidgrow.common.constant.CommonConstant;
import com.kidgrow.common.controller.BaseController;
import com.kidgrow.common.model.*;
import com.kidgrow.common.utils.DateUtils;
import com.kidgrow.oprationcenter.model.HospitalInfo;
import com.kidgrow.oprationcenter.model.ProductOrder;
import com.kidgrow.oprationcenter.model.ProductOrderDetail;
@@ -30,9 +31,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
@@ -440,4 +439,26 @@
        List<OrderChartVo> orderChartVo=productOrderDetailService.proCountChart();
        return ResultBody.ok().data(orderChartVo).msg("数据获取成功!") ;
    }
    /**
     * 获取软件服务周期 和 读片总量
     *
     */
    @ApiOperation(value = "获取软件服务周期")
    @GetMapping("/getContractBeginEndTimeAndNum")
    public ResultBody getContractBeginEndTimeAndNum(@RequestParam("departmentId") Long departmentId) {
       Map<String,Object> map = new HashMap<>();
        map.put("department_id",departmentId);
        map.put("enabled",true);
        map.put("is_del",false);
        List<ProductOrder> productOrders = productOrderService.listByMap(map);
        IntSummaryStatistics intSummaryStatistics = productOrders.stream().filter(a-> a.getContractNum()!=null).mapToInt((x) -> x.getContractNum()).summaryStatistics();
        Date minDate = productOrders.stream().map(e -> e.getContractBeginTime()).min((e1, e2) -> e1.compareTo(e2)).get();
        Date manDate = productOrders.stream().map(e -> e.getContractEndTime()).max((e1, e2) -> e1.compareTo(e2)).get();
        map = new HashMap<>();
        map.put("count", intSummaryStatistics.getSum());
        map.put("beginTime",DateUtils.formatDate(minDate,"yyyy-MM-dd HH:mm:ss"));
        map.put("endTime",DateUtils.formatDate(manDate,"yyyy-MM-dd HH:mm:ss"));
        return  ResultBody.ok().data(map);
    }
}
kidgrow-uaa/kidgrow-uaa-server/src/main/java/com/kidgrow/oauth2/controller/OAuth2Controller.java
@@ -120,6 +120,7 @@
            oAuth2Authentication.setAuthenticated(true);
            ResponseUtil.responseSucceed(objectMapper, response, oAuth2AccessToken);
        } catch (BadCredentialsException | InternalAuthenticationServiceException e) {
            e.printStackTrace();
            exceptionHandler(response, badCredenbtialsMsg);
        } catch (Exception e) {
            exceptionHandler(response, e);
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/contract.html
@@ -10,18 +10,23 @@
        <div class="layui-form toolbar">
            <div class="layui-form-item">
                <div class="layui-inline" style="margin-bottom: -25px;">&emsp;
            <input id="hospital-search-value" class="layui-input  search-input" type="text" placeholder="按医院名" autocomplete="off" width="400px" /></div>&emsp;
            <button id="contract-btn-search" class="layui-btn icon-btn permissions" permissions="contract-list" style="margin-bottom: -25px;"><i class="layui-icon">&#xe615;</i>搜索</button>
                    <input id="hospital-search-value" class="layui-input  search-input" type="text" placeholder="按医院名"
                        autocomplete="off" width="400px" /></div>&emsp;
                <button id="contract-btn-search" class="layui-btn icon-btn permissions" permissions="contract-list"
                    style="margin-bottom: -25px;"><i class="layui-icon">&#xe615;</i>搜索</button>
        </div>
        <table class="layui-table" id="contract-table" lay-filter="contract-table"></table>
    </div></div>
        </div>
    </div>
    </div>
</div>
<input id="hospitalId" type="hidden" />
<!-- 表格操作列 -->
<script type="text/html" id="contract-table-bar">
    <a class="layui-btn layui-btn-danger layui-btn-xs permissions" permissions="contract-del" lay-event="del">删除</a>
    <a class="layui-btn layui-btn-primary layui-btn-xs permissions" permissions="productorderdetail-save" lay-event="detail">查看套餐</a>
    <!-- <a class="layui-btn layui-btn-danger layui-btn-xs permissions" permissions="contract-del" lay-event="del">删除</a> -->
<a class="layui-btn layui-btn-xs permissions" permissions="contract-edit" lay-event="edit"">修改</a>
    <a class=" layui-btn layui-btn-primary layui-btn-xs permissions" permissions="productorderdetail-save"
    lay-event="detail">查看套餐</a>
</script>
<!-- 表格状态列 -->
<script type="text/html" id="contract-tpl-state">
@@ -68,23 +73,34 @@
                    { field: 'departmentName', width: 200, title: '科室名称' },
                    { field: 'contractNo', width: 150, title: '合同编号' },
                    { field: 'contractTitle', width: 200, title: '合同名' },
                    { field: 'contractBeginTime', width: 120, title: '合同生效时间',templet:function(d)
                    {
                        field: 'contractBeginTime', width: 120, title: '合同生效时间', templet: function (d) {
                        return new Date(d.contractBeginTime).dateFormat("yyyy/MM/dd");
                    }
                    },
                    { field: 'contractEndTime', width: 120, title: '合同到期时间',templet:function(d){
                    {
                        field: 'contractEndTime', width: 120, title: '合同到期时间', templet: function (d) {
                        return new Date(d.contractEndTime).dateFormat("yyyy/MM/dd");
                    } },
                    { field: 'contractTime', width: 120, title: '合同签订时间',templet:function(d){
                        }
                    },
                    {
                        field: 'contractTime', width: 120, title: '合同签订时间', templet: function (d) {
                            if(d.contractTime==null){
                                return new Date(d.createTime).dateFormat("yyyy/MM/dd");
                            }
                        return new Date(d.contractTime).dateFormat("yyyy/MM/dd");
                    } },
                        }
                    },
                    // { field: 'enabled', width: 120, templet: '#contract-tpl-state', sort: true, title: '状态' },
                    { field: 'createTime', width: 160, title: '创建时间' , templet: function (d) {
                    {
                        field: 'createTime', width: 160, title: '创建时间', templet: function (d) {
                        return new Date(d.createTime).dateFormat("yyyy-MM-dd hh:mm");
                    }},
                    { align: 'center', width: 150, toolbar: '#contract-table-bar', title: '操作',
                            fixed: 'right'}
                        }
                    },
                    {
                        align: 'center', width: 150, toolbar: '#contract-table-bar', title: '操作',
                        fixed: 'right'
                    }
                ]],
                done:function(res){
                    permissionsInput(res,config);
@@ -107,8 +123,11 @@
                    }, 'DELETE');
                });
            }
            else
            {
            else if (obj.event === 'edit') {
                //修改
                updateModel(obj.data);
            } else if (obj.event === 'detail') {
                //充值记录列表
                showModel(obj.data.id);
            }
        });
@@ -116,15 +135,15 @@
        // 搜索按钮点击事件
        $('#contract-btn-search').click(function () {
            var hospitalName = $('#hospital-search-value').val();
            if(strUtil.isEmpty(hospitalName))
            {
            if (strUtil.isEmpty(hospitalName)) {
                $("#hospitalId").val("");
            }
            table.reload('contract-table', { 
                where: { hospitalId: $("#hospitalId").val()},
                page: {
                        curr: 1 
                    }  });
                }
            });
        });
        var showModel=function(orderId){
@@ -148,25 +167,42 @@
                    { field: 'proName', width: 300, title: '产品名称' },
                    { field: 'ailightCount', width: 150, title: '读片量' },
                    { field: 'recordCount', width: 100, title: '报告量' },
                    { field: 'isShare', width: 150, title: '是否共享',templet:function(d)
                    {
                                field: 'isShare', width: 150, title: '是否共享', templet: function (d) {
                        if(d.isShare)
                        return '共享'
                        else
                        return '私有'
                    }
                    },
                    { field: 'proBegintime', width: 150, title: '开始时间',templet:function(d){
                            {
                                field: 'proBegintime', width: 150, title: '开始时间', templet: function (d) {
                        return new Date(d.proBegintime).dateFormat("yyyy/MM/dd");
                    } },
                    { field: 'proEndtime', width: 180, title: '结束时间',templet:function(d){
                                }
                            },
                            {
                                field: 'proEndtime', width: 180, title: '结束时间', templet: function (d) {
                        return new Date(d.proEndtime).dateFormat("yyyy/MM/dd");
                    } },
                                }
                            },
                    { field: 'createTime', width: 160, sort: true, title: '创建时间' }
                ]]
            });
            }
        });
        }
        var updateModel = function (data) {
            //修改充值记录
            admin.putTempData("t_hospital", data);
            admin.popupCenter({
                title: '修改合同',
                path: 'pages/opration/rechargeupdate.html',
                area: '1200px',
                offset: '0px',
                finish: function () {
                    $('#hospita-btn-search').click();
                }
            });
        }
    });
</script>
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/doctor_form.html
@@ -289,7 +289,6 @@
        // 表单提交事件
        form.on('submit(user-form-submit)', function (data) {
            debugger
            data.field.hospitalId = $("#hospitalId").val();
            if (data.field.roleId != null && data.field.roleId != "") {
                data.field.roles = data.field.roleId.split(',');
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/hospital.html
@@ -223,7 +223,7 @@
                    }
                });
            } else if(layEvent=="health"){
                //充值
                //运动处方服务
                admin.putTempData("t_hospital", data);
                admin.popupCenter({
                    title: '运动处方服务',
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/recharge.html
@@ -36,7 +36,7 @@
                    <div class="layui-form-item" style="padding: 0; margin-bottom: 0px;">
                        <div class="layui-row">
                            <div class="layui-col-sm5">
                                <label class="layui-form-label" style="padding: 0 30px 0 0;">地区</label>
                                <label class="layui-form-label" style="padding: 0 20px 0 0;">地区</label>
                                <input name="hospitalAreas" id="hospitalAreas" type="text"
                                    style="border: none; width: 250px; margin-top:-10px" readonly class="layui-input" />
                            </div>
@@ -58,42 +58,78 @@
                    </div>
                    <div class="layui-form-item" style="padding: 0; margin-bottom: 0px;">
                        <div class="layui-row">
                            <div class="layui-col-sm4">
                            <div class="layui-col-sm6">
                                <label class="layui-form-label" style="padding: 10px 30px 0 0px;">合同名称</label>
                                <div class="layui-input-block">
                                    <input name="contractTitle" id="contractTitle" type="text" class="layui-input"
                                        maxlength="50" lay-verify="required" required autocomplete="off" />
                                        maxlength="50" lay-verify="required" required autocomplete="off"
                                        style="display: inline-block;width: 80%;" />
                                </div>
                            </div>
                            <div class="layui-col-sm3">
                            <div class="layui-col-sm6">
                                <label class="layui-form-label">合同编号</label>
                                <div class="layui-input-block">
                                    <input name="contractNo" id="contractNo" type="text" class="layui-input"
                                        maxlength="50" style="width: 185px;" autocomplete="off" lay-verify="required"
                                        required />
                                        maxlength="50" autocomplete="off" lay-verify="required" required
                                        style="display: inline-block;width: 80%;" />
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="layui-form-item" style="margin: 10px 0px 0px 0px;">
                        <div class="layui-row">
                            <div class="layui-col-sm4">
                                <label class="layui-form-label" style="padding: 10px 30px 0 0px;">开始日期</label>
                                <input autocomplete="off" name="contractBeginTime" id="contractBeginTime" type="text"
                                    class="layui-input" style="width: 182px;" maxlength="50" lay-verify="required"
                                    required />
                            </div>
                            <div class="layui-col-sm4">
                                <label class="layui-form-label">截止日期</label>
                            <div class="layui-col-sm6">
                                <label class="layui-form-label">当前软件服务周期:</label>
                                <div class="layui-input-block">
                                    <input autocomplete="off" name="contractEndTime" id="contractEndTime" type="text"
                                        class="layui-input" maxlength="50" lay-verify="required" required />
                                    <input autocomplete="off" name="contractBeginTime_not" disabled
                                        id="contractBeginTime_not" type="text" placeholder="请输开始时间" class="layui-input"
                                        maxlength="50" readonly
                                        style="border: none; display: inline-block;width: 40%;" />
                                    <input autocomplete="off" name="contractEndTime_not" disabled
                                        id="contractEndTime_not" type="text" placeholder="请输入结束时间" class="layui-input"
                                        maxlength="50" readonly
                                        style="border: none; display: inline-block;width: 40%;" />
                                </div>
                            </div>
                            <div class="layui-col-sm4">
                            <div class="layui-col-sm6">
                                <label class="layui-form-label">当前读片总量:</label>
                                <div class="layui-input-inline">
                                    <input autocomplete="off" name="contractNum_not" id="contractNum_not" disabled
                                        type="text" class="layui-input" maxlength="50" readonly style="border: none;" />
                                </div>
                            </div>
                            <!-- <div class="layui-col-sm6">
                                <label class="layui-form-label">签订日期</label>
                                <div class="layui-input-block">
                                    <input autocomplete="off" name="contractTime" id="contractTime" type="text"
                                        class="layui-input" maxlength="50" lay-verify="required" required />
                                </div>
                            </div> -->
                        </div>
                    </div>
                    <div class="layui-form-item" style="margin: 10px 0px 0px 0px;">
                        <div class="layui-row">
                            <div class="layui-col-sm6">
                                <label class="layui-form-label">合同服务周期:</label>
                                <!-- <input autocomplete="off" name="contractBeginTime" id="contractBeginTime" type="text"
                                    class="layui-input"  maxlength="50" lay-verify="required"
                                    required /> -->
                                <!-- <input autocomplete="off" name="contractEndTime" id="contractEndTime" type="text"
                                    class="layui-input" maxlength="50" lay-verify="required" required /> -->
                                <div class="layui-input-block">
                                    <input autocomplete="off" name="contractBeginTime" id="contractBeginTime"
                                        type="text" placeholder="请输开始时间" class="layui-input" maxlength="50"
                                        lay-verify="required" required style="display: inline-block;width: 40%;" />
                                    <input autocomplete="off" name="contractEndTime" id="contractEndTime" type="text"
                                        placeholder="请输入结束时间" class="layui-input" maxlength="50" lay-verify="required"
                                        required style="display: inline-block;width: 40%;" />
                                </div>
                            </div>
                            <div class="layui-col-sm6">
                                <label class="layui-form-label">合同读片充值量:</label>
                                <div class="layui-input-inline">
                                    <input autocomplete="off" name="contractNum" id="contractNum"
                                        onkeyup="this.value=this.value.replace(/[^\d]/g,'') " type="text"
                                        class="layui-input" maxlength="50" lay-verify="required" required />
                                </div>
                            </div>
@@ -105,12 +141,67 @@
        <div class="layui-tab" style="margin: 0px;">
            <ul class="layui-tab-title">
                <li class="layui-this">产品信息</li>
                <li class="layui-this">套餐列表</li>
                <li>自定义充值</li>
            </ul>
            <div class="layui-tab-content" style="margin: -10px 0px -10px 0px;">
                <div class="layui-tab-item layui-show" style="padding-top: 0px;">
                    <table class="layui-table" id="product-table" lay-filter="product-table" style="margin: 0px;">
                    </table>
                </div>
                <div class="layui-tab-item">
                    <div class="layui-form-item" style="margin: 10px 0px 0px 0px;">
                        <div class="layui-row">
                            <div class="layui-col-sm12">
                                <label class="layui-form-label">充值名称:</label>
                                <div class="layui-input-inline">
                                    <input autocomplete="off" id="custom_proName" type="text" class="layui-input"
                                        maxlength="50" lay-verify="required" required />
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="layui-form-item" style="margin: 10px 0px 0px 0px;">
                        <div class="layui-row">
                            <div class="layui-col-sm6">
                                <label class="layui-form-label">读片充值量:</label>
                                <div class="layui-input-inline">
                                    <input autocomplete="off" id="custom_ailightCount"
                                        onkeyup="this.value=this.value.replace(/[^\d]/g,'') " type="text"
                                        class="layui-input" maxlength="50" lay-verify="required" required />
                                </div>
                            </div>
                            <div class="layui-col-sm6">
                                <div class="layui-input-inline">
                                    <input type="radio" id="custom_isShare" name="gongxiang" value="1" title="是否共享" />
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="layui-form-item" style="margin: 10px 0px 0px 0px;">
                        <div class="layui-row">
                            <div class="layui-col-sm12">
                                <div class="layui-input-inline" style="width: 160px;text-align: right;">
                                    <input type="radio" id="termType" name="termType" value="true" checked
                                        title="期限限制" />
                                </div>
                                <div class="layui-col-sm4" style="margin-right: 30px;">
                                    <input autocomplete="off" id="custom_beginTime" type="text" placeholder="请输开始时间"
                                        class="layui-input" maxlength="50" />
                                </div>
                                <div class="layui-col-sm4 ">
                                    <input autocomplete="off" type="text" placeholder="请输入结束时间" id="custom_endTime"
                                        class="layui-input" maxlength="50" />
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <div class="layui-input-block"
                            style="text-align: right;padding-right: 100px;padding-top: 50px;">
                            <input class="layui-btn" type="button" id="custom_submit" value="确定" />
                        </div>
                    </div>
                </div>
            </div>
        </div>
@@ -151,28 +242,106 @@
    <input type="checkbox" lay-filter="product-tpl-isShare" value="{{d.id}}" lay-skin="switch" lay-text="共享|不共享" />
</script>
<script>
    layui.use(['form', 'table', 'util', 'config', 'laydate', 'admin'], function () {
    layui.use(['form', 'table', 'util', 'config', 'laydate', 'jquery', 'admin'], function () {
        var form = layui.form;
        var table = layui.table;
        var config = layui.config;
        var layer = layui.layer;
        var util = layui.util;
        var admin = layui.admin;
        // element=layui.element;
        var $ = layui.jquery;
        var laydate = layui.laydate;
        var contractNum = 0;
        //充值进行中
        var isRun = false;
        //执行一个laydate实例
        laydate.render({
            elem: '#contractBeginTime' //指定元素
        var contractBeginTime= laydate.render({
            elem: '#contractBeginTime', //指定元素
            done: function (value, date, endDate) {
                var startDate = new Date(value).getTime();
                var endTime = new Date($('#contractEndTime').val()).getTime();
                if (endTime < startDate) {
                    layer.msg('结束时间不能小于开始时间');
                    $('#contractBeginTime').val($('#contractEndTime').val());
                } else {
                    $('#custom_beginTime').val($("#contractBeginTime").val())
                    custom_beginTimes.config.min = {
                        year: date.year,
                        month: date.month - 1,//关键
                        date: date.date,
                        hours: date.hours,
                        minutes: date.minutes,
                        seconds: date.seconds
                    }
                }
            }
        });
        var contractEndTime = laydate.render({
            elem: '#contractEndTime', //指定元素
            // min: $("#contractEndTime_not").val(),
            done: function (value, date, endDate) {
                var startDate = new Date($('#contractBeginTime').val()).getTime();
                var endTime = new Date(value).getTime();
                if (endTime < startDate) {
                    layer.msg('结束时间不能小于开始时间');
                    $('#contractEndTime').val($('#contractBeginTime').val());
                } else {
                    $('#custom_endTime').val($("#contractEndTime").val())
                    custom_endTimes.config.max = {
                        year: date.year,
                        month: date.month - 1,//关键
                        date: date.date,
                        hours: date.hours,
                        minutes: date.minutes,
                        seconds: date.seconds
                    }
                    var begin = new Date($("#contractBeginTime").val())
                    custom_endTimes.config.min = {
                        year: layui.util.toDateString(begin, "yyyy"),
                        month: layui.util.toDateString(begin, "MM") - 1,//关键
                        date: layui.util.toDateString(begin, "dd"),
                        hours: layui.util.toDateString(begin, "HH"),
                        minutes: layui.util.toDateString(begin, "mm"),
                        seconds: layui.util.toDateString(begin, "ss")
                    }
                }
            }
        });
        laydate.render({
            elem: '#contractEndTime' //指定元素
            elem: '#contractBeginTime_not' //指定元素
        });
        laydate.render({
            elem: '#contractTime', //指定元素
            value: new Date().dateFormat("yyyy-MM-dd")
            elem: '#contractEndTime_not' //指定元素
        });
        var custom_beginTimes = laydate.render({
            elem: '#custom_beginTime', //指定元素
            // min: $("#contractEndTime").val(),
            // man: $("#contractBeginTime").val(),
            done: function (value, date, endDate) {
                var startDate = new Date(value).getTime();
                var endTime = new Date($('#custom_endTime').val()).getTime();
                if (endTime < startDate) {
                    layer.msg('结束时间不能小于开始时间');
                    $('#custom_beginTime').val($('#custom_endTime').val());
                }
            }
        });
        var custom_endTimes = laydate.render({
            elem: '#custom_endTime', //指定元素
            // min: $("#contractEndTime").val(),
            // man: $("#contractBeginTime").val(),
            done: function (value, date, endDate) {
                var startDate = new Date($('#custom_beginTime').val()).getTime();
                var endTime = new Date(value).getTime();
                if (endTime < startDate) {
                    layer.msg('结束时间不能小于开始时间');
                    $('#custom_endTime').val($('#custom_beginTime').val());
                }
            }
        });
        //现将临时数据清理
        admin.putTempData("t_tempProduct", "");
@@ -220,6 +389,7 @@
                                        return d.proTime + "年";
                                        break;
                                }
                            return "";
                            }
                        },
                        {
@@ -271,6 +441,34 @@
                ]
            });
        }
        //获取软件的服务周期
        var getCycleTime = function (departmentId) {
            admin.req('api-opration/productorderdetail/getContractBeginEndTimeAndNum', { departmentId: departmentId },
                function (data) {
                    if (data.code == 0) {
                        $("#contractBeginTime_not").val(layui.util.toDateString(data.data.beginTime, "yyyy-MM-dd"));
                        $("#contractEndTime_not").val(layui.util.toDateString(data.data.endTime, "yyyy-MM-dd"));
                        contractBeginTime.config.max = {
                            year: layui.util.toDateString(data.data.beginTime, "yyyy"),
                            month: layui.util.toDateString(data.data.beginTime, "MM") - 1,//关键
                            date: layui.util.toDateString(data.data.beginTime, "dd"),
                            hours: layui.util.toDateString(data.data.beginTime, "HH"),
                            minutes: layui.util.toDateString(data.data.beginTime, "mm"),
                            seconds: layui.util.toDateString(data.data.beginTime, "ss")
                        }
                        contractEndTime.config.min = {
                            year: layui.util.toDateString(data.data.endTime, "yyyy"),
                            month: layui.util.toDateString(data.data.endTime, "MM") - 1,//关键
                            date: layui.util.toDateString(data.data.endTime, "dd"),
                            hours: layui.util.toDateString(data.data.endTime, "HH"),
                            minutes: layui.util.toDateString(data.data.endTime, "mm"),
                            seconds: layui.util.toDateString(data.data.endTime, "ss")
                        }
                        $("#contractNum_not").val(data.data.count);
                    }
                }, "get")
        }
        //回显医院基本数据
        let hospitalData = admin.getTempData('t_hospital');
@@ -288,9 +486,11 @@
                            });
                        } else {
                            form.val('recharge-form', hospitalData);
                            $("#hospitalAreas").val(hospitalData.hospitalProvince + " " + hospitalData
                                .hospitalCity + " " +
                                hospitalData.hospitalArea);
                            var hospitalProvince = hospitalData.hospitalProvince != null ? hospitalData.hospitalProvince : "";
                            var hospitalCity = hospitalData.hospitalCity != null ? hospitalData.hospitalCity : "";
                            var hospitalArea = hospitalData.hospitalArea != null ? hospitalData.hospitalArea : "";
                            // console.log(hospitalProvince + " " + hospitalCity + " " +hospitalArea)
                            $("#hospitalAreas").val(hospitalProvince + " " + hospitalCity + " " + hospitalArea);
                            //装载产品数据
                            table.render({
@@ -397,8 +597,7 @@
                            });
                        }
                    }
                    else
                    {
                    else {
                        admin.finishPopupCenter();
                        layer.msg("验证医院科室数据异常!", {
                                icon: 2,
@@ -406,9 +605,77 @@
                            });
                    }
                }, 'get');
            //报告数量事件
            $("#contractNum").blur(function () {
                if ($("#contractNum").val() <= 0) {
                    layer.msg("输入的读片量大于0");
                    $("#contractNum").val("")
                    return false;
                }
                var listData = admin.getTempData("t_tempProduct");
                var listNum = 0;
                if (!strUtil.isEmpty(listData)) {
                    listData.forEach(item => {
                        listNum += item.ailightCount;
                    })
                }
                if ($("#contractNum").val() < listNum) {
                    layer.msg("请先删除待充值套餐");
                    $("#contractNum").val(contractNum)
                    return false;
                } else {
                    contractNum = $("#contractNum").val();
                }
            })
            //自定义的确定
            $("#custom_submit").click(function () {
                var custom_proName = $("#custom_proName").val()
                var custom_ailightCount = $("#custom_ailightCount").val()
                var custom_isShare = $("#custom_isShare").prop("checked") ? 1 : 0;
                var termType = $("#termType").prop("checked") ? 1 : 0;
                var custom_beginTime = "";
                var custom_endTime = "";
                if (termType == 1) {
                    custom_beginTime = $("#custom_beginTime").val();
                    custom_endTime = $("#custom_endTime").val();
                } else {
                    custom_beginTime = $("#contractBeginTime").val();
                    custom_endTime = $("#contractEndTime").val();
                }
                var listData = admin.getTempData("t_tempProduct");
                //添加一个id,删除用
                var max = 0;
                if (strUtil.isEmpty(listData)) {
                    listData = new Array();
                }
                listData.forEach(element => {
                    if (max < element.id) {
                        max = element.id
                    }
                });
                //判断待加入产品的总数是否大于合同的总数
                var msg = isthenNum(parseInt(custom_ailightCount));
                if (msg != null) {
                    layer.msg(msg);
                    return false;
        }
                var data = {
                    id: max + 1,
                    ailightCount: parseInt(custom_ailightCount),
                    beginTime: custom_beginTime,
                    endTime: custom_endTime,
                    isShare: custom_isShare,
                    proName: custom_proName,
                    proTime: "",
                    proType: 1,
                    termType: termType
                }
                tempDataList(data);
                waitRecharge();
            })
            getCycleTime(hospitalData.departmentId);
        }
        //待充值列表功能操作
        table.on('tool(product-table-temp)', function (obj) {
            if (obj.event === "del") {
@@ -455,6 +722,15 @@
                    "td[data-field='endTime'] div").text();
                data.isShare = obj.tr.find("td[data-field='isShare'] em").text();
                data.isShare = (data.isShare.indexOf("不") == 0) ? 0 : 1;
                //判断待加入产品的总数是否大于合同的总数
                //试用产品不计算总数
                if (data.proType == 1) {
                    var msg = isthenNum(data.ailightCount);
                    if (msg != null) {
                        layer.msg(msg);
                        return false;
                    }
                }
                if (!strUtil.isEmpty(data.beginTime) && !strUtil.isEmpty(data.endTime)) {
                    if (dateUtil.compareDate(data.endTime, data.beginTime)) {
                        data.id=data.id+'';
@@ -470,6 +746,28 @@
                }
            }
        });
        function isthenNum(num) {
            if (num <= 0) {
                return "请输入读片量大于0";
            }
            var listData = admin.getTempData("t_tempProduct");
            var listNum = 0;
            if (!strUtil.isEmpty(listData)) {
                listData.forEach(item => {
                    listNum += item.ailightCount;
                })
            }
            listNum += num;
            if ($("#contractNum").val() == undefined || $("#contractNum").val() == "") {
                return "请输入读片量!";
            } else {
                if ($("#contractNum").val() < listNum) {
                    return "当前产品总数不得大于合同总量";
                } else {
                    return null;
                }
            }
        }
        //监听单元格编辑 判断日期格式
        table.on('edit(product-table)', function (obj) {
            var value = obj.value //得到修改后的值
@@ -515,13 +813,13 @@
                if (strUtil.isEmpty(listData)) {
                    listData = new Array();
                }
                $.each(listData, function (index, value) {
                    if (value.id === data.id) {
                        //移除
                        listData.splice(index, 1);
                        return false;
                    }
                })
                // $.each(listData, function (index, value) {
                //     if (value.id === data.id) {
                //         //移除
                //         listData.splice(index, 1);
                //         return false;
                //     }
                // })
                listData.push(data);
                admin.putTempData("t_tempProduct", listData);
            } else {
@@ -556,7 +854,10 @@
                                " 00:00:00";
                            data.field.contractEndTime = data.field.contractEndTime +
                                " 23:59:59";
                            data.field.contractTime = data.field.contractTime + " 00:00:00";
                            // data.field.contractTime = data.field.contractTime + " 00:00:00";
                            delete data.field.contractNum_not
                            delete data.field.contractBeginTime_not
                            delete data.field.contractEndTime_not
                            admin.req('api-opration/contract', JSON.stringify(data.field),
                                function (data) {
                                    layer.closeAll('loading');
@@ -567,16 +868,19 @@
                                        $.each(listData, function (index, item) {
                                            var detailData = {
                                                orderId: orderData.id+'',
                                                proId: item.id+'',
                                                proId: item.termType == null ? item.id + '' : "0",
                                                proType: item.proType,
                                                proName: item.proName,
                                                isShare: item.isShare,
                                                ailightCount: item.ailightCount,
                                                recordCount: item.recordCount,
                                                proBegintime: item.beginTime +
                                                    ' 00:00:00',
                                                proEndtime: item.endTime +
                                                    ' 23:59:59'
                                                ailightCount: item.ailightCount != null ? item.ailightCount : 0,
                                                recordCount: item.recordCount != null ? item.recordCount : 0,
                                                termType: item.termType,
                                                proBegintime: item.beginTime != "" ? item.beginTime +
                                                    ' 00:00:00' : "",
                                                proEndtime: item.endTime != "" ? item.endTime +
                                                    ' 23:59:59' : "",
                                                orderAilightCount: item.ailightCount,
                                                orderRecordCount: item.recordCount != null ? item.recordCount : 0,
                                            };
                                            listDetailData.push(detailData);
                                        })
@@ -642,3 +946,12 @@
        });
    });
</script>
<style>
    .layui-form-label {
        width: 140px;
    }
    .layui-input-block {
        margin-left: 160px;
    }
</style>
kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/rechargeupdate.html
New file
@@ -0,0 +1,1061 @@
<form id="recharge-form" lay-filter="recharge-form" class="layui-form">
    <div style="overflow-y: auto; height:700px;">
        <div class="layui-tab">
            <ul class="layui-tab-title">
                <li class="layui-this">合同信息</li>
            </ul>
            <div class="layui-tab-content" style="margin: 0px 0px -10px 0px;">
                <div class="layui-tab-item layui-show">
                    <div class="layui-form-item" style="margin-bottom: 10px;">
                        <div class="layui-row">
                            <div class="layui-col-sm5">
                                <label class="layui-form-label" style="padding: 0;">医院名称</label>
                                <div class="layui-input-block">
                                    <input name="hospitalName" id="hospitalName" type="text" class="layui-input"
                                        style="border: none; margin-top:-10px" readonly />
                                </div>
                            </div>
                            <div class="layui-col-sm3">
                                <label class="layui-form-label" style="padding: 0;">科室名称</label>
                                <div class="layui-input-block">
                                    <input name="departmentName" id="departmentName"
                                        style="border: none;  margin-top:-10px" readonly class="layui-input" />
                                </div>
                            </div>
                            <div class="layui-col-sm2">
                                <label class="layui-form-label" style="padding: 0;">服务人员</label>
                                <div class="layui-input-block">
                                    <input name="serverUserName" id="serverUserName"
                                        style="border: none; margin-top:-10px;width: 120px;" readonly
                                        class="layui-input" />
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="layui-form-item" style="margin-bottom: 10px;">
                        <div class="layui-row">
                            <div class="layui-col-sm5">
                                <label class="layui-form-label" style="padding: 0;">地区</label>
                                <div class="layui-input-block">
                                    <input name="hospitalAreas" id="hospitalAreas" type="text"
                                        style="border: none; margin-top:-10px" readonly class="layui-input" />
                                </div>
                            </div>
                            <div class="layui-col-sm3">
                                <label class="layui-form-label" style="padding: 0;">联系电话</label>
                                <div class="layui-input-block">
                                    <input name="hospitalTel" id="hospitalTel" type="text" class="layui-input"
                                        style="border: none; margin-top:-10px" readonly />
                                </div>
                            </div>
                            <div class="layui-col-sm2">
                                <label class="layui-form-label" style="padding: 0;">联系人</label>
                                <div class="layui-input-block">
                                    <input name="hospitalLink" type="text" class="layui-input"
                                        style="border: none; margin-top:-10px;" readonly />
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="layui-form-item" style="margin-bottom: 10px;">
                        <div class="layui-row">
                            <div class="layui-col-sm6">
                                <label class="layui-form-label" style="padding: 0;">合同名称</label>
                                <div class="layui-input-block">
                                    <input name="contractTitle" id="contractTitle" type="text" class="layui-input"
                                        readonly style="border: none; margin-top:-10px" />
                                </div>
                            </div>
                            <div class="layui-col-sm6">
                                <label class="layui-form-label" style="padding: 0;">合同编号</label>
                                <div class="layui-input-block">
                                    <input name="contractNo" id="contractNo" type="text" class="layui-input"
                                        style="border: none; margin-top:-10px" readonly />
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="layui-form-item" style="margin-bottom: 10px;">
                        <div class="layui-row">
                            <div class="layui-col-sm6">
                                <label class="layui-form-label" style="padding: 0;">软件服务周期:</label>
                                <!-- <div class="layui-col-sm3" style="margin-right: 30px;">
                                    <input autocomplete="off" name="contractBeginTime" id="contractBeginTime"
                                        type="text" placeholder="请输开始时间" class="layui-input" readonly style="border: none; margin-top:-10px"/>
                                </div>
                                <div class="layui-col-sm3">
                                    <input autocomplete="off" name="contractEndTime" id="contractEndTime" type="text"
                                        placeholder="请输入结束时间" class="layui-input" readonly style="border: none; margin-top:-10px" />
                                </div> -->
                                <div class="layui-input-block">
                                    <input autocomplete="off" name="contractBeginTime" id="contractBeginTime"
                                        type="text" placeholder="请输开始时间" disabled class="layui-input" readonly
                                        style="border: none; margin-top:-10px;display: inline-block;width: 46%;" />
                                    <input autocomplete="off" name="contractEndTime" disabled id="contractEndTime" type="text"
                                        placeholder="请输入结束时间" class="layui-input" readonly
                                        style="border: none; margin-top:-10px;display: inline-block;width: 46%;" />
                                </div>
                            </div>
                            <div class="layui-col-sm3">
                                <label class="layui-form-label" style="padding: 0;">合同充值总量:</label>
                                <div class="layui-input-block">
                                    <input autocomplete="off" name="contractNum" id="contractNum"
                                        onkeyup="this.value=this.value.replace(/[^\d]/g,'') " type="text"
                                        class="layui-input" readonly style="border: none; margin-top:-10px" />
                                </div>
                            </div>
                            <div class="layui-col-sm3">
                                <label class="layui-form-label" style="padding: 0;">未充值量:</label>
                                <div class="layui-input-block">
                                    <span name="contractNum"></span>
                                    <input autocomplete="off" name="contractNum_not" id="contractNum_not"
                                        onkeyup="this.value=this.value.replace(/[^\d]/g,'') " type="text"
                                        class="layui-input" readonly style="border: none; margin-top:-10px" />
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="layui-tab" style="margin: 0px;">
            <ul class="layui-tab-title">
                <li class="layui-this">已充值产品</li>
            </ul>
            <div class="layui-tab-content" style="margin: -10px 0px -10px 0px;">
                <div class="layui-tab-item layui-show" style="padding-top: 0px;">
                    <table class="layui-table" id="product-table-now" lay-filter="product-table-now"
                        style="margin: 0px;">
                    </table>
                </div>
            </div>
        </div>
        <div class="layui-tab" style="margin: 0px;">
            <ul class="layui-tab-title">
                <li class="layui-this">套餐列表</li>
                <li>自定义充值</li>
            </ul>
            <div class="layui-tab-content" style="margin: -10px 0px -10px 0px;">
                <div class="layui-tab-item layui-show" style="padding-top: 0px;">
                    <table class="layui-table" id="product-table" lay-filter="product-table" style="margin: 0px;">
                    </table>
                </div>
                <div class="layui-tab-item">
                    <div class="layui-form-item" style="margin: 10px 0px 0px 0px;">
                        <div class="layui-row">
                            <div class="layui-col-sm12">
                                <label class="layui-form-label">充值名称:</label>
                                <div class="layui-input-inline">
                                    <input autocomplete="off" id="custom_proName" type="text" class="layui-input"
                                        maxlength="50"  lay-verify="required" required />
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="layui-form-item" style="margin: 10px 0px 0px 0px;">
                        <div class="layui-row">
                            <div class="layui-col-sm6">
                                <label class="layui-form-label">读片充值量:</label>
                                <div class="layui-input-inline">
                                    <input autocomplete="off" id="custom_ailightCount"
                                        onkeyup="this.value=this.value.replace(/[^\d]/g,'') " type="text"
                                        class="layui-input" maxlength="50"  lay-verify="required"
                                        required />
                                </div>
                            </div>
                            <div class="layui-col-sm6">
                                <div class="layui-input-inline">
                                    <input type="radio" id="custom_isShare" name="gongxiang" value="1" title="是否共享" />
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="layui-form-item" style="margin: 10px 0px 0px 0px;">
                        <div class="layui-row">
                            <div class="layui-col-sm12">
                                <div class="layui-input-inline" style="width: 120px;text-align: right;">
                                    <input type="radio" id="termType" name="termType" value="true" checked title="期限限制" />
                                </div>
                                <div class="layui-col-sm4" style="margin-right: 30px;">
                                    <input autocomplete="off" id="custom_beginTime" type="text" placeholder="请输开始时间"
                                        class="layui-input" maxlength="50" />
                                </div>
                                <div class="layui-col-sm4 ">
                                    <input autocomplete="off" type="text" placeholder="请输入结束时间" id="custom_endTime"
                                        class="layui-input" maxlength="50" />
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <div class="layui-input-block" style="text-align: right;padding-right: 100px;padding-top: 50px;">
                            <input class="layui-btn" type="button" id="custom_submit" value="确定" />
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="layui-tab" style="margin: 0px;">
            <ul class="layui-tab-title">
                <li class="layui-this">待充值产品</li>
            </ul>
            <div class="layui-tab-content" style="margin: -10px 0px -10px 0px;">
                <div class="layui-tab-item layui-show" style="padding-top: 0px;">
                    <table class="layui-table" id="product-table-temp" lay-filter="product-table-temp"
                        style="margin: 0px;">
                    </table>
                </div>
            </div>
        </div>
    </div>
    <div class="layui-form-item model-form-footer" style="margin-right: 20px;">
        <button class="layui-btn layui-btn-primary" ew-event="closeDialog" type="button">取消</button>
        <button class="layui-btn permissions" permissions="product-rechage" lay-submit id="submit">确定充值</button>
    </div>
    <input type="hidden" value="" id="departmentId" name="departmentId" />
    <input type="hidden" value="" id="hospitalId" name="hospitalId" />
    <input type="hidden" value="" id="orgId" name="orgId" />
    <input type="hidden" value="" id="serverUserId" name="serverUserId" />
</form>
<!-- 表格操作列 -->
<script type="text/html" id="product-tpl-bar-now">
    {{# if (d.ailightCount !=d.orderAilightCount){}}
        {{# if (d.enabled){}}
            <a class="layui-btn layui-btn-xs" lay-event="order_detail_enable">禁用</a>
            {{#  } else { }}
            <a class="layui-btn layui-btn-disabled" >禁用</a>
        {{#}}}
    {{#  } else { }}
        <a class="layui-btn layui-btn-xs" lay-event="order_detail_del">删除</a>
    {{#}}}
</script>
<!-- 表格状态列 -->
<script type="text/html" id="product-tpl-bar-state">
    <input type="checkbox"  value="{{d.id}}" lay-skin="switch" lay-text="正常|锁定" disabled
           {{d.enabled==true?'checked':''}} class="permissions" permissions="doctortemplete-enable"/>
</script>
<!-- 表格操作列 -->
<script type="text/html" id="product-tpl-bar">
    <a class="layui-btn layui-btn-xs" lay-event="pay">加入待充值</a>
</script>
<!-- 表格操作列 -->
<script type="text/html" id="product-tpl-bar-temp">
    <a class="layui-btn layui-btn-danger" lay-event="del">移除</a>
</script>
<!-- 表格状态列 -->
<script type="text/html" id="product-tpl-isShare">
    <input type="checkbox" lay-filter="product-tpl-isShare" value="{{d.id}}" lay-skin="switch" lay-text="共享|不共享" />
</script>
<script>
    layui.use(['form', 'table', 'util', 'config', 'laydate', 'jquery', 'admin'], function () {
        var form = layui.form;
        var table = layui.table;
        var config = layui.config;
        var layer = layui.layer;
        var util = layui.util;
        var admin = layui.admin;
        // element=layui.element;
        var $ = layui.jquery;
        var laydate = layui.laydate;
        var contractNum = 0;
        //充值进行中
        var isRun = false;
        //执行一个laydate实例
        var contractBeginTime= laydate.render({
            elem: '#contractBeginTime', //指定元素
            done: function (value, date, endDate) {
                var startDate = new Date(value).getTime();
                var endTime = new Date($('#contractEndTime').val()).getTime();
                if (endTime < startDate) {
                    layer.msg('结束时间不能小于开始时间');
                    $('#contractBeginTime').val($('#contractEndTime').val());
                } else {
                    $('#custom_beginTime').val($("#contractBeginTime").val())
                    custom_beginTimes.config.min = {
                        year: date.year,
                        month: date.month - 1,//关键
                        date: date.date,
                        hours: date.hours,
                        minutes: date.minutes,
                        seconds: date.seconds
                    }
                }
            }
        });
        var contractEndTime = laydate.render({
            elem: '#contractEndTime', //指定元素
            // min: $("#contractEndTime_not").val(),
            done: function (value, date, endDate) {
                var startDate = new Date($('#contractBeginTime').val()).getTime();
                var endTime = new Date(value).getTime();
                if (endTime < startDate) {
                    layer.msg('结束时间不能小于开始时间');
                    $('#contractEndTime').val($('#contractBeginTime').val());
                } else {
                    $('#custom_endTime').val($("#contractEndTime").val())
                    custom_endTimes.config.max = {
                        year: date.year,
                        month: date.month - 1,//关键
                        date: date.date,
                        hours: date.hours,
                        minutes: date.minutes,
                        seconds: date.seconds
                    }
                    var begin = new Date($("#contractBeginTime").val())
                    custom_endTimes.config.min = {
                        year: layui.util.toDateString(begin, "yyyy"),
                        month: layui.util.toDateString(begin, "MM") - 1,//关键
                        date: layui.util.toDateString(begin, "dd"),
                        hours: layui.util.toDateString(begin, "HH"),
                        minutes: layui.util.toDateString(begin, "mm"),
                        seconds: layui.util.toDateString(begin, "ss")
                    }
                }
            }
        });
        laydate.render({
            elem: '#contractBeginTime_not' //指定元素
        });
        laydate.render({
            elem: '#contractEndTime_not' //指定元素
        });
        var custom_beginTimes = laydate.render({
            elem: '#custom_beginTime', //指定元素
            // min: $("#contractEndTime").val(),
            // man: $("#contractBeginTime").val(),
            done: function (value, date, endDate) {
                var startDate = new Date(value).getTime();
                var endTime = new Date($('#custom_endTime').val()).getTime();
                if (endTime < startDate) {
                    layer.msg('结束时间不能小于开始时间');
                    $('#custom_beginTime').val($('#custom_endTime').val());
                }
            }
        });
        var custom_endTimes = laydate.render({
            elem: '#custom_endTime', //指定元素
            // min: $("#contractEndTime").val(),
            // man: $("#contractBeginTime").val(),
            done: function (value, date, endDate) {
                var startDate = new Date($('#custom_beginTime').val()).getTime();
                var endTime = new Date(value).getTime();
                if (endTime < startDate) {
                    layer.msg('结束时间不能小于开始时间');
                    $('#custom_endTime').val($('#custom_beginTime').val());
                }
            }
        });
        //现将临时数据清理
        admin.putTempData("t_tempProduct", "");
        //待充值列表
        var waitRecharge = function () {
            table.render({
                elem: '#product-table-temp',
                data: admin.getTempData("t_tempProduct"),
                page: false,
                cellMinWidth: 100,
                cols: [
                    [{
                        field: 'proName',
                        width: 330,
                        title: '产品名称',
                        align: 'center',
                        fixed: 'left'
                    },
                    {
                        field: 'proType',
                        align: 'center',
                        width: 80,
                        templet: function (d) {
                            if (d.proType === 0)
                                return "试用"
                            else
                                return "正式"
                        },
                        title: '类型'
                    },
                    {
                        field: 'proTime',
                        width: 100,
                        title: '时长',
                        align: 'center',
                        templet: function (d) {
                            switch (d.proTimeUnit) {
                                case 0:
                                    return d.proTime + "天";
                                    break;
                                case 1:
                                    return d.proTime + "月";
                                    break;
                                case 2:
                                    return d.proTime + "年";
                                    break;
                            }
                            return "";
                        }
                    },
                    {
                        field: 'ailightCount',
                        width: 100,
                        align: 'center',
                        title: '读片量'
                    },
                    {
                        field: 'recordCount',
                        width: 100,
                        align: 'center',
                        title: '报告量'
                    },
                    {
                        field: 'beginTime',
                        align: 'center',
                        width: 120,
                        title: '开始日期'
                    },
                    {
                        field: 'endTime',
                        align: 'center',
                        width: 120,
                        title: '结束日期'
                    },
                    {
                        field: 'isShare',
                        fixed: 'right',
                        align: 'center',
                        width: 100,
                        templet: function (d) {
                            if (d.isShare == 0)
                                return "不共享"
                            else
                                return "共享"
                        },
                        title: '共享'
                    },
                    {
                        field: 'id',
                        fixed: 'right',
                        align: 'center',
                        width: 100,
                        toolbar: '#product-tpl-bar-temp',
                        title: '操作'
                    }
                    ]
                ]
            });
        }
        //待充值列表
        var nowContract = function () {
            table.render({
                elem: '#product-table-now',
                data: admin.getTempData("t_tempProduct"),
                page: false,
                url: config.base_server + 'api-opration/productorderdetail?orderId=' + admin.getTempData('t_hospital').id,
                cellMinWidth: 100,
                headers: {
                    'Authorization': 'Bearer ' + config.getToken().access_token
                },
                cols: [
                    [{
                        field: 'proName', width: 200, title: '产品名称', align: 'center', fixed: 'left'
                    },
                    {
                        field: 'proType', align: 'center', width: 80, templet: function (d) {
                            if (d.proType === 0)
                                return "试用"
                            else
                                return "正式"
                        }, title: '类型'
                    },
                    {
                        field: 'createTime', width: 180, title: '充值时间', align: 'center'
                    },
                    {
                        field: 'ailightCount', width: 100, align: 'center', title: '读片剩余量'
                    },
                    {
                        field: 'orderAilightCount', width: 100, align: 'center', title: '读片使用量', templet: function (d) {
                            // if(d.orderAilightCount==null){
                            //     return "";
                            // }
                            return d.orderAilightCount - d.ailightCount;
                        }
                    },
                    {
                        field: 'proBegintime', align: 'center', width: 180, title: '开始日期', templet: function (d) { return layui.util.toDateString(d.proBegintime, 'yyyy-MM-dd'); }
                    },
                    {
                        field: 'proEndtime', align: 'center', width: 180, title: '结束日期', templet: function (d) { return layui.util.toDateString(d.proEndtime, 'yyyy-MM-dd'); }
                    },
                    { field: 'enabled', align: 'center', width: 100, templet: '#product-tpl-bar-state', title: '状态' },
                    {
                        field: 'isShare', fixed: 'right', align: 'center', width: 100,
                        templet: function (d) {
                            if (d.isShare == 0)
                                return "不共享"
                            else
                                return "共享"
                        }, title: '共享'
                    },
                    {
                        field: 'id', fixed: 'right', align: 'center', width: 100, toolbar: '#product-tpl-bar-now', title: '操作'
                    }
                    ],
                ],
                done: function (res, curr, count) {
                    //如果是异步请求数据方式,res即为你接口返回的信息。
                    //如果是直接赋值的方式,res即为:{data: [], count: 99} data为当前页数据、count为数据总长度
                    var num = 0;
                    res.data.forEach(element => {
                        if(element.proType==1){
                            if (element.enabled) {
                                num += element.orderAilightCount;
                            } else {
                                num += (element.orderAilightCount - element.ailightCount)
                            }
                        }
                    });
                    $("#contractNum_not").val($("#contractNum").val() - num);
                }
            });
        }
        // 产品待充值数据
        var tempDataList = function (data) {
            if (!strUtil.isEmpty(data)) {
                var listData = admin.getTempData("t_tempProduct");
                if (strUtil.isEmpty(listData)) {
                    listData = new Array();
                }
                listData.push(data);
                admin.putTempData("t_tempProduct", listData);
            } else {
                admin.putTempData("t_tempProduct", "");
            }
        }
        //获取医院的地址
        var getHospitalAddress=function(id){
            admin.req('api-user/syshospital/' + id, {},
                function (data) {
                    if(data.code==0){
                        var hospitalData=data.data;
                        var hospitalProvince=hospitalData.hospitalProvince!=null ? hospitalData.hospitalProvince: ""
                            var hospitalCity=hospitalData.hospitalCity!=null ? hospitalData.hospitalCity: ""
                            var hospitalArea=hospitalData.hospitalArea!=null ? hospitalData.hospitalArea: ""
                            $("#hospitalAreas").val(hospitalProvince + " " + hospitalCity + " " +hospitalArea);
                    }
                },"get")
        }
        //获取软件的服务周期
        var getCycleTime=function(departmentId){
            admin.req('api-opration/productorderdetail/getContractBeginEndTimeAndNum' , {departmentId: departmentId},
                function (data) {
                    if(data.code==0){
                            $("#contractBeginTime").val(layui.util.toDateString(data.data.beginTime,"yyyy-MM-dd"));
                            $("#contractEndTime").val( layui.util.toDateString(data.data.endTime,"yyyy-MM-dd"));
                            $("#contractNum").val(data.data.count);
                            contractBeginTime.config.max = {
                            year: layui.util.toDateString(data.data.beginTime, "yyyy"),
                            month: layui.util.toDateString(data.data.beginTime, "MM") - 1,//关键
                            date: layui.util.toDateString(data.data.beginTime, "dd"),
                            hours: layui.util.toDateString(data.data.beginTime, "HH"),
                            minutes: layui.util.toDateString(data.data.beginTime, "mm"),
                            seconds: layui.util.toDateString(data.data.beginTime, "ss")
                        }
                        contractEndTime.config.min = {
                            year: layui.util.toDateString(data.data.endTime, "yyyy"),
                            month: layui.util.toDateString(data.data.endTime, "MM") - 1,//关键
                            date: layui.util.toDateString(data.data.endTime, "dd"),
                            hours: layui.util.toDateString(data.data.endTime, "HH"),
                            minutes: layui.util.toDateString(data.data.endTime, "mm"),
                            seconds: layui.util.toDateString(data.data.endTime, "ss")
                        }
                    }
                },"get")
        }
        //回显医院基本数据
        let hospitalData = admin.getTempData('t_hospital');
        if (hospitalData != null) {
            nowContract();
            admin.req('api-user/sysdepartment/getPayMes?departmentId=' + hospitalData.departmentId, {},
                function (data) {
                    layer.closeAll('loading');
                    if (0 === data.code) {
                        queryData = data.data;
                        if (queryData === true) {
                            admin.finishPopupCenter();
                            layer.msg("当前科室开通了单次支付功能,不能进行充值业务!", {
                                icon: 3,
                                time: 5000
                            });
                        } else {
                            hospitalData.contractBeginTime = layui.util.toDateString(hospitalData.contractBeginTime, 'yyyy-MM-dd')
                            hospitalData.contractEndTime = layui.util.toDateString(hospitalData.contractEndTime, 'yyyy-MM-dd')
                            delete hospitalData.contractBeginTime
                            delete hospitalData.contractEndTime
                            delete hospitalData.contractNum
                            form.val('recharge-form', hospitalData);
                            getHospitalAddress(hospitalData.hospitalId);
                            //装载产品数据
                            table.render({
                                elem: '#product-table',
                                url: config.base_server + 'api-opration/product/all',
                                method: 'GET',
                                cellMinWidth: 50,
                                headers: {
                                    'Authorization': 'Bearer ' + config.getToken().access_token
                                },
                                page: false,
                                where: {
                                    is_del: 0,
                                    enabled: 1
                                },
                                cols: [
                                    [{
                                        field: 'proName',
                                        sort: true,
                                        width: 330,
                                        title: '产品名称',
                                        align: 'center',
                                        fixed: 'left'
                                    },
                                    {
                                        field: 'proType',
                                        sort: true,
                                        align: 'center',
                                        width: 80,
                                        templet: function (d) {
                                            if (d.proType === 0)
                                                return "试用"
                                            else
                                                return "正式"
                                        },
                                        title: '类型'
                                    },
                                    {
                                        field: 'proTime',
                                        width: 100,
                                        title: '时长',
                                        align: 'center',
                                        templet: function (d) {
                                            switch (d.proTimeUnit) {
                                                case 0:
                                                    return d.proTime + "天";
                                                    break;
                                                case 1:
                                                    return d.proTime + "月";
                                                    break;
                                                case 2:
                                                    return d.proTime + "年";
                                                    break;
                                            }
                                        }
                                    },
                                    {
                                        field: 'ailightCount',
                                        width: 100,
                                        align: 'center',
                                        title: '读片量'
                                    },
                                    {
                                        field: 'recordCount',
                                        width: 100,
                                        align: 'center',
                                        title: '报告量'
                                    },
                                    {
                                        field: 'beginTime',
                                        align: 'center',
                                        width: 120,
                                        title: '开始日期',
                                        event: "date"
                                    },
                                    {
                                        field: 'endTime',
                                        align: 'center',
                                        width: 120,
                                        title: '结束日期',
                                        event: "date"
                                    },
                                    {
                                        field: 'isShare',
                                        fixed: 'right',
                                        align: 'center',
                                        width: 100,
                                        templet: '#product-tpl-isShare',
                                        title: '共享'
                                    },
                                    {
                                        field: 'id',
                                        fixed: 'right',
                                        align: 'center',
                                        width: 100,
                                        toolbar: '#product-tpl-bar',
                                        title: '操作'
                                    }
                                    ]
                                ],
                                done: function (res) {
                                    permissionsInput(res, config);
                                }
                            });
                        }
                    }
                    else {
                        admin.finishPopupCenter();
                        layer.msg("验证医院科室数据异常!", {
                            icon: 2,
                            time: 3000
                        });
                    }
                }, 'get');
            //报告数量事件
            $("#contractNum").blur(function () {
                if ($("#contractNum").val() <= 0) {
                    layer.msg("输入的读片量大于0");
                    $("#contractNum").val("")
                    return false;
                }
                var listData = admin.getTempData("t_tempProduct");
                var listNum = 0;
                if (!strUtil.isEmpty(listData)) {
                    listData.forEach(item => {
                        listNum += item.ailightCount;
                    })
                }
                if ($("#contractNum").val() < listNum) {
                    layer.msg("请先删除待充值套餐");
                    $("#contractNum").val(contractNum)
                    return false;
                } else {
                    contractNum = $("#contractNum").val();
                }
            })
            //自定义的确定
            $("#custom_submit").click(function () {
                var custom_proName = $("#custom_proName").val()
                var custom_ailightCount = $("#custom_ailightCount").val()
                var custom_isShare = $("#custom_isShare").prop("checked") ? 1 : 0;
                var termType = $("#termType").prop("checked") ? 1 : 0;
                var custom_beginTime = "";
                var custom_endTime = "";
                if (termType == 1) {
                    custom_beginTime = $("#custom_beginTime").val();
                    custom_endTime = $("#custom_endTime").val();
                } else {
                    custom_beginTime = $("#contractBeginTime").val();
                    custom_endTime = $("#contractEndTime").val();
                }
                var listData = admin.getTempData("t_tempProduct");
                //添加一个id,删除用
                var max = 0;
                if (strUtil.isEmpty(listData)) {
                    listData = new Array();
                }
                listData.forEach(element => {
                    if (max < element.id) {
                        max = element.id
                    }
                });
                //判断待加入产品的总数是否大于合同的总数
                var msg = isthenNum(parseInt(custom_ailightCount));
                if (msg != null) {
                    layer.msg(msg);
                    return false;
                }
                var data = {
                    id: max + 1,
                    ailightCount: parseInt(custom_ailightCount),
                    beginTime: custom_beginTime,
                    endTime: custom_endTime,
                    isShare: custom_isShare,
                    proName: custom_proName,
                    proTime: "",
                    proType: 1,
                    termType: termType
                }
                tempDataList(data);
                waitRecharge();
            })
            //确定充值按钮
            $("#submit").click(function () {
                submit();
            })
            getCycleTime(hospitalData.departmentId);
        }
        //已充值列表 功能操作
        table.on('tool(product-table-now)', function (obj) {
            if (obj.event === "order_detail_del") {
                if (!strUtil.isEmpty(obj.data.id)) {
                    admin.req('api-opration/productorderdetail/' + obj.data.id, {}, function (data) {
                        layer.closeAll('loading');
                        if (data.code == 0) {
                            layer.msg(data.msg, { icon: 1, time: 2000 });
                            table.reload('product-table-now', {});
                        } else {
                            layer.msg(data.msg, { icon: 2, time: 2000 });
                        }
                    }, 'delete');
                    obj.del();
                }
            } else if (obj.event === "order_detail_enable") {
                if (!strUtil.isEmpty(obj.data.id)) {
                    admin.req('api-opration/productorderdetail/updateEnabled', {
                        id: obj.data.id,
                        enabled: false
                    }, function (data) {
                        layer.closeAll('loading');
                        if (data.code == 0) {
                            layer.msg(data.msg, { icon: 1, time: 2000 });
                            table.reload('product-table-now', {});
                        } else {
                            layer.msg(data.msg, { icon: 2, time: 2000 });
                            form.render('checkbox');
                        }
                    }, 'GET');
                    obj.del();
                }
            }
        });
        //待充值列表功能操作
        table.on('tool(product-table-temp)', function (obj) {
            if (obj.event === "del") {
                if (!strUtil.isEmpty(obj.data.id)) {
                    delTempDataById(obj.data.id);
                    obj.del();
                }
            }
        });
        //单元格点击事件
        table.on('tool(product-table)', function (obj) {
            var newdata = {};
            var data = obj.data;
            var selectData = {};
            if (obj.event === 'date') {
                var field = $(this).data('field');
                laydate.render({
                    elem: this.firstChild,
                    format: "yyyy-MM-dd",
                    show: true,
                    done: function (value, date) {
                        var nowTr = obj.tr;
                        if (field === "beginTime") {
                            var endTimes = getNowDate(data.proTime, data.proTimeUnit,
                                value);
                            newdata["beginTime"] = value;
                            newdata["endTime"] = endTimes;
                        } else if (field === "endTime") {
                            newdata["endTime"] = value;
                            var beginTimes = getNowDate((0 - parseInt(data.proTime)),
                                data.proTimeUnit, value);
                            newdata["beginTime"] = beginTimes;
                        }
                        obj.update(newdata);
                    }
                });
            }
            if (obj.event === "pay") {
                data.beginTime = obj.tr.find("td[data-field='beginTime'] input").val();
                data.endTime = obj.tr.find("td[data-field='endTime'] input").val();
                data.beginTime = (!strUtil.isEmpty(data.beginTime)) ? data.beginTime : obj.tr.find(
                    "td[data-field='beginTime'] div").text();
                data.endTime = (!strUtil.isEmpty(data.endTime)) ? data.endTime : obj.tr.find(
                    "td[data-field='endTime'] div").text();
                data.isShare = obj.tr.find("td[data-field='isShare'] em").text();
                data.isShare = (data.isShare.indexOf("不") == 0) ? 0 : 1;
                //判断待加入产品的总数是否大于合同的总数
                     //试用产品不计算总数
                if(data.proType==1){
                    var msg = isthenNum(data.ailightCount);
                        if (msg != null) {
                            layer.msg(msg);
                            return false;
                        }
                }
                if (!strUtil.isEmpty(data.beginTime) && !strUtil.isEmpty(data.endTime)) {
                    if (dateUtil.compareDate(data.endTime, data.beginTime)) {
                        data.id = data.id + '';
                        tempDataList(data);
                        waitRecharge();
                    } else {
                        layer.msg("结束时间必须大于开始时间!");
                        return false;
                    }
                } else {
                    layer.msg("时间格式有误!");
                    return false;
                }
            }
        });
        function isthenNum(num) {
            if (num <= 0) {
                return "请输入读片量且大于0";
            }
            var listData = admin.getTempData("t_tempProduct");
            var listNum = 0;
            if (!strUtil.isEmpty(listData)) {
                listData.forEach(item => {
                    listNum += item.ailightCount;
                })
            }
            listNum += num;
            if ($("#contractNum_not").val() == undefined || $("#contractNum_not").val() == "") {
                return "请输入读片量!";
            } else {
                if ($("#contractNum_not").val() < listNum) {
                    return "当前产品总数不得大于合同总量";
                } else {
                    return null;
                }
            }
        }
        //监听单元格编辑 判断日期格式
        table.on('edit(product-table)', function (obj) {
            var value = obj.value //得到修改后的值
                ,
                data = obj.data //得到所在行所有键值
                ,
                field = obj.field; //得到字段
            if (dateUtil.isDate(value)) { } else {
                layer.msg("输入的日期格式无效!");
            }
        });
        //自动计算时间
        var getNowDate = function (proTime, proTimeUnit, now) {
            if (strUtil.isEmpty(now)) {
                now = new Date();
            } else {
                now = dateUtil.strTurnDate(now);
            }
            if (strUtil.isEmpty(proTime) && strUtil.isEmpty(proTimeUnit)) {
                return now.dateFormat("yyyy-MM-dd");
            } else {
                proTime = strUtil.isEmpty(proTime) ? 0 : proTime;
                proTimeUnit = strUtil.isEmpty(proTimeUnit) ? 0 : proTimeUnit;
                switch (proTimeUnit) {
                    case 0:
                        return new Date(now.setDate(now.getDate() + proTime)).dateFormat("yyyy-MM-dd");
                        break;
                    case 1:
                        return new Date(now.setMonth(now.getMonth() + proTime)).dateFormat(
                            "yyyy-MM-dd");
                        break;
                    case 2:
                        return new Date(now.setFullYear(now.getFullYear() + proTime)).dateFormat(
                            "yyyy-MM-dd");
                        break;
                }
            }
        }
        //移除指定数据
        var delTempDataById = function (id) {
            if (!strUtil.isEmpty(id)) {
                var listData = admin.getTempData("t_tempProduct");
                $.each(listData, function (index, value) {
                    if (value.id === id) {
                        //移除
                        listData.splice(index, 1);
                        return false;
                    }
                })
                admin.putTempData("t_tempProduct", listData);
            }
        }
        function submit() {
            console.log(1111111)
            if (!isRun) {
                layer.load(2);
                var listData = admin.getTempData("t_tempProduct");
                if (listData != null) {
                    layer.confirm("确定要将待充值列表中的" + listData.length + "个产品充值给当前医院的科室吗?", {
                        btn: ["确定", "返回"]
                    }, function () {
                        isRun = true;
                        layer.closeAll('loading');
                        //处理订单明细数据
                        var listDetailData = new Array();
                        $.each(listData, function (index, item) {
                            var detailData = {
                                orderId: hospitalData.id + '',
                                proId: item.termType == null ? item.id + '' : "0",
                                proType: item.proType,
                                proName: item.proName,
                                isShare: item.isShare,
                                ailightCount: item.ailightCount != null ? item.ailightCount : 0,
                                recordCount: item.recordCount != null ? item.recordCount : 0,
                                termType: item.termType,
                                proBegintime: item.beginTime != "" ? item.beginTime +
                                    ' 00:00:00' : "",
                                proEndtime: item.endTime != "" ? item.endTime +
                                    ' 23:59:59' : "",
                                orderAilightCount: item.ailightCount,
                                orderRecordCount: item.recordCount != null ? item.recordCount : 0,
                            };
                            listDetailData.push(detailData);
                        })
                        if (listDetailData.length > 0) {
                            //提交订单数据
                            admin.req(
                                'api-opration/productorderdetail/saveall',
                                JSON.stringify(listDetailData),
                                function (data) {
                                    isRun = false;
                                    layer.closeAll('loading');
                                    if (data.code === 0) {
                                        //现将临时数据清理
                                        admin.putTempData(
                                            "t_tempProduct",
                                            "");
                                        layer.msg(data.msg, {
                                            icon: 1,
                                            time: 2000
                                        }, function () {
                                            admin
                                                .finishPopupCenter();
                                        });
                                    } else {
                                        layer.msg(data.msg, {
                                            icon: 2,
                                            time: 1000
                                        });
                                    }
                                }, 'POST');
                        } else {
                            layer.msg("充值数据异常为空!", {
                                icon: 2,
                                time: 1000
                            });
                            isRun = false;
                        }
                    })
                } else {
                    layer.msg("请先将要充值的产品加入待充值!", {
                        icon: 2,
                        time: 2000
                    });
                }
                layer.closeAll('loading');
                return false;
            }
        };
    });
</script>
<style>
    .layui-form-label {
        width: 100px;
    }
</style>