<!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/systools/MBaseVue.js}"></script>
|
<link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}">
|
<script type="text/javascript" th:src="@{/plugin/moment.min.js}"></script>
|
<link th:href="@{/css/styleOne/style.min.css}" rel="stylesheet" type="text/css"/>
|
|
<!-- 富文本编辑器 -->
|
<script type="text/javascript" charset="utf-8"
|
th:src="@{/plugin/beditor/ueditor.config.js}"></script>
|
<script type="text/javascript" charset="utf-8"
|
th:src="@{/plugin/beditor/ueditor.all.js}">
|
</script>
|
<script type="text/javascript" charset="utf-8"
|
th:src="@{/plugin/beditor/lang/zh-cn/zh-cn.js}"></script>
|
|
|
<style>
|
|
.mform{
|
display: flex;
|
align-items: center;
|
margin-top: 10px;
|
}
|
|
|
.mixSearchBox .searchResultTable {
|
position: absolute;
|
padding: 10px;
|
border: 1px solid #e4e7ed;
|
border-radius: 4px;
|
background-color: #fff;
|
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
|
box-sizing: border-box;
|
margin: 10px 0;
|
z-index: 99999999;
|
}
|
.el-icon-delete{
|
cursor: pointer;
|
}
|
.el-icon-delete:hover{
|
color: #F56C6C;
|
}
|
.tabs {
|
margin-bottom: 80px;
|
}
|
.foot_bar2 {
|
top: 98%;
|
position: absolute;
|
width: 98%;
|
height: 80px;
|
overflow: hidden;
|
left: 0px;
|
display: flex;
|
align-items: center;
|
z-index: 99;
|
justify-content: center;
|
|
}
|
.max-height{
|
height: 98%;
|
}
|
.orderBox{
|
position: relative;
|
border-left: 1px solid #EFEFEF;
|
padding-left: 10px;
|
margin-left:10px ;
|
}
|
.openOrClose {
|
cursor:pointer
|
}
|
</style>
|
</head>
|
<body>
|
<div class="ibox-content max-height" id="app" v-cloak>
|
|
<el-row class="max-height">
|
<el-col :span="16" >
|
<el-tabs class="tabs" type="card" v-model="activeName" >
|
<el-tab-pane label="项目" name="tab1">
|
|
<el-table
|
:data="projList"
|
style="width: 98%">
|
<el-table-column
|
prop="projName"
|
label="项目">
|
</el-table-column>
|
<el-table-column
|
prop="balance"
|
label="余额"
|
width="180">
|
</el-table-column>
|
<el-table-column
|
prop="surplusCount"
|
label="余次">
|
</el-table-column>
|
<el-table-column
|
prop="failTimeStr"
|
label="有效期">
|
</el-table-column>
|
<el-table-column
|
prop="source"
|
label="来源">
|
</el-table-column>
|
<el-table-column
|
prop="address"
|
label="操作">
|
<template slot-scope="scope">
|
<el-button v-if="scope.row.surplusCount>0" type="primary"
|
size="mini"
|
@click="selected(scope.$index, scope.row)">添加
|
</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
|
|
</el-tab-pane>
|
<el-tab-pane label="套餐" name="tab2">
|
<template v-for="(item,index) in taocanList">
|
<p class="el-big-title">
|
<span class="openOrClose" v-if="!item.openOrClose" @click="openOrCloseTc(item, index, 1)"><i class="el-icon-arrow-down"></i></span>
|
<span class="openOrClose" v-if="item.openOrClose" @click="openOrCloseTc(item, index, 2)"><i class="el-icon-arrow-up"></i></span>
|
【{{item.isCourse=='N'?'固定套餐':'任选套餐'}}】{{item.projName}}
|
<span style="float: right" v-if="item.failTime != null">有效期:{{item.failTime}}</span>
|
<code v-if="item.isCourse=='Y'" > 剩余次数:<span v-if="item.isInfinite == 'Y'">无限次</span><span v-else>{{item.surplusCount}}</span> </code>
|
</p>
|
<el-table
|
:data="item.taocanProjUse"
|
style="width: 98%" v-show="item.openOrClose">
|
<el-table-column
|
prop="projName"
|
label="项目">
|
</el-table-column>
|
<el-table-column
|
prop="balance"
|
label="余额"
|
width="180">
|
</el-table-column>
|
<el-table-column
|
prop="surplusCount"
|
label="余次">
|
</el-table-column>
|
<!-- <el-table-column-->
|
<!-- prop="failTimeStr"-->
|
<!-- label="有效期">-->
|
<!-- </el-table-column>-->
|
<el-table-column
|
prop="source"
|
label="来源">
|
</el-table-column>
|
<el-table-column
|
prop="address"
|
label="操作">
|
<template slot-scope="scope">
|
<el-button v-if="scope.row.surplusCount>0" type="primary"
|
size="mini"
|
@click="selected(scope.$index, scope.row, item.projName)">添加
|
</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
</template>
|
<!-- <el-row style="text-align: center; margin-top: 5px;">-->
|
<!-- <el-link type="primary" v-if="!tcIsOpen && taocanList.length > 0" @click="tcIsOpen = true">点击展开</el-link>-->
|
<!-- <el-link type="primary" v-if="tcIsOpen" @click="tcIsOpen = false">点击隐藏</el-link>-->
|
<!-- </el-row>-->
|
</el-tab-pane>
|
|
</el-tabs>
|
</el-col>
|
<el-col :span="7" class="orderBox max-height" >
|
<p class="el-big-title">服务开单</p>
|
<el-row class="mform" v-for="(item,index) in orderItemList" >
|
<el-col :span="16" >{{item.projUse.projName}}</el-col>
|
<el-col :span="6" >
|
<el-input @blur="checkCount(item)" type="number" v-model="item.count">
|
</el-input>
|
</el-col>
|
<el-col :offset="1" :span="1" >
|
<i @click="remove(index)" class="el-icon-delete "></i>
|
</el-col>
|
</el-row>
|
<el-row class="foot_bar2">
|
<el-button :loading="submiting" type="primary" @click="submitForm('form')" >添加</el-button>
|
<el-button @click="closeFram()">取消</el-button>
|
</el-row>
|
</el-col>
|
</el-row>
|
|
|
|
</div>
|
</body>
|
<script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script>
|
<script type="text/javascript" th:src="@{/js/plugin/jquery.query.js}"></script>
|
<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 th:src="@{/plugin/vue-treeselect/vue-treeselect.umd.min.js}"></script>
|
<link rel="stylesheet" th:href="@{/plugin/vue-treeselect/vue-treeselect.min.css}">
|
|
|
<script>
|
var id = $.query.get("id");
|
//校验方法
|
var ValidatorFactory = {
|
validateUseCount: function (rule, value, callback) {
|
if ((true)) {
|
return callback;
|
} else {
|
return callback(new Error('请输入套餐最大使用次数'));
|
}
|
}
|
};
|
|
Vue.component('ValidatorFactory', ValidatorFactory);
|
Vue.component('treeselect', VueTreeselect.Treeselect)
|
|
var app = new Vue({
|
el: '#app',
|
data: {
|
submiting:false,
|
activeName:"tab1",
|
orderItemList:[],
|
projList:[],
|
taocanList:[],
|
tcIsOpen : false,
|
yyTime:new Date(),
|
|
|
},
|
|
/**
|
* 初始化数据表
|
*/
|
created: function () {
|
this.loadinfo();
|
},
|
|
methods: {
|
/**
|
* 提交表单
|
* */
|
submitForm(formName) {
|
let _this=this;
|
_this.submiting = true;
|
if(_this.orderItemList.length<1){
|
_this.$message.error('请选择下单项目');
|
return false;
|
}
|
let formData={
|
vipId:id,
|
serviceItems:[],
|
}
|
|
parent.app.addProjItems(_this.orderItemList);
|
_this.closeFram();
|
},
|
open(data) {
|
let _this=this;
|
this.$confirm('服务创建成功是否马上排班?', '确认信息', {
|
distinguishCancelAndClose: true,
|
confirmButtonText: '马上排班',
|
cancelButtonText: '暂不排班'
|
}).then(() => {
|
window.location.href=basePath+"/admin/projService/yypb?pageFlae=1&id="+data.rows[0].id;
|
})
|
.catch(action => {
|
if(action === 'cancel'){
|
_this.submiting = false;
|
_this.closeFram();
|
}
|
});
|
},
|
|
remove(index){
|
this.orderItemList.splice(index, 1);
|
},
|
checkCount(item){
|
if(item.count>item.projUse.surplusCount){
|
item.count=item.projUse.surplusCount;
|
this.$message.error('下单次数不能大于余次');
|
}else if(item.count<0){
|
item.count=1;
|
this.$message.error('下单次数不能小于0');
|
}
|
},
|
/**
|
* 选择产品
|
* */
|
selected(index, row, name) {
|
|
//是否已经被选择了
|
let selected = false;
|
this.orderItemList.forEach(item => {
|
if (item.projUse.id == row.id) {
|
selected = true;
|
//叠加次数
|
if(item.count<item.projUse.surplusCount){
|
item.count=item.count+1;
|
}else{
|
this.$message.error('下单次数不能大于余次');
|
}
|
|
return;
|
}
|
});
|
if (!selected) {
|
if(row.surplusCount>0){
|
this.orderItemList.push({
|
projUse: row,
|
count: 1,
|
name : name
|
});
|
}
|
|
}
|
|
},
|
loadinfo(){
|
let _this=this;
|
AjaxProxy.requst({
|
app: _this,
|
url: basePath + "/admin/projService/getUserProjInfo?vipId="+id,
|
callback: function (data) {
|
_this.projList = data.mapInfo.projList;
|
_this.taocanList = data.mapInfo.taoCanList;
|
}
|
});
|
},
|
closeFram: function () {
|
parent.layer.close(parent.layer.getFrameIndex(window.name));
|
},
|
openOrCloseTc : function (item, index, value) {
|
if (value == 1) {
|
item.openOrClose = true;
|
} else {
|
item.openOrClose = false;
|
}
|
Vue.set(this.taocanList, index, item);
|
}
|
}
|
|
})
|
</script>
|
|
</body>
|
</html>
|