From cbad97fdf8ec5607ca0c2ae898cd4e0657e056a1 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Fri, 18 Dec 2020 16:28:10 +0800 Subject: [PATCH] finish vip.html --- zq-erp/src/main/java/com/matrix/system/hive/action/MoneyCardUseController.java | 2 zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip.html | 1497 ++++++++++++++++++++++++---- zq-erp/src/main/java/com/matrix/system/hive/bean/SysVipInfo.java | 4 zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip_bak.html | 285 +++++ zq-erp/src/main/resources/templates/views/admin/hive/vip/vipInfo-list.html | 3 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java | 23 zq-erp/src/main/resources/templates/views/admin/hive/vip/tc-form.html | 8 zq-erp/src/main/resources/templates/views/admin/hive/vip/moneyCardUse-form.html | 10 /dev/null | 1247 ----------------------- zq-erp/src/main/resources/templates/views/admin/hive/vip/projUse-form.html | 8 zq-erp/src/main/java/com/matrix/system/hive/bean/SysOrder.java | 2 zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java | 35 zq-erp/src/main/java/com/matrix/system/hive/bean/SysProjServices.java | 6 zq-erp/src/main/java/com/matrix/system/hive/bean/SysProjUse.java | 2 zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUse.java | 2 15 files changed, 1,639 insertions(+), 1,495 deletions(-) diff --git a/zq-erp/src/main/java/com/matrix/system/hive/action/MoneyCardUseController.java b/zq-erp/src/main/java/com/matrix/system/hive/action/MoneyCardUseController.java index c4c732b..2744c37 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/action/MoneyCardUseController.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/action/MoneyCardUseController.java @@ -296,7 +296,7 @@ if (newDate != null && newDate.before(today)) { return new AjaxResult(AjaxResult.STATUS_FAIL, "有效期要大于当前日期"); } - if (newDate == null && failTime.before(today)) { + if (newDate == null && (failTime == null || failTime.before(today))) { //如果是已过期界面会提醒重新设置有效期 return new AjaxResult(AjaxResult.STATUS_SUCCESS, "已过期"); } diff --git a/zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUse.java b/zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUse.java index 3169b9d..99d661c 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUse.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/bean/MoneyCardUse.java @@ -1,5 +1,6 @@ package com.matrix.system.hive.bean; +import com.fasterxml.jackson.annotation.JsonFormat; import com.matrix.core.anotations.Extend; import com.matrix.core.tools.DateUtil; import com.matrix.system.hive.plugin.util.MoneyUtil; @@ -67,6 +68,7 @@ /** * 失效时间 */ + @JsonFormat(pattern = DateUtil.DATE_FORMAT_DD, timezone = "GMT+8") @DateTimeFormat(pattern= DateUtil.DATE_FORMAT_DD) private Date failTime; diff --git a/zq-erp/src/main/java/com/matrix/system/hive/bean/SysOrder.java b/zq-erp/src/main/java/com/matrix/system/hive/bean/SysOrder.java index d1a33cf..663fa32 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/bean/SysOrder.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/bean/SysOrder.java @@ -31,14 +31,12 @@ /** * 下单时间 */ - @JsonFormat(pattern = DateUtil.DATE_FORMAT_MM, timezone = "GTM+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") private Date orderTime; /** * 收款 */ - @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GTM+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") private Date payTime; diff --git a/zq-erp/src/main/java/com/matrix/system/hive/bean/SysProjServices.java b/zq-erp/src/main/java/com/matrix/system/hive/bean/SysProjServices.java index 46dd6a0..70cd5a4 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/bean/SysProjServices.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/bean/SysProjServices.java @@ -37,7 +37,7 @@ /** * 订单创建时间 */ - @JsonFormat(pattern = DateUtil.DATE_FORMAT_MM, timezone = "GTM+8") + @JsonFormat(pattern = DateUtil.DATE_FORMAT_MM, timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm") private Date createTime; /** @@ -289,14 +289,14 @@ /** * 扩展属性-预约查询开始时间 */ - @JsonFormat(pattern = DateUtil.DATE_FORMAT_MM, timezone = "GTM+8") + @JsonFormat(pattern = DateUtil.DATE_FORMAT_MM, timezone = "GMT+8") @DateTimeFormat(pattern = DateUtil.DATE_FORMAT_MM) private Date beginTime; /** * 扩展属性-预约查询结束时间 */ - @JsonFormat(pattern = DateUtil.DATE_FORMAT_MM, timezone = "GTM+8") + @JsonFormat(pattern = DateUtil.DATE_FORMAT_MM, timezone = "GMT+8") @DateTimeFormat(pattern = DateUtil.DATE_FORMAT_MM) private Date closureTime; diff --git a/zq-erp/src/main/java/com/matrix/system/hive/bean/SysProjUse.java b/zq-erp/src/main/java/com/matrix/system/hive/bean/SysProjUse.java index d0e921b..d331b5b 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/bean/SysProjUse.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/bean/SysProjUse.java @@ -52,8 +52,6 @@ */ private Long taocanId; - - /** * 订单明细id 不明确 */ diff --git a/zq-erp/src/main/java/com/matrix/system/hive/bean/SysVipInfo.java b/zq-erp/src/main/java/com/matrix/system/hive/bean/SysVipInfo.java index 3f34fa4..350d487 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/bean/SysVipInfo.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/bean/SysVipInfo.java @@ -92,7 +92,7 @@ /** * 生日 */ - @JsonFormat(pattern = DateUtil.DATE_FORMAT_MM, timezone = "GTM+8") + @JsonFormat(pattern = DateUtil.DATE_FORMAT_MM, timezone = "GMT+8") @DateTimeFormat(pattern = DateUtil.DATE_FORMAT_DD) private Date birthday1; @@ -143,7 +143,7 @@ /** * 注册时间 */ - @JsonFormat(pattern = DateUtil.DATE_FORMAT_MM, timezone = "GTM+8") + @JsonFormat(pattern = DateUtil.DATE_FORMAT_MM, timezone = "GMT+8") private Date createTime; /** * 备注 diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java index 23c1e7e..438b430 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysOrderServiceImpl.java @@ -629,6 +629,10 @@ moneyCardUse.setIsOver(Dictionary.FLAG_YES_Y); moneyCardUse.setStatus(Dictionary.MONEYCARD_STATUS_WX); } + + ShoppingGoods shoppingGoods = shoppingGoodsService.findById(moneyCardUse.getGoodsId()); + Date invalidTime = shoppingGoodsService.calInvalidTime(shoppingGoods, 2, moneyCardUse.getFailTime()); + moneyCardUse.setFailTime(invalidTime); // 更新充值卡信息 moneyCardUseDao.update(moneyCardUse); } @@ -736,14 +740,17 @@ moneyCardUse.setLastCount(moneyCar.getCarUseCount()); } moneyCardUse.setVipId(sourceOrder.getVipId()); - if (moneyCar.getValidity() == null || moneyCar.getValidity() == 0) { - // 设置失效时间 - Calendar cal = Calendar.getInstance(); - cal.set(2200, 1, 1); - moneyCardUse.setFailTime(cal.getTime()); - } else { - moneyCardUse.setFailTime(DateUtil.nextNDate(new Date(), 30 * moneyCar.getValidity())); - } +// if (moneyCar.getValidity() == null || moneyCar.getValidity() == 0) { +// // 设置失效时间 +// Calendar cal = Calendar.getInstance(); +// cal.set(2200, 1, 1); +// moneyCardUse.setFailTime(cal.getTime()); +// } else { +// moneyCardUse.setFailTime(DateUtil.nextNDate(new Date(), 30 * moneyCar.getValidity())); +// } + Date invalidTime = shoppingGoodsService.calInvalidTime(sysOrderItem.getShoppingGoods(), 1, null); + moneyCardUse.setFailTime(invalidTime); + moneyCardUseDao.insert(moneyCardUse); } } diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java index 4365d9f..45f9083 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java +++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/SysProjUseServiceImpl.java @@ -19,6 +19,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.xml.crypto.Data; +import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -198,24 +199,37 @@ @Override public AjaxResult activeTc(SysProjUse proj) { - + Date newDate = proj.getFailTime(); + Date today = new Date(); SysProjUse taocan = sysProjUseDao.selectById(proj.getId()); switch (taocan.getStatus()) { case Dictionary.TAOCAN_STATUS_WX: // 如果到期,需要重新设置有效期 - if (taocan.getFailTime().before(new Date())) { - taocan.setFailTime(DateUtil.getDateAfterMonth(new Date(),12)); + if (newDate != null && !newDate.equals("")) { + taocan.setFailTime(newDate); + if (newDate.before(today)) { + return new AjaxResult(AjaxResult.STATUS_FAIL, "有效期要大于当前日期"); + } + } + + if (newDate == null && (taocan.getFailTime() == null || taocan.getFailTime().before(today))) { + return new AjaxResult(AjaxResult.STATUS_SUCCESS, "已过期"); } break; - //TODO 如果是冻结状态则要算出冻结的天数,延长有效期 case Dictionary.TAOCAN_STATUS_DJ: + SysProjuseFreeze freeze = new SysProjuseFreeze(); + freeze.setOrderItemId(taocan.getId().toString()); + freeze.setVipId(taocan.getVipId()); + SysProjuseFreeze freezeProj = sysProjuseFreezeDao.selectByOrderItemId(freeze); + Date dateAfter = DateUtil.nextNDate(taocan.getFailTime(), freezeProj.getGapDays()); + taocan.setFailTime(dateAfter); break; default: return new AjaxResult(AjaxResult.STATUS_FAIL, "请选择无效或者冻结的套餐"); } taocan.setStatus(Dictionary.TAOCAN_STATUS_YX); - sysProjUseDao.updateTcStatus(taocan.getId(),"有效"); + sysProjUseDao.updateProjStatus(taocan); return new AjaxResult(AjaxResult.STATUS_SUCCESS, "操作成功"); } @@ -590,8 +604,8 @@ public AjaxResult activeProj(SysProjUse proj) { Date today = new Date(); Date newDate = proj.getFailTime(); + proj = sysProjUseDao.selectById(proj.getId()); - // TODO 设置项目有效时,需完善该逻辑 switch (proj.getStatus()) { case Dictionary.TAOCAN_STATUS_WX: // 如果到期,需要重新设置有效期 @@ -601,12 +615,19 @@ return new AjaxResult(AjaxResult.STATUS_FAIL, "有效期要大于当前日期"); } } - if (newDate == null || newDate.before(today)) { + if (newDate == null && (proj.getFailTime() == null || proj.getFailTime().before(today))) { return new AjaxResult(AjaxResult.STATUS_SUCCESS, "已过期"); } break; //如果是冻结状态则要算出冻结的天数,延长有效期 case Dictionary.TAOCAN_STATUS_DJ: + SysProjuseFreeze freeze = new SysProjuseFreeze(); + freeze.setOrderItemId(proj.getId().toString()); + freeze.setVipId(proj.getVipId()); + SysProjuseFreeze freezeProj = sysProjuseFreezeDao.selectByOrderItemId(freeze); + Date dateAfter = DateUtil.nextNDate(proj.getFailTime(), freezeProj.getGapDays()); + + proj.setFailTime(dateAfter); break; default: return new AjaxResult(AjaxResult.STATUS_FAIL, "请选择无效或者冻结的套餐"); diff --git a/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip.html b/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip.html index 6b949bb..79a7972 100644 --- a/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip.html +++ b/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip.html @@ -1,5 +1,5 @@ <!DOCTYPE HTML> -<html xmlns:th="http://www.thymeleaf.org" xmlns:matrix="http://www.w3.org/1999/xhtml"> +<html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> @@ -9,9 +9,12 @@ content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/> <meta http-equiv="Cache-Control" content="no-siteapp"/> <!-- 本框架基本脚本和样式 --> - <script type="text/javascript" - th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script> + <script type="text/javascript" th:src="@{/js/systools/MBaseVue.js}"></script> + <script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script> + <script type="text/javascript" th:src="@{/plugin/moment.min.js}"></script> <script type="text/javascript" th:src="@{/js/systools/MBase.js}"></script> + <script type="text/javascript" th:src="@{/js/function/vip.js}"></script> + <link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}"> <script type="text/javascript" th:src="@{/js/function/vip.js}"></script> <script type="text/javascript" th:src="@{/js/function/meiduCommon.js}"></script> @@ -52,234 +55,1294 @@ .userList li:hover { background: #eee; } + + .ibox-content { + background-color: rgba(240, 242, 245, 1); + } + + .col-style { + line-height: 30px; + height: 30px; + text-align: center; + padding: 0 5px; + display: inline-block; + vertical-align: top; + } + + .el-tag + .el-tag { + margin-left: 10px; + margin-bottom: 10px; + } + .button-new-tag { + margin-left: 10px; + height: 24px; + line-height: 22px; + padding-top: 0; + padding-bottom: 0; + } + .input-new-tag { + width: 90px; + margin-left: 10px; + vertical-align: bottom; + } + + .table-style { + margin: 20px 0; + padding: 20px 10px; + border: 1px solid #DCDFE6; + } + + .el-autocomplete { + display: block !important; + } </style> </head> -<body class="ibox-content container-fluid" onkeypress="dosearch(event)"> +<body> +<div class="ibox-content container-fluid" id="app"> + <el-container> + <el-header style="background-color: white; margin: 15px; line-height: 60px"> + <el-col :span="7"> + <el-col :span="19"> + <el-autocomplete + :fetch-suggestions="querySearch" + :trigger-on-focus="false" + @select="handleSelect" + v-model="searchValue" placeholder="输入会员姓名/手机号码/编号" + @keyup.enter.native="searchVipInfo"></el-autocomplete> + </el-col> + <el-col :span="1"> + <el-button type="primary" @click="searchVipInfo">查询</el-button> + </el-col> + </el-col> + <el-col :span="6" style="float: right; margin-right: 20px;"> + <el-button type="primary" plain @click="recharge">充值</el-button> + <el-button type="warning" plain @click="addOrder">开单</el-button> + <el-button type="success" plain @click="addServiceOrder">开服务单</el-button> + <el-button type="danger" plain @click="returnMoney">退款</el-button> + </el-col> + </el-header> + <el-container> + <el-aside style="background-color: white; margin:0 15px; width: 400px"> + <el-row style="margin-left: 26px; margin-right: 26px;"> + <el-row type="flex" justify="center"> + <el-col :span="20" style="padding: 15px; text-align: center;"> + <el-avatar :size="150" :src="circleUrl"></el-avatar> + </el-col> + </el-row> + <el-row type="flex" justify="center"> + <el-col :span="4" style="text-align: center;"><span style="font-weight: bolder">{{vipInfo.vipName}}</span></el-col> + <el-col :span="5" style="text-align: center;">{{vipInfo.vipType}}</el-col> + </el-row> + <el-row type="flex" justify="center"> + <span class="col-style"><span v-if="vipInfo.age != null && vipInfo.age != ''">{{vipInfo.age}}</span><span v-else>-</span></span> + <span class="col-style"><span v-if="vipInfo.addr != null && vipInfo.addr != ''">{{vipInfo.addr}}</span><span v-else>-</span></span> + <span class="col-style">{{vipInfo.phone}}</span> + </el-row> + <el-row style="padding: 10px 20px;"> + <p>余额:<span v-if="vipInfo.balance != null">{{vipInfo.balance}}元</span></p> + <p>积分:<span v-if="vipInfo.pointAll != null">{{vipInfo.pointAll}}</span></p> + <p>累计消费金额:<span v-if="vipInfo.totalMoney != null">{{vipInfo.totalMoney}} 元</span></p> + <p>累计消费次数:<span v-if="vipInfo.totalTimes != null">{{vipInfo.totalTimes}} 次</span></p> + <p>上次消费时间:<span v-if="vipInfo.payTime">{{vipInfo.payTime}}</span></p> + </el-row> + <el-row style="border-top: 2px dashed #E4E7ED; border-bottom: 2px dashed #E4E7ED; padding: 10px 0px;"> + <h4>标签</h4> + <el-tag type="info" + size="small" + :key="tag.label" + v-for="tag in tags.tags" + closable + :disable-transitions="false" + @close="handleClose(tag)"> + {{tag.label}} + </el-tag> + <el-input + class="input-new-tag" + v-if="tags.inputVisible" + v-model="tags.inputValue" + ref="saveTagInput" + size="mini" + @keyup.enter.native="handleInputConfirm" + @blur="handleInputConfirm" + ></el-input> + <el-button v-else class="button-new-tag" size="mini" @click="showInput">+</el-button> + </el-row> + <el-row style="padding: 10px 0;"> + <h4>消费门店</h4> + <el-row style="text-align: center"> + <el-col :span="10" v-for="item in vipInfo.shopNames"> + <el-avatar size="small" :src="circleUrl"></el-avatar> + <span class="col-style">{{item}}</span> + </el-col> + </el-row> + </el-row> + </el-row> + </el-aside> + <el-main style="background-color: white; margin-right: 15px; padding: 20px 30px;"> + <el-tabs v-model="activeName" type="card" @tab-click="tabHandleClick"> + <el-tab-pane label="会员信息" name="vipInfo"> + <el-row> + <el-col :span="10"> + <p>生日 : {{vipInfo.birthday1}}</p> + <p>会员状态 : {{vipInfo.vipState}}</p> + <p>会员编号 : {{vipInfo.vipNo}}</p> + <p>注册时间 : {{vipInfo.createTime}}</p> + <p>到店途径 : {{vipInfo.arrivalWay}}</p> + </el-col> + <el-col :span="10"> + <p>会员卡类型 : {{vipInfo.vipType}}</p> + <p>会员等级 : {{vipInfo.levelName}}</p> + <p>生肖/星座 : {{vipInfo.constell}}</p> + <p>地址 : {{vipInfo.addr}}</p> + <p>健康顾问 : {{vipInfo.staffName}}</p> + </el-col> + </el-row> + </el-tab-pane> + <el-tab-pane label="项目/套餐" name="proj"> + <el-row style="line-height: 40px;"> + <el-col :span="10" style="margin-left: 20px;"> + <el-radio-group v-model="projTab.projType" @change="refreshTable(1)"> + <el-radio label="proj">项目</el-radio> + <el-radio label="taocan">套餐</el-radio> + <el-radio label="card">卡项</el-radio> + </el-radio-group> + </el-col> + <el-col :span="3" style="float: right; margin-right: 20px;"> + <el-select v-model="projTab.projIsValid" placeholder="请选择" @change="selectChange"> + <el-option + v-for="item in projTab.projOptions" + :key="item.value" + :label="item.label" + :value="item.value"> + </el-option> + </el-select> + </el-col> + </el-row> + <el-row class="table-style"> + <el-table id="proj" v-show="projTab.projType=='proj'" :data="projTab.projTableData" + style="width: 100%"> + <el-table-column + prop="projName" + label="项目名称" + width="180"> + </el-table-column> + <el-table-column + prop="source" + label="来源" + width="180"> + </el-table-column> + <el-table-column + prop="status" + label="状态"> + </el-table-column> + <el-table-column + prop="balance" + label="项目余额"> + </el-table-column> + <el-table-column + prop="surplusCount" + label="余次"> + </el-table-column> + <el-table-column + prop="failTime" + label="到期时间"> + </el-table-column> + <el-table-column label="操作"> + <template slot-scope="scope"> + <el-button matrix:btn="vipInfo-youxiao" v-if="scope.row.status!='有效'" type="text" size="small" @click="tabProjValid(scope.$index, scope.row)">有效</el-button> + <el-button matrix:btn="vipInfo-wuxiao" v-if="scope.row.status!='无效'" type="text" size="small" @click="tabProjInvalid(scope.$index, scope.row)">无效</el-button> + <el-button matrix:btn="vipInfo-dongjie" v-if="scope.row.status!='冻结'" type="text" size="small" @click="tabProjCold(scope.$index, scope.row)">冻结</el-button> + <el-button matrix:btn="vipInfo-cardEdit" type="text" size="small" @click="tabProjEdit(scope.$index, scope.row)">编辑</el-button> + </template> + </el-table-column> + </el-table> -<div class="row"> - <div class="row "> + <el-table id="taocan" v-show="projTab.projType=='taocan'" :data="projTab.taocanTableData" + style="width: 100%;" + row-key="id" :tree-props="{children: 'taocanProjUse', hasChildren: 'hasChildren'}"> + <el-table-column + prop="projName" + label="名称" + width="240"> + </el-table-column> + <el-table-column + prop="status" + label="状态" + width="180"> + </el-table-column> + <el-table-column + prop="balance" + label="余额"> + </el-table-column> + <el-table-column + prop="surplusCount" + label="套餐余次"> + </el-table-column> + <el-table-column + prop="failTime" + label="到期时间"> + </el-table-column> + <el-table-column label="操作" fixed="right" width="160"> + <template slot-scope="scope"> + <el-button matrix:btn="vipInfo-youxiao" v-if="scope.row.status!='有效' && scope.row.taocanId == null" type="text" size="small" @click="tabProjValid(scope.$index, scope.row)">有效</el-button> + <el-button matrix:btn="vipInfo-wuxiao" v-if="scope.row.status!='无效' && scope.row.taocanId == null" type="text" size="small" @click="tabProjInvalid(scope.$index, scope.row)">无效</el-button> + <el-button matrix:btn="vipInfo-dongjie" v-if="scope.row.status!='冻结' && scope.row.taocanId == null" type="text" size="small" @click="tabProjCold(scope.$index, scope.row)">冻结</el-button> + <el-button matrix:btn="vipInfo-cardEdit" v-if="scope.row.taocanId == null" type="text" size="small" @click="tabProjEdit(scope.$index, scope.row)">编辑</el-button> + </template> + </el-table-column> + </el-table> - <div class="col-sm-12 ibox-content"> - <form method="post" id="dataform" class="dataform form-inline"> - <div class="pd-20 form-group"> - <div class="text-l "> - <input type="text" id="key" placeholder="输入会员姓名/手机号码/编号" autocomplete="off" - style="width: 400px" class="form-control"> - <button type="button" class="btn btn-success radius EXSerchBtn " - onclick="selectByKey();"> - <i class="fa fa-search"> </i> 查找 - </button> - <ul id="userList" class="userList " - style="width: 400px; display: none"> - </ul> + <el-table id="card" v-show="projTab.projType=='card'" :data="projTab.cardTableData" + style="width: 100%;"> + <el-table-column + type="index" + width="50"> + </el-table-column> + <el-table-column + prop="cardName" + label="充值卡名称" width="160"> + </el-table-column> + <el-table-column + prop="useTotal" + label="总次数"> + </el-table-column> + <el-table-column + prop="lastCount" + label="剩余次数"> + </el-table-column> + <el-table-column + prop="realMoney" + label="本金"> + </el-table-column> + <el-table-column + prop="giftMoney" + label="赠送金额"> + </el-table-column> + <el-table-column + prop="source" + label="来源"> + </el-table-column> + <el-table-column + prop="status" + label="状态"> + </el-table-column> + <el-table-column + prop="isVipCar" + label="是否是会籍卡" :formatter="cardIsVipFormatter"> + </el-table-column> + <el-table-column + prop="isOver" + label="是否使用完成" :formatter="cardIsOrderFormatter"> + </el-table-column> + <el-table-column + prop="failTime" + label="到期时间" width="160"> + </el-table-column> + <el-table-column + prop="remark" + label="备注"> + </el-table-column> + <el-table-column label="操作" fixed="right" width="160"> + <template slot-scope="scope"> + <el-button matrix:btn="vipInfo-youxiao" v-if="scope.row.status!='有效'" type="text" size="small" @click="tabProjValid(scope.$index, scope.row)">有效</el-button> + <el-button matrix:btn="vipInfo-wuxiao" v-if="scope.row.status!='无效'" type="text" size="small" @click="tabProjInvalid(scope.$index, scope.row)">无效</el-button> + <el-button matrix:btn="vipInfo-dongjie" v-if="scope.row.status!='冻结'" type="text" size="small" @click="tabProjCold(scope.$index, scope.row)">冻结</el-button> + <el-button matrix:btn="vipInfo-cardEdit" type="text" size="small" @click="tabProjEdit(scope.$index, scope.row)">编辑</el-button> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-pagination background + @size-change="projTabSizeChange" + @current-change="projTabCurrentPage" + :current-page="projTab.page.currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="projTab.page.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="projTab.page.total"> + </el-pagination> + </el-row> - </div> - </div> - </form> - - </div> - </div> - <input autocomplete="off" type="hidden" id="vipId"> - <div class="row"> - <div class=" col-sm-9 "> - <div class="panel panel-default"> - <div class="panel-heading">会员信息</div> - - <table class="table table-bordered table-striped " - style="width: 100%;"> - <tr> - <td width="10%" class="text-r"><b>会员姓名:</b></td> - <td width="20%" name="vipName" id="vipName"></td> - <td width="10%" class="text-r"><b>性别:</b></td> - <td width="20%" name="sex" id="sex"></td> - <td width="10%" class="text-r"><b>生日:</b></td> - <td width="20%" name="birthday1" id="birthday1"></td> - </tr> - - <tr> - <td width="10%" class="text-r"><b>会员类型:</b></td> - <td width="20%" name="vipType" id="vipType"></td> - <td width="10%" class="text-r"><b>会员状态:</b></td> - <td width="20%" name="vipState" id="vipState"></td> - <td width="10%" class="text-r"><b>会员等级:</b></td> - <td width="20%" name="levelName" id="levelName"></td> - - </tr> - <tr> - <td width="10%" class="text-r"><b>会员编号:</b></td> - <td width="20%" name="animalSign" id="vipNo"></td> - <td width="10%" class="text-r"><b>生肖/星座:</b></td> - <td width="20%" name="constell" id="constell"></td> - <td width="10%" class="text-r"><b>注册时间:</b></td> - <td width="20%" name="createTime" id="createTime"></td> - </tr> - <tr> - <td width="10%" class="text-r"><b>手机号码:</b></td> - <td width="20%" name="phone" id="phone"></td> - <td width="10%" class="text-r"><b>入会时间:</b></td> - <td width="20%" name="inDate" id="inDate"></td> - <td width="10%" class="text-r"><b>地址:</b></td> - <td width="20%" name="addr" id="addr"></td> - </tr> - <tr> - <td width="10%" class="text-r"><b>到店途径:</b></td> - <td width="20%" name="arrivalWay" id="arrivalWay"></td> - <td width="10%" class="text-r"><b>总佣金:</b></td> - <td width="20%" name="commissionAll" id="commissionAll"></td> - <td width="10%" class="text-r"><b>总积分:</b></td> - <td width="20%" name="pointAll" id="pointAll"></td> - </tr> - - <tr> - <td width="10%" class="text-r"><b>储值卡余额:</b></td> - <td width="20%" name="bal" id="bal"></td> - <td width="10%" class="text-r"><b>备注:</b></td> - <td width="20%" name="remark" id="remark"></td> - <td width="10%" class="text-r"><b>健康顾问:</b></td> - <td width="20%" name="staffName" id="staffName"></td> - <td style="display: none" id="id" name="id"></td> - </tr> - <tr> - <td class="text-center" colspan="6"> - - <button matrix:btn="vipinfoClub-recharge" class="btn btn-success radius size-S isActive " - disabled="disabled" onclick='openCz()'> - <i class="fa fa-jpy"></i> 充值 - </button> - - <button matrix:btn="vipinfoClub-payment" class="btn btn-success radius size-S isActive" - disabled="disabled" onclick='openOrderList("欠款")'> - <i class="fa fa-paypal"></i> 补交 - </button> - - <button matrix:btn="vipinfoClub-gathering" class="btn btn-success radius size-S isActive" - disabled="disabled" onclick='openOrderList("待付款")'> - <i class="fa fa-paypal"></i> 收款 - </button> - <button matrix:btn="vipinfoClub-newService" class="btn btn-success radius size-S isActive" - disabled="disabled" onclick='toRefundOrder()'> - <i class="fa fa-paypal"></i> 退款 - </button> - <button matrix:btn="vipinfoClub-newService" class="btn btn-success radius size-S isActive" - disabled="disabled" onclick='openAddOrder()'> - <i class="fa fa-paypal"></i> 开单 - </button> - <button matrix:btn="vipinfoClub-newService" class="btn btn-success radius size-S isActive" - disabled="disabled" onclick='openAddService()'> - <i class="fa fa-paypal"></i> 开服务单 - </button> - - </td> - </tr> - </table> - </div> - </div> - <div class="col-sm-3"> - <div class="panel panel-default "> - <div class="panel-heading">最近查询会员</div> - <ul class="list-group c " id="historyList"> - </ul> - </div> - </div> - </div> - <div class="row"> - <div class="col-sm-9 text-center"> - - - <button class="btn btn-success radius size-S isActive" - onclick='openOrderList("全部")' disabled="disabled"> - <i class="fa fa-arrows-alt "></i> 订单 - </button> - - <button class="btn btn-success radius size-S isActive" - onclick="openServiceList()" disabled="disabled"> - <i class="fa fa-arrows-alt "></i> 服务单 - </button> - || - <button matrix:btn="vipinfoClub-projTaocan" class="btn btn-success radius size-S isActive" - onclick="openProj()" disabled="disabled"> - <i class="fa fa-star-half-o "></i> 项目管理 - </button> - - - <button matrix:btn="vipinfoClub-projTaocan" class="btn btn-success radius size-S isActive" - onclick="openTc()" disabled="disabled"> - <i class="fa fa-share-alt-square "></i> 套餐管理 - </button> - - - <button matrix:btn="vipinfoClub-projTaocan" class="btn btn-success radius size-S isActive" - onclick="openMoneyCard()" disabled="disabled"> - <i class="fa fa-gbp "></i>充值卡管理 - </button> - || - <button matrix:fn="servicefollow" onclick="openFollow()" type="button" class="btn btn-success isActive" disabled="disabled"> - <i class="fa fa-edit"></i> 跟进记录 - </button> - - <button matrix:btn="vipInfo-edit" onclick="openArchieves()" type="button" class="btn btn-success isActive" disabled="disabled"><i - class="fa fa-edit"></i> 客户档案 - </button> - <button matrix:btn="vipInfo-edit" onclick="openEdit()" type="button" class="btn btn-success isActive" disabled="disabled"><i - class="fa fa-edit"></i> 基本资料 - </button> - - </div> - </div> - + <el-dialog title="设置过期时间" :visible.sync="projTab.failTimeDialog"> + <el-form> + <el-form-item label="选择过期时间"> + <el-date-picker v-model="projTab.failTime" + type="date" + format="yyyy-MM-dd" + placeholder="选择日期时间"> + </el-date-picker> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button type="primary" @click="updateFailTimeFn">确 定</el-button> + <el-button @click="projTab.failTimeDialog = false">取 消</el-button> + </div> + </el-dialog> + </el-tab-pane> + <el-tab-pane label="服务单" name="serviceOrder"> + <el-row style="line-height: 40px;"> + <el-col :span="11"> + <span>选择时间:</span> + <el-date-picker v-model="serviceOrderTab.selectTime" + type="datetimerange" + range-separator="至" format="yyyy-MM-dd HH:mm" + start-placeholder="开始日期" + end-placeholder="结束日期"> + </el-date-picker> + </el-col> + <el-col :span="5"> + <el-select v-model="serviceOrderTab.state" placeholder="请选择"> + <el-option + v-for="item in serviceOrderTab.states" + :key="item.value" + :label="item.label" + :value="item.value"> + </el-option> + </el-select> + </el-col> + <el-col :span="1" style="margin-left: 5px;"> + <el-button type="primary" @click="serviceOrderQuery">查询</el-button> + </el-col> + </el-row> + <el-row class="table-style"> + <el-table :data="serviceOrderTab.tableData" + style="width: 100%;"> + <el-table-column + type="index" + width="50"> + </el-table-column> + <el-table-column + prop="serviceNo" + label="服务单号" + width="160"> + </el-table-column> + <el-table-column + prop="money" + label="消耗金额"> + </el-table-column> + <el-table-column + prop="createTime" + label="下单时间" width="160"> + </el-table-column> + <el-table-column + prop="yyTime" + label="预约时间" width="160" :formatter="dateFormat"> + </el-table-column> + <el-table-column + prop="totalTime" + label="服务时长"> + </el-table-column> + <el-table-column + prop="isOverTime" + label="超时时间"> + </el-table-column> + <el-table-column + prop="createStaffName" + label="下单顾问"> + </el-table-column> + <el-table-column + prop="state" + label="状态"> + </el-table-column> + <el-table-column fixed="right" label="操作" width="200"> + <template slot-scope="scope"> + <el-button type="text" size="small" @click="lookServiceOrder(scope.$index, scope.row)">查看</el-button> + <el-button matrix:btn="serviceClub-paiban" type="text" size="small" v-if="scope.row.state=='待预约'" @click="paiban(scope.$index, scope.row)">排班</el-button> + <el-button matrix:btn="serviceClub-paidan" type="text" size="small" v-if="scope.row.state=='预约成功待处理'" @click="giveServiceOrder(scope.$index, scope.row)">派单</el-button> + <el-button matrix:btn="serviceClub-edit" type="text" size="small" v-if="scope.row.state=='预约成功待处理'" @click="modifyServiceOrder(scope.$index, scope.row)">修改</el-button> + <el-button matrix:btn="serviceClub-peiliao" type="text" size="small" v-if="scope.row.state=='需配料'" @click="peiliao(scope.$index, scope.row)">配料</el-button> + <el-button matrix:btn="serviceClub-huakou" type="text" size="small" v-if="scope.row.state=='服务完成'" @click="openHKService(scope.$index, scope.row)">划扣</el-button> + <el-button matrix:btn="serviceClub-edit" type="text" size="small" @click="modifyTime(scope.$index, scope.row)">修改时间</el-button> + <el-button matrix:btn="serviceClub-del" type="text" size="small" v-if="scope.row.state!='预约取消'" @click="cancelServiceOrder(scope.$index, scope.row)">取消</el-button> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-pagination + background + @size-change="serviceOrderSizeChange" + @current-change="serviceOrderCurrentChange" + :current-page="serviceOrderTab.page.currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="serviceOrderTab.page.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="serviceOrderTab.page.total"> + </el-pagination> + </el-row> + </el-tab-pane> + <el-tab-pane label="订单" name="order"> + <el-row style="line-height: 40px;"> + <el-col :span="11"> + <span>选择时间:</span> + <el-date-picker v-model="orderTab.selectTime" + type="datetimerange" + range-separator="至" + format="yyyy-MM-dd HH:mm" + start-placeholder="开始日期" + end-placeholder="结束日期"> + </el-date-picker> + </el-col> + <el-col :span="5"> + <el-select v-model="orderTab.state" placeholder="请选择"> + <el-option + v-for="item in orderTab.states" + :key="item.value" + :label="item.label" + :value="item.value"> + </el-option> + </el-select> + </el-col> + <el-col :span="1" style="margin-left: 5px;"> + <el-button type="primary" @click="orderQuery">查询</el-button> + </el-col> + </el-row> + <el-row class="table-style"> + <el-table :data="orderTab.orderTableData" + style="width: 100%;"> + <el-table-column + type="index" + width="50"> + </el-table-column> + <el-table-column + prop="orderNo" + label="订单号" width="180"> + </el-table-column> + <el-table-column + prop="orderTime" + label="下单时间" width="160" :formatter="oderTimeFormat"> + </el-table-column> + <el-table-column + prop="total" + label="总价"> + </el-table-column> + <el-table-column + prop="zkTotal" + label="折后价"> + </el-table-column> + <el-table-column + prop="staffName" + label="下单顾问"> + </el-table-column> + <el-table-column + prop="cashPay" + label="现金支付金额"> + </el-table-column> + <el-table-column + prop="cardPay" + label="卡支付金额"> + </el-table-column> + <el-table-column + prop="arrears" + label="欠款金额"> + </el-table-column> + <el-table-column + prop="statu" + label="订单状态"> + </el-table-column> + <el-table-column + prop="remark" + label="备注" width="100"> + </el-table-column> + <el-table-column label="操作" fixed="right" width="160"> + <template slot-scope="scope"> + <el-button type="text" size="small" @click="lookOrderInfo(scope.$index, scope.row)">查看</el-button> + <el-button matrix:btn="orderClub-payment" v-if="scope.row.statu == '欠款'" type="text" size="small" @click="bjMoney(scope.$index, scope.row)">补交</el-button> + <el-button matrix:btn="orderClub-gathering" v-if="scope.row.statu == '待付款'" type="text" size="small" @click="skMoney(scope.$index, scope.row)">收款</el-button> + <el-button matrix:btn="orderClub-edit" type="text" size="small" @click="updateTime(scope.$index, scope.row)">修改时间</el-button> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-pagination + background + @size-change="orderSizeChange" + @current-change="orderCurrentChange" + :current-page="orderTab.page.currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="orderTab.page.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="orderTab.page.total"> + </el-pagination> + </el-row> + </el-tab-pane> + <el-tab-pane label="皮肤检测" name="skinCheck"> + <el-row style="line-height: 40px;"> + <el-col :span="11"> + <span>选择时间:</span> + <el-date-picker v-model="skinTab.selectTime" + type="daterange" + range-separator="至" + format="yyyy-MM-dd" + start-placeholder="开始日期" + end-placeholder="结束日期"> + </el-date-picker> + </el-col> + <el-col :span="6" style="margin-left: 5px;"> + <el-button type="primary" @click="skinCheckQuery">查询</el-button> + <el-button type="success" @click="addSkinCheck">新增</el-button> + </el-col> + </el-row> + <el-row class="table-style"> + <el-table :data="skinTab.skinTableDate" + style="width: 100%;"> + <el-table-column + type="index" + width="50"> + </el-table-column> + <el-table-column + prop="checkUserName" + label="检测人员"> + </el-table-column> + <el-table-column + prop="shopName" + label="门店"> + </el-table-column> + <el-table-column + prop="checkTime" + label="检测时间"> + </el-table-column> + <el-table-column label="操作"> + <template slot-scope="scope"> + <el-button type="text" size="small" @click="editSkinCheck(scope.$index, scope.row)">编辑</el-button> + <el-button type="text" size="small" @click="delSkinCheck(scope.$index, scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-pagination + background + @size-change="skinCheckSizeChange" + @current-change="skinCheckCurrentChange" + :current-page="skinTab.page.currentPage" + :page-sizes="[10, 20, 30, 50]" + :page-size="skinTab.page.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="skinTab.page.total"> + </el-pagination> + </el-row> + </el-tab-pane> + </el-tabs> + </el-main> + </el-container> + </el-container> </div> </body> - - +<script type="text/javascript" th:src="@{/js/systools/AjaxProxyVue.js}"></script> +<script type="text/javascript" th:src="@{/js/plugin/vue.js}"></script> +<script type="text/javascript" th:src="@{/plugin/element-ui/index.js}"></script> <script type="text/javascript" th:src="@{/js/systools/MJsBase.js}"></script> <script th:inline="javascript"> - //初始带入vip的电话 - var key = $.query.get("vipPhone"); - if(key){ - selectList(key); - } + var app = new Vue({ + el: '#app', + data : { + circleUrl : "https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png", + activeName : 'vipInfo', + tags : { + tags : [], + inputVisible: false, + inputValue: '' + }, + searchValue : "", + vipInfo : {}, + // 项目/套餐 tab + projTab : { + projType : "proj", + projTypeBak : "proj", + projOptions : [{ value : '', label : "全部" }, { value : '有效', label : "有效" }, { value : '无效', label : "无效" }, { value : "冻结", label : "冻结" }, { value : "转让", label : "转让" }, { value : "退款", label : "退款" }], + projIsValid : "", + failTimeDialog : false, + failTime : "", + row : '', - $(function () { - $("#key").keyup( - function () { - var $input = $("#key"); - if ($input.val().length > 1) { - $.AjaxProxy({ - p: { - keyWord: $input.val(), - }, - c: false, - }) - .invoke( - basePath + "/admin/vipInfo/findUserByPhotoOrName", - function (loj) { - var html = ""; - for (var i = 0; i < loj - .getRowCount(); i++) { - html += '<li onclick="selectList(\'' + loj.getString(i, 'phone') + '\')" >' - + loj.getString(i, 'phone') + "-" + loj.getString(i, 'vipName') - + "-" + loj.getString(i, 'vipNo') - + '</li>'; - } - $("#userList").html(html).show(); - }); - } else { - $("#userList").hide(); + projTableData : [], + taocanTableData : [], + cardTableData : [], + page : { + currentPage : 1, + pageSize : 10, + total : 0 } - }); - updateHistory(); - $("#userList").mouseleave(function () { - $(this).hide(); - }) - }) + }, + // 服务单tab + serviceOrderTab : { + tableData : [], + selectTime : '', + state : '', + states : [ { value : '', label : '全部' }, { value : '待预约', label : '待预约' },{ value : '预约成功待处理', label : '待派单' },{ value : '需配料', label : '待配料' }, + { value : '配料完成', label : '待服务' },{ value : '服务中', label : '服务中' }, + { value : '服务完成', label : '服务完成' },{ value : '服务单结束', label : '服务单结束' }, ], + page : { + currentPage : 1, + pageSize : 10, + total : 0 + } + }, + // 订单 tab + orderTab : { + orderTableData : [], + selectTime : '', + state : '', + states : [ { value : '', label : '全部' }, { value : '待付款', label : '待付款' }, { value : '已付款', label : '已付款' }, { value : '欠款', label : '欠款' }, { value : '已取消', label : '已取消' } ], + page : { + currentPage : 1, + pageSize : 10, + total : 0 + } + }, + // 皮肤检测tab + skinTab : { + skinTableDate : [], + selectTime : '', + page : { + currentPage : 1, + pageSize : 10, + total : 0 + } + } + }, + created : function() { + var key = $.query.get("vipPhone"); + let _this = this; + + if (key) { + _this.vipInfoFn(key); + } + }, + methods : { + querySearch(queryString, cb) { + $.AjaxProxy({ + p: { + keyWord: queryString, + }, + c: false, + }).invoke( basePath + "/admin/vipInfo/findUserByPhotoOrName", function (loj) { + var results = []; + for (var i = 0; i < loj.getRowCount(); i++) { + var result = {}; + result.value = loj.getString(i, 'phone') + "-" + loj.getString(i, 'vipName') + "-" + loj.getString(i, 'vipNo'); + result.key = loj.getString(i, 'phone'); + results.push(result); + } + cb(results); + }); + }, + handleSelect(row) { + this.vipInfoFn(row.key); + }, + // 请求会员信息 + vipInfoFn(key) { + let _this = this; + // 请求用户信息 + $.AjaxProxy({ + p: { + keyWord: key + } + }).invoke(basePath + "/admin/vipInfo/showVipInfo", function (loj) { + if (loj.getRowCount() == 0) { + layer.msg('未查询到客户信息', { + icon: 5 + }); + return false; + } + let data = loj[0].result.rows[0]; + _this.vipInfo = {}; + _this.vipInfo = data; + + if (data.sysOrder != null) { + _this.vipInfo.totalMoney = data.sysOrder.zkTotal; + _this.vipInfo.totalTimes = data.sysOrder.times; + _this.vipInfo.payTime = data.sysOrder.payTime; + + if (data.sysOrder.shopName) { + var shopNames = data.sysOrder.shopName.split(','); + _this.vipInfo.shopNames = shopNames; + } + } + + _this.tags.tags = data.labels; + _this.projTableQueryFn(); + }); + }, + addLabelFn(key) { + let _this = this; + // 请求用户信息 + $.AjaxProxy({ + p: { + vipId: _this.vipInfo.id, + label : key + } + }).invoke(basePath + "/admin/label/add", function (loj) { + let label = loj.getResult().mapInfo.label; + _this.tags.tags.push(label); + }); + }, + delLabelFn(id) { + $.AjaxProxy({ + p: { + id: id + } + }).invoke(basePath + "/admin/label/del", function (loj) { + }); + }, + searchVipInfo() { + let _this = this; + let inputVisible = _this.tags.inputVisible; + console.log(inputVisible) + if (!inputVisible) { + if (_this.searchValue) { + _this.vipInfoFn(_this.searchValue); + } + } + + }, + + /** ############## 项目/套餐Tab页 start #################### **/ + projTabTableParams() { + let _this = this; + let currentPage = _this.projTab.page.currentPage; + let pageSize = _this.projTab.page.pageSize + return { + vipId: _this.vipInfo.id, + offset: (currentPage - 1) * pageSize, + limit: pageSize, + status: _this.projTab.projIsValid, + }; + }, + // 项目tab页,请求项目数据 + projTableQueryFn() { + let _this = this; + $.AjaxProxy({ + p:_this.projTabTableParams() + }).invoke(basePath + "/admin/projUser/showList", function (loj) { + _this.projTab.page.total = loj.getResult().total; + _this.projTab.projTableData = loj.getValue("rows"); + }); + }, + // 套餐表格数据请求 + taocanTableQueryFn() { + let _this = this; + $.AjaxProxy({ + p:_this.projTabTableParams() + }).invoke(basePath + "/admin/taoCanUser/showTc", function (loj) { + _this.projTab.page.total = loj.getResult().total; + _this.projTab.taocanTableData = loj.getValue("rows"); + }); + }, + // 卡项表格数据请求 + cardTableQueryFn() { + let _this = this; + $.AjaxProxy({ + p:_this.projTabTableParams() + }).invoke(basePath + "/admin/moneyCardUse/showVipMoneyCardList", function (loj) { + _this.projTab.page.total = loj.getResult().total; + _this.projTab.cardTableData = loj.getValue("rows"); + }); + }, + cardIsVipFormatter (row, column) { + if (column.isVipCar === 'Y') { + return "是"; + } else { + return "否" + } + }, + cardIsOrderFormatter(row, column) { + if (column.isOver === 'Y') { + return '是'; + } else { + return "否"; + } + }, + projTabSizeChange(val) { + this.projTab.page.pageSize = val; + this.refreshTable(); + }, + projTabCurrentPage(val) { + this.projTab.page.currentPage = val; + this.refreshTable(); + }, + // 单选框切换 + refreshTable(val) { + let _this = this; + if (val) { + this.projTab.page = { + currentPage : 1, + pageSize : 10, + total : 0 + }; + } + + if (_this.projTab.projType === 'proj') { + _this.projTableQueryFn(); + } + + if (_this.projTab.projType === 'taocan') { + _this.taocanTableQueryFn(); + } + + if (_this.projTab.projType === 'card') { + _this.cardTableQueryFn(); + } - function selectList(phone) { - $("#userList").hide(); - $("#key").val(phone); - selectByKey(); - } + }, + // 下拉框选择 + selectChange() { + this.refreshTable(); + }, + tabProjValid(index, row, val) { + let _this = this; + let projType = _this.projTab.projType; + var url; + if (projType === 'proj') { + url = "/admin/projUser/activeProj"; + } + + if (projType === 'taocan') { + url = "/admin/taoCanUser/activeTc"; + } + + if (projType === 'card') { + url = "/admin/moneyCardUse/active"; + } + + var params = { + id : row.id, + }; + if (val === 1) { + if (_this.projTab.failTime) { + params.failTime = moment(_this.projTab.failTime).format("YYYY-MM-DD"); + } else { + this.$message.error('过期时间不能为空'); + return; + } + } + + $.AjaxProxy({ + p : params + }).invoke(basePath + url, function(loj) { + var rs = loj.attr("result"); + if (rs.info == '已过期') { + _this.projTab.failTimeDialog = true; + _this.projTab.row = row; + } else { + layer.alert(loj.getValue("info"), { + icon : 1 + }); + _this.refreshTable(); + } + + if (val === 1) { + _this.projTab.failTimeDialog = false; + } + }); + + }, + tabProjEdit(index, row) { + let _this = this; + let projType = _this.projTab.projType; + var url; + if (projType === 'proj') { + url = '/admin/projUser/editForm?id='; + } + + if (projType === 'taocan') { + url = '/admin/taoCanUser/editForm?id='; + } + + if (projType === 'card') { + url = '/admin/moneyCardUse/editForm?id='; + } + + layer.open({ + type : 2, + title : "编辑", + area : MUI.SIZE_M, + maxmin : true, + content : [ basePath + url + row.id ] + }); + }, + tabProjInvalid(index, row) { + let _this = this; + let projType = _this.projTab.projType; + var url; + if (projType === 'proj') { + url = '/admin/projUser/invalidProj'; + } + + if (projType === 'taocan') { + url = '/admin/taoCanUser/invalidTc'; + } + + if (projType === 'card') { + url = '/admin/moneyCardUse/invalid'; + } + + _this.projTabQuery(row.id, url); + }, + tabProjCold(index, row) { + let _this = this; + let projType = _this.projTab.projType; + var url; + if (projType === 'proj') { + url = '/admin/projUser/freezeProj'; + } + + if (projType === 'taocan') { + url = '/admin/taoCanUser/freezeTc'; + } + + if (projType === 'card') { + url = '/admin/moneyCardUse/freeze'; + } + + _this.projTabQuery(row.id, url); + }, + projTabQuery(id, url) { + let _this = this; + $.AjaxProxy({ + p : { + id : id + } + }).invoke(basePath + url, function(loj) { + layer.alert(loj.getValue("info"), { + icon : 1 + }); + _this.refreshTable(); + }); + }, + updateFailTimeFn() { + this.tabProjValid(1, this.projTab.row, 1); + }, + /** ############## 项目/套餐Tab页 end #################### **/ + + /********* 服务单tab start ***********/ + serviceOrderQuery() { + this.serviceOrderTableQueryFn() + }, + serviceOrderTableQueryFn() { + let _this = this; + let serviceOrderTab = _this.serviceOrderTab; + let page = serviceOrderTab.page; + var params = {}; + + if (!_this.vipInfo.id) { + return; + } + + params.limit = page.pageSize; + params.offset = (page.currentPage - 1) * page.pageSize; + params.state = serviceOrderTab.state; + params.vipId = _this.vipInfo.id; + if (serviceOrderTab.selectTime) { + params.beginTime = moment(serviceOrderTab.selectTime[0]).format("YYYY-MM-DD HH:mm"); + params.closureTime = moment(serviceOrderTab.selectTime[1]).format("YYYY-MM-DD HH:mm"); + } + $.AjaxProxy({ + p:params + }).invoke(basePath + "/admin/projService/showList", function (loj) { + serviceOrderTab.page.total = loj.getResult().total; + serviceOrderTab.tableData = loj.getValue("rows"); + }); + }, + serviceOrderSizeChange(val) { + this.serviceOrderTab.page.pageSize = val; + this.serviceOrderTableQueryFn() + }, + serviceOrderCurrentChange(val) { + this.serviceOrderTab.page.currentPage = val; + this.serviceOrderTableQueryFn() + }, + // 查看 + lookServiceOrder(index, row) { + selectFwz(row.id); + }, + // 排班 + paiban(index, row) { + openPb(row.id); + }, + // 派单 + giveServiceOrder(index, row) { + MTools.handleItem(basePath + "/admin/projService/paidan?id=" + row.id, "确定派单吗?", this.serviceOrderQuery) + }, + // 修改 + modifyServiceOrder(index, row) { + updatePd(row.id); + }, + // 配料 + peiliao(index, row) { + layer.full(layer.open({ + type: 2, + title: "开始配料", + maxmin: true, + area: [MUI.SIZE_L, '450px'], + content: [basePath + '/admin/projService/startpl?id=' + row.id] + })); + }, + // 划扣 + openHkService(index, row) { + openHkServcie(row.id); + }, + // 取消 + cancelServiceOrder(index, row) { + MTools.handleItem(basePath + "/admin/projService/cancelOrder?id=" + row.row, "确定取消订单吗?", this.serviceOrderQuery); + }, + // 修改时间 + modifyTime(index, row) { + layer.open({ + type: 2, + title: "修改订单时间", + maxmin: true, + area: [MUI.SIZE_L, '500px'], + content: [basePath + '/admin/projService/toServiceOrderUpdateTime?id=' + row.id] + }); + }, + /********* 服务单tab end ***********/ + + /********* 订单Tab start ***********/ + orderQuery() { + this.orderTableDataQueryFn(); + }, + orderTableDataQueryFn() { + let _this = this; + let orderTab = _this.orderTab; + let page = orderTab.page; + var params = {}; + + if (!_this.vipInfo.id) { + return; + } + + params.limit = page.pageSize; + params.offset = (page.currentPage - 1) * page.pageSize; + params.statu = orderTab.state; + params.vipId = _this.vipInfo.id; + if (orderTab.selectTime) { + params.beginTimeVo = moment(orderTab.selectTime[0]).format("YYYY-MM-DD HH:mm"); + params.endTimeVo = moment(orderTab.selectTime[1]).format("YYYY-MM-DD HH:mm"); + } + $.AjaxProxy({ + p:params + }).invoke(basePath + "/admin/order/showList", function (loj) { + orderTab.page.total = loj.getResult().total; + orderTab.orderTableData = loj.getValue("rows"); + }); + + }, + orderSizeChange(val) { + this.orderTab.page.pageSize = val; + this.orderTableDataQueryFn(); + }, + orderCurrentChange(val) { + this.orderTab.page.currentPage = val; + this.orderTableDataQueryFn(); + }, + lookOrderInfo(index, row) { + layer.full(layer.open({ + type : 2, + title : "订单详情", + maxmin : true, + area : [ MUI.SIZE_L, '500px' ], + content : [ basePath + '/admin/order/orderItem?id=' + row.id ] + })); + }, + bjMoney(index, row) { + layer.full(layer.open({ + type : 2, + title : "补交", + area : [ MUI.SIZE_L, '400px' ], + maxmin : true, + content : [ basePath+'/admin/moneyCardUse/toBj?id=' + row.id] + })); + }, + skMoney(index, row) { + layer.full(layer.open({ + type : 2, + title : "收款", + area : [ MUI.SIZE_L, '400px' ], + maxmin : true, + content : [ basePath+'/admin/redirect/hive/beautySalon/order-form?id=' + row.id] + })); + }, + updateTime(index, row) { + layer.open({ + type : 2, + title : "修改订单时间", + maxmin : true, + area : [ MUI.SIZE_L, '500px' ], + content : [ basePath + '/admin/order/toUpdateTime?id=' + row.id ] + }); + }, + /********* 订单Tab end ***********/ + + /************** 皮肤检测tab start **************/ + skinCheckQuery() { + this.skinCheckTableDataQueryFn(); + }, + skinCheckTableDataQueryFn() { + let _this = this; + let skinTab = _this.skinTab; + let page = skinTab.page; + var params = {}; + + if (!_this.vipInfo.id) { + return; + } + + params.limit = page.pageSize; + params.offset = (page.currentPage - 1) * page.pageSize; + params.userId = _this.vipInfo.id; + if (skinTab.selectTime) { + params.beginTime = moment(skinTab.selectTime[0]).format("YYYY-MM-DD"); + params.endTime = moment(skinTab.selectTime[1]).format("YYYY-MM-DD"); + } + $.AjaxProxy({ + p:params + }).invoke(basePath + "/admin/sysSkinCheckRecord/showList", function (loj) { + skinTab.page.total = loj.getResult().total; + skinTab.skinTableDate = loj.getValue("rows"); + }); + }, + skinCheckSizeChange(val) { + this.skinTab.page.pageSize = val; + this.skinCheckTableDataQueryFn() + }, + skinCheckCurrentChange(val) { + this.skinTab.page.currentPage = val; + this.skinCheckTableDataQueryFn() + }, + addSkinCheck() { + let _this = this; + if (!this.vipInfo.id) { + this.$message.error('请选择用户'); + return; + } + + layer.full(layer.open({ + type : 2, + title : "新增皮肤检测", + area : [ MUI.SIZE_L, '400px' ], + maxmin : true, + content : [ basePath+'/admin/redirect/hive/vip/sysSkinCheckRecord-form?vipId=' + _this.vipInfo.id] + })); + }, + delSkinCheck(index, row) { + let _this = this; + $.AjaxProxy().invoke(basePath + "/admin/sysSkinCheckRecord/del?keys=" + row.id, function (loj) { + _this.skinCheckQuery(); + }); + }, + editSkinCheck(index, row) { + let _this = this; + layer.full(layer.open({ + type : 2, + title : "编辑皮肤检测", + area : [ MUI.SIZE_L, '400px' ], + maxmin : true, + content : [ basePath+'/admin/redirect/hive/vip/sysSkinCheckRecord-form?vipId='+ _this.vipInfo.id +'&id=' + row.id] + })); + }, + /************** 皮肤检测tab end **************/ + + // tab标签切换 + tabHandleClick(tab, event) { + let _this = this; + if (tab.name === "serviceOrder") { + if (_this.serviceOrderTab.tableData.length <= 0) { + this.serviceOrderTableQueryFn(); + } + } + + if (tab.name === "order") { + if (_this.orderTab.orderTableData.length <= 0) { + this.orderTableDataQueryFn(); + } + } + + if (tab.name === "skinCheck") { + if (_this.skinTab.skinTableDate.length <= 0) { + this.skinCheckTableDataQueryFn(); + } + } + }, + + /********** 标签代码 start ************/ + handleClose(tag) { + this.tags.tags.splice(this.tags.tags.indexOf(tag), 1); + this.delLabelFn(tag.id); + }, + showInput() { + if(!this.vipInfo.id) { + this.$message.error('请选择用户'); + return; + } + + this.tags.inputVisible = true; + this.$nextTick(_ => { + this.$refs.saveTagInput.$refs.input.focus(); + }); + }, + handleInputConfirm() { + let inputValue = this.tags.inputValue; + if (inputValue) { + this.addLabelFn(inputValue); + } + this.tags.inputVisible = false; + this.tags.inputValue = ''; + }, + /********** 标签代码 end ************/ + + /********** 顶部按钮 start **********/ + // 充值 + recharge() { + if (!this.vipInfo.id) { + this.$message.error('请选择用户'); + return; + } + vipId = this.vipInfo.id; + openCz(); + }, + // 开服务单 + addServiceOrder() { + if (!this.vipInfo.id) { + this.$message.error('请选择用户'); + return; + } + vipId = this.vipInfo.id; + openAddService(); + }, + // 开订单 + addOrder() { + if (!this.vipInfo.id) { + this.$message.error('请选择用户'); + return; + } + vipId = this.vipInfo.id; + openAddOrder(); + }, + // 退款 + returnMoney() { + if (!this.vipInfo.id) { + this.$message.error('请选择用户'); + return; + } + vipId = this.vipInfo.id; + toRefundOrder(); + }, + /********** 顶部按钮 start **********/ + + dateFormat(row, column) { + return moment(column.yyTime).format("YYYY-MM-DD HH:mm"); + }, + oderTimeFormat(row, column) { + return moment(column.orderTime).format("YYYY-MM-DD HH:mm:ss"); + }, + } + }); </script> </body> </html> \ No newline at end of file diff --git a/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip_bak.html b/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip_bak.html new file mode 100644 index 0000000..6b949bb --- /dev/null +++ b/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip_bak.html @@ -0,0 +1,285 @@ +<!DOCTYPE HTML> +<html xmlns:th="http://www.thymeleaf.org" xmlns:matrix="http://www.w3.org/1999/xhtml"> +<head> + <meta charset="utf-8"> + <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> + <meta name="renderer" content="webkit|ie-comp|ie-stand"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" + content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/> + <meta http-equiv="Cache-Control" content="no-siteapp"/> + <!-- 本框架基本脚本和样式 --> + <script type="text/javascript" + th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script> + <script type="text/javascript" th:src="@{/js/systools/MBase.js}"></script> + + <script type="text/javascript" th:src="@{/js/function/vip.js}"></script> + <script type="text/javascript" th:src="@{/js/function/meiduCommon.js}"></script> + + <style type="text/css"> + .c { + cursor: pointer; + overflow: scroll; + height: 258px; + overflow-x: hidden; + } + + .c li:HOVER { + background: #efefef; + } + + .userList { + list-style: none; + padding-left: 0px; + border: 1px solid rgb(238, 238, 238); + position: fixed; + z-index: 99999999; + background: #FFFFFF; + box-shadow: 1px 2px 10px 1px #BFBFBF; + height: 300px; + overflow: scroll; + overflow-x: hidden; + } + + .userList li { + padding-left: 13px; + padding-top: 5px; + padding-bottom: 5px; + cursor: pointer; + border-bottom: 1px solid #efefef; + } + + .userList li:hover { + background: #eee; + } + </style> + +</head> +<body class="ibox-content container-fluid" onkeypress="dosearch(event)"> + +<div class="row"> + <div class="row "> + + <div class="col-sm-12 ibox-content"> + <form method="post" id="dataform" class="dataform form-inline"> + <div class="pd-20 form-group"> + <div class="text-l "> + <input type="text" id="key" placeholder="输入会员姓名/手机号码/编号" autocomplete="off" + style="width: 400px" class="form-control"> + <button type="button" class="btn btn-success radius EXSerchBtn " + onclick="selectByKey();"> + <i class="fa fa-search"> </i> 查找 + </button> + <ul id="userList" class="userList " + style="width: 400px; display: none"> + </ul> + + </div> + </div> + </form> + + </div> + </div> + <input autocomplete="off" type="hidden" id="vipId"> + <div class="row"> + <div class=" col-sm-9 "> + <div class="panel panel-default"> + <div class="panel-heading">会员信息</div> + + <table class="table table-bordered table-striped " + style="width: 100%;"> + <tr> + <td width="10%" class="text-r"><b>会员姓名:</b></td> + <td width="20%" name="vipName" id="vipName"></td> + <td width="10%" class="text-r"><b>性别:</b></td> + <td width="20%" name="sex" id="sex"></td> + <td width="10%" class="text-r"><b>生日:</b></td> + <td width="20%" name="birthday1" id="birthday1"></td> + </tr> + + <tr> + <td width="10%" class="text-r"><b>会员类型:</b></td> + <td width="20%" name="vipType" id="vipType"></td> + <td width="10%" class="text-r"><b>会员状态:</b></td> + <td width="20%" name="vipState" id="vipState"></td> + <td width="10%" class="text-r"><b>会员等级:</b></td> + <td width="20%" name="levelName" id="levelName"></td> + + </tr> + <tr> + <td width="10%" class="text-r"><b>会员编号:</b></td> + <td width="20%" name="animalSign" id="vipNo"></td> + <td width="10%" class="text-r"><b>生肖/星座:</b></td> + <td width="20%" name="constell" id="constell"></td> + <td width="10%" class="text-r"><b>注册时间:</b></td> + <td width="20%" name="createTime" id="createTime"></td> + </tr> + <tr> + <td width="10%" class="text-r"><b>手机号码:</b></td> + <td width="20%" name="phone" id="phone"></td> + <td width="10%" class="text-r"><b>入会时间:</b></td> + <td width="20%" name="inDate" id="inDate"></td> + <td width="10%" class="text-r"><b>地址:</b></td> + <td width="20%" name="addr" id="addr"></td> + </tr> + <tr> + <td width="10%" class="text-r"><b>到店途径:</b></td> + <td width="20%" name="arrivalWay" id="arrivalWay"></td> + <td width="10%" class="text-r"><b>总佣金:</b></td> + <td width="20%" name="commissionAll" id="commissionAll"></td> + <td width="10%" class="text-r"><b>总积分:</b></td> + <td width="20%" name="pointAll" id="pointAll"></td> + </tr> + + <tr> + <td width="10%" class="text-r"><b>储值卡余额:</b></td> + <td width="20%" name="bal" id="bal"></td> + <td width="10%" class="text-r"><b>备注:</b></td> + <td width="20%" name="remark" id="remark"></td> + <td width="10%" class="text-r"><b>健康顾问:</b></td> + <td width="20%" name="staffName" id="staffName"></td> + <td style="display: none" id="id" name="id"></td> + </tr> + <tr> + <td class="text-center" colspan="6"> + + <button matrix:btn="vipinfoClub-recharge" class="btn btn-success radius size-S isActive " + disabled="disabled" onclick='openCz()'> + <i class="fa fa-jpy"></i> 充值 + </button> + + <button matrix:btn="vipinfoClub-payment" class="btn btn-success radius size-S isActive" + disabled="disabled" onclick='openOrderList("欠款")'> + <i class="fa fa-paypal"></i> 补交 + </button> + + <button matrix:btn="vipinfoClub-gathering" class="btn btn-success radius size-S isActive" + disabled="disabled" onclick='openOrderList("待付款")'> + <i class="fa fa-paypal"></i> 收款 + </button> + <button matrix:btn="vipinfoClub-newService" class="btn btn-success radius size-S isActive" + disabled="disabled" onclick='toRefundOrder()'> + <i class="fa fa-paypal"></i> 退款 + </button> + <button matrix:btn="vipinfoClub-newService" class="btn btn-success radius size-S isActive" + disabled="disabled" onclick='openAddOrder()'> + <i class="fa fa-paypal"></i> 开单 + </button> + <button matrix:btn="vipinfoClub-newService" class="btn btn-success radius size-S isActive" + disabled="disabled" onclick='openAddService()'> + <i class="fa fa-paypal"></i> 开服务单 + </button> + + </td> + </tr> + </table> + </div> + </div> + <div class="col-sm-3"> + <div class="panel panel-default "> + <div class="panel-heading">最近查询会员</div> + <ul class="list-group c " id="historyList"> + </ul> + </div> + </div> + </div> + <div class="row"> + <div class="col-sm-9 text-center"> + + + <button class="btn btn-success radius size-S isActive" + onclick='openOrderList("全部")' disabled="disabled"> + <i class="fa fa-arrows-alt "></i> 订单 + </button> + + <button class="btn btn-success radius size-S isActive" + onclick="openServiceList()" disabled="disabled"> + <i class="fa fa-arrows-alt "></i> 服务单 + </button> + || + <button matrix:btn="vipinfoClub-projTaocan" class="btn btn-success radius size-S isActive" + onclick="openProj()" disabled="disabled"> + <i class="fa fa-star-half-o "></i> 项目管理 + </button> + + + <button matrix:btn="vipinfoClub-projTaocan" class="btn btn-success radius size-S isActive" + onclick="openTc()" disabled="disabled"> + <i class="fa fa-share-alt-square "></i> 套餐管理 + </button> + + + <button matrix:btn="vipinfoClub-projTaocan" class="btn btn-success radius size-S isActive" + onclick="openMoneyCard()" disabled="disabled"> + <i class="fa fa-gbp "></i>充值卡管理 + </button> + || + <button matrix:fn="servicefollow" onclick="openFollow()" type="button" class="btn btn-success isActive" disabled="disabled"> + <i class="fa fa-edit"></i> 跟进记录 + </button> + + <button matrix:btn="vipInfo-edit" onclick="openArchieves()" type="button" class="btn btn-success isActive" disabled="disabled"><i + class="fa fa-edit"></i> 客户档案 + </button> + <button matrix:btn="vipInfo-edit" onclick="openEdit()" type="button" class="btn btn-success isActive" disabled="disabled"><i + class="fa fa-edit"></i> 基本资料 + </button> + + </div> + </div> + +</div> +</body> + + +<script type="text/javascript" th:src="@{/js/systools/MJsBase.js}"></script> +<script th:inline="javascript"> + //初始带入vip的电话 + var key = $.query.get("vipPhone"); + if(key){ + selectList(key); + } + + $(function () { + $("#key").keyup( + function () { + var $input = $("#key"); + if ($input.val().length > 1) { + $.AjaxProxy({ + p: { + keyWord: $input.val(), + }, + c: false, + }) + .invoke( + basePath + "/admin/vipInfo/findUserByPhotoOrName", + function (loj) { + var html = ""; + for (var i = 0; i < loj + .getRowCount(); i++) { + html += '<li onclick="selectList(\'' + loj.getString(i, 'phone') + '\')" >' + + loj.getString(i, 'phone') + "-" + loj.getString(i, 'vipName') + + "-" + loj.getString(i, 'vipNo') + + '</li>'; + } + $("#userList").html(html).show(); + }); + } else { + $("#userList").hide(); + } + }); + updateHistory(); + $("#userList").mouseleave(function () { + $(this).hide(); + }) + }) + + + function selectList(phone) { + $("#userList").hide(); + $("#key").val(phone); + selectByKey(); + } +</script> +</body> +</html> \ No newline at end of file diff --git a/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip_detail.html b/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip_detail.html deleted file mode 100644 index 65a2b15..0000000 --- a/zq-erp/src/main/resources/templates/views/admin/hive/beautySalon/vip_detail.html +++ /dev/null @@ -1,1247 +0,0 @@ -<!DOCTYPE HTML> -<html xmlns:th="http://www.thymeleaf.org"> -<head> - <meta charset="utf-8"> - <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> - <meta name="renderer" content="webkit|ie-comp|ie-stand"> - <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> - <meta name="viewport" - content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/> - <meta http-equiv="Cache-Control" content="no-siteapp"/> - <!-- 本框架基本脚本和样式 --> - <script type="text/javascript" th:src="@{/js/systools/MBaseVue.js}"></script> - <script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script> - <script type="text/javascript" th:src="@{/plugin/moment.min.js}"></script> - <script type="text/javascript" th:src="@{/js/systools/MBase.js}"></script> - <script type="text/javascript" th:src="@{/js/function/vip.js}"></script> - <link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}"> - - <script type="text/javascript" th:src="@{/js/function/vip.js}"></script> - <script type="text/javascript" th:src="@{/js/function/meiduCommon.js}"></script> - - <style type="text/css"> - .c { - cursor: pointer; - overflow: scroll; - height: 258px; - overflow-x: hidden; - } - - .c li:HOVER { - background: #efefef; - } - - .userList { - list-style: none; - padding-left: 0px; - border: 1px solid rgb(238, 238, 238); - position: fixed; - z-index: 99999999; - background: #FFFFFF; - box-shadow: 1px 2px 10px 1px #BFBFBF; - height: 300px; - overflow: scroll; - overflow-x: hidden; - } - - .userList li { - padding-left: 13px; - padding-top: 5px; - padding-bottom: 5px; - cursor: pointer; - border-bottom: 1px solid #efefef; - } - - .userList li:hover { - background: #eee; - } - - .ibox-content { - background-color: rgba(240, 242, 245, 1); - } - - .col-style { - line-height: 30px; - height: 30px; - text-align: center; - padding: 0 5px; - display: inline-block; - vertical-align: top; - } - - .el-tag + .el-tag { - margin-left: 10px; - margin-bottom: 10px; - } - .button-new-tag { - margin-left: 10px; - height: 24px; - line-height: 22px; - padding-top: 0; - padding-bottom: 0; - } - .input-new-tag { - width: 90px; - margin-left: 10px; - vertical-align: bottom; - } - - .table-style { - margin: 20px 0; - padding: 20px 10px; - border: 1px solid #DCDFE6; - } - </style> - -</head> -<body> -<div class="ibox-content container-fluid" id="app"> - <el-container> - <el-header style="background-color: white; margin: 15px; line-height: 60px"> - <el-col :span="7"> - <el-col :span="19"> - <el-input v-model="searchValue" placeholder="输入会员姓名/手机号码/编号" @keyup.enter.native="searchVipInfo"></el-input> - </el-col> - <el-col :span="1"> - <el-button type="primary" @click="searchVipInfo">查询</el-button> - </el-col> - </el-col> - <el-col :span="6" style="float: right; margin-right: 20px;"> - <el-button type="primary" plain @click="recharge">充值</el-button> - <el-button type="warning" plain @click="addOrder">开单</el-button> - <el-button type="success" plain @click="addServiceOrder">开服务单</el-button> - <el-button type="danger" plain @click="returnMoney">退款</el-button> - </el-col> - </el-header> - <el-container> - <el-aside style="background-color: white; margin:0 15px; width: 400px"> - <el-row style="margin-left: 26px; margin-right: 26px;"> - <el-row type="flex" justify="center"> - <el-col :span="20" style="padding: 15px; text-align: center;"> - <el-avatar :size="150" :src="circleUrl"></el-avatar> - </el-col> - </el-row> - <el-row type="flex" justify="center"> - <el-col :span="4" style="text-align: center;"><span style="font-weight: bolder">{{vipInfo.vipName}}</span></el-col> - <el-col :span="5" style="text-align: center;">{{vipInfo.vipType}}</el-col> - </el-row> - <el-row type="flex" justify="center"> - <span class="col-style"><span v-if="vipInfo.age != null && vipInfo.age != ''">{{vipInfo.age}}</span><span v-else>-</span></span> - <span class="col-style"><span v-if="vipInfo.addr != null && vipInfo.addr != ''">{{vipInfo.addr}}</span><span v-else>-</span></span> - <span class="col-style">{{vipInfo.phone}}</span> - </el-row> - <el-row style="padding: 10px 20px;"> - <p>余额:<span v-if="vipInfo.balance != null">{{vipInfo.balance}}元</span></p> - <p>积分:<span v-if="vipInfo.pointAll != null">{{vipInfo.pointAll}}</span></p> - <p>累计消费金额:<span v-if="vipInfo.totalMoney != null">{{vipInfo.totalMoney}} 元</span></p> - <p>累计消费次数:<span v-if="vipInfo.totalTimes != null">{{vipInfo.totalTimes}} 次</span></p> - <p>上次消费时间:<span v-if="vipInfo.payTime">{{vipInfo.payTime}}</span></p> - </el-row> - <el-row style="border-top: 2px dashed #E4E7ED; border-bottom: 2px dashed #E4E7ED; padding: 10px 0px;"> - <h4>标签</h4> - <el-tag type="info" - size="small" - :key="tag.label" - v-for="tag in tags.tags" - closable - :disable-transitions="false" - @close="handleClose(tag)"> - {{tag.label}} - </el-tag> - <el-input - class="input-new-tag" - v-if="tags.inputVisible" - v-model="tags.inputValue" - ref="saveTagInput" - size="mini" - @keyup.enter.native="handleInputConfirm" - @blur="handleInputConfirm" - ></el-input> - <el-button v-else class="button-new-tag" size="mini" @click="showInput">+</el-button> - </el-row> - <el-row style="padding: 10px 0;"> - <h4>消费门店</h4> - <el-row style="text-align: center"> - <el-col :span="10" v-for="item in vipInfo.shopNames"> - <el-avatar size="small" :src="circleUrl"></el-avatar> - <span class="col-style">{{item}}</span> - </el-col> - </el-row> - </el-row> - </el-row> - </el-aside> - <el-main style="background-color: white; margin-right: 15px; padding: 20px 30px;"> - <el-tabs v-model="activeName" type="card" @tab-click="tabHandleClick"> - <el-tab-pane label="会员信息" name="vipInfo"> - <el-row> - <el-col :span="10"> - <p>生日 : {{vipInfo.birthday1}}</p> - <p>会员状态 : {{vipInfo.vipState}}</p> - <p>会员编号 : {{vipInfo.vipNo}}</p> - <p>注册时间 : {{vipInfo.createTime}}</p> - <p>到店途径 : {{vipInfo.arrivalWay}}</p> - </el-col> - <el-col :span="10"> - <p>会员卡类型 : {{vipInfo.vipType}}</p> - <p>会员等级 : {{vipInfo.levelName}}</p> - <p>生肖/星座 : {{vipInfo.constell}}</p> - <p>地址 : {{vipInfo.addr}}</p> - <p>健康顾问 : {{vipInfo.staffName}}</p> - </el-col> - </el-row> - </el-tab-pane> - <el-tab-pane label="项目/套餐" name="proj"> - <el-row style="line-height: 40px;"> - <el-col :span="10" style="margin-left: 20px;"> - <el-radio-group v-model="projTab.projType" @change="refreshTable(1)"> - <el-radio label="proj">项目</el-radio> - <el-radio label="taocan">套餐</el-radio> - <el-radio label="card">卡项</el-radio> - </el-radio-group> - </el-col> - <el-col :span="3" style="float: right; margin-right: 20px;"> - <el-select v-model="projTab.projIsValid" placeholder="请选择" @change="selectChange"> - <el-option - v-for="item in projTab.projOptions" - :key="item.value" - :label="item.label" - :value="item.value"> - </el-option> - </el-select> - </el-col> - </el-row> - <el-row class="table-style"> - <el-table id="proj" v-show="projTab.projType=='proj'" :data="projTab.projTableData" - style="width: 100%"> - <el-table-column - prop="projName" - label="项目名称" - width="180"> - </el-table-column> - <el-table-column - prop="source" - label="来源" - width="180"> - </el-table-column> - <el-table-column - prop="status" - label="状态"> - </el-table-column> - <el-table-column - prop="balance" - label="项目余额"> - </el-table-column> - <el-table-column - prop="surplusCount" - label="余次"> - </el-table-column> - <el-table-column - prop="failTime" - label="到期时间"> - </el-table-column> - <el-table-column label="操作"> - <template slot-scope="scope"> - <el-button matrix:btn="vipInfo-youxiao" v-if="scope.row.status!='有效'" type="text" size="small" @click="tabProjValid(scope.$index, scope.row)">有效</el-button> - <el-button matrix:btn="vipInfo-wuxiao" v-if="scope.row.status!='无效'" type="text" size="small" @click="tabProjInvalid(scope.$index, scope.row)">无效</el-button> - <el-button matrix:btn="vipInfo-dongjie" v-if="scope.row.status!='冻结'" type="text" size="small" @click="tabProjCold(scope.$index, scope.row)">冻结</el-button> - <el-button matrix:btn="vipInfo-cardEdit" type="text" size="small" @click="tabProjEdit(scope.$index, scope.row)">编辑</el-button> - </template> - </el-table-column> - </el-table> - - <el-table id="taocan" v-show="projTab.projType=='taocan'" :data="projTab.taocanTableData" - style="width: 100%;" - row-key="id" :tree-props="{children: 'children', hasChildren: 'hasChildren'}"> - <el-table-column - prop="projName" - label="名称" - width="180"> - </el-table-column> - <el-table-column - prop="status" - label="状态" - width="180"> - </el-table-column> - <el-table-column - prop="balance" - label="余额"> - </el-table-column> - <el-table-column - prop="surplusCount" - label="套餐余次"> - </el-table-column> - <el-table-column - prop="failTime" - label="到期时间"> - </el-table-column> - <el-table-column label="操作"> - <template slot-scope="scope"> - <el-button matrix:btn="vipInfo-youxiao" v-if="scope.row.status!='有效'" type="text" size="small" @click="tabProjValid(scope.$index, scope.row)">有效</el-button> - <el-button matrix:btn="vipInfo-wuxiao" v-if="scope.row.status!='无效'" type="text" size="small" @click="tabProjInvalid(scope.$index, scope.row)">无效</el-button> - <el-button matrix:btn="vipInfo-dongjie" v-if="scope.row.status!='冻结'" type="text" size="small" @click="tabProjCold(scope.$index, scope.row)">冻结</el-button> - <el-button matrix:btn="vipInfo-cardEdit" type="text" size="small" @click="tabProjEdit(scope.$index, scope.row)">编辑</el-button> - </template> - </el-table-column> - </el-table> - - <el-table id="card" v-show="projTab.projType=='card'" :data="projTab.cardTableData" - style="width: 100%;"> - <el-table-column - type="index" - width="50"> - </el-table-column> - <el-table-column - prop="cardName" - label="充值卡名称"> - </el-table-column> - <el-table-column - prop="useTotal" - label="总次数"> - </el-table-column> - <el-table-column - prop="lastCount" - label="剩余次数"> - </el-table-column> - <el-table-column - prop="realMoney" - label="本金"> - </el-table-column> - <el-table-column - prop="giftMoney" - label="赠送金额"> - </el-table-column> - <el-table-column - prop="source" - label="来源"> - </el-table-column> - <el-table-column - prop="status" - label="状态"> - </el-table-column> - <el-table-column - prop="isVipCar" - label="是否是会籍卡"> - </el-table-column> - <el-table-column - prop="isOver" - label="是否使用完成"> - </el-table-column> - <el-table-column - prop="failTime" - label="到期时间"> - </el-table-column> - <el-table-column - prop="remark" - label="备注"> - </el-table-column> - <el-table-column label="操作"> - <template slot-scope="scope"> - <el-button matrix:btn="vipInfo-youxiao" v-if="scope.row.status!='有效'" type="text" size="small" @click="tabProjValid(scope.$index, scope.row)">有效</el-button> - <el-button matrix:btn="vipInfo-wuxiao" v-if="scope.row.status!='无效'" type="text" size="small" @click="tabProjInvalid(scope.$index, scope.row)">无效</el-button> - <el-button matrix:btn="vipInfo-dongjie" v-if="scope.row.status!='冻结'" type="text" size="small" @click="tabProjCold(scope.$index, scope.row)">冻结</el-button> - <el-button matrix:btn="vipInfo-cardEdit" type="text" size="small" @click="tabProjEdit(scope.$index, scope.row)">编辑</el-button> - </template> - </el-table-column> - </el-table> - </el-row> - <el-row> - <el-pagination background - @size-change="projTabSizeChange" - @current-change="projTabCurrentChange" - :current-page="projTab.page.currentPage" - :page-sizes="[10, 20, 30, 50]" - :page-size="projTab.page.pageSize" - layout="total, sizes, prev, pager, next, jumper" - :total="projTab.page.total"> - </el-pagination> - </el-row> - </el-tab-pane> - <el-tab-pane label="服务单" name="serviceOrder"> - <el-row style="line-height: 40px;"> - <el-col :span="11"> - <span>选择时间:</span> - <el-date-picker v-model="serviceOrderTab.selectTime" - type="datetimerange" - range-separator="至" format="yyyy-MM-dd HH:mm" - start-placeholder="开始日期" - end-placeholder="结束日期"> - </el-date-picker> - </el-col> - <el-col :span="5"> - <el-select v-model="serviceOrderTab.state" placeholder="请选择"> - <el-option - v-for="item in serviceOrderTab.states" - :key="item.value" - :label="item.label" - :value="item.value"> - </el-option> - </el-select> - </el-col> - <el-col :span="1" style="margin-left: 5px;"> - <el-button type="primary" @click="serviceOrderQuery">查询</el-button> - </el-col> - </el-row> - <el-row class="table-style"> - <el-table :data="serviceOrderTab.tableData" - style="width: 100%;"> - <el-table-column - type="index" - width="50"> - </el-table-column> - <el-table-column - prop="serviceNo" - label="服务单号" - width="160"> - </el-table-column> - <el-table-column - prop="money" - label="消耗金额"> - </el-table-column> - <el-table-column - prop="createTime" - label="下单时间" width="160"> - </el-table-column> - <el-table-column - prop="yyTime" - label="预约时间" width="160" :formatter="dateFormat"> - </el-table-column> - <el-table-column - prop="totalTime" - label="服务时长"> - </el-table-column> - <el-table-column - prop="isOverTime" - label="超时时间"> - </el-table-column> - <el-table-column - prop="createStaffName" - label="下单顾问"> - </el-table-column> - <el-table-column - prop="state" - label="状态"> - </el-table-column> - <el-table-column fixed="right" label="操作" width="200"> - <template slot-scope="scope"> - <el-button type="text" size="small" @click="lookServiceOrder(scope.$index, scope.row)">查看</el-button> - <el-button matrix:btn="serviceClub-paiban" type="text" size="small" v-if="scope.row.state=='待预约'" @click="paiban(scope.$index, scope.row)">排班</el-button> - <el-button matrix:btn="serviceClub-paidan" type="text" size="small" v-if="scope.row.state=='预约成功待处理'" @click="giveServiceOrder(scope.$index, scope.row)">派单</el-button> - <el-button matrix:btn="serviceClub-edit" type="text" size="small" v-if="scope.row.state=='预约成功待处理'" @click="modifyServiceOrder(scope.$index, scope.row)">修改</el-button> - <el-button matrix:btn="serviceClub-peiliao" type="text" size="small" v-if="scope.row.state=='需配料'" @click="peiliao(scope.$index, scope.row)">配料</el-button> - <el-button matrix:btn="serviceClub-huakou" type="text" size="small" v-if="scope.row.state=='服务完成'" @click="openHKService(scope.$index, scope.row)">划扣</el-button> - <el-button matrix:btn="serviceClub-edit" type="text" size="small" @click="modifyTime(scope.$index, scope.row)">修改时间</el-button> - <el-button matrix:btn="serviceClub-del" type="text" size="small" v-if="scope.row.state!='预约取消'" @click="cancelServiceOrder(scope.$index, scope.row)">取消</el-button> - </template> - </el-table-column> - </el-table> - </el-row> - <el-row> - <el-pagination - background - @size-change="serviceOrderSizeChange" - @current-change="serviceOrderCurrentChange" - :current-page="serviceOrderTab.page.currentPage" - :page-sizes="[10, 20, 30, 50]" - :page-size="serviceOrderTab.page.pageSize" - layout="total, sizes, prev, pager, next, jumper" - :total="serviceOrderTab.page.total"> - </el-pagination> - </el-row> - </el-tab-pane> - <el-tab-pane label="订单" name="order"> - <el-row style="line-height: 40px;"> - <el-col :span="11"> - <span>选择时间:</span> - <el-date-picker v-model="orderTab.selectTime" - type="datetimerange" - range-separator="至" - format="yyyy-MM-dd HH:mm" - start-placeholder="开始日期" - end-placeholder="结束日期"> - </el-date-picker> - </el-col> - <el-col :span="5"> - <el-select v-model="orderTab.state" placeholder="请选择"> - <el-option - v-for="item in orderTab.states" - :key="item.value" - :label="item.label" - :value="item.value"> - </el-option> - </el-select> - </el-col> - <el-col :span="1" style="margin-left: 5px;"> - <el-button type="primary" @click="orderQuery">查询</el-button> - </el-col> - </el-row> - <el-row class="table-style"> - <el-table :data="orderTab.orderTableData" - style="width: 100%;"> - <el-table-column - type="index" - width="50"> - </el-table-column> - <el-table-column - prop="orderNo" - label="订单号" width="180"> - </el-table-column> - <el-table-column - prop="orderTime" - label="下单时间" width="160"> - </el-table-column> - <el-table-column - prop="total" - label="总价"> - </el-table-column> - <el-table-column - prop="zkTotal" - label="折后价"> - </el-table-column> - <el-table-column - prop="staffName" - label="下单顾问"> - </el-table-column> - <el-table-column - prop="cashPay" - label="现金支付金额"> - </el-table-column> - <el-table-column - prop="cardPay" - label="卡支付金额"> - </el-table-column> - <el-table-column - prop="arrears" - label="欠款金额"> - </el-table-column> - <el-table-column - prop="statu" - label="订单状态"> - </el-table-column> - <el-table-column - prop="remark" - label="备注" width="100"> - </el-table-column> - <el-table-column label="操作" fixed="right" width="160"> - <template slot-scope="scope"> - <el-button type="text" size="small" @click="lookOrderInfo(scope.$index, scope.row)">查看</el-button> - <el-button matrix:btn="orderClub-payment" v-if="scope.row.statu == '欠款'" type="text" size="small" @click="bjMoney(scope.$index, scope.row)">补交</el-button> - <el-button matrix:btn="orderClub-gathering" v-if="scope.row.statu == '待付款'" type="text" size="small" @click="skMoney(scope.$index, scope.row)">收款</el-button> - <el-button matrix:btn="orderClub-edit" type="text" size="small" @click="updateTime(scope.$index, scope.row)">修改时间</el-button> - </template> - </el-table-column> - </el-table> - </el-row> - <el-row> - <el-pagination - background - @size-change="orderSizeChange" - @current-change="orderCurrentChange" - :current-page="orderTab.page.currentPage" - :page-sizes="[10, 20, 30, 50]" - :page-size="orderTab.page.pageSize" - layout="total, sizes, prev, pager, next, jumper" - :total="orderTab.page.total"> - </el-pagination> - </el-row> - </el-tab-pane> - <el-tab-pane label="皮肤检测" name="skinCheck"> - <el-row style="line-height: 40px;"> - <el-col :span="11"> - <span>选择时间:</span> - <el-date-picker v-model="skinTab.selectTime" - type="daterange" - range-separator="至" - format="yyyy-MM-dd" - start-placeholder="开始日期" - end-placeholder="结束日期"> - </el-date-picker> - </el-col> - <el-col :span="6" style="margin-left: 5px;"> - <el-button type="primary" @click="skinCheckQuery">查询</el-button> - <el-button type="success" @click="addSkinCheck">新增</el-button> - </el-col> - </el-row> - <el-row class="table-style"> - <el-table :data="skinTab.skinTableDate" - style="width: 100%;"> - <el-table-column - type="index" - width="50"> - </el-table-column> - <el-table-column - prop="checkUserName" - label="检测人员"> - </el-table-column> - <el-table-column - prop="shopName" - label="门店"> - </el-table-column> - <el-table-column - prop="checkTime" - label="检测时间"> - </el-table-column> - <el-table-column label="操作"> - <template slot-scope="scope"> - <el-button type="text" size="small" @click="editSkinCheck(scope.$index, scope.row)">编辑</el-button> - <el-button type="text" size="small" @click="delSkinCheck(scope.$index, scope.row)">删除</el-button> - </template> - </el-table-column> - </el-table> - </el-row> - <el-row> - <el-pagination - background - @size-change="skinCheckSizeChange" - @current-change="skinCheckCurrentChange" - :current-page="skinTab.page.currentPage" - :page-sizes="[10, 20, 30, 50]" - :page-size="skinTab.page.pageSize" - layout="total, sizes, prev, pager, next, jumper" - :total="skinTab.page.total"> - </el-pagination> - </el-row> - </el-tab-pane> - </el-tabs> - </el-main> - </el-container> - </el-container> -</div> -</body> -<script type="text/javascript" th:src="@{/js/systools/AjaxProxyVue.js}"></script> -<script type="text/javascript" th:src="@{/js/plugin/vue.js}"></script> -<script type="text/javascript" th:src="@{/plugin/element-ui/index.js}"></script> -<script type="text/javascript" th:src="@{/js/systools/MJsBase.js}"></script> -<script th:inline="javascript"> - var app = new Vue({ - el: '#app', - data : { - circleUrl : "https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png", - activeName : 'vipInfo', - tags : { - tags : [], - inputVisible: false, - inputValue: '' - }, - searchValue : "", - vipInfo : {}, - // 项目/套餐 tab - projTab : { - projType : "proj", - projTypeBak : "proj", - projOptions : [{ value : '', label : "全部" }, { value : '有效', label : "有效" }, { value : '无效', label : "无效" }, { value : "冻结", label : "冻结" }, { value : "转让", label : "转让" }, { value : "退款", label : "退款" }], - projIsValid : "", - - projTableData : [], - taocanTableData : [], - cardTableData : [], - page : { - currentPage : 1, - pageSize : 10, - total : 0 - } - }, - // 服务单tab - serviceOrderTab : { - tableData : [], - selectTime : '', - state : '', - states : [ { value : '', label : '全部' }, { value : '待预约', label : '待预约' },{ value : '预约成功待处理', label : '待派单' },{ value : '需配料', label : '待配料' }, - { value : '配料完成', label : '待服务' },{ value : '服务中', label : '服务中' }, - { value : '服务完成', label : '服务完成' },{ value : '服务单结束', label : '服务单结束' }, ], - page : { - currentPage : 1, - pageSize : 10, - total : 0 - } - }, - // 订单 tab - orderTab : { - orderTableData : [], - selectTime : '', - state : '', - states : [ { value : '', label : '全部' }, { value : '待付款', label : '待付款' }, { value : '已付款', label : '已付款' }, { value : '欠款', label : '欠款' }, { value : '已取消', label : '已取消' } ], - page : { - currentPage : 1, - pageSize : 10, - total : 0 - } - }, - // 皮肤检测tab - skinTab : { - skinTableDate : [], - selectTime : '', - page : { - currentPage : 1, - pageSize : 10, - total : 0 - } - } - }, - created : function() { - var key = $.query.get("vipPhone"); - let _this = this; - - if (key) { - _this.vipInfoFn(key); - } - }, - methods : { - // 请求会员信息 - vipInfoFn(key) { - let _this = this; - // 请求用户信息 - $.AjaxProxy({ - p: { - keyWord: key - } - }).invoke(basePath + "/admin/vipInfo/showVipInfo", function (loj) { - if (loj.getRowCount() == 0) { - layer.msg('未查询到客户信息', { - icon: 5 - }); - return false; - } - console.log(loj); - let data = loj[0].result.rows[0]; - _this.vipInfo = {}; - _this.vipInfo = data; - - if (data.sysOrder != null) { - _this.vipInfo.totalMoney = data.sysOrder.zkTotal; - _this.vipInfo.totalTimes = data.sysOrder.times; - _this.vipInfo.payTime = data.sysOrder.payTime; - - if (data.sysOrder.shopName) { - var shopNames = data.sysOrder.shopName.split(','); - _this.vipInfo.shopNames = shopNames; - } - } - - _this.tags.tags = data.labels; - _this.projTableQueryFn(); - }); - }, - addLabelFn(key) { - let _this = this; - // 请求用户信息 - $.AjaxProxy({ - p: { - vipId: _this.vipInfo.id, - label : key - } - }).invoke(basePath + "/admin/label/add", function (loj) { - let label = loj.getResult().mapInfo.label; - _this.tags.tags.push(label); - }); - }, - delLabelFn(id) { - $.AjaxProxy({ - p: { - id: id - } - }).invoke(basePath + "/admin/label/del", function (loj) { - }); - }, - searchVipInfo() { - let _this = this; - let inputVisible = _this.tags.inputVisible; - console.log(inputVisible) - if (!inputVisible) { - if (_this.searchValue) { - _this.vipInfoFn(_this.searchValue); - } - } - - }, - - /** ############## 项目/套餐Tab页 start #################### **/ - projTabTableParams() { - let _this = this; - let currentPage = _this.projTab.page.currentPage; - let pageSize = _this.projTab.page.pageSize - return { - vipId: _this.vipInfo.id, - offset: (currentPage - 1) * pageSize, - limit: pageSize, - status: _this.projTab.projIsValid, - }; - }, - // 项目tab页,请求项目数据 - projTableQueryFn() { - let _this = this; - $.AjaxProxy({ - p:_this.projTabTableParams() - }).invoke(basePath + "/admin/projUser/showList", function (loj) { - _this.projTab.page.total = loj.getResult().total; - _this.projTab.projTableData = loj.getValue("rows"); - }); - }, - // 套餐表格数据请求 - taocanTableQueryFn() { - let _this = this; - $.AjaxProxy({ - p:_this.projTabTableParams() - }).invoke(basePath + "/admin/taoCanUser/showTc", function (loj) { - _this.projTab.page.total = loj.getResult().total; - _this.projTab.taocanTableData = loj.getValue("rows"); - }); - }, - // 卡项表格数据请求 - cardTableQueryFn() { - let _this = this; - $.AjaxProxy({ - p:_this.projTabTableParams() - }).invoke(basePath + "/admin/moneyCardUse/showVipMoneyCardList", function (loj) { - _this.projTab.page.total = loj.getResult().total; - _this.projTab.cardTableData = loj.getValue("rows"); - }); - }, - projTabSizeChange(val) { - this.projTab.page.pageSize = val; - this.refreshTable(); - }, - projTabCurrentPage(val) { - this.projTab.page.currentPage = val; - this.refreshTable(); - }, - // 单选框切换 - refreshTable(val) { - let _this = this; - if (val) { - this.projTab.page = { - currentPage : 1, - pageSize : 10, - total : 0 - }; - } - - if (_this.projTab.projType === 'proj') { - _this.projTableQueryFn(); - } - - if (_this.projTab.projType === 'taocan') { - _this.taocanTableQueryFn(); - } - - if (_this.projTab.projType === 'card') { - _this.cardTableQueryFn(); - } - - - }, - // 下拉框选择 - selectChange() { - this.refreshTable(); - }, - tabProjValid(index, row) { - let _this = this; - let projType = _this.projTab.projType; - var url; - if (projType === 'proj') { - url = "/admin/projUser/activeProj"; - } - - if (projType === 'taocan') { - url = "/admin/taoCanUser/activeTc"; - } - - if (projType === 'card') { - url = "/admin/moneyCardUse/active"; - } - $.AjaxProxy({ - p : { - id : row.id - } - }).invoke(basePath + url, function(loj) { - if (projType === 'taocan') { - layer.alert(loj.getValue("info"), { - icon : 1 - }); - _this.refreshTable(); - } else { - var rs = loj.attr("result"); - if (rs.info == '已过期') { - layer.open({ - type : 2, - title : "设置过期日期", - area : [ "420px", '300px' ], - content : [ basePath+'/admin/redirect/vip/select-date-card?id=' + row.id ] - }); - } else { - layer.alert(loj.getValue("info"), { - icon : 1 - }); - _this.refreshTable(); - } - } - }); - - }, - tabProjEdit(index, row) { - let _this = this; - let projType = _this.projTab.projType; - var url; - if (projType === 'proj') { - url = '/admin/projUser/editForm?id='; - } - - if (projType === 'taocan') { - url = '/admin/taoCanUser/editForm?id='; - } - - if (projType === 'card') { - url = '/admin/moneyCardUse/editForm?id='; - } - - layer.open({ - type : 2, - title : "编辑", - area : MUI.SIZE_M, - maxmin : true, - content : [ basePath + url + row.id ] - }); - }, - tabProjInvalid(index, row) { - let _this = this; - let projType = _this.projTab.projType; - var url; - if (projType === 'proj') { - url = '/admin/projUser/invalidProj'; - } - - if (projType === 'taocan') { - url = '/admin/moneyCardUse/invalid'; - } - - if (projType === 'card') { - url = '/admin/taoCanUser/invalidTc'; - } - - _this.projTabQuery(row.id, url); - }, - tabProjCold(index, row) { - let _this = this; - let projType = _this.projTab.projType; - var url; - if (projType === 'proj') { - url = '/admin/projUser/freezeProj'; - } - - if (projType === 'taocan') { - url = '/admin/taoCanUser/freezeTc'; - } - - if (projType === 'card') { - url = '/admin/moneyCardUse/freeze'; - } - - _this.projTabQuery(row.id, url); - }, - projTabQuery(id, url) { - let _this = this; - $.AjaxProxy({ - p : { - id : id - } - }).invoke(basePath + url, function(loj) { - layer.alert(loj.getValue("info"), { - icon : 1 - }); - _this.refreshTable(); - }); - }, - /** ############## 项目/套餐Tab页 end #################### **/ - - /********* 服务单tab start ***********/ - serviceOrderQuery() { - this.serviceOrderTableQueryFn() - }, - serviceOrderTableQueryFn() { - let _this = this; - let serviceOrderTab = _this.serviceOrderTab; - let page = serviceOrderTab.page; - var params = {}; - params.limit = page.pageSize; - params.offset = (page.currentPage - 1) * page.pageSize; - params.state = serviceOrderTab.state; - params.vipId = _this.vipInfo.id; - if (serviceOrderTab.selectTime) { - params.beginTime = moment(serviceOrderTab.selectTime[0]).format("YYYY-MM-DD HH:mm"); - params.closureTime = moment(serviceOrderTab.selectTime[1]).format("YYYY-MM-DD HH:mm"); - } - $.AjaxProxy({ - p:params - }).invoke(basePath + "/admin/projService/showList", function (loj) { - serviceOrderTab.page.total = loj.getResult().total; - serviceOrderTab.tableData = loj.getValue("rows"); - }); - }, - serviceOrderSizeChange(val) { - this.serviceOrderTab.page.pageSize = val; - this.serviceOrderTableQueryFn() - }, - serviceOrderCurrentChange(val) { - this.serviceOrderTab.page.currentPage = val; - this.serviceOrderTableQueryFn() - }, - buildServiceOrderOperate(row, column) { - var html = '<el-button type="text" size="small" @click="tabProjInvalid('+row+', '+column+')">排班</el-button>' - return html; - }, - // 查看 - lookServiceOrder(index, row) { - selectFwz(row.id); - }, - // 排班 - paiban(index, row) { - openPb(row.id); - }, - // 派单 - giveServiceOrder(index, row) { - MTools.handleItem(basePath + "/admin/projService/paidan?id=" + row.id, "确定派单吗?", this.serviceOrderQuery) - }, - // 修改 - modifyServiceOrder(index, row) { - updatePd(row.id); - }, - // 配料 - peiliao(index, row) { - layer.full(layer.open({ - type: 2, - title: "开始配料", - maxmin: true, - area: [MUI.SIZE_L, '450px'], - content: [basePath + '/admin/projService/startpl?id=' + row.id] - })); - }, - // 划扣 - openHkService(index, row) { - openHkServcie(row.id); - }, - // 取消 - cancelServiceOrder(index, row) { - MTools.handleItem(basePath + "/admin/projService/cancelOrder?id=" + row.row, "确定取消订单吗?", this.serviceOrderQuery); - }, - // 修改时间 - modifyTime(index, row) { - layer.open({ - type: 2, - title: "修改订单时间", - maxmin: true, - area: [MUI.SIZE_L, '500px'], - content: [basePath + '/admin/projService/toServiceOrderUpdateTime?id=' + row.id] - }); - }, - /********* 服务单tab end ***********/ - - /********* 订单Tab start ***********/ - orderQuery() { - this.orderTableDataQueryFn(); - }, - orderTableDataQueryFn() { - let _this = this; - let orderTab = _this.orderTab; - let page = orderTab.page; - var params = {}; - params.limit = page.pageSize; - params.offset = (page.currentPage - 1) * page.pageSize; - params.statu = orderTab.state; - params.vipId = _this.vipInfo.id; - if (orderTab.selectTime) { - params.beginTimeVo = moment(orderTab.selectTime[0]).format("YYYY-MM-DD HH:mm"); - params.endTimeVo = moment(orderTab.selectTime[1]).format("YYYY-MM-DD HH:mm"); - } - $.AjaxProxy({ - p:params - }).invoke(basePath + "/admin/order/showList", function (loj) { - orderTab.page.total = loj.getResult().total; - orderTab.orderTableData = loj.getValue("rows"); - }); - - }, - orderSizeChange(val) { - this.orderTab.page.pageSize = val; - this.orderTableDataQueryFn(); - }, - orderCurrentChange(val) { - this.orderTab.page.currentPage = val; - this.orderTableDataQueryFn(); - }, - lookOrderInfo(index, row) { - layer.full(layer.open({ - type : 2, - title : "订单详情", - maxmin : true, - area : [ MUI.SIZE_L, '500px' ], - content : [ basePath + '/admin/order/orderItem?id=' + row.id ] - })); - }, - bjMoney(index, row) { - layer.full(layer.open({ - type : 2, - title : "补交", - area : [ MUI.SIZE_L, '400px' ], - maxmin : true, - content : [ basePath+'/admin/moneyCardUse/toBj?id=' + row.id] - })); - }, - skMoney(index, row) { - layer.full(layer.open({ - type : 2, - title : "收款", - area : [ MUI.SIZE_L, '400px' ], - maxmin : true, - content : [ basePath+'/admin/redirect/hive/beautySalon/order-form?id=' + row.id] - })); - }, - updateTime(index, row) { - layer.open({ - type : 2, - title : "修改订单时间", - maxmin : true, - area : [ MUI.SIZE_L, '500px' ], - content : [ basePath + '/admin/order/toUpdateTime?id=' + row.id ] - }); - }, - /********* 订单Tab end ***********/ - - /************** 皮肤检测tab start **************/ - skinCheckQuery() { - this.skinCheckTableDataQueryFn(); - }, - skinCheckTableDataQueryFn() { - let _this = this; - let skinTab = _this.skinTab; - let page = skinTab.page; - var params = {}; - params.limit = page.pageSize; - params.offset = (page.currentPage - 1) * page.pageSize; - params.userId = _this.vipInfo.id; - if (skinTab.selectTime) { - params.beginTime = moment(skinTab.selectTime[0]).format("YYYY-MM-DD"); - params.endTime = moment(skinTab.selectTime[1]).format("YYYY-MM-DD"); - } - $.AjaxProxy({ - p:params - }).invoke(basePath + "/admin/sysSkinCheckRecord/showList", function (loj) { - skinTab.page.total = loj.getResult().total; - skinTab.skinTableDate = loj.getValue("rows"); - }); - }, - skinCheckSizeChange(val) { - this.skinTab.page.pageSize = val; - this.skinCheckTableDataQueryFn() - }, - skinCheckCurrentChange(val) { - this.skinTab.page.currentPage = val; - this.skinCheckTableDataQueryFn() - }, - addSkinCheck() { - let _this = this; - layer.full(layer.open({ - type : 2, - title : "新增皮肤检测", - area : [ MUI.SIZE_L, '400px' ], - maxmin : true, - content : [ basePath+'/admin/redirect/hive/vip/sysSkinCheckRecord-form?vipId=' + _this.vipInfo.id] - })); - }, - delSkinCheck(index, row) { - let _this = this; - $.AjaxProxy().invoke(basePath + "/admin/sysSkinCheckRecord/del?keys=" + row.id, function (loj) { - _this.skinCheckQuery(); - }); - }, - editSkinCheck(index, row) { - let _this = this; - layer.full(layer.open({ - type : 2, - title : "编辑皮肤检测", - area : [ MUI.SIZE_L, '400px' ], - maxmin : true, - content : [ basePath+'/admin/redirect/hive/vip/sysSkinCheckRecord-form?vipId='+ _this.vipInfo.id +'&id=' + row.id] - })); - }, - /************** 皮肤检测tab end **************/ - - // tab标签切换 - tabHandleClick(tab, event) { - let _this = this; - if (tab.name === "serviceOrder") { - if (_this.serviceOrderTab.tableData.length <= 0) { - this.serviceOrderTableQueryFn(); - } - } - - if (tab.name === "order") { - if (_this.orderTab.orderTableData.length <= 0) { - this.orderTableDataQueryFn(); - } - } - - if (tab.name === "skinCheck") { - if (_this.skinTab.skinTableDate.length <= 0) { - this.skinCheckTableDataQueryFn(); - } - } - }, - - /********** 标签代码 start ************/ - handleClose(tag) { - this.tags.tags.splice(this.tags.tags.indexOf(tag), 1); - this.delLabelFn(tag.id); - }, - showInput() { - this.tags.inputVisible = true; - this.$nextTick(_ => { - this.$refs.saveTagInput.$refs.input.focus(); - }); - }, - handleInputConfirm() { - let inputValue = this.tags.inputValue; - if (inputValue) { - this.addLabelFn(inputValue); - } - this.tags.inputVisible = false; - this.tags.inputValue = ''; - }, - /********** 标签代码 end ************/ - - tabHandleSizeChange(val) { - console.log(`每页 ${val} 条`); - }, - tabHandleCurrentChange(val) { - console.log(`当前页: ${val}`); - }, - - /********** 顶部按钮 start **********/ - // 充值 - recharge() { - vipId = this.vipInfo.id; - openCz(); - }, - // 开服务单 - addServiceOrder() { - vipId = this.vipInfo.id; - openAddService(); - }, - // 开订单 - addOrder() { - vipId = this.vipInfo.id; - openAddOrder(); - }, - // 退款 - returnMoney() { - vipId = this.vipInfo.id; - toRefundOrder(); - }, - /********** 顶部按钮 start **********/ - - dateFormat(row, column) { - return moment(column.yyTime).format("YYYY-MM-DD HH:mm"); - } - } - }); -</script> -</body> -</html> \ No newline at end of file diff --git a/zq-erp/src/main/resources/templates/views/admin/hive/vip/moneyCardUse-form.html b/zq-erp/src/main/resources/templates/views/admin/hive/vip/moneyCardUse-form.html index 08ab9f2..56eeb3b 100644 --- a/zq-erp/src/main/resources/templates/views/admin/hive/vip/moneyCardUse-form.html +++ b/zq-erp/src/main/resources/templates/views/admin/hive/vip/moneyCardUse-form.html @@ -114,8 +114,14 @@ var myForm = MForm.initForm({ invokeUrl: basePath + "/admin/moneyCardUse/modify", afterSubmit: function () { - parent.myGrid.serchData(); - parent.myGrid2.serchData(); + if(parent.myGrid) { + parent.myGrid.serchData(); + parent.myGrid2.serchData(); + } + + if (parent.app) { + parent.app.refreshTable(); + } }, }); diff --git a/zq-erp/src/main/resources/templates/views/admin/hive/vip/projUse-form.html b/zq-erp/src/main/resources/templates/views/admin/hive/vip/projUse-form.html index 9ef758e..9d530cd 100644 --- a/zq-erp/src/main/resources/templates/views/admin/hive/vip/projUse-form.html +++ b/zq-erp/src/main/resources/templates/views/admin/hive/vip/projUse-form.html @@ -90,7 +90,13 @@ var myForm=MForm.initForm({ invokeUrl:basePath +"/admin/projUser/addOrModify", afterSubmit:function(){ - parent.myGrid.serchData(); + if(parent.myGrid) { + parent.myGrid.serchData(); + } + + if (parent.app) { + parent.app.refreshTable(); + } }, }); </script> diff --git a/zq-erp/src/main/resources/templates/views/admin/hive/vip/tc-form.html b/zq-erp/src/main/resources/templates/views/admin/hive/vip/tc-form.html index c0e8b27..182a537 100644 --- a/zq-erp/src/main/resources/templates/views/admin/hive/vip/tc-form.html +++ b/zq-erp/src/main/resources/templates/views/admin/hive/vip/tc-form.html @@ -121,7 +121,13 @@ myForm = MForm.initForm({ invokeUrl : basePath+"/admin/taoCanUser/addOrModify", afterSubmit : function() { - parent.myGrid.serchData(); + if(parent.myGrid) { + parent.myGrid.serchData(); + } + + if (parent.app) { + parent.app.refreshTable(); + } }, }); }); diff --git a/zq-erp/src/main/resources/templates/views/admin/hive/vip/vipInfo-list.html b/zq-erp/src/main/resources/templates/views/admin/hive/vip/vipInfo-list.html index 04df453..eb9ef2a 100644 --- a/zq-erp/src/main/resources/templates/views/admin/hive/vip/vipInfo-list.html +++ b/zq-erp/src/main/resources/templates/views/admin/hive/vip/vipInfo-list.html @@ -116,7 +116,7 @@ <button matrix:btn="vipInfo-projTaocan" onclick="openTc()" type="button" class="btn btn-info btn-sm"><i class="fa fa-cubes"></i> 套餐管理</button> <button matrix:btn="vipInfo-projTaocan" onclick="openMoneyCard()" type="button" class="btn btn-info btn-sm"><i class="fa fa-credit-card"></i> 充值卡管理</button> - <button onclick="importProjUse()" type="button" class="btn btn-info btn-sm"><i class="fa fa-history"></i> 导入项目</button> + <button onclick="importProjUse()" type="button" class="btn btn-info btn-sm"><i class="fa fa-history"></i> 导入项目</button> <button matrix:fn="orderClub" onclick="openOrder()" type="button" class="btn btn-info btn-sm"><i class="fa fa-history"></i> 消费订单</button> <button matrix:fn="serviceClub" onclick="openServiceOrder()" type="button" class="btn btn-info btn-sm"><i class="fa fa-history"></i> 服务单</button> @@ -175,7 +175,6 @@ function buildOperation(value, row, index) { var html = ""; html += '<a class="text-info" href="javascript:void(0)" onClick="openVipDetail(\''+row.phone+'\')">查看详情</a> ' - html += '<a class="text-info" href="javascript:void(0)" onClick="openVipDetail2(\''+row.phone+'\')">测试页面</a> ' return html; } -- Gitblit v1.9.1