| | |
| | | .el-autocomplete { |
| | | display: block !important; |
| | | } |
| | | |
| | | .vip-info { |
| | | padding: 30px 20px; |
| | | } |
| | | |
| | | .vip-info p { |
| | | line-height: 30px; |
| | | } |
| | | </style> |
| | | |
| | | </head> |
| | |
| | | <el-button type="primary" @click="searchVipInfo">查询</el-button> |
| | | </el-col> |
| | | </el-col> |
| | | <el-col :span="6" style="float: right; margin-right: 20px;"> |
| | | <el-col :span="8" 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-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.totalMoney != null">{{vipInfo.totalMoney.toFixed(2)}} 元</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> |
| | |
| | | size="small" |
| | | :key="tag.label" |
| | | v-for="tag in tags.tags" |
| | | closable |
| | | :disable-transitions="false" |
| | | @close="handleClose(tag)"> |
| | | {{tag.label}} |
| | |
| | | @keyup.enter.native="handleInputConfirm" |
| | | @blur="handleInputConfirm" |
| | | ></el-input> |
| | | <el-button v-else class="button-new-tag" size="mini" @click="showInput">+</el-button> |
| | | <!-- <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-tag v-for="item in vipInfo.shopNames" >{{item}}</el-tag> |
| | | </el-row> |
| | | </el-row> |
| | | </el-row> |
| | |
| | | <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-row class="vip-info"> |
| | | <el-col :span="10"> |
| | | <p>生日 : {{vipInfo.birthday1}}</p> |
| | | <p>会员状态 : {{vipInfo.vipState}}</p> |
| | |
| | | <el-table id="proj" v-show="projTab.projType=='proj'" :data="projTab.projTableData" |
| | | style="width: 100%"> |
| | | <el-table-column |
| | | prop="projName" |
| | | label="项目名称" |
| | | width="180"> |
| | | <template slot-scope="scope"> |
| | | <span >{{scope.row.projName}}({{scope.row.projInfo.code}})</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="source" |
| | |
| | | <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> |
| | | <el-button type="text" @click="openOrder(scope.$index, scope.row)" size="small">订单</el-button> |
| | | <el-button type="text" size="small" @click="openProjUseFlow(scope.$index, scope.row)">操作记录</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | style="width: 100%;" |
| | | row-key="id" :tree-props="{children: 'taocanProjUse', hasChildren: 'hasChildren'}"> |
| | | <el-table-column |
| | | prop="projName" |
| | | label="名称" |
| | | width="240"> |
| | | width="280"> |
| | | <template slot-scope="scope"> |
| | | <span >{{scope.row.projName}}({{scope.row.projInfo.code}})</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="status" |
| | |
| | | <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> |
| | | <el-button type="text" v-if="scope.row.orderId != null" @click="openOrder(scope.$index, scope.row)" size="small">订单</el-button> |
| | | <el-button type="text" size="small" @click="openProjUseFlow(scope.$index, scope.row)">操作记录</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | 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> |
| | | <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-youxiao" v-if="scope.row.status!='有效' && scope.row.isVipCar =='N' " 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.isVipCar =='N' " 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.isVipCar =='N' " 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> |
| | | <el-button type="text" v-if="scope.row.isVipCar =='N'" @click="openOrder(scope.$index, scope.row)" size="small">订单</el-button> |
| | | <el-button type="text" size="small" @click="openMoneyCardUseFlow(scope.$index, scope.row)">操作记录</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | <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" |
| | |
| | | <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-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-huakou" type="text" size="small" v-if="scope.row.state=='服务完成'" @click="hkService(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-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="至" |
| | |
| | | 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-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="至" |
| | |
| | | var app = new Vue({ |
| | | el: '#app', |
| | | data : { |
| | | circleUrl : "https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png", |
| | | circleUrl : "", |
| | | activeName : 'vipInfo', |
| | | tags : { |
| | | tags : [], |
| | |
| | | } |
| | | }, |
| | | methods : { |
| | | //打开订单详情页面 |
| | | openOrder(index,row){ |
| | | layer.full(layer.open({ |
| | | type : 2, |
| | | title : "订单详情", |
| | | maxmin : true, |
| | | content : [ basePath + '/admin/order/orderItem?id=' + row.orderId ] |
| | | })); |
| | | }, |
| | | querySearch(queryString, cb) { |
| | | $.AjaxProxy({ |
| | | p: { |
| | |
| | | // 请求会员信息 |
| | | vipInfoFn(key) { |
| | | let _this = this; |
| | | if (!key) { |
| | | key = _this.vipInfo.phone; |
| | | } |
| | | // 请求用户信息 |
| | | $.AjaxProxy({ |
| | | p: { |
| | |
| | | let data = loj[0].result.rows[0]; |
| | | _this.vipInfo = {}; |
| | | _this.vipInfo = data; |
| | | |
| | | _this.circleUrl= _this.vipInfo.photo; |
| | | if (data.sysOrder != null) { |
| | | _this.vipInfo.totalMoney = data.sysOrder.zkTotal; |
| | | _this.vipInfo.totalTimes = data.sysOrder.times; |
| | |
| | | _this.vipInfo.shopNames = shopNames; |
| | | } |
| | | } |
| | | |
| | | _this.vipInfo.payTime = moment(_this.vipInfo.payTime).format("YYYY-MM-DD HH:mm:ss") |
| | | _this.tags.tags = data.labels; |
| | | _this.projTableQueryFn(); |
| | | _this.serviceOrderTableQueryFn(); |
| | | _this.orderTableDataQueryFn(); |
| | | _this.skinCheckTableDataQueryFn(); |
| | | _this.refreshTable(); |
| | | }); |
| | | }, |
| | | addLabelFn(key) { |
| | |
| | | content : [ basePath + url + row.id ] |
| | | }); |
| | | }, |
| | | |
| | | |
| | | openProjUseFlow(index, row) { |
| | | layer.open({ |
| | | type : 2, |
| | | title : "操作记录", |
| | | area : MUI.SIZE_M, |
| | | maxmin : true, |
| | | content : [ basePath + "/admin/redirect/hive/beautySalon/projUseFlow-list?projUseId=" + row.id ] |
| | | }); |
| | | }, |
| | | |
| | | openMoneyCardUseFlow(index, row) { |
| | | layer.open({ |
| | | type : 2, |
| | | title : "充值卡变更记录", |
| | | area : MUI.SIZE_M, |
| | | maxmin : true, |
| | | content : [ basePath + "/admin/redirect/hive/vip/moneyCardUseFlow-list?vipId=" + row.vipId ] |
| | | }); |
| | | }, |
| | | |
| | | tabProjInvalid(index, row) { |
| | | let _this = this; |
| | | let projType = _this.projTab.projType; |
| | |
| | | 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"); |
| | | params.beginTime = serviceOrderTab.selectTime?moment(serviceOrderTab.selectTime[0]).format("YYYY-MM-DD HH:mm"):''; |
| | | params.closureTime = serviceOrderTab.selectTime?moment(serviceOrderTab.selectTime[1]).format("YYYY-MM-DD HH:mm"):''; |
| | | } |
| | | $.AjaxProxy({ |
| | | p:params |
| | |
| | | })); |
| | | }, |
| | | // 划扣 |
| | | openHkService(index, row) { |
| | | hkService(index, row) { |
| | | openHkServcie(row.id); |
| | | }, |
| | | // 取消 |
| | |
| | | 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"); |
| | | params.beginTimeVo = orderTab.selectTime?moment(orderTab.selectTime[0]).format("YYYY-MM-DD HH:mm"):''; |
| | | params.endTimeVo = orderTab.selectTime?moment(orderTab.selectTime[1]).format("YYYY-MM-DD HH:mm"):''; |
| | | } |
| | | $.AjaxProxy({ |
| | | p:params |
| | |
| | | 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"); |
| | | params.beginTime = skinTab.selectTime?moment(skinTab.selectTime[0]).format("YYYY-MM-DD"):''; |
| | | params.endTime = skinTab.selectTime?moment(skinTab.selectTime[1]).format("YYYY-MM-DD"):''; |
| | | } |
| | | $.AjaxProxy({ |
| | | p:params |
| | |
| | | /********** 顶部按钮 start **********/ |
| | | |
| | | dateFormat(row, column) { |
| | | return moment(column.yyTime).format("YYYY-MM-DD HH:mm"); |
| | | return moment(row.yyTime).format("YYYY-MM-DD HH:mm"); |
| | | }, |
| | | oderTimeFormat(row, column) { |
| | | return moment(column.orderTime).format("YYYY-MM-DD HH:mm:ss"); |
| | | return moment(row.orderTime).format("YYYY-MM-DD HH:mm:ss"); |
| | | }, |
| | | } |
| | | }); |